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,200 @@
1
+ import importlib
2
+ import math
3
+
4
+ import cv2
5
+ import torch
6
+ import numpy as np
7
+
8
+ import os
9
+ from safetensors.torch import load_file
10
+
11
+ from inspect import isfunction
12
+ from PIL import Image, ImageDraw, ImageFont
13
+
14
+
15
+ def log_txt_as_img(wh, xc, size=10):
16
+ # wh a tuple of (width, height)
17
+ # xc a list of captions to plot
18
+ b = len(xc)
19
+ txts = list()
20
+ for bi in range(b):
21
+ txt = Image.new("RGB", wh, color="white")
22
+ draw = ImageDraw.Draw(txt)
23
+ font = ImageFont.truetype('assets/DejaVuSans.ttf', size=size)
24
+ nc = int(40 * (wh[0] / 256))
25
+ lines = "\n".join(xc[bi][start:start + nc] for start in range(0, len(xc[bi]), nc))
26
+
27
+ try:
28
+ draw.text((0, 0), lines, fill="black", font=font)
29
+ except UnicodeEncodeError:
30
+ print("Cant encode string for logging. Skipping.")
31
+
32
+ txt = np.array(txt).transpose(2, 0, 1) / 127.5 - 1.0
33
+ txts.append(txt)
34
+ txts = np.stack(txts)
35
+ txts = torch.tensor(txts)
36
+ return txts
37
+
38
+
39
+ def ismap(x):
40
+ if not isinstance(x, torch.Tensor):
41
+ return False
42
+ return (len(x.shape) == 4) and (x.shape[1] > 3)
43
+
44
+
45
+ def isimage(x):
46
+ if not isinstance(x, torch.Tensor):
47
+ return False
48
+ return (len(x.shape) == 4) and (x.shape[1] == 3 or x.shape[1] == 1)
49
+
50
+
51
+ def exists(x):
52
+ return x is not None
53
+
54
+
55
+ def default(val, d):
56
+ if exists(val):
57
+ return val
58
+ return d() if isfunction(d) else d
59
+
60
+
61
+ def mean_flat(tensor):
62
+ """
63
+ https://github.com/openai/guided-diffusion/blob/27c20a8fab9cb472df5d6bdd6c8d11c8f430b924/guided_diffusion/nn.py#L86
64
+ Take the mean over all non-batch dimensions.
65
+ """
66
+ return tensor.mean(dim=list(range(1, len(tensor.shape))))
67
+
68
+
69
+ def count_params(model, verbose=False):
70
+ total_params = sum(p.numel() for p in model.parameters())
71
+ if verbose:
72
+ print(f"{model.__class__.__name__} has {total_params * 1.e-6:.2f} M params.")
73
+ return total_params
74
+
75
+
76
+ def instantiate_from_config(config):
77
+ if not "target" in config:
78
+ if config == '__is_first_stage__':
79
+ return None
80
+ elif config == "__is_unconditional__":
81
+ return None
82
+ raise KeyError("Expected key `target` to instantiate.")
83
+ return get_obj_from_str(config["target"])(**config.get("params", dict()))
84
+
85
+
86
+ def get_obj_from_str(string, reload=False):
87
+ module, cls = string.rsplit(".", 1)
88
+ if reload:
89
+ module_imp = importlib.import_module(module)
90
+ importlib.reload(module_imp)
91
+ return getattr(importlib.import_module(module, package=None), cls)
92
+
93
+
94
+ checkpoint_dict_replacements = {
95
+ 'cond_stage_model.transformer.text_model.embeddings.': 'cond_stage_model.transformer.embeddings.',
96
+ 'cond_stage_model.transformer.text_model.encoder.': 'cond_stage_model.transformer.encoder.',
97
+ 'cond_stage_model.transformer.text_model.final_layer_norm.': 'cond_stage_model.transformer.final_layer_norm.',
98
+ }
99
+
100
+
101
+ def transform_checkpoint_dict_key(k):
102
+ for text, replacement in checkpoint_dict_replacements.items():
103
+ if k.startswith(text):
104
+ k = replacement + k[len(text):]
105
+
106
+ return k
107
+
108
+
109
+ def get_state_dict_from_checkpoint(pl_sd):
110
+ pl_sd = pl_sd.pop("state_dict", pl_sd)
111
+ pl_sd.pop("state_dict", None)
112
+
113
+ sd = {}
114
+ for k, v in pl_sd.items():
115
+ new_key = transform_checkpoint_dict_key(k)
116
+
117
+ if new_key is not None:
118
+ sd[new_key] = v
119
+
120
+ pl_sd.clear()
121
+ pl_sd.update(sd)
122
+
123
+ return pl_sd
124
+
125
+
126
+ def read_state_dict(checkpoint_file, print_global_state=False):
127
+ _, extension = os.path.splitext(checkpoint_file)
128
+ if extension.lower() == ".safetensors":
129
+ pl_sd = load_file(checkpoint_file, device='cpu')
130
+ else:
131
+ pl_sd = torch.load(checkpoint_file, map_location='cpu')
132
+
133
+ if print_global_state and "global_step" in pl_sd:
134
+ print(f"Global Step: {pl_sd['global_step']}")
135
+
136
+ sd = get_state_dict_from_checkpoint(pl_sd)
137
+ return sd
138
+
139
+
140
+ def load_model_from_config(config, ckpt, vae_ckpt=None, verbose=False):
141
+ print(f"Loading model from {ckpt}")
142
+ sd = read_state_dict(ckpt)
143
+ model = instantiate_from_config(config.model)
144
+ m, u = model.load_state_dict(sd, strict=False)
145
+ if len(m) > 0 and verbose:
146
+ print("missing keys:")
147
+ print(m)
148
+ if len(u) > 0 and verbose:
149
+ print("unexpected keys:")
150
+ print(u)
151
+
152
+ if 'anything' in ckpt.lower() and vae_ckpt is None:
153
+ vae_ckpt = 'models/anything-v4.0.vae.pt'
154
+
155
+ if vae_ckpt is not None and vae_ckpt != 'None':
156
+ print(f"Loading vae model from {vae_ckpt}")
157
+ vae_sd = torch.load(vae_ckpt, map_location="cpu")
158
+ if "global_step" in vae_sd:
159
+ print(f"Global Step: {vae_sd['global_step']}")
160
+ sd = vae_sd["state_dict"]
161
+ m, u = model.first_stage_model.load_state_dict(sd, strict=False)
162
+ if len(m) > 0 and verbose:
163
+ print("missing keys:")
164
+ print(m)
165
+ if len(u) > 0 and verbose:
166
+ print("unexpected keys:")
167
+ print(u)
168
+
169
+ model.cuda()
170
+ model.eval()
171
+ return model
172
+
173
+
174
+ def resize_numpy_image(image, max_resolution=512 * 512, resize_short_edge=None):
175
+ h, w = image.shape[:2]
176
+ if resize_short_edge is not None:
177
+ k = resize_short_edge / min(h, w)
178
+ else:
179
+ k = max_resolution / (h * w)
180
+ k = k**0.5
181
+ h = int(np.round(h * k / 64)) * 64
182
+ w = int(np.round(w * k / 64)) * 64
183
+ image = cv2.resize(image, (w, h), interpolation=cv2.INTER_LANCZOS4)
184
+ return image
185
+
186
+
187
+ # make uc and prompt shapes match via padding for long prompts
188
+ null_cond = None
189
+
190
+ def fix_cond_shapes(model, prompt_condition, uc):
191
+ if uc is None:
192
+ return prompt_condition, uc
193
+ global null_cond
194
+ if null_cond is None:
195
+ null_cond = model.get_learned_conditioning([""])
196
+ while prompt_condition.shape[1] > uc.shape[1]:
197
+ uc = torch.cat((uc, null_cond.repeat((uc.shape[0], 1, 1))), axis=1)
198
+ while prompt_condition.shape[1] < uc.shape[1]:
199
+ prompt_condition = torch.cat((prompt_condition, null_cond.repeat((prompt_condition.shape[0], 1, 1))), axis=1)
200
+ return prompt_condition, uc
@@ -0,0 +1,75 @@
1
+ name: test
2
+ model:
3
+ base_learning_rate: 1.0e-04
4
+ target: libcom.painterly_image_harmonization.source.PHDiffusion.ldm.models.diffusion.ddpm.LatentDiffusion
5
+ params:
6
+ linear_start: 0.00085
7
+ linear_end: 0.0120
8
+ num_timesteps_cond: 1
9
+ log_every_t: 200
10
+ timesteps: 1000
11
+ first_stage_key: "jpg"
12
+ cond_stage_key: "txt"
13
+ image_size: 64
14
+ channels: 4
15
+ cond_stage_trainable: false # Note: different from the one we trained before
16
+ conditioning_key: crossattn
17
+ monitor: val/loss_simple_ema
18
+ scale_factor: 0.18215
19
+ use_ema: False
20
+
21
+ scheduler_config: # 10000 warmup steps
22
+ target: libcom.painterly_image_harmonization.source.PHDiffusion.ldm.lr_scheduler.LambdaLinearScheduler
23
+ params:
24
+ warm_up_steps: [ 10000 ]
25
+ cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases
26
+ f_start: [ 1.e-6 ]
27
+ f_max: [ 1. ]
28
+ f_min: [ 1. ]
29
+
30
+ unet_config:
31
+ target: libcom.painterly_image_harmonization.source.PHDiffusion.ldm.modules.diffusionmodules.openaimodel.UNetModel
32
+ params:
33
+ image_size: 32 # unused
34
+ in_channels: 4
35
+ out_channels: 4
36
+ model_channels: 320
37
+ attention_resolutions: [ 4, 2, 1 ]
38
+ num_res_blocks: 2
39
+ channel_mult: [ 1, 2, 4, 4 ]
40
+ num_heads: 8
41
+ use_spatial_transformer: True
42
+ transformer_depth: 1
43
+ context_dim: 768
44
+ use_checkpoint: True
45
+ legacy: False
46
+
47
+ first_stage_config:
48
+ target: libcom.painterly_image_harmonization.source.PHDiffusion.ldm.models.autoencoder.AutoencoderKL
49
+ params:
50
+ embed_dim: 4
51
+ monitor: val/rec_loss
52
+ ddconfig:
53
+ double_z: true
54
+ z_channels: 4
55
+ resolution: 512
56
+ in_channels: 3
57
+ out_ch: 3
58
+ ch: 128
59
+ ch_mult:
60
+ - 1
61
+ - 2
62
+ - 4
63
+ - 4
64
+ num_res_blocks: 2
65
+ attn_resolutions: []
66
+ dropout: 0.0
67
+ lossconfig:
68
+ target: torch.nn.Identity
69
+
70
+ cond_stage_config: #__is_unconditional__
71
+ target: libcom.painterly_image_harmonization.source.PHDiffusion.ldm.modules.encoders.modules.FrozenCLIPEmbedder
72
+ params:
73
+ model_path: openai-clip-vit-large-patch14
74
+
75
+
@@ -0,0 +1,3 @@
1
+ from .reflection_generation import ReflectionGenerationModel
2
+
3
+ __all__ = ['ReflectionGenerationModel']
@@ -0,0 +1,174 @@
1
+ import torch
2
+ import torchvision.transforms as transforms
3
+ from libcom.utils.model_download import download_pretrained_model, download_entire_folder
4
+ from libcom.utils.process_image import *
5
+ from libcom.utils.environment import *
6
+ import os
7
+ from omegaconf import OmegaConf
8
+ from pytorch_lightning import seed_everything
9
+ import numpy as np
10
+ import os
11
+ import cv2
12
+ from PIL import Image
13
+ import numpy as np
14
+
15
+ try:
16
+ from lightning_fabric.utilities.seed import log
17
+ log.propagate = False
18
+ except:
19
+ pass
20
+ from .source.PostProcessModel import PostProcess
21
+ from .source.cldm.model import load_state_dict
22
+
23
+ cur_dir = os.path.dirname(os.path.abspath(__file__))
24
+ model_dir = os.environ.get('LIBCOM_MODEL_DIR',cur_dir)
25
+ model_set = ['ReflectionGenerationModel']
26
+
27
+ class ReflectionGenerationModel:
28
+ """
29
+ Foreground reflection generation model based on diffusion model and control net.
30
+
31
+ Args:
32
+ device (str | torch.device): gpu id
33
+ model_type (str): predefined model type
34
+ kwargs (dict): other parameters for building model
35
+
36
+ Examples:
37
+ >>> from libcom import ReflectionGenerationModel
38
+ >>> from libcom.utils.process_image import make_image_grid
39
+ >>> import cv2
40
+ >>> net = ReflectionGenerationModel(device=2, model_type='ReflectionGeneration')
41
+ >>> comp_image1 = "../tests/reflection_generation/composite/1.png"
42
+ >>> comp_mask1 = "../tests/reflection_generation/composite_mask/1.png"
43
+ >>> preds = net(comp_image1, comp_mask1, number=5)
44
+ >>> grid_img = make_image_grid([comp_image1, comp_mask1] + preds)
45
+ >>> cv2.imwrite('../docs/_static/image/reflection_generation_result1.jpg', grid_img)
46
+ >>> comp_image2 = "../tests/reflection_generation/composite/2.png"
47
+ >>> comp_mask2 = "../tests/reflection_generation/composite_mask/2.png"
48
+ >>> preds = net(comp_image2, comp_mask2, number=5)
49
+ >>> grid_img = make_image_grid([comp_image2, comp_mask2] + preds)
50
+ >>> cv2.imwrite('../docs/_static/image/reflection_generation_result2.jpg', grid_img)
51
+
52
+ Expected result:
53
+
54
+ .. image:: _static/image/reflection_generation1.jpg
55
+ :scale: 21 %
56
+ .. image:: _static/image/reflection_generation2.jpg
57
+ :scale: 21 %
58
+
59
+
60
+ """
61
+ def __init__(self, device=0, model_type='ReflectionGeneration', **kwargs):
62
+ # assert model_type in model_set, f'Not implementation for {model_type}'
63
+ self.model_type = model_type
64
+ self.option = kwargs
65
+
66
+ cldm_weight_path = os.path.join(model_dir, 'pretrained_models', 'Reflection_cldm.ckpt')
67
+ ppp_weight_path = os.path.join(model_dir, 'pretrained_models', 'Reflection_ppp.ckpt')
68
+ reg_net_path = os.path.join(model_dir, 'pretrained_models', 'Reflection_reg.pth')
69
+
70
+ download_pretrained_model(cldm_weight_path)
71
+ download_pretrained_model(ppp_weight_path)
72
+ download_pretrained_model(reg_net_path)
73
+
74
+ self.device = check_gpu_device(device)
75
+ self.build_pretrained_model(ppp_weight_path, cldm_weight_path, reg_net_path)
76
+ self.build_data_transformer()
77
+
78
+ def build_pretrained_model(self, ppp_weight_path, cldm_weight_path, reg_weight_path):
79
+ config_path = '../libcom/reflection_generation/source/cldm_v15.yaml'
80
+ config = OmegaConf.load(config_path)
81
+ config.model.params.reg_net_path = reg_weight_path
82
+ clip_path = os.path.join(model_dir, '../shared_pretrained_models', 'openai-clip-vit-large-patch14')
83
+ download_entire_folder(clip_path)
84
+ config.model.params.cond_stage_config.params.version = clip_path
85
+ model = PostProcess(
86
+ model_path=config,
87
+ control_net_path=cldm_weight_path,
88
+ infe_steps=50
89
+ )
90
+ model.load_state_dict(load_state_dict(ppp_weight_path, location='cpu'), strict=False)
91
+ self.model = model.to(self.device).eval()
92
+
93
+ def build_data_transformer(self):
94
+ self.image_size = 512
95
+ self.transformer = transforms.Compose([
96
+ transforms.Resize((self.image_size, self.image_size)),
97
+ transforms.ToTensor(),
98
+ ])
99
+
100
+ def inputs_preprocess(self, composite_image, composite_mask):
101
+ img = read_image_pil(composite_image)
102
+ img = self.transformer(img).permute(1, 2, 0)
103
+ target = img * 2 - 1
104
+
105
+ mask = read_mask_pil(composite_mask)
106
+ mask_np = np.array(mask)
107
+ mask_np = cv2.resize(mask_np, (512, 512))
108
+ _, fg_instance_thresh = cv2.threshold(mask_np, 128, 255, cv2.THRESH_BINARY)
109
+ contours_instance, _ = cv2.findContours(fg_instance_thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
110
+ merged_contour_points_instance = np.concatenate(contours_instance)
111
+ rect_instance = cv2.minAreaRect(merged_contour_points_instance)
112
+ (x, y), (w, h), theta = rect_instance
113
+ if w < h:
114
+ w, h = h, w
115
+ theta += 90
116
+ bbx_instance = np.array([x, y, w + 1, h + 1, theta]).astype(int)
117
+ bbx_instance = torch.tensor(bbx_instance).unsqueeze(0)
118
+
119
+ mask = self.transformer(mask).permute(1, 2, 0)
120
+ img, mask, target = img.unsqueeze(0), mask.unsqueeze(0), target.unsqueeze(0)
121
+
122
+ cat_img = torch.cat([img, mask], dim=-1)
123
+ mask_embeddings = torch.zeros((1, 64, 2048), dtype=torch.float32)
124
+ bbx_region = torch.zeros((1, 512, 512), dtype=torch.float32)
125
+
126
+ object_mask = mask[:,:,:,0]
127
+
128
+ return target.to(self.device), mask.to(self.device), cat_img.to(self.device), object_mask.to(self.device), \
129
+ bbx_instance.to(self.device), mask_embeddings.to(self.device), bbx_region.to(self.device)
130
+
131
+ def outputs_postprocess(self, outputs):
132
+ output = outputs
133
+ adjusted_img = output[:, :, :, :3]
134
+ adjusted_img = torch.clamp(adjusted_img, -1., 1.)
135
+ adjusted_img = (adjusted_img + 1.0) / 2.0
136
+ adjusted_img = (adjusted_img * 255).int()
137
+ composite_img = adjusted_img
138
+ composite_img = np.array(composite_img.cpu().squeeze(0), dtype=np.uint8)
139
+ composite_img = composite_img[:,:,[2,1,0]]
140
+ return composite_img
141
+
142
+ @torch.no_grad()
143
+ def inf_img(self, inputs):
144
+ target, mask, cat_img, object_mask, bbx_instance, mask_embeddings, bbx_region = inputs
145
+ batch = dict(jpg=target, cls=cat_img, objectmask=object_mask, fg=bbx_instance, bbx=bbx_region, embeddings=mask_embeddings, txt=[''], hint=cat_img)
146
+ images = self.model.model.log_images(batch, use_x_T=True)
147
+ output = images['samples_cfg_scale_9.00'].permute(0,2,3,1)
148
+
149
+ return output
150
+
151
+
152
+ @torch.no_grad()
153
+ def __call__(self, composite_image, composite_mask, number=5, seed=42):
154
+ """
155
+ Generate reflection for foreground object.
156
+
157
+ Args:
158
+ composite_img (str | numpy.ndarray): The path to composite image or composite image in ndarray form.
159
+ composite_mask (str | numpy.ndarray): The path to foreground object mask or foreground object mask in ndarray form.
160
+ number (int): Number of images to be inferenced. default: 5.
161
+ seed: Random Seed is used to reproduce results and same seed will lead to same results.
162
+
163
+ Returns:
164
+ generated_images (list): A list of images with generated foreground reflections. Each image is in ndarray form with a shape of 512x512x3
165
+
166
+ """
167
+ seed_everything(seed)
168
+ inputs = self.inputs_preprocess(composite_image, composite_mask)
169
+ preds = []
170
+ for _ in range(number):
171
+ outputs = self.inf_img(inputs)
172
+ pred = self.outputs_postprocess(outputs)
173
+ preds.append(pred)
174
+ return preds