libcom 0.1.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. libcom/__init__.py +23 -0
  2. libcom/color_transfer/__init__.py +3 -0
  3. libcom/color_transfer/reinhard.py +57 -0
  4. libcom/fopa_heat_map/__init__.py +4 -0
  5. libcom/fopa_heat_map/fopa_heat_map.py +212 -0
  6. libcom/fopa_heat_map/source/__init__.py +0 -0
  7. libcom/fopa_heat_map/source/backbone/ResNet.py +229 -0
  8. libcom/fopa_heat_map/source/backbone/__init__.py +0 -0
  9. libcom/fopa_heat_map/source/data/OBdataset.py +292 -0
  10. libcom/fopa_heat_map/source/data/__init__.py +0 -0
  11. libcom/fopa_heat_map/source/data/all_transforms.py +25 -0
  12. libcom/fopa_heat_map/source/network/BaseBlocks.py +26 -0
  13. libcom/fopa_heat_map/source/network/DynamicModules.py +43 -0
  14. libcom/fopa_heat_map/source/network/ObPlaNet_simple.py +112 -0
  15. libcom/fopa_heat_map/source/network/__init__.py +1 -0
  16. libcom/fopa_heat_map/source/network/tensor_ops.py +37 -0
  17. libcom/fopa_heat_map/source/prepare_multi_fg_scales.py +85 -0
  18. libcom/fos_score/__init__.py +4 -0
  19. libcom/fos_score/fos_score_prediction.py +218 -0
  20. libcom/fos_score/source/__init__.py +0 -0
  21. libcom/fos_score/source/config/__init__.py +1 -0
  22. libcom/fos_score/source/config/config.py +68 -0
  23. libcom/fos_score/source/config/config.sfosd.yaml +43 -0
  24. libcom/fos_score/source/config/config_rfosd.yaml +43 -0
  25. libcom/fos_score/source/loss_function.py +118 -0
  26. libcom/fos_score/source/networks.py +355 -0
  27. libcom/harmony_score/__init__.py +3 -0
  28. libcom/harmony_score/harmony_score_prediction.py +119 -0
  29. libcom/harmony_score/source/__init__.py +0 -0
  30. libcom/harmony_score/source/bargainnet.py +226 -0
  31. libcom/image_harmonization/__init__.py +4 -0
  32. libcom/image_harmonization/image_harmonization.py +193 -0
  33. libcom/image_harmonization/source/__init__.py +0 -0
  34. libcom/image_harmonization/source/functions.py +747 -0
  35. libcom/image_harmonization/source/pct_net.py +85 -0
  36. libcom/image_harmonization/source/src/__init__.py +0 -0
  37. libcom/image_harmonization/source/src/lbm/__init__.py +0 -0
  38. libcom/image_harmonization/source/src/lbm/config.py +141 -0
  39. libcom/image_harmonization/source/src/lbm/data/__init__.py +62 -0
  40. libcom/image_harmonization/source/src/lbm/data/datasets/__init__.py +9 -0
  41. libcom/image_harmonization/source/src/lbm/data/datasets/collation_fn.py +41 -0
  42. libcom/image_harmonization/source/src/lbm/data/datasets/dataset.py +243 -0
  43. libcom/image_harmonization/source/src/lbm/data/datasets/datasets_config.py +42 -0
  44. libcom/image_harmonization/source/src/lbm/data/filters/__init__.py +12 -0
  45. libcom/image_harmonization/source/src/lbm/data/filters/base.py +21 -0
  46. libcom/image_harmonization/source/src/lbm/data/filters/filter_wrapper.py +36 -0
  47. libcom/image_harmonization/source/src/lbm/data/filters/filters.py +33 -0
  48. libcom/image_harmonization/source/src/lbm/data/filters/filters_config.py +32 -0
  49. libcom/image_harmonization/source/src/lbm/data/mappers/__init__.py +19 -0
  50. libcom/image_harmonization/source/src/lbm/data/mappers/base.py +26 -0
  51. libcom/image_harmonization/source/src/lbm/data/mappers/mappers.py +135 -0
  52. libcom/image_harmonization/source/src/lbm/data/mappers/mappers_config.py +109 -0
  53. libcom/image_harmonization/source/src/lbm/data/mappers/mappers_wrapper.py +31 -0
  54. libcom/image_harmonization/source/src/lbm/inference/__init__.py +4 -0
  55. libcom/image_harmonization/source/src/lbm/inference/inference.py +70 -0
  56. libcom/image_harmonization/source/src/lbm/inference/utils.py +222 -0
  57. libcom/image_harmonization/source/src/lbm/models/__init__.py +0 -0
  58. libcom/image_harmonization/source/src/lbm/models/base/__init__.py +4 -0
  59. libcom/image_harmonization/source/src/lbm/models/base/base_model.py +66 -0
  60. libcom/image_harmonization/source/src/lbm/models/base/model_config.py +8 -0
  61. libcom/image_harmonization/source/src/lbm/models/embedders/__init__.py +4 -0
  62. libcom/image_harmonization/source/src/lbm/models/embedders/base/__init__.py +4 -0
  63. libcom/image_harmonization/source/src/lbm/models/embedders/base/base_conditioner.py +60 -0
  64. libcom/image_harmonization/source/src/lbm/models/embedders/base/base_conditioner_config.py +27 -0
  65. libcom/image_harmonization/source/src/lbm/models/embedders/conditioners_wrapper.py +114 -0
  66. libcom/image_harmonization/source/src/lbm/models/embedders/latents_concat/__init__.py +4 -0
  67. libcom/image_harmonization/source/src/lbm/models/embedders/latents_concat/latents_concat_embedder_config.py +31 -0
  68. libcom/image_harmonization/source/src/lbm/models/embedders/latents_concat/latents_concat_embedder_model.py +80 -0
  69. libcom/image_harmonization/source/src/lbm/models/lbm/__init__.py +4 -0
  70. libcom/image_harmonization/source/src/lbm/models/lbm/lbm_config.py +101 -0
  71. libcom/image_harmonization/source/src/lbm/models/lbm/lbm_model.py +359 -0
  72. libcom/image_harmonization/source/src/lbm/models/unets/__init__.py +14 -0
  73. libcom/image_harmonization/source/src/lbm/models/unets/unet.py +148 -0
  74. libcom/image_harmonization/source/src/lbm/models/utils.py +377 -0
  75. libcom/image_harmonization/source/src/lbm/models/vae/__init__.py +4 -0
  76. libcom/image_harmonization/source/src/lbm/models/vae/autoencoderKL.py +136 -0
  77. libcom/image_harmonization/source/src/lbm/models/vae/autoencoderKL_config.py +27 -0
  78. libcom/image_harmonization/source/src/lbm/trainer/__init__.py +85 -0
  79. libcom/image_harmonization/source/src/lbm/trainer/loggers.py +324 -0
  80. libcom/image_harmonization/source/src/lbm/trainer/trainer.py +199 -0
  81. libcom/image_harmonization/source/src/lbm/trainer/training_config.py +82 -0
  82. libcom/image_harmonization/source/src/lbm/trainer/utils.py +193 -0
  83. libcom/inharmonious_region_localization/__init__.py +4 -0
  84. libcom/inharmonious_region_localization/inharmonious_region_localization.py +97 -0
  85. libcom/inharmonious_region_localization/source/__init__.py +0 -0
  86. libcom/inharmonious_region_localization/source/blocks.py +368 -0
  87. libcom/inharmonious_region_localization/source/functions.py +679 -0
  88. libcom/inharmonious_region_localization/source/madis_net.py +79 -0
  89. libcom/kontext_blending_harmonization/__init__.py +3 -0
  90. libcom/kontext_blending_harmonization/kontext_blending_harmonization.py +148 -0
  91. libcom/kontext_blending_harmonization/source/__init__.py +0 -0
  92. libcom/kontext_blending_harmonization/source/pipeline.py +1135 -0
  93. libcom/naive_composition/__init__.py +3 -0
  94. libcom/naive_composition/generate_composite_image.py +116 -0
  95. libcom/opa_score/__init__.py +3 -0
  96. libcom/opa_score/opa_score_prediction.py +101 -0
  97. libcom/opa_score/source/__init__.py +3 -0
  98. libcom/opa_score/source/object_place_net.py +55 -0
  99. libcom/opa_score/source/oblect_place_config.py +66 -0
  100. libcom/opa_score/source/resnet_4ch.py +213 -0
  101. libcom/os_insert/__init__.py +3 -0
  102. libcom/os_insert/diffusers_osinsert/__init__.py +78 -0
  103. libcom/os_insert/diffusers_osinsert/_patched_pipeline_flux_fill.py +878 -0
  104. libcom/os_insert/os_insert.py +534 -0
  105. libcom/os_insert/source/__init__.py +1 -0
  106. libcom/os_insert/source/ia_utils.py +183 -0
  107. libcom/os_insert/source/insertanything_infer.py +529 -0
  108. libcom/os_insert/source/ldm/__init__.py +0 -0
  109. libcom/os_insert/source/ldm/data/__init__.py +0 -0
  110. libcom/os_insert/source/ldm/data/base.py +23 -0
  111. libcom/os_insert/source/ldm/data/datamodule.py +128 -0
  112. libcom/os_insert/source/ldm/data/imagenet.py +394 -0
  113. libcom/os_insert/source/ldm/data/lsun.py +92 -0
  114. libcom/os_insert/source/ldm/data/open_images.py +728 -0
  115. libcom/os_insert/source/ldm/lr_scheduler.py +98 -0
  116. libcom/os_insert/source/ldm/models/__init__.py +0 -0
  117. libcom/os_insert/source/ldm/models/autoencoder.py +443 -0
  118. libcom/os_insert/source/ldm/models/diffusion/__init__.py +0 -0
  119. libcom/os_insert/source/ldm/models/diffusion/classifier.py +267 -0
  120. libcom/os_insert/source/ldm/models/diffusion/ddim.py +263 -0
  121. libcom/os_insert/source/ldm/models/diffusion/ddpm.py +1417 -0
  122. libcom/os_insert/source/ldm/models/diffusion/plms.py +252 -0
  123. libcom/os_insert/source/ldm/modules/__init__.py +0 -0
  124. libcom/os_insert/source/ldm/modules/attention.py +261 -0
  125. libcom/os_insert/source/ldm/modules/diffusionmodules/__init__.py +0 -0
  126. libcom/os_insert/source/ldm/modules/diffusionmodules/model.py +835 -0
  127. libcom/os_insert/source/ldm/modules/diffusionmodules/openaimodel.py +1108 -0
  128. libcom/os_insert/source/ldm/modules/diffusionmodules/util.py +267 -0
  129. libcom/os_insert/source/ldm/modules/distributions/__init__.py +0 -0
  130. libcom/os_insert/source/ldm/modules/distributions/distributions.py +92 -0
  131. libcom/os_insert/source/ldm/modules/ema.py +76 -0
  132. libcom/os_insert/source/ldm/modules/encoders/__init__.py +0 -0
  133. libcom/os_insert/source/ldm/modules/encoders/modules.py +190 -0
  134. libcom/os_insert/source/ldm/modules/encoders/xf.py +130 -0
  135. libcom/os_insert/source/ldm/modules/losses/__init__.py +1 -0
  136. libcom/os_insert/source/ldm/modules/losses/contperceptual.py +111 -0
  137. libcom/os_insert/source/ldm/modules/losses/vqperceptual.py +167 -0
  138. libcom/os_insert/source/ldm/modules/x_transformer.py +641 -0
  139. libcom/os_insert/source/ldm/util.py +203 -0
  140. libcom/os_insert/source/objectstitch_data.py +66 -0
  141. libcom/os_insert/source/objectstitch_infer.py +618 -0
  142. libcom/os_insert/source/sam_on_objectstitch.py +253 -0
  143. libcom/os_insert/source/utils.py +41 -0
  144. libcom/os_insert/source/v1.yaml +108 -0
  145. libcom/painterly_image_harmonization/__init__.py +4 -0
  146. libcom/painterly_image_harmonization/painterly_image_harmonization.py +215 -0
  147. libcom/painterly_image_harmonization/source/PHDNet/__init__.py +0 -0
  148. libcom/painterly_image_harmonization/source/PHDNet/networks.py +202 -0
  149. libcom/painterly_image_harmonization/source/PHDNet/phdnet.py +47 -0
  150. libcom/painterly_image_harmonization/source/PHDNet/phdnet_config.py +18 -0
  151. libcom/painterly_image_harmonization/source/PHDiffusion/__init__.py +0 -0
  152. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/__init__.py +0 -0
  153. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/inference_base.py +300 -0
  154. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/lr_scheduler.py +98 -0
  155. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/__init__.py +0 -0
  156. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/autoencoder.py +211 -0
  157. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/__init__.py +3 -0
  158. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddim.py +336 -0
  159. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddpm.py +1400 -0
  160. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/__init__.py +1 -0
  161. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/dpm_solver.py +1217 -0
  162. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/sampler.py +87 -0
  163. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/plms.py +243 -0
  164. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/scheduling_pndm.py +518 -0
  165. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/__init__.py +0 -0
  166. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/attention.py +378 -0
  167. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/__init__.py +0 -0
  168. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/model.py +857 -0
  169. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/openaimodel.py +823 -0
  170. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/util.py +270 -0
  171. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions/__init__.py +0 -0
  172. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions/distributions.py +92 -0
  173. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/ema.py +80 -0
  174. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/__init__.py +0 -0
  175. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/adapter.py +213 -0
  176. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/modules.py +82 -0
  177. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/__init__.py +1 -0
  178. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/api.py +269 -0
  179. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/__init__.py +0 -0
  180. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/api.py +175 -0
  181. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/__init__.py +0 -0
  182. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/base_model.py +16 -0
  183. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/blocks.py +342 -0
  184. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/dpt_depth.py +109 -0
  185. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/midas_net.py +76 -0
  186. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/midas_net_custom.py +128 -0
  187. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/transforms.py +234 -0
  188. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/vit.py +491 -0
  189. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/utils.py +189 -0
  190. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/model_edge.py +653 -0
  191. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/__init__.py +0 -0
  192. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/api.py +35 -0
  193. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/body.py +209 -0
  194. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/hand.py +75 -0
  195. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/model.py +178 -0
  196. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/util.py +203 -0
  197. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/utils.py +72 -0
  198. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion/__init__.py +0 -0
  199. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion/dual_encoder_fusion.py +93 -0
  200. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/__init__.py +2 -0
  201. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan.py +730 -0
  202. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan_light.py +651 -0
  203. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/utils_image.py +916 -0
  204. libcom/painterly_image_harmonization/source/PHDiffusion/ldm/util.py +200 -0
  205. libcom/painterly_image_harmonization/source/PHDiffusion/stable_diffusion.yaml +75 -0
  206. libcom/painterly_image_harmonization/source/__init__.py +0 -0
  207. libcom/reflection_generation/__init__.py +3 -0
  208. libcom/reflection_generation/reflection_generation.py +174 -0
  209. libcom/reflection_generation/source/PostProcessModel.py +513 -0
  210. libcom/reflection_generation/source/__init__.py +0 -0
  211. libcom/reflection_generation/source/cldm/__init__.py +0 -0
  212. libcom/reflection_generation/source/cldm/base_network.py +166 -0
  213. libcom/reflection_generation/source/cldm/cldm.py +509 -0
  214. libcom/reflection_generation/source/cldm/ddim_hacked.py +317 -0
  215. libcom/reflection_generation/source/cldm/hack.py +111 -0
  216. libcom/reflection_generation/source/cldm/logger.py +127 -0
  217. libcom/reflection_generation/source/cldm/model.py +26 -0
  218. libcom/reflection_generation/source/cldm_v15.yaml +81 -0
  219. libcom/reflection_generation/source/cluster_feature.py +109 -0
  220. libcom/reflection_generation/source/ldm/__init__.py +0 -0
  221. libcom/reflection_generation/source/ldm/models/__init__.py +0 -0
  222. libcom/reflection_generation/source/ldm/models/autoencoder.py +219 -0
  223. libcom/reflection_generation/source/ldm/models/diffusion/__init__.py +0 -0
  224. libcom/reflection_generation/source/ldm/models/diffusion/attention_processor.py +188 -0
  225. libcom/reflection_generation/source/ldm/models/diffusion/ddim.py +340 -0
  226. libcom/reflection_generation/source/ldm/models/diffusion/ddpm.py +1892 -0
  227. libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/__init__.py +1 -0
  228. libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/dpm_solver.py +1154 -0
  229. libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/sampler.py +87 -0
  230. libcom/reflection_generation/source/ldm/models/diffusion/ip_adapter.py +57 -0
  231. libcom/reflection_generation/source/ldm/models/diffusion/plms.py +244 -0
  232. libcom/reflection_generation/source/ldm/models/diffusion/sampling_util.py +22 -0
  233. libcom/reflection_generation/source/ldm/modules/__init__.py +0 -0
  234. libcom/reflection_generation/source/ldm/modules/attention.py +341 -0
  235. libcom/reflection_generation/source/ldm/modules/diffusionmodules/__init__.py +0 -0
  236. libcom/reflection_generation/source/ldm/modules/diffusionmodules/model.py +852 -0
  237. libcom/reflection_generation/source/ldm/modules/diffusionmodules/openaimodel.py +786 -0
  238. libcom/reflection_generation/source/ldm/modules/diffusionmodules/upscaling.py +81 -0
  239. libcom/reflection_generation/source/ldm/modules/diffusionmodules/util.py +280 -0
  240. libcom/reflection_generation/source/ldm/modules/distributions/__init__.py +0 -0
  241. libcom/reflection_generation/source/ldm/modules/distributions/distributions.py +92 -0
  242. libcom/reflection_generation/source/ldm/modules/ema.py +80 -0
  243. libcom/reflection_generation/source/ldm/modules/encoders/__init__.py +0 -0
  244. libcom/reflection_generation/source/ldm/modules/encoders/modules.py +214 -0
  245. libcom/reflection_generation/source/ldm/modules/image_degradation/__init__.py +0 -0
  246. libcom/reflection_generation/source/ldm/modules/image_degradation/bsrgan.py +730 -0
  247. libcom/reflection_generation/source/ldm/modules/image_degradation/bsrgan_light.py +651 -0
  248. libcom/reflection_generation/source/ldm/modules/image_degradation/utils_image.py +916 -0
  249. libcom/reflection_generation/source/ldm/util.py +198 -0
  250. libcom/reflection_generation/source/local_clip.py +749 -0
  251. libcom/reflection_generation/source/tool_add_control.py +49 -0
  252. libcom/shadow_generation/__init__.py +3 -0
  253. libcom/shadow_generation/shadow_generation.py +754 -0
  254. libcom/shadow_generation/source/PostProcessModel.py +511 -0
  255. libcom/shadow_generation/source/__init__.py +0 -0
  256. libcom/shadow_generation/source/attention_processor.py +234 -0
  257. libcom/shadow_generation/source/cldm/__init__.py +0 -0
  258. libcom/shadow_generation/source/cldm/base_network.py +166 -0
  259. libcom/shadow_generation/source/cldm/cldm.py +524 -0
  260. libcom/shadow_generation/source/cldm/model.py +28 -0
  261. libcom/shadow_generation/source/ldm/__init__.py +0 -0
  262. libcom/shadow_generation/source/ldm/models/__init__.py +0 -0
  263. libcom/shadow_generation/source/ldm/models/autoencoder.py +219 -0
  264. libcom/shadow_generation/source/ldm/models/diffusion/__init__.py +0 -0
  265. libcom/shadow_generation/source/ldm/models/diffusion/attention_processor.py +188 -0
  266. libcom/shadow_generation/source/ldm/models/diffusion/ddim.py +340 -0
  267. libcom/shadow_generation/source/ldm/models/diffusion/ddpm.py +1893 -0
  268. libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/__init__.py +1 -0
  269. libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/dpm_solver.py +1154 -0
  270. libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/sampler.py +87 -0
  271. libcom/shadow_generation/source/ldm/models/diffusion/ip_adapter.py +57 -0
  272. libcom/shadow_generation/source/ldm/models/diffusion/plms.py +244 -0
  273. libcom/shadow_generation/source/ldm/models/diffusion/sampling_util.py +22 -0
  274. libcom/shadow_generation/source/ldm/modules/__init__.py +0 -0
  275. libcom/shadow_generation/source/ldm/modules/attention.py +341 -0
  276. libcom/shadow_generation/source/ldm/modules/diffusionmodules/__init__.py +0 -0
  277. libcom/shadow_generation/source/ldm/modules/diffusionmodules/model.py +852 -0
  278. libcom/shadow_generation/source/ldm/modules/diffusionmodules/openaimodel.py +786 -0
  279. libcom/shadow_generation/source/ldm/modules/diffusionmodules/upscaling.py +81 -0
  280. libcom/shadow_generation/source/ldm/modules/diffusionmodules/util.py +270 -0
  281. libcom/shadow_generation/source/ldm/modules/distributions/__init__.py +0 -0
  282. libcom/shadow_generation/source/ldm/modules/distributions/distributions.py +92 -0
  283. libcom/shadow_generation/source/ldm/modules/ema.py +80 -0
  284. libcom/shadow_generation/source/ldm/modules/encoders/__init__.py +0 -0
  285. libcom/shadow_generation/source/ldm/modules/encoders/modules.py +214 -0
  286. libcom/shadow_generation/source/ldm/modules/image_degradation/__init__.py +2 -0
  287. libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan.py +730 -0
  288. libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan_light.py +651 -0
  289. libcom/shadow_generation/source/ldm/modules/image_degradation/utils_image.py +916 -0
  290. libcom/shadow_generation/source/ldm/modules/midas/__init__.py +0 -0
  291. libcom/shadow_generation/source/ldm/modules/midas/api.py +170 -0
  292. libcom/shadow_generation/source/ldm/modules/midas/midas/__init__.py +0 -0
  293. libcom/shadow_generation/source/ldm/modules/midas/midas/base_model.py +16 -0
  294. libcom/shadow_generation/source/ldm/modules/midas/midas/blocks.py +342 -0
  295. libcom/shadow_generation/source/ldm/modules/midas/midas/dpt_depth.py +109 -0
  296. libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net.py +76 -0
  297. libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net_custom.py +128 -0
  298. libcom/shadow_generation/source/ldm/modules/midas/midas/transforms.py +234 -0
  299. libcom/shadow_generation/source/ldm/modules/midas/midas/vit.py +491 -0
  300. libcom/shadow_generation/source/ldm/modules/midas/utils.py +189 -0
  301. libcom/shadow_generation/source/ldm/util.py +199 -0
  302. libcom/utils/__init__.py +0 -0
  303. libcom/utils/environment.py +12 -0
  304. libcom/utils/model_download.py +67 -0
  305. libcom/utils/process_image.py +108 -0
  306. libcom-0.1.8.dist-info/METADATA +157 -0
  307. libcom-0.1.8.dist-info/RECORD +310 -0
  308. libcom-0.1.8.dist-info/WHEEL +5 -0
  309. libcom-0.1.8.dist-info/licenses/LICENSE +201 -0
  310. libcom-0.1.8.dist-info/top_level.txt +1 -0
@@ -0,0 +1,324 @@
1
+ import logging
2
+ import math
3
+ from typing import Any, Dict, List, Tuple
4
+
5
+ import numpy as np
6
+ import torch
7
+ import wandb
8
+ from PIL import Image, ImageDraw, ImageFont
9
+ from pytorch_lightning import Trainer
10
+ from pytorch_lightning.callbacks import Callback
11
+ from pytorch_lightning.utilities import rank_zero_only
12
+ from torchvision.utils import make_grid
13
+
14
+ from ..trainer import TrainingPipeline
15
+
16
+ logging.basicConfig(level=logging.INFO)
17
+
18
+
19
+ def create_grid_texts(
20
+ texts: List[str],
21
+ n_cols: int = 4,
22
+ image_size: Tuple[int] = (512, 512),
23
+ font_size: int = 40,
24
+ margin: int = 5,
25
+ offset: int = 5,
26
+ ) -> Image.Image:
27
+ """
28
+ Create a grid of white images containing the given texts.
29
+
30
+ Args:
31
+ texts (List[str]): List of strings to be drawn on images.
32
+ n_cols (int): Number of columns in the grid.
33
+ image_size (tuple): Size of the generated images (width, height).
34
+ font_size (int): Font size of the text.
35
+ margin (int): Margin around the text.
36
+ offset (int): Offset between lines.
37
+
38
+ Returns:
39
+ PIL.Image: List of generated images as a grid
40
+ """
41
+
42
+ images = []
43
+ font = ImageFont.load_default(size=font_size)
44
+
45
+ for text in texts:
46
+ img = Image.new("RGB", image_size, color="white")
47
+ draw = ImageDraw.Draw(img)
48
+ margin_ = margin
49
+ offset_ = offset
50
+ for line in wrap_text(
51
+ text=text, draw=draw, max_width=image_size[0] - 2 * margin_, font=font
52
+ ):
53
+ draw.text((margin_, offset_), line, font=font, fill="black")
54
+ offset_ += font_size
55
+ images.append(img)
56
+
57
+ # create a pil grid
58
+ n_rows = math.ceil(len(images) / n_cols)
59
+ grid = Image.new(
60
+ "RGB", (n_cols * image_size[0], n_rows * image_size[1]), color="white"
61
+ )
62
+ for i, img in enumerate(images):
63
+ grid.paste(img, (i % n_cols * image_size[0], i // n_cols * image_size[1]))
64
+
65
+ return grid
66
+
67
+
68
+ def wrap_text(
69
+ text: str, draw: ImageDraw.Draw, max_width: int, font: ImageFont
70
+ ) -> List[str]:
71
+ """
72
+ Wrap text to fit within a specified width when drawn.
73
+ It will return to the new line when the text is larger than the max_width.
74
+
75
+ Args:
76
+ text (str): The text to be wrapped.
77
+ draw (ImageDraw.Draw): The draw object to calculate text size.
78
+ max_width (int): The maximum width for the wrapped text.
79
+ font (ImageFont): The font used for the text.
80
+
81
+ Returns:
82
+ List[str]: List of wrapped lines.
83
+ """
84
+ lines = []
85
+ current_line = ""
86
+ for letter in text:
87
+ if draw.textbbox((0, 0), current_line + letter, font=font)[2] <= max_width:
88
+ current_line += letter
89
+ else:
90
+ lines.append(current_line)
91
+ current_line = letter
92
+ lines.append(current_line)
93
+ return lines
94
+
95
+
96
+ class WandbSampleLogger(Callback):
97
+ """
98
+ Logger for logging samples to wandb. This logger is used to log images, text, and metrics to wandb.
99
+
100
+ Args:
101
+ log_batch_freq (int): The frequency of logging samples to wandb. Default is 100.
102
+ """
103
+
104
+ def __init__(self, log_batch_freq: int = 100):
105
+ super().__init__()
106
+ self.log_batch_freq = log_batch_freq
107
+
108
+ def on_train_batch_end(
109
+ self,
110
+ trainer: Trainer,
111
+ pl_module: TrainingPipeline,
112
+ outputs: Dict[str, Any],
113
+ batch: Any,
114
+ batch_idx: int,
115
+ ) -> None:
116
+ self.log_samples(trainer, pl_module, outputs, batch, batch_idx, split="train")
117
+ self._process_logs(trainer, outputs, split="train")
118
+
119
+ def on_validation_batch_end(
120
+ self,
121
+ trainer: Trainer,
122
+ pl_module: TrainingPipeline,
123
+ outputs: Dict[str, Any],
124
+ batch: Any,
125
+ batch_idx: int,
126
+ ) -> None:
127
+ self.log_samples(trainer, pl_module, outputs, batch, batch_idx, split="val")
128
+ self._process_logs(trainer, outputs, split="val")
129
+
130
+ @rank_zero_only
131
+ @torch.no_grad()
132
+ def log_samples(
133
+ self,
134
+ trainer: Trainer,
135
+ pl_module: TrainingPipeline,
136
+ outputs: Dict[str, Any],
137
+ batch: Dict[str, Any],
138
+ batch_idx: int,
139
+ split: str = "train",
140
+ ) -> None:
141
+ if hasattr(pl_module, "log_samples"):
142
+ if batch_idx % self.log_batch_freq == 0:
143
+ is_training = pl_module.training
144
+ if is_training:
145
+ pl_module.eval()
146
+
147
+ logs = pl_module.log_samples(batch)
148
+ logs = self._process_logs(trainer, logs, split=split)
149
+
150
+ if is_training:
151
+ pl_module.train()
152
+ else:
153
+ logging.warning(
154
+ "log_img method not found in LightningModule. Skipping image logging."
155
+ )
156
+
157
+ @rank_zero_only
158
+ def _process_logs(
159
+ self, trainer, logs: Dict[str, Any], rescale=True, split="train"
160
+ ) -> Dict[str, Any]:
161
+ for key, value in logs.items():
162
+ if isinstance(value, torch.Tensor):
163
+ value = value.detach().cpu()
164
+ if value.dim() == 4:
165
+ images = value
166
+ if rescale:
167
+ images = (images + 1.0) / 2.0
168
+ grid = make_grid(images, nrow=4)
169
+ grid = grid.permute(1, 2, 0)
170
+ grid = grid.mul(255).clamp(0, 255).to(torch.uint8)
171
+ logs[key] = grid.numpy()
172
+ trainer.logger.experiment.log(
173
+ {f"{key}/{split}": [wandb.Image(Image.fromarray(logs[key]))]},
174
+ step=trainer.global_step,
175
+ )
176
+
177
+ # Scalar tensor
178
+ if value.dim() == 1 or value.dim() == 0:
179
+ value = value.float().numpy()
180
+ trainer.logger.experiment.log(
181
+ {f"{key}/{split}": value}, step=trainer.global_step
182
+ )
183
+
184
+ # list of string (e.g. text)
185
+ if isinstance(value, list):
186
+ if isinstance(value[0], str):
187
+ pil_image_texts = create_grid_texts(value)
188
+ wandb_image = wandb.Image(pil_image_texts)
189
+ trainer.logger.experiment.log(
190
+ {f"{key}/{split}": [wandb_image]},
191
+ step=trainer.global_step,
192
+ )
193
+
194
+ # dict of tensors (e.g. metrics)
195
+ if isinstance(value, dict):
196
+ for k, v in value.items():
197
+ if isinstance(v, torch.Tensor):
198
+ value[k] = v.detach().cpu().numpy()
199
+ trainer.logger.experiment.log(
200
+ {f"{key}/{split}": value}, step=trainer.global_step
201
+ )
202
+
203
+ if isinstance(value, int) or isinstance(value, float):
204
+ trainer.logger.experiment.log(
205
+ {f"{key}/{split}": value}, step=trainer.global_step
206
+ )
207
+
208
+ return logs
209
+
210
+
211
+ class TensorBoardSampleLogger(Callback):
212
+ """
213
+ Logger for logging samples to tensorboard. This logger is used to log images, text, and metrics to tensorboard.
214
+
215
+ Args:
216
+ log_batch_freq (int): The frequency of logging samples to tensorboard. Default is 100.
217
+ """
218
+
219
+ def __init__(self, log_batch_freq: int = 100):
220
+ super().__init__()
221
+ self.log_batch_freq = log_batch_freq
222
+
223
+ def on_train_batch_end(
224
+ self,
225
+ trainer: Trainer,
226
+ pl_module: TrainingPipeline,
227
+ outputs: Dict[str, Any],
228
+ batch: Any,
229
+ batch_idx: int,
230
+ ) -> None:
231
+ self.log_samples(trainer, pl_module, outputs, batch, batch_idx, split="train")
232
+ self._process_logs(trainer, outputs, split="train")
233
+
234
+ def on_validation_batch_end(
235
+ self,
236
+ trainer: Trainer,
237
+ pl_module: TrainingPipeline,
238
+ outputs: Dict[str, Any],
239
+ batch: Any,
240
+ batch_idx: int,
241
+ ) -> None:
242
+ self.log_samples(trainer, pl_module, outputs, batch, batch_idx, split="val")
243
+ self._process_logs(trainer, outputs, split="val")
244
+
245
+ @rank_zero_only
246
+ @torch.no_grad()
247
+ def log_samples(
248
+ self,
249
+ trainer: Trainer,
250
+ pl_module: TrainingPipeline,
251
+ outputs: Dict[str, Any],
252
+ batch: Dict[str, Any],
253
+ batch_idx: int,
254
+ split: str = "train",
255
+ ) -> None:
256
+ if hasattr(pl_module, "log_samples"):
257
+ if batch_idx % self.log_batch_freq == 0:
258
+ is_training = pl_module.training
259
+ if is_training:
260
+ pl_module.eval()
261
+
262
+ logs = pl_module.log_samples(batch)
263
+ logs = self._process_logs(trainer, logs, split=split)
264
+
265
+ if is_training:
266
+ pl_module.train()
267
+ else:
268
+ logging.warning(
269
+ "log_img method not found in LightningModule. Skipping image logging."
270
+ )
271
+
272
+ @rank_zero_only
273
+ def _process_logs(
274
+ self, trainer, logs: Dict[str, Any], rescale=True, split="train"
275
+ ) -> Dict[str, Any]:
276
+ for key, value in logs.items():
277
+ if isinstance(value, torch.Tensor):
278
+ value = value.detach().cpu()
279
+ if value.dim() == 4:
280
+ images = value
281
+ if rescale:
282
+ images = (images + 1.0) / 2.0
283
+ grid = make_grid(images, nrow=4)
284
+ # grid = grid.permute(1, 2, 0)
285
+ grid = grid.mul(255).clamp(0, 255).to(torch.uint8)
286
+ logs[key] = grid.numpy()
287
+ trainer.logger.experiment.add_image(
288
+ f"{key}/{split}",
289
+ logs[key],
290
+ trainer.global_step,
291
+ )
292
+
293
+ # Scalar tensor
294
+ if value.dim() == 1 or value.dim() == 0:
295
+ value = value.float().numpy()
296
+ trainer.logger.experiment.add_scalar(
297
+ f"{key}/{split}", value, trainer.global_step
298
+ )
299
+
300
+ # list of string (e.g. text)
301
+ if isinstance(value, list):
302
+ if isinstance(value[0], str):
303
+ pil_image_texts = create_grid_texts(value)
304
+ trainer.logger.experiment.add_image(
305
+ f"{key}/{split}",
306
+ np.transpose(np.array(pil_image_texts), (2, 0, 1)),
307
+ trainer.global_step,
308
+ )
309
+
310
+ # dict of tensors (e.g. metrics)
311
+ if isinstance(value, dict):
312
+ for k, v in value.items():
313
+ if isinstance(v, torch.Tensor):
314
+ value[k] = v.detach().cpu().numpy()
315
+ trainer.logger.experiment.add_scalar(
316
+ f"{key}/{split}", value, trainer.global_step
317
+ )
318
+
319
+ if isinstance(value, int) or isinstance(value, float):
320
+ trainer.logger.experiment.add_scalar(
321
+ f"{key}/{split}", value, trainer.global_step
322
+ )
323
+
324
+ return logs
@@ -0,0 +1,199 @@
1
+ import importlib
2
+ import logging
3
+ import re
4
+ import time
5
+ from typing import Any, Dict
6
+
7
+ import pytorch_lightning as pl
8
+ import torch
9
+
10
+ from ..models.base.base_model import BaseModel
11
+ from .training_config import TrainingConfig
12
+
13
+ logging.basicConfig(level=logging.INFO)
14
+
15
+
16
+ class TrainingPipeline(pl.LightningModule):
17
+ """
18
+ Main Training Pipeline class
19
+
20
+ Args:
21
+
22
+ model (BaseModel): The model to train
23
+ pipeline_config (TrainingConfig): The configuration for the training pipeline
24
+ verbose (bool): Whether to print logs in the console. Default is False.
25
+ """
26
+
27
+ def __init__(
28
+ self,
29
+ model: BaseModel,
30
+ pipeline_config: TrainingConfig,
31
+ verbose: bool = False,
32
+ **kwargs,
33
+ ):
34
+ super().__init__()
35
+
36
+ self.model = model
37
+ self.pipeline_config = pipeline_config
38
+ self.log_samples_model_kwargs = pipeline_config.log_samples_model_kwargs
39
+
40
+ # save hyperparameters.
41
+ self.save_hyperparameters(ignore="model")
42
+ self.save_hyperparameters({"model_config": model.config.to_dict()})
43
+
44
+ # logger.
45
+ self.verbose = verbose
46
+
47
+ # setup logging.
48
+ log_keys = pipeline_config.log_keys
49
+
50
+ if isinstance(log_keys, str):
51
+ log_keys = [log_keys]
52
+
53
+ if log_keys is None:
54
+ log_keys = []
55
+
56
+ self.log_keys = log_keys
57
+
58
+ def on_fit_start(self) -> None:
59
+ self.model.on_fit_start(device=self.device)
60
+ if self.global_rank == 0:
61
+ self.timer = time.perf_counter()
62
+
63
+ def on_train_batch_end(
64
+ self, outputs: Dict[str, Any], batch: Any, batch_idx: int
65
+ ) -> None:
66
+ if self.global_rank == 0:
67
+ logging.debug("on_train_batch_end")
68
+ self.model.on_train_batch_end(batch)
69
+
70
+ average_time_frequency = 10
71
+ if self.global_rank == 0 and batch_idx % average_time_frequency == 0:
72
+ delta = time.perf_counter() - self.timer
73
+ logging.info(
74
+ f"Average time per batch {batch_idx} took {delta / (batch_idx + 1)} seconds"
75
+ )
76
+
77
+ def configure_optimizers(self) -> torch.optim.Optimizer:
78
+ """
79
+ Setup optimizers and learning rate schedulers.
80
+ """
81
+ optimizers = []
82
+ lr = self.pipeline_config.learning_rate
83
+ param_list = []
84
+ n_params = 0
85
+ param_list_ = {"params": []}
86
+ for name, param in self.model.named_parameters():
87
+ for regex in self.pipeline_config.trainable_params:
88
+ pattern = re.compile(regex)
89
+ if re.match(pattern, name):
90
+ if param.requires_grad:
91
+ param_list_["params"].append(param)
92
+ n_params += param.numel()
93
+
94
+ param_list.append(param_list_)
95
+
96
+ logging.info(f"Number of trainable parameters: {n_params}")
97
+
98
+ optimizer_cls = getattr(
99
+ importlib.import_module("torch.optim"),
100
+ self.pipeline_config.optimizer_name,
101
+ )
102
+ optimizer = optimizer_cls(
103
+ param_list, lr=lr, **self.pipeline_config.optimizer_kwargs
104
+ )
105
+ optimizers.append(optimizer)
106
+
107
+ self.optims = optimizers
108
+ schedulers_config = self.configure_lr_schedulers()
109
+
110
+ for name, param in self.model.named_parameters():
111
+ set_grad_false = True
112
+ for regex in self.pipeline_config.trainable_params:
113
+ pattern = re.compile(regex)
114
+ if re.match(pattern, name):
115
+ if param.requires_grad:
116
+ set_grad_false = False
117
+ if set_grad_false:
118
+ param.requires_grad = False
119
+
120
+ num_trainable_params = sum(
121
+ p.numel() for p in self.model.parameters() if p.requires_grad
122
+ )
123
+
124
+ logging.info(f"Number of trainable parameters: {num_trainable_params}")
125
+
126
+ schedulers_config = self.configure_lr_schedulers()
127
+
128
+ if schedulers_config is None:
129
+ return optimizers
130
+
131
+ return optimizers, [
132
+ schedulers_config_ for schedulers_config_ in schedulers_config
133
+ ]
134
+
135
+ def configure_lr_schedulers(self):
136
+ schedulers_config = []
137
+ if self.pipeline_config.lr_scheduler_name is None:
138
+ scheduler = None
139
+ schedulers_config.append(scheduler)
140
+ else:
141
+ scheduler_cls = getattr(
142
+ importlib.import_module("torch.optim.lr_scheduler"),
143
+ self.pipeline_config.lr_scheduler_name,
144
+ )
145
+ scheduler = scheduler_cls(
146
+ self.optims[0],
147
+ **self.pipeline_config.lr_scheduler_kwargs,
148
+ )
149
+ lr_scheduler_config = {
150
+ "scheduler": scheduler,
151
+ "interval": self.pipeline_config.lr_scheduler_interval,
152
+ "monitor": "val_loss",
153
+ "frequency": self.pipeline_config.lr_scheduler_frequency,
154
+ }
155
+ schedulers_config.append(lr_scheduler_config)
156
+
157
+ if all([scheduler is None for scheduler in schedulers_config]):
158
+ return None
159
+
160
+ return schedulers_config
161
+
162
+ def training_step(self, train_batch: Dict[str, Any], batch_idx: int) -> dict:
163
+ model_output = self.model(train_batch)
164
+ loss = model_output["loss"]
165
+ logging.info(f"loss: {loss}")
166
+ return {
167
+ "loss": loss,
168
+ "batch_idx": batch_idx,
169
+ }
170
+
171
+ def validation_step(self, val_batch: Dict[str, Any], val_idx: int) -> dict:
172
+ loss = self.model(val_batch, device=self.device)["loss"]
173
+
174
+ metrics = self.model.compute_metrics(val_batch)
175
+
176
+ return {"loss": loss, "metrics": metrics}
177
+
178
+ def log_samples(self, batch: Dict[str, Any]):
179
+ logging.debug("log_samples")
180
+ logs = self.model.log_samples(
181
+ batch,
182
+ **self.log_samples_model_kwargs,
183
+ )
184
+
185
+ if logs is not None:
186
+ N = min([logs[keys].shape[0] for keys in logs])
187
+ else:
188
+ N = 0
189
+
190
+ # Log inputs
191
+ if self.log_keys is not None:
192
+ for key in self.log_keys:
193
+ if key in batch:
194
+ if N > 0:
195
+ logs[key] = batch[key][:N]
196
+ else:
197
+ logs[key] = batch[key]
198
+
199
+ return logs
@@ -0,0 +1,82 @@
1
+ from dataclasses import field
2
+ from typing import List, Literal, Optional, Union
3
+
4
+ from pydantic.dataclasses import dataclass
5
+
6
+ from ..config import BaseConfig
7
+
8
+
9
+ @dataclass
10
+ class TrainingConfig(BaseConfig):
11
+ """
12
+ Configuration for the training pipeline
13
+
14
+ Args:
15
+
16
+ experiment_id (str):
17
+ The experiment id for the training run. If not provided, a random id will be generated.
18
+ optimizer_name (str):
19
+ The optimizer to use. Default is "AdamW". Choices are "Adam", "AdamW", "Adadelta", "Adagrad", "RMSprop", "SGD"
20
+ optimizer_kwargs (Dict[str, Any])
21
+ The optimizer kwargs. Default is [{}]
22
+ learning_rate (float):
23
+ The learning rate to use. Default is 1e-3
24
+ lr_scheduler_name (str):
25
+ The learning rate scheduler to use. Default is None. Choices are "StepLR", "CosineAnnealingLR",
26
+ "CosineAnnealingWarmRestarts", "ReduceLROnPlateau", "ExponentialLR"
27
+ lr_scheduler_kwargs (Dict[str, Any])
28
+ The learning rate scheduler kwargs. Default is [{}]
29
+ lr_scheduler_interval (str):
30
+ The learning rate scheduler interval. Default is ["step"]. Choices are "step", "epoch"
31
+ lr_scheduler_frequency (int):
32
+ The learning rate scheduler frequency. Default is 1
33
+ metrics (List[str])
34
+ The metrics to use. Default is None
35
+ tracking_metrics: Optional[List[str]]
36
+ The metrics to track. Default is None
37
+ backup_every (int):
38
+ The frequency to backup the model. Default is 50.
39
+ trainable_params (Union[str, List[str]]):
40
+ Regexes indicateing the parameters to train.
41
+ Default is [["./*"]] (i.e. all parameters are trainable)
42
+ log_keys: Union[str, List[str]]:
43
+ The keys to log when sampling from the model. Default is "txt"
44
+ log_samples_model_kwargs (Dict[str, Any]):
45
+ The kwargs for logging samples from the model. Default is {
46
+ "max_samples": 4,
47
+ "num_steps": 20,
48
+ "input_shape": None,
49
+ }
50
+ """
51
+
52
+ experiment_id: Optional[str] = None
53
+ optimizer_name: Literal[
54
+ "Adam", "AdamW", "Adadelta", "Adagrad", "RMSprop", "SGD"
55
+ ] = field(default_factory=lambda: "AdamW")
56
+ optimizer_kwargs: Optional[dict] = field(default_factory=lambda: {})
57
+ learning_rate: float = field(default_factory=lambda: 1e-3)
58
+ lr_scheduler_name: Optional[
59
+ Literal[
60
+ "StepLR",
61
+ "CosineAnnealingLR",
62
+ "CosineAnnealingWarmRestarts",
63
+ "ReduceLROnPlateau",
64
+ "ExponentialLR",
65
+ None,
66
+ ]
67
+ ] = None
68
+ lr_scheduler_kwargs: Optional[dict] = field(default_factory=lambda: {})
69
+ lr_scheduler_interval: Optional[Literal["step", "epoch", None]] = "step"
70
+ lr_scheduler_frequency: Optional[int] = 1
71
+ metrics: Optional[List[str]] = None
72
+ tracking_metrics: Optional[List[str]] = None
73
+ backup_every: int = 50
74
+ trainable_params: List[str] = field(default_factory=lambda: ["./*"])
75
+ log_keys: Optional[Union[str, List[str]]] = "txt"
76
+ log_samples_model_kwargs: Optional[dict] = field(
77
+ default_factory=lambda: {
78
+ "max_samples": 4,
79
+ "num_steps": 20,
80
+ "input_shape": None,
81
+ }
82
+ )