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,226 @@
1
+ import torch
2
+ import os, sys
3
+ sys.path.insert(0, os.path.dirname(__file__))
4
+ import torch.nn.functional as F
5
+ from torch import nn
6
+ import functools
7
+ import numpy as np
8
+ import cv2
9
+ from PIL import Image
10
+ import torchvision.transforms as transforms
11
+ import math
12
+
13
+ class PartialConv2d(nn.Conv2d):
14
+ def __init__(self, *args, **kwargs):
15
+ # whether the mask is multi-channel or not
16
+ if 'multi_channel' in kwargs:
17
+ self.multi_channel = kwargs['multi_channel']
18
+ kwargs.pop('multi_channel')
19
+ else:
20
+ self.multi_channel = False
21
+
22
+ self.return_mask = True
23
+
24
+ super(PartialConv2d, self).__init__(*args, **kwargs)
25
+
26
+ if self.multi_channel:
27
+ self.weight_maskUpdater = torch.ones(self.out_channels, self.in_channels, self.kernel_size[0],
28
+ self.kernel_size[1])
29
+ else:
30
+ self.weight_maskUpdater = torch.ones(1, 1, self.kernel_size[0], self.kernel_size[1])
31
+
32
+ self.slide_winsize = self.weight_maskUpdater.shape[1] * self.weight_maskUpdater.shape[2] * \
33
+ self.weight_maskUpdater.shape[3]
34
+
35
+ self.last_size = (None, None, None, None)
36
+ self.update_mask = None
37
+ self.mask_ratio = None
38
+
39
+ def forward(self, input, mask_in=None):
40
+ assert len(input.shape) == 4
41
+ if mask_in is not None or self.last_size != tuple(input.shape):
42
+ self.last_size = tuple(input.shape)
43
+
44
+ with torch.no_grad():
45
+ if self.weight_maskUpdater.type() != input.type():
46
+ self.weight_maskUpdater = self.weight_maskUpdater.to(input)
47
+
48
+ if mask_in is None:
49
+ # if mask is not provided, create a mask
50
+ if self.multi_channel:
51
+ mask = torch.ones(input.data.shape[0], input.data.shape[1], input.data.shape[2],
52
+ input.data.shape[3]).to(input)
53
+ else:
54
+ mask = torch.ones(1, 1, input.data.shape[2], input.data.shape[3]).to(input)
55
+ else:
56
+ mask = mask_in
57
+
58
+ self.update_mask = F.conv2d(mask, self.weight_maskUpdater, bias=None, stride=self.stride,
59
+ padding=self.padding, dilation=self.dilation, groups=1)
60
+
61
+ self.mask_ratio = self.slide_winsize / (self.update_mask + 1e-8)
62
+ self.update_mask = torch.clamp(self.update_mask, 0, 1)
63
+ self.mask_ratio = torch.mul(self.mask_ratio, self.update_mask)
64
+
65
+
66
+ raw_out = super(PartialConv2d, self).forward(torch.mul(input, mask) if mask_in is not None else input)
67
+
68
+ if self.bias is not None:
69
+ bias_view = self.bias.view(1, self.out_channels, 1, 1)
70
+ output = torch.mul(raw_out - bias_view, self.mask_ratio) + bias_view
71
+ output = torch.mul(output, self.update_mask)
72
+ else:
73
+ output = torch.mul(raw_out, self.mask_ratio)
74
+
75
+ if self.return_mask:
76
+ return output, self.update_mask
77
+ else:
78
+ return output
79
+
80
+ class StyleEncoder(nn.Module):
81
+ def __init__(self, style_dim, norm_layer=nn.BatchNorm2d):
82
+ super(StyleEncoder, self).__init__()
83
+ if type(norm_layer) == functools.partial: # no need to use bias as BatchNorm2d has affine parameters
84
+ use_bias = norm_layer.func == nn.InstanceNorm2d
85
+ else:
86
+ use_bias = norm_layer == nn.InstanceNorm2d
87
+ ndf=64
88
+ n_layers=6
89
+ kw = 3
90
+ padw = 0
91
+ self.conv1f = PartialConv2d(3, ndf, kernel_size=kw, stride=2, padding=padw)
92
+ self.relu1 = nn.ReLU(True)
93
+ nf_mult = 1
94
+ nf_mult_prev = 1
95
+
96
+ n = 1
97
+ nf_mult_prev = nf_mult
98
+ nf_mult = min(2 ** n, 8)
99
+ self.conv2f = PartialConv2d(ndf * nf_mult_prev, ndf * nf_mult, kernel_size=kw, stride=2, padding=padw, bias=use_bias)
100
+ self.norm2f = norm_layer(ndf * nf_mult)
101
+ self.relu2 = nn.ReLU(True)
102
+
103
+ n = 2
104
+ nf_mult_prev = nf_mult
105
+ nf_mult = min(2 ** n, 8)
106
+ self.conv3f = PartialConv2d(ndf * nf_mult_prev, ndf * nf_mult, kernel_size=kw, stride=2, padding=padw, bias=use_bias)
107
+ self.norm3f = norm_layer(ndf * nf_mult)
108
+ self.relu3 = nn.ReLU(True)
109
+
110
+ n = 3
111
+ nf_mult_prev = nf_mult
112
+ nf_mult = min(2 ** n, 8)
113
+ self.conv4f = PartialConv2d(ndf * nf_mult_prev, ndf * nf_mult, kernel_size=kw, stride=2, padding=padw, bias=use_bias)
114
+ self.norm4f = norm_layer(ndf * nf_mult)
115
+ self.relu4 = nn.ReLU(True)
116
+
117
+ n = 4
118
+ nf_mult_prev = nf_mult
119
+ nf_mult = min(2 ** n, 8)
120
+ self.conv5f = PartialConv2d(ndf * nf_mult_prev, ndf * nf_mult, kernel_size=kw, stride=2, padding=padw, bias=use_bias)
121
+ self.avg_pooling = nn.AdaptiveAvgPool2d(1)
122
+ self.convs = nn.Conv2d(ndf * nf_mult, style_dim, kernel_size=1, stride=1)
123
+
124
+ def forward(self, input, mask):
125
+ """Standard forward."""
126
+ xb = input
127
+ mb = mask
128
+
129
+ xb, mb = self.conv1f(xb, mb)
130
+ xb = self.relu1(xb)
131
+ xb, mb = self.conv2f(xb, mb)
132
+ xb = self.norm2f(xb)
133
+ xb = self.relu2(xb)
134
+ xb, mb = self.conv3f(xb, mb)
135
+ xb = self.norm3f(xb)
136
+ xb = self.relu3(xb)
137
+ xb, mb = self.conv4f(xb, mb)
138
+ xb = self.norm4f(xb)
139
+ xb = self.relu4(xb)
140
+ xb, mb = self.conv5f(xb, mb)
141
+ xb = self.avg_pooling(xb)
142
+ s = self.convs(xb)
143
+ s = torch.squeeze(s)
144
+ return s
145
+
146
+ class InharmonyLevelPredictor:
147
+ def __init__(self, device):
148
+ self.device = device
149
+ self.model = self.build_inharmony_predictor()
150
+ image_size = 256
151
+ self.transform = transforms.Compose([
152
+ transforms.Resize((image_size, image_size)),
153
+ transforms.ToTensor(),
154
+ transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
155
+ ])
156
+ self.mask_transform = transforms.Compose([
157
+ transforms.Resize((image_size, image_size)),
158
+ transforms.ToTensor(),
159
+ ])
160
+
161
+ def build_inharmony_predictor(self):
162
+ model = StyleEncoder(style_dim=16)
163
+ weight = os.path.join(os.path.dirname(__file__), 'net_E.pth')
164
+ assert os.path.exists(weight), weight
165
+ print('Build InharmonyLevel Predictor')
166
+ model.load_state_dict(torch.load(weight, map_location='cpu'))
167
+ model = model.eval().to(self.device)
168
+ return model
169
+
170
+ def data_preprocess(self, image, mask):
171
+ if mask.max() > 1.:
172
+ fg_mask = mask.astype(np.float32) / 255.
173
+ else:
174
+ fg_mask = mask.astype(np.float32)
175
+ bg_mask = 1 - fg_mask
176
+ fg_mask = self.mask_transform(Image.fromarray(fg_mask))
177
+ fg_mask = fg_mask.unsqueeze(0).to(self.device)
178
+ bg_mask = self.mask_transform(Image.fromarray(bg_mask))
179
+ bg_mask = bg_mask.unsqueeze(0).to(self.device)
180
+
181
+ image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
182
+ image = self.transform(Image.fromarray(image))
183
+ image = image.unsqueeze(0).to(self.device)
184
+ return image, bg_mask, fg_mask
185
+
186
+ def Normalized_Euclidean_distance(self, vec1, vec2):
187
+ vec1 = vec1.cpu().numpy()
188
+ vec2 = vec2.cpu().numpy()
189
+ norm_vec1 = vec1 / np.sqrt(np.maximum(np.sum(vec1**2), 1e-12))
190
+ norm_vec2 = vec2 / np.sqrt(np.maximum(np.sum(vec2**2), 1e-12))
191
+ cos_sim = (norm_vec1 * norm_vec2).sum()
192
+ angle_sim = np.arccos(cos_sim) / np.pi
193
+ dist = np.sqrt(1 - angle_sim)
194
+ # print('norm_vec1**2', (norm_vec1**2).sum())
195
+ # print('norm_vec2**2', (norm_vec2**2).sum())
196
+ # print('v1 * c2', torch.sum(norm_vec1 * norm_vec2))
197
+ # print('dist', torch.sqrt(2 - torch.sum(2 * norm_vec1 * norm_vec2)))
198
+ return dist
199
+
200
+ def Euclidean_distance(self, vec1, vec2):
201
+ vec1 = vec1.cpu().numpy()
202
+ vec2 = vec2.cpu().numpy()
203
+ dist = np.sqrt(np.sum((vec1 - vec2)**2))
204
+ return dist
205
+
206
+ def __call__(self, image, mask):
207
+ with torch.no_grad():
208
+ im, bg_mask, fg_mask = self.data_preprocess(image, mask)
209
+ bg_sty_vector = self.model(im, bg_mask)
210
+ fg_sty_vector = self.model(im, fg_mask)
211
+ # norm_dist = self.Normalized_Euclidean_distance(bg_sty_vector, fg_sty_vector)
212
+ # norm_dist = round(norm_dist, 2)
213
+ eucl_dist = self.Euclidean_distance(bg_sty_vector, fg_sty_vector)
214
+ # convert distance to harmony level which lies in 0 and 1
215
+ harm_level = math.exp(-0.04212 * eucl_dist)
216
+ harm_level = round(harm_level, 2)
217
+ return harm_level
218
+
219
+
220
+ if __name__ == "__main__":
221
+ device = torch.device("cuda:0")
222
+ model = InharmonyLevelPredictor(device)
223
+ img = np.random.randint(0, 255, (256, 256, 3)).astype(np.uint8)
224
+ mask = np.random.randint(0, 255, (256, 256)).astype(np.uint8)
225
+ local_pre = model(img, mask)
226
+ print(local_pre)
@@ -0,0 +1,4 @@
1
+ # change to your lib name
2
+ from .image_harmonization import ImageHarmonizationModel
3
+
4
+ __all__ = ['ImageHarmonizationModel']
@@ -0,0 +1,193 @@
1
+ import torch
2
+ import torchvision
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
+ import torchvision.transforms as transforms
8
+ import sys
9
+ import cv2
10
+ import numpy as np
11
+ from PIL import Image
12
+ from torchvision.transforms import ToTensor
13
+
14
+
15
+ cur_dir = os.path.dirname(os.path.abspath(__file__))
16
+ src_dir = os.path.join(cur_dir, 'source/src')
17
+ if src_dir not in sys.path:
18
+ sys.path.insert(0, src_dir)
19
+
20
+ from libcom.image_harmonization.source.pct_net import *
21
+
22
+ from libcom.image_harmonization.source.src.lbm.inference import get_model
23
+ from diffusers import FlowMatchEulerDiscreteScheduler
24
+
25
+ # =======================================================
26
+
27
+ model_dir = os.environ.get('LIBCOM_MODEL_DIR',cur_dir)
28
+
29
+ model_set = ['PCTNet', 'LBM']
30
+
31
+ class ImageHarmonizationModel:
32
+ """
33
+ Image harmonization model.
34
+
35
+ Args:
36
+ device (str | torch.device): gpu id
37
+ model_type (str): predefined model type, 'PCTNet' or 'LBM'
38
+ kwargs (dict): other parameters for building model.
39
+ For LBM, you can set 'ckpt_path' here.
40
+
41
+ Examples:
42
+ >>> from libcom import ImageHarmonizationModel
43
+ >>> import cv2
44
+ >>> import os
45
+ >>> import numpy as np
46
+ >>> from PIL import Image
47
+ >>> #Use PCTNet
48
+ >>> PCTNet = ImageHarmonizationModel(device=0, model_type='PCTNet')
49
+ >>> comp_img1 = '../tests/source/composite/comp1_PCTNet.jpg'
50
+ >>> comp_mask1 = '../tests/source/composite_mask/mask1_PCTNet.png'
51
+ >>> PCT_result1 = PCTNet(comp_img1, comp_mask1)
52
+ >>> cv2.imwrite('../docs/_static/image/image_harmonization_PCT_result1.jpg', np.concatenate([cv2.imread(comp_img1), cv2.imread(comp_mask1), PCT_result1],axis=1))
53
+
54
+ >>> #Use LBM
55
+ >>> LBM = ImageHarmonizationModel(device=0, model_type='LBM')
56
+ >>> comp_img = '../tests/source/composite/1.jpg'
57
+ >>> comp_mask = '../tests/source/composite_mask/1.png'
58
+ >>> LBM_result = LBM(comp_img, comp_mask, steps=4)
59
+ >>> cv2.imwrite('../docs/_static/image/image_harmonization_LBM_result.jpg', np.concatenate([cv2.imread(comp_img), cv2.imread(comp_mask), LBM_result],axis=1))
60
+
61
+ Expected result:
62
+
63
+ .. image:: _static/image/image_harmonization_PCT_result1.jpg
64
+ .. image:: _static/image/image_harmonization_LBM_result.jpg
65
+
66
+ """
67
+ def __init__(self, device=0, model_type='PCTNet', **kwargs):
68
+ assert model_type in model_set, f'Not implementation for {model_type}'
69
+ self.model_type = model_type
70
+ self.option = kwargs
71
+ self.device = check_gpu_device(device)
72
+
73
+ if self.model_type == 'PCTNet':
74
+
75
+ weight_path = os.path.join(model_dir, 'pretrained_models', 'PCTNet.pth')
76
+ download_pretrained_model(weight_path)
77
+ lut_path = os.path.join(model_dir, 'pretrained_models', 'IdentityLUT33.txt')
78
+ download_pretrained_model(lut_path)
79
+ self.build_pretrained_model(weight_path)
80
+ self.build_data_transformer()
81
+
82
+ elif self.model_type == 'LBM':
83
+ lbm_dir = os.path.join(model_dir, 'pretrained_models', 'lbm_ckpt')
84
+ download_entire_folder(lbm_dir)
85
+ self.build_pretrained_model(lbm_dir)
86
+
87
+ def build_pretrained_model(self, weight_path):
88
+ if self.model_type == 'LBM':
89
+ self.model = get_model(weight_path, torch_dtype=torch.bfloat16, device=self.device)
90
+ self.model.bridge_noise_sigma = 0.005
91
+ if self.model.sampling_noise_scheduler is None:
92
+ self.model.sampling_noise_scheduler = FlowMatchEulerDiscreteScheduler.from_pretrained(
93
+ "stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler"
94
+ )
95
+ self.model.eval()
96
+ else:
97
+ model = PCTNet()
98
+ model.load_state_dict(torch.load(weight_path, map_location='cpu', weights_only=True))
99
+ self.model = model.to(self.device).eval()
100
+
101
+ def build_data_transformer(self):
102
+ self.transformer = transforms.Compose([
103
+ transforms.ToTensor(),
104
+ ])
105
+
106
+ def inputs_preprocess(self, composite_image, composite_mask):
107
+ img = read_image_opencv(composite_image)
108
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
109
+ mask = read_mask_opencv(composite_mask) / 255.0
110
+ img_lr = cv2.resize(img, (256, 256))
111
+ mask_lr = cv2.resize(mask, (256, 256))
112
+
113
+ #to tensor
114
+ img = self.transformer(img).float().to(self.device)
115
+ mask = self.transformer(mask).float().to(self.device)
116
+ img_lr = self.transformer(img_lr).float().to(self.device)
117
+ mask_lr = self.transformer(mask_lr).float().to(self.device)
118
+ return img, mask, img_lr, mask_lr
119
+
120
+ def outputs_postprocess(self, outputs):
121
+ if len(outputs.shape) == 4:
122
+ outputs = outputs.squeeze(0)
123
+ outputs = (torch.clamp(255.0 * outputs.permute(1, 2, 0), 0, 255)).cpu().numpy()
124
+ outputs = cv2.cvtColor(outputs, cv2.COLOR_RGB2BGR)
125
+ return outputs
126
+
127
+ @torch.no_grad()
128
+ def __call__(self, composite_image, composite_mask, **kwargs):
129
+ """
130
+ Given a composite image and a foreground mask, perform harmonization on the foreground.
131
+
132
+ Args:
133
+ composite_image (str | numpy.ndarray): The path to composite image or the compposite image in ndarray form.
134
+ composite_mask (str | numpy.ndarray): Mask of composite image which indicates the foreground object region in the composite image.
135
+ **kwargs: Extra parameters for inference (e.g., steps=4, resolution=1024 for LBM).
136
+
137
+ Returns:
138
+ harmonized_image (np.array): The harmonized result.
139
+
140
+ """
141
+ if self.model_type == 'LBM':
142
+ return self._inference_lbm(composite_image, composite_mask, **kwargs)
143
+
144
+ img, mask, img_lr, mask_lr = self.inputs_preprocess(composite_image, composite_mask)
145
+
146
+ outputs = self.model(img_lr, img, mask_lr, mask)
147
+ preds = self.outputs_postprocess(outputs)
148
+ return preds
149
+
150
+ @torch.no_grad()
151
+ def _inference_lbm(self, composite_image, composite_mask, **kwargs):
152
+ steps = kwargs.get('steps', self.option.get('steps', 4))
153
+ inference_size = kwargs.get('resolution', self.option.get('resolution', 1024))
154
+ latent_size = inference_size // 8
155
+
156
+ if isinstance(composite_image, str):
157
+ src_raw = Image.open(composite_image).convert("RGB")
158
+ else:
159
+ src_raw = Image.fromarray(cv2.cvtColor(composite_image, cv2.COLOR_BGR2RGB))
160
+
161
+ if isinstance(composite_mask, str):
162
+ mask_raw = Image.open(composite_mask).convert("L")
163
+ else:
164
+ if len(composite_mask.shape) == 3:
165
+ composite_mask = composite_mask[:, :, 0]
166
+ mask_raw = Image.fromarray(composite_mask).convert("L")
167
+
168
+ ori_w, ori_h = src_raw.size
169
+
170
+ src_resized = src_raw.resize((inference_size, inference_size), Image.BILINEAR)
171
+ src_t = (ToTensor()(src_resized).unsqueeze(0) * 2 - 1).to(self.device, dtype=torch.bfloat16)
172
+ batch = {"source_image_paste": src_t}
173
+
174
+ mask_latent_img = mask_raw.resize((latent_size, latent_size), Image.BILINEAR)
175
+ mask_t = ToTensor()(mask_latent_img).unsqueeze(0).to(self.device, dtype=torch.bfloat16)
176
+
177
+ z_source = self.model.vae.encode(batch["source_image_paste"])
178
+
179
+ output_tensor = self.model.sample(
180
+ z=z_source,
181
+ num_steps=int(steps),
182
+ conditioner_inputs=batch,
183
+ max_samples=1,
184
+ mask=mask_t
185
+ ).clamp(-1, 1)
186
+
187
+ res_tensor = (output_tensor[0].float().cpu() + 1) / 2
188
+ preds = (torch.clamp(255.0 * res_tensor.permute(1, 2, 0), 0, 255)).numpy().astype(np.uint8)
189
+ preds = cv2.cvtColor(preds, cv2.COLOR_RGB2BGR)
190
+
191
+ preds = cv2.resize(preds, (ori_w, ori_h))
192
+
193
+ return preds
File without changes