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,524 @@
1
+ import einops
2
+ import torch
3
+ import torch as th
4
+ import torch.nn as nn
5
+ import torch.nn.functional as F
6
+ import os
7
+ import pickle
8
+ import cv2
9
+
10
+ from libcom.shadow_generation.source.ldm.modules.diffusionmodules.util import (
11
+ conv_nd,
12
+ linear,
13
+ zero_module,
14
+ timestep_embedding,
15
+ )
16
+
17
+ from einops import rearrange, repeat
18
+ from torchvision.utils import make_grid
19
+ from libcom.shadow_generation.source.ldm.modules.attention import SpatialTransformer
20
+ from libcom.shadow_generation.source.ldm.modules.diffusionmodules.openaimodel import UNetModel, TimestepEmbedSequential, ResBlock, Downsample, AttentionBlock
21
+ from libcom.shadow_generation.source.ldm.models.diffusion.ddpm import LatentDiffusion
22
+ from libcom.shadow_generation.source.ldm.util import log_txt_as_img, exists, instantiate_from_config
23
+ from libcom.shadow_generation.source.ldm.models.diffusion.ddim import DDIMSampler
24
+ import numpy as np
25
+ from .base_network import MaskCls, RegNetwork
26
+ import torchvision.models as models
27
+
28
+ class ControlledUnetModel(UNetModel):
29
+
30
+ def forward(self, x, timesteps=None, context=None, control=None, only_mid_control=False, get_stable_features=False, remask=None, **kwargs):
31
+ if remask is not None:
32
+ return self.out(remask)
33
+ hs = []
34
+ with torch.no_grad():
35
+ t_emb = timestep_embedding(timesteps, self.model_channels, repeat_only=False)
36
+ emb = self.time_embed(t_emb)
37
+ h = x.type(self.dtype)
38
+ for module in self.input_blocks:
39
+ h = module(h, emb, context)
40
+ hs.append(h)
41
+ h = self.middle_block(h, emb, context)
42
+ encoder_features = hs.copy()
43
+ unet_features = h.clone()
44
+ decoder_features = []
45
+ if control is not None:
46
+ h += control.pop()
47
+
48
+ for i, module in enumerate(self.output_blocks):
49
+ if only_mid_control or control is None:
50
+ h = torch.cat([h, hs.pop()], dim=1)
51
+ else:
52
+ h = torch.cat([h, hs.pop() + control.pop()], dim=1)
53
+ h = module(h, emb, context)
54
+ decoder_features.append(h)
55
+ h = h.type(x.dtype)
56
+ if get_stable_features:
57
+ return self.out(h), [unet_features, encoder_features, decoder_features]
58
+ return self.out(h)
59
+
60
+
61
+ class ControlNet(nn.Module):
62
+ def __init__(
63
+ self,
64
+ image_size,
65
+ in_channels,
66
+ model_channels,
67
+ hint_channels,
68
+ num_res_blocks,
69
+ attention_resolutions,
70
+ dropout=0,
71
+ channel_mult=(1, 2, 4, 8),
72
+ conv_resample=True,
73
+ dims=2,
74
+ use_checkpoint=False,
75
+ use_fp16=False,
76
+ num_heads=-1,
77
+ num_head_channels=-1,
78
+ num_heads_upsample=-1,
79
+ use_scale_shift_norm=False,
80
+ resblock_updown=False,
81
+ use_new_attention_order=False,
82
+ use_spatial_transformer=False, # custom transformer support
83
+ transformer_depth=1, # custom transformer support
84
+ context_dim=None, # custom transformer support
85
+ n_embed=None, # custom support for prediction of discrete ids into codebook of first stage vq model
86
+ legacy=True,
87
+ disable_self_attentions=None,
88
+ num_attention_blocks=None,
89
+ disable_middle_self_attn=False,
90
+ use_linear_in_transformer=False,
91
+ ):
92
+ super().__init__()
93
+ if use_spatial_transformer:
94
+ assert context_dim is not None, 'Fool!! You forgot to include the dimension of your cross-attention conditioning...'
95
+
96
+ if context_dim is not None:
97
+ assert use_spatial_transformer, 'Fool!! You forgot to use the spatial transformer for your cross-attention conditioning...'
98
+ from omegaconf.listconfig import ListConfig
99
+ if type(context_dim) == ListConfig:
100
+ context_dim = list(context_dim)
101
+
102
+ if num_heads_upsample == -1:
103
+ num_heads_upsample = num_heads
104
+
105
+ if num_heads == -1:
106
+ assert num_head_channels != -1, 'Either num_heads or num_head_channels has to be set'
107
+
108
+ if num_head_channels == -1:
109
+ assert num_heads != -1, 'Either num_heads or num_head_channels has to be set'
110
+
111
+ self.dims = dims
112
+ self.image_size = image_size
113
+ self.in_channels = in_channels
114
+ self.model_channels = model_channels
115
+ if isinstance(num_res_blocks, int):
116
+ self.num_res_blocks = len(channel_mult) * [num_res_blocks]
117
+ else:
118
+ if len(num_res_blocks) != len(channel_mult):
119
+ raise ValueError("provide num_res_blocks either as an int (globally constant) or "
120
+ "as a list/tuple (per-level) with the same length as channel_mult")
121
+ self.num_res_blocks = num_res_blocks
122
+ if disable_self_attentions is not None:
123
+ # should be a list of booleans, indicating whether to disable self-attention in TransformerBlocks or not
124
+ assert len(disable_self_attentions) == len(channel_mult)
125
+ if num_attention_blocks is not None:
126
+ assert len(num_attention_blocks) == len(self.num_res_blocks)
127
+ assert all(map(lambda i: self.num_res_blocks[i] >= num_attention_blocks[i], range(len(num_attention_blocks))))
128
+ print(f"Constructor of UNetModel received num_attention_blocks={num_attention_blocks}. "
129
+ f"This option has LESS priority than attention_resolutions {attention_resolutions}, "
130
+ f"i.e., in cases where num_attention_blocks[i] > 0 but 2**i not in attention_resolutions, "
131
+ f"attention will still not be set.")
132
+
133
+ self.attention_resolutions = attention_resolutions
134
+ self.dropout = dropout
135
+ self.channel_mult = channel_mult
136
+ self.conv_resample = conv_resample
137
+ self.use_checkpoint = use_checkpoint
138
+ self.dtype = th.float16 if use_fp16 else th.float32
139
+ self.num_heads = num_heads
140
+ self.num_head_channels = num_head_channels
141
+ self.num_heads_upsample = num_heads_upsample
142
+ self.predict_codebook_ids = n_embed is not None
143
+ self.add_color_channel = 0
144
+
145
+ time_embed_dim = model_channels * 4
146
+ self.time_embed = nn.Sequential(
147
+ linear(model_channels, time_embed_dim),
148
+ nn.SiLU(),
149
+ linear(time_embed_dim, time_embed_dim),
150
+ )
151
+
152
+ self.input_blocks = nn.ModuleList(
153
+ [
154
+ TimestepEmbedSequential(
155
+ conv_nd(dims, in_channels, model_channels, 3, padding=1)
156
+ )
157
+ ]
158
+ )
159
+ self.zero_convs = nn.ModuleList([self.make_zero_conv(model_channels, self.add_color_channel)])
160
+
161
+ self.input_hint_block = TimestepEmbedSequential(
162
+ conv_nd(dims, 5, 16, 3, padding=1), #TODO
163
+ nn.SiLU(),
164
+ conv_nd(dims, 16, 16, 3, padding=1),
165
+ nn.SiLU(),
166
+ conv_nd(dims, 16, 32, 3, padding=1, stride=2),
167
+ nn.SiLU(),
168
+ conv_nd(dims, 32, 32, 3, padding=1),
169
+ nn.SiLU(),
170
+ conv_nd(dims, 32, 96, 3, padding=1, stride=2),
171
+ nn.SiLU(),
172
+ conv_nd(dims, 96, 96, 3, padding=1),
173
+ nn.SiLU(),
174
+ conv_nd(dims, 96, 256, 3, padding=1, stride=2),
175
+ nn.SiLU(),
176
+ zero_module(conv_nd(dims, 256, model_channels, 3, padding=1))
177
+ )
178
+
179
+ self._feature_size = model_channels
180
+ input_block_chans = [model_channels]
181
+ ch = model_channels
182
+ ds = 1
183
+ for level, mult in enumerate(channel_mult):
184
+ for nr in range(self.num_res_blocks[level]):
185
+ layers = [
186
+ ResBlock(
187
+ ch,
188
+ time_embed_dim,
189
+ dropout,
190
+ out_channels=mult * model_channels,
191
+ dims=dims,
192
+ use_checkpoint=use_checkpoint,
193
+ use_scale_shift_norm=use_scale_shift_norm,
194
+ )
195
+ ]
196
+ ch = mult * model_channels
197
+ if ds in attention_resolutions:
198
+ if num_head_channels == -1:
199
+ dim_head = ch // num_heads
200
+ else:
201
+ num_heads = ch // num_head_channels
202
+ dim_head = num_head_channels
203
+ if legacy:
204
+ # num_heads = 1
205
+ dim_head = ch // num_heads if use_spatial_transformer else num_head_channels
206
+ if exists(disable_self_attentions):
207
+ disabled_sa = disable_self_attentions[level]
208
+ else:
209
+ disabled_sa = False
210
+
211
+ if not exists(num_attention_blocks) or nr < num_attention_blocks[level]:
212
+ layers.append(
213
+ AttentionBlock(
214
+ ch,
215
+ use_checkpoint=use_checkpoint,
216
+ num_heads=num_heads,
217
+ num_head_channels=dim_head,
218
+ use_new_attention_order=use_new_attention_order,
219
+ ) if not use_spatial_transformer else SpatialTransformer(
220
+ ch, num_heads, dim_head, depth=transformer_depth, context_dim=context_dim,
221
+ disable_self_attn=disabled_sa, use_linear=use_linear_in_transformer,
222
+ use_checkpoint=use_checkpoint
223
+ )
224
+ )
225
+ self.input_blocks.append(TimestepEmbedSequential(*layers))
226
+ self.zero_convs.append(self.make_zero_conv(ch, self.add_color_channel))
227
+ self._feature_size += ch
228
+ input_block_chans.append(ch)
229
+ if level != len(channel_mult) - 1:
230
+ out_ch = ch
231
+ self.input_blocks.append(
232
+ TimestepEmbedSequential(
233
+ ResBlock(
234
+ ch,
235
+ time_embed_dim,
236
+ dropout,
237
+ out_channels=out_ch,
238
+ dims=dims,
239
+ use_checkpoint=use_checkpoint,
240
+ use_scale_shift_norm=use_scale_shift_norm,
241
+ down=True,
242
+ )
243
+ if resblock_updown
244
+ else Downsample(
245
+ ch, conv_resample, dims=dims, out_channels=out_ch
246
+ )
247
+ )
248
+ )
249
+ ch = out_ch
250
+ input_block_chans.append(ch)
251
+ self.zero_convs.append(self.make_zero_conv(ch, self.add_color_channel))
252
+ ds *= 2
253
+ self._feature_size += ch
254
+
255
+ if num_head_channels == -1:
256
+ dim_head = ch // num_heads
257
+ else:
258
+ num_heads = ch // num_head_channels
259
+ dim_head = num_head_channels
260
+ if legacy:
261
+ # num_heads = 1
262
+ dim_head = ch // num_heads if use_spatial_transformer else num_head_channels
263
+ self.middle_block = TimestepEmbedSequential(
264
+ ResBlock(
265
+ ch,
266
+ time_embed_dim,
267
+ dropout,
268
+ dims=dims,
269
+ use_checkpoint=use_checkpoint,
270
+ use_scale_shift_norm=use_scale_shift_norm,
271
+ ),
272
+ AttentionBlock(
273
+ ch,
274
+ use_checkpoint=use_checkpoint,
275
+ num_heads=num_heads,
276
+ num_head_channels=dim_head,
277
+ use_new_attention_order=use_new_attention_order,
278
+ ) if not use_spatial_transformer else SpatialTransformer( # always uses a self-attn
279
+ ch, num_heads, dim_head, depth=transformer_depth, context_dim=context_dim,
280
+ disable_self_attn=disable_middle_self_attn, use_linear=use_linear_in_transformer,
281
+ use_checkpoint=use_checkpoint
282
+ ),
283
+ ResBlock(
284
+ ch,
285
+ time_embed_dim,
286
+ dropout,
287
+ dims=dims,
288
+ use_checkpoint=use_checkpoint,
289
+ use_scale_shift_norm=use_scale_shift_norm,
290
+ ),
291
+ )
292
+ self.middle_block_out = self.make_zero_conv(ch)
293
+ self._feature_size += ch
294
+
295
+ def make_zero_conv(self, channels, color_hist_channels=0):
296
+ return TimestepEmbedSequential(zero_module(conv_nd(self.dims, channels + color_hist_channels, channels, 1, padding=0)))
297
+
298
+ def forward(self, x, hint, timesteps, context, **kwargs): # TODO
299
+ t_emb = timestep_embedding(timesteps, self.model_channels, repeat_only=False)
300
+ emb = self.time_embed(t_emb)
301
+
302
+ guided_hint = self.input_hint_block(hint, emb, context)
303
+
304
+ outs = []
305
+
306
+ h = x.type(self.dtype)
307
+ for module, zero_conv in zip(self.input_blocks, self.zero_convs):
308
+ if guided_hint is not None:
309
+ h = module(h, emb, context)
310
+ h += guided_hint
311
+ guided_hint = None
312
+ else:
313
+ h = module(h, emb, context)
314
+ outs.append(zero_conv(h, emb, context))
315
+
316
+ h = self.middle_block(h, emb, context)
317
+ outs.append(self.middle_block_out(h, emb, context))
318
+
319
+ return outs
320
+
321
+ class ControlLDM(LatentDiffusion):
322
+
323
+ def __init__(self, control_stage_config, control_key, only_mid_control, cls_net_path, reg_net_path, cls_label, *args, **kwargs):
324
+ super().__init__(*args, **kwargs)
325
+ self.control_model = instantiate_from_config(control_stage_config)
326
+ self.control_key = control_key
327
+ self.only_mid_control = only_mid_control
328
+ self.cls_net_path = cls_net_path
329
+ self.reg_net_path = reg_net_path
330
+ self.cls_label = cls_label
331
+ self.control_scales = [1.0] * 13
332
+ self.mask_cls = MaskCls(num_classes=256)
333
+
334
+ if os.path.exists(self.cls_net_path):
335
+ self.mask_cls.load_state_dict(torch.load(self.cls_net_path)['net'])
336
+ for param in self.mask_cls.parameters():
337
+ param.requires_grad = False
338
+ self.bbx_reg = RegNetwork()
339
+ if os.path.exists(self.reg_net_path):
340
+ self.bbx_reg.load_state_dict(torch.load(self.reg_net_path)['net'])
341
+ for param in self.bbx_reg.parameters():
342
+ param.requires_grad = False
343
+ self.mask_threshold = 0.5
344
+
345
+ @torch.no_grad()
346
+ def get_input(self, batch, k, bs=None, *args, **kwargs):
347
+ x, c = super().get_input(batch, self.first_stage_key, *args, **kwargs)
348
+ control = batch[self.control_key]
349
+ if bs is not None:
350
+ control = control[:bs]
351
+ control = control.to(self.device)
352
+ control = einops.rearrange(control, 'b h w c -> b c h w')
353
+ control = control.to(memory_format=torch.contiguous_format).float()
354
+ return x, dict(c_crossattn=[c], c_concat=[control])
355
+
356
+ def gen_bbx(self, pred_t, fg_instance_bbx, mask):
357
+ img_height, img_width = 512, 512
358
+ pred_bbx = pred_t.new(pred_t.shape)
359
+ pred_bbx[:,0] = pred_t[:,0] * fg_instance_bbx[:,2] + fg_instance_bbx[:,0]
360
+ pred_bbx[:,1] = pred_t[:,1] * fg_instance_bbx[:,3] + fg_instance_bbx[:,1]
361
+ pred_bbx[:,2] = fg_instance_bbx[:,2] * torch.exp(pred_t[:,2])
362
+ pred_bbx[:,3] = fg_instance_bbx[:,3] * torch.exp(pred_t[:,3])
363
+ pred_bbx[:,4] = pred_t[:,4] * 180 / np.pi +fg_instance_bbx[:,4]
364
+ mask = mask.cpu().numpy()
365
+ bs = mask.shape[0]
366
+ for i in range(bs):
367
+ if pred_bbx[i,4] > 0:
368
+ temp = pred_bbx[i,2]
369
+ pred_bbx[i,2] = pred_bbx[i,3]
370
+ pred_bbx[i,3] = temp
371
+ pred_bbx[i,4] = pred_bbx[i,4] - 90
372
+ x, y, w, h, theta = pred_bbx[i,0], pred_bbx[i,1], pred_bbx[i,2], pred_bbx[i,3], pred_bbx[i,4]
373
+ box = ((x, y), (w, h), theta)
374
+ box_points = cv2.boxPoints(box)
375
+
376
+ box_points = np.clip(box_points, 0, [img_width - 1, img_height - 1])
377
+ box_points_int = np.int32(box_points)
378
+ cv2.fillPoly(mask[i], [box_points_int], 1)
379
+ mask = torch.tensor(mask).unsqueeze(1).to(dtype=torch.float32).to(self.device)
380
+ return mask
381
+
382
+ def apply_model(self, x_noisy, t, cond, get_stable_features=True, batch=None, *args, **kwargs): # TODO
383
+ assert isinstance(cond, dict)
384
+ diffusion_model = self.model.ip_adapter
385
+ cond_txt = torch.cat(cond['c_crossattn'], 1)
386
+
387
+ if cond['c_concat'] is None:
388
+ eps = diffusion_model(sample=x_noisy, timestep=t, encoder_hidden_states=cond_txt)
389
+ return eps
390
+ else:
391
+ input = batch['cls']
392
+ input = input.to(self.device)
393
+ input = einops.rearrange(input, 'b h w c -> b c h w')
394
+ pred_t = self.bbx_reg(input)
395
+ bbx_mask = batch['bbx']
396
+ fg_instance_bbx = batch['fg']
397
+ fg_instance_bbx = fg_instance_bbx.to(self.device)
398
+ bbx_region = self.gen_bbx(pred_t, fg_instance_bbx, bbx_mask)
399
+ hint = torch.cat(cond['c_concat'], 1)
400
+ control = self.control_model(x=x_noisy, hint=torch.cat((hint, bbx_region), 1), timesteps=t, context=cond_txt)
401
+ control = [c * scale for c, scale in zip(control, self.control_scales)]
402
+ mid_control = control.pop()
403
+ down_control = tuple(control)
404
+
405
+ mask_label = self.mask_cls(input)
406
+ with open(self.cls_label, 'rb') as f:
407
+ centroid_dict = pickle.load(f)
408
+ _, top64_label = torch.topk(mask_label, self.k, largest=True, sorted=False)
409
+ mask_embeddings = batch['embeddings'].to(self.device)
410
+ for i in range(mask_embeddings.shape[0]):
411
+ for j in range(top64_label.shape[1]):
412
+ label = top64_label[i,j].item()
413
+ if label in centroid_dict:
414
+ mask_embeddings[i,j,:] += torch.tensor(centroid_dict[label]).to(self.device)
415
+ else:
416
+ print(f"Warning: label {label} not found in centroid_dict")
417
+
418
+ eps = diffusion_model(noisy_latents=x_noisy, timesteps=t, encoder_hidden_states=cond_txt, down_block_additional_residuals=down_control, mid_block_additional_residual=mid_control, mask_embeddings=mask_embeddings)
419
+ return eps
420
+
421
+ @torch.no_grad()
422
+ def get_unconditional_conditioning(self, N):
423
+ return self.get_learned_conditioning([""] * N)
424
+
425
+ @torch.no_grad()
426
+ def log_images(self, batch, N=1, n_row=2, sample=False, ddim_steps=50, ddim_eta=0.0, return_keys=None,
427
+ quantize_denoised=True, inpaint=True, plot_denoise_rows=False, plot_progressive_rows=True,
428
+ plot_diffusion_rows=False, unconditional_guidance_scale=9.0, unconditional_guidance_label=None,
429
+ use_ema_scope=True, use_x_T=False,
430
+ **kwargs):
431
+ use_ddim = ddim_steps is not None
432
+
433
+ log = dict()
434
+ z, c = self.get_input(batch, self.first_stage_key, bs=N)
435
+ c_cat, c = c["c_concat"][0][:N], c["c_crossattn"][0][:N]
436
+ N = min(z.shape[0], N)
437
+ n_row = min(z.shape[0], n_row)
438
+ log["reconstruction"] = self.decode_first_stage(z)
439
+ log_control = c_cat * 2.0 - 1.0
440
+ log["control"] = log_control
441
+ log["conditioning"] = log_txt_as_img((512, 512), batch[self.cond_stage_key], size=16)
442
+
443
+ if use_x_T == True:
444
+ x_T = super().q_sample(x_start=z, t=torch.tensor([999], device=self.device, dtype=torch.long), noise=torch.randn_like(z))
445
+ else:
446
+ x_T = None
447
+
448
+ if plot_diffusion_rows:
449
+ # get diffusion row
450
+ diffusion_row = list()
451
+ z_start = z[:n_row]
452
+ for t in range(self.num_timesteps):
453
+ if t % self.log_every_t == 0 or t == self.num_timesteps - 1:
454
+ t = repeat(torch.tensor([t]), '1 -> b', b=n_row)
455
+ t = t.to(self.device).long()
456
+ noise = torch.randn_like(z_start)
457
+ z_noisy = self.q_sample(x_start=z_start, t=t, noise=noise)
458
+ diffusion_row.append(self.decode_first_stage(z_noisy))
459
+
460
+ diffusion_row = torch.stack(diffusion_row) # n_log_step, n_row, C, H, W
461
+ diffusion_grid = rearrange(diffusion_row, 'n b c h w -> b n c h w')
462
+ diffusion_grid = rearrange(diffusion_grid, 'b n c h w -> (b n) c h w')
463
+ diffusion_grid = make_grid(diffusion_grid, nrow=diffusion_row.shape[0])
464
+ log["diffusion_row"] = diffusion_grid
465
+
466
+ if sample:
467
+ # get denoise row
468
+ samples, z_denoise_row = self.sample_log(cond={"c_concat": [c_cat], "c_crossattn": [c]},
469
+ batch_size=N, ddim=use_ddim,
470
+ ddim_steps=ddim_steps, eta=ddim_eta,
471
+ batch=batch)
472
+ x_samples = self.decode_first_stage(samples)
473
+ log["samples"] = x_samples
474
+ if plot_denoise_rows:
475
+ denoise_grid = self._get_denoise_row_from_list(z_denoise_row)
476
+ log["denoise_row"] = denoise_grid
477
+
478
+ if unconditional_guidance_scale >= 1.0:
479
+ uc_cross = self.get_unconditional_conditioning(N)
480
+ uc_cat = c_cat # torch.zeros_like(c_cat)
481
+ uc_full = {"c_concat": [uc_cat], "c_crossattn": [uc_cross]}
482
+ samples_cfg, _ = self.sample_log(cond={"c_concat": [c_cat], "c_crossattn": [c]},
483
+ batch_size=N, ddim=use_ddim,
484
+ ddim_steps=ddim_steps, eta=ddim_eta,
485
+ unconditional_guidance_scale=unconditional_guidance_scale,
486
+ unconditional_conditioning=uc_full, x_T=x_T,
487
+ batch=batch)
488
+ x_samples_cfg = self.decode_first_stage(samples_cfg)
489
+ log[f"samples_cfg_scale_{unconditional_guidance_scale:.2f}"] = x_samples_cfg
490
+ # log['predicted_mask'] = pred_mask
491
+
492
+ return log
493
+
494
+ @torch.no_grad()
495
+ def sample_log(self, cond, batch_size, ddim, ddim_steps, x_T=None, **kwargs):
496
+ ddim_sampler = DDIMSampler(self)
497
+ b, c, h, w = cond["c_concat"][0].shape
498
+ shape = (self.channels, h // 8, w // 8)
499
+ samples, intermediates = ddim_sampler.sample(ddim_steps, batch_size, shape, cond, verbose=False, x_T=x_T, **kwargs) #add x_T
500
+ return samples, intermediates
501
+
502
+ def configure_optimizers(self):
503
+ lr = self.learning_rate
504
+ params = []
505
+ params += list(self.control_model.parameters())
506
+ params += list(self.model.adapter_modules.parameters())
507
+ params += list(self.model.image_proj_model.parameters())
508
+ if not self.sd_locked:
509
+ params += list(self.model.diffusion_model.output_blocks.parameters())
510
+ params += list(self.model.diffusion_model.out.parameters())
511
+ opt = torch.optim.AdamW(params, lr=lr)
512
+ return opt
513
+
514
+ def low_vram_shift(self, is_diffusing):
515
+ if is_diffusing:
516
+ self.model = self.model.cuda()
517
+ self.control_model = self.control_model.cuda()
518
+ self.first_stage_model = self.first_stage_model.cpu()
519
+ self.cond_stage_model = self.cond_stage_model.cpu()
520
+ else:
521
+ self.model = self.model.cpu()
522
+ self.control_model = self.control_model.cpu()
523
+ self.first_stage_model = self.first_stage_model.cuda()
524
+ self.cond_stage_model = self.cond_stage_model.cuda()
@@ -0,0 +1,28 @@
1
+ import os
2
+ import torch
3
+
4
+ from omegaconf import OmegaConf
5
+ from libcom.shadow_generation.source.ldm.util import instantiate_from_config
6
+
7
+
8
+ def get_state_dict(d):
9
+ return d.get('state_dict', d)
10
+
11
+
12
+ def load_state_dict(ckpt_path, location='cpu'):
13
+ _, extension = os.path.splitext(ckpt_path)
14
+ if extension.lower() == ".safetensors":
15
+ import safetensors.torch
16
+ state_dict = safetensors.torch.load_file(ckpt_path, device=location)
17
+ else:
18
+ state_dict = get_state_dict(torch.load(ckpt_path, map_location=torch.device(location)))
19
+ state_dict = get_state_dict(state_dict)
20
+ print(f'Loaded state_dict from [{ckpt_path}]')
21
+ return state_dict
22
+
23
+
24
+ def create_model(config_path):
25
+ config = OmegaConf.load(config_path)
26
+ model = instantiate_from_config(config.model).cpu()
27
+ print(f'Loaded model config from [{config_path}]')
28
+ return model
File without changes
File without changes