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