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,511 @@
1
+ from torch import nn
2
+ from .cldm.cldm import ControlLDM
3
+ import torch
4
+ import pytorch_lightning as pl
5
+ import os
6
+ import numpy as np
7
+ from PIL import Image
8
+ from .ldm.modules.diffusionmodules.openaimodel import (ResBlock, TimestepEmbedSequential, AttentionBlock,
9
+ Upsample, SpatialTransformer, Downsample)
10
+ from .ldm.modules.diffusionmodules.util import (
11
+ checkpoint,
12
+ conv_nd,
13
+ linear,
14
+ avg_pool_nd,
15
+ zero_module,
16
+ normalization,
17
+ timestep_embedding,
18
+ )
19
+ from .ldm.util import exists
20
+
21
+ class Post_Process_Net(nn.Module):
22
+ def __init__(
23
+ self,
24
+ image_size,
25
+ in_channels,
26
+ model_channels,
27
+ out_channels,
28
+ num_res_blocks,
29
+ attention_resolutions,
30
+ dropout=0,
31
+ channel_mult=(1, 2, 4, 8),
32
+ conv_resample=True,
33
+ dims=2,
34
+ num_classes=None,
35
+ use_checkpoint=False,
36
+ use_fp16=False,
37
+ num_heads=-1,
38
+ num_head_channels=-1,
39
+ num_heads_upsample=-1,
40
+ use_scale_shift_norm=False,
41
+ resblock_updown=False,
42
+ use_new_attention_order=False,
43
+ use_spatial_transformer=False, # custom transformer support
44
+ transformer_depth=1, # custom transformer support
45
+ context_dim=None, # custom transformer support
46
+ n_embed=None, # custom support for prediction of discrete ids into codebook of first stage vq model
47
+ legacy=True,
48
+ disable_self_attentions=None,
49
+ num_attention_blocks=None,
50
+ disable_middle_self_attn=False,
51
+ use_linear_in_transformer=False,
52
+ ):
53
+ super().__init__()
54
+ self.image_size = image_size
55
+ self.in_channels = in_channels
56
+ self.model_channels = model_channels
57
+ self.out_channels = out_channels
58
+ if isinstance(num_res_blocks, int):
59
+ self.num_res_blocks = len(channel_mult) * [num_res_blocks]
60
+ else:
61
+ if len(num_res_blocks) != len(channel_mult):
62
+ raise ValueError("provide num_res_blocks either as an int (globally constant) or "
63
+ "as a list/tuple (per-level) with the same length as channel_mult")
64
+ self.num_res_blocks = num_res_blocks
65
+ if disable_self_attentions is not None:
66
+ # should be a list of booleans, indicating whether to disable self-attention in TransformerBlocks or not
67
+ assert len(disable_self_attentions) == len(channel_mult)
68
+ if num_attention_blocks is not None:
69
+ assert len(num_attention_blocks) == len(self.num_res_blocks)
70
+ assert all(map(lambda i: self.num_res_blocks[i] >= num_attention_blocks[i], range(len(num_attention_blocks))))
71
+ print(f"Constructor of UNetModel received num_attention_blocks={num_attention_blocks}. "
72
+ f"This option has LESS priority than attention_resolutions {attention_resolutions}, "
73
+ f"i.e., in cases where num_attention_blocks[i] > 0 but 2**i not in attention_resolutions, "
74
+ f"attention will still not be set.")
75
+
76
+ self.attention_resolutions = attention_resolutions
77
+ self.dropout = dropout
78
+ self.channel_mult = channel_mult
79
+ self.conv_resample = conv_resample
80
+ self.num_classes = num_classes
81
+ self.use_checkpoint = use_checkpoint
82
+ self.dtype = torch.float16 if use_fp16 else torch.float32
83
+ self.num_heads = num_heads
84
+ self.num_head_channels = num_head_channels
85
+ self.num_heads_upsample = num_heads_upsample
86
+ self.predict_codebook_ids = n_embed is not None
87
+
88
+ time_embed_dim = model_channels * 4
89
+ self.time_embed = nn.Sequential(
90
+ linear(model_channels, time_embed_dim),
91
+ nn.SiLU(),
92
+ linear(time_embed_dim, time_embed_dim),
93
+ )
94
+
95
+ if self.num_classes is not None:
96
+ if isinstance(self.num_classes, int):
97
+ self.label_emb = nn.Embedding(num_classes, time_embed_dim)
98
+ elif self.num_classes == "continuous":
99
+ print("setting up linear c_adm embedding layer")
100
+ self.label_emb = nn.Linear(1, time_embed_dim)
101
+ else:
102
+ raise ValueError()
103
+
104
+ self.input_blocks = nn.ModuleList(
105
+ [
106
+ TimestepEmbedSequential(
107
+ conv_nd(dims, in_channels, model_channels, 3, padding=1)
108
+ )
109
+ ]
110
+ )
111
+ self._feature_size = model_channels
112
+ input_block_chans = [model_channels]
113
+ ch = model_channels
114
+ ds = 1
115
+ for level, mult in enumerate(channel_mult):
116
+ for nr in range(self.num_res_blocks[level]):
117
+ layers = [
118
+ ResBlock(
119
+ ch,
120
+ time_embed_dim,
121
+ dropout,
122
+ out_channels=mult * model_channels,
123
+ dims=dims,
124
+ use_checkpoint=use_checkpoint,
125
+ use_scale_shift_norm=use_scale_shift_norm,
126
+ )
127
+ ]
128
+ ch = mult * model_channels
129
+ if ds in attention_resolutions:
130
+ if num_head_channels == -1:
131
+ dim_head = ch // num_heads
132
+ else:
133
+ num_heads = ch // num_head_channels
134
+ dim_head = num_head_channels
135
+ if legacy:
136
+ #num_heads = 1
137
+ dim_head = ch // num_heads if use_spatial_transformer else num_head_channels
138
+ if exists(disable_self_attentions):
139
+ disabled_sa = disable_self_attentions[level]
140
+ else:
141
+ disabled_sa = False
142
+
143
+ if not exists(num_attention_blocks) or nr < num_attention_blocks[level]:
144
+ layers.append(
145
+ AttentionBlock(
146
+ ch,
147
+ use_checkpoint=use_checkpoint,
148
+ num_heads=num_heads,
149
+ num_head_channels=dim_head,
150
+ use_new_attention_order=use_new_attention_order,
151
+ ) if not use_spatial_transformer else SpatialTransformer(
152
+ ch, num_heads, dim_head, depth=transformer_depth, context_dim=context_dim,
153
+ disable_self_attn=disabled_sa, use_linear=use_linear_in_transformer,
154
+ use_checkpoint=use_checkpoint
155
+ )
156
+ )
157
+ self.input_blocks.append(TimestepEmbedSequential(*layers))
158
+ self._feature_size += ch
159
+ input_block_chans.append(ch)
160
+ if level != len(channel_mult) - 1:
161
+ out_ch = ch
162
+ if resblock_updown:
163
+ stage_last_block = ResBlock(
164
+ ch,
165
+ time_embed_dim,
166
+ dropout,
167
+ out_channels=out_ch,
168
+ dims=dims,
169
+ use_checkpoint=use_checkpoint,
170
+ use_scale_shift_norm=use_scale_shift_norm,
171
+ down=True,
172
+ )
173
+ else:
174
+ stage_last_block = Downsample(
175
+ ch, conv_resample, dims=dims, out_channels=out_ch
176
+ )
177
+ self.input_blocks.append(
178
+ TimestepEmbedSequential(stage_last_block)
179
+ )
180
+ ch = out_ch
181
+ input_block_chans.append(ch)
182
+ ds *= 2
183
+ self._feature_size += ch
184
+
185
+ if num_head_channels == -1:
186
+ dim_head = ch // num_heads
187
+ else:
188
+ num_heads = ch // num_head_channels
189
+ dim_head = num_head_channels
190
+ if legacy:
191
+ #num_heads = 1
192
+ dim_head = ch // num_heads if use_spatial_transformer else num_head_channels
193
+ self.middle_block = TimestepEmbedSequential(
194
+ ResBlock(
195
+ ch,
196
+ time_embed_dim,
197
+ dropout,
198
+ dims=dims,
199
+ use_checkpoint=use_checkpoint,
200
+ use_scale_shift_norm=use_scale_shift_norm,
201
+ ),
202
+ AttentionBlock(
203
+ ch,
204
+ use_checkpoint=use_checkpoint,
205
+ num_heads=num_heads,
206
+ num_head_channels=dim_head,
207
+ use_new_attention_order=use_new_attention_order,
208
+ ) if not use_spatial_transformer else SpatialTransformer( # always uses a self-attn
209
+ ch, num_heads, dim_head, depth=transformer_depth, context_dim=context_dim,
210
+ disable_self_attn=disable_middle_self_attn, use_linear=use_linear_in_transformer,
211
+ use_checkpoint=use_checkpoint
212
+ ),
213
+ ResBlock(
214
+ ch,
215
+ time_embed_dim,
216
+ dropout,
217
+ dims=dims,
218
+ use_checkpoint=use_checkpoint,
219
+ use_scale_shift_norm=use_scale_shift_norm,
220
+ ),
221
+ )
222
+ self._feature_size += ch
223
+
224
+ self.output_blocks1 = nn.ModuleList([])
225
+ self.output_blocks2 = nn.ModuleList([])
226
+ for level, mult in list(enumerate(channel_mult))[::-1]:
227
+ for i in range(self.num_res_blocks[level] + 1):
228
+ ich = input_block_chans.pop()
229
+ layers1 = [
230
+ ResBlock(
231
+ ch + ich,
232
+ time_embed_dim,
233
+ dropout,
234
+ out_channels=model_channels * mult,
235
+ dims=dims,
236
+ use_checkpoint=use_checkpoint,
237
+ use_scale_shift_norm=use_scale_shift_norm,
238
+ )
239
+ ]
240
+ layers2 = [
241
+ ResBlock(
242
+ ch + ich,
243
+ time_embed_dim,
244
+ dropout,
245
+ out_channels=model_channels * mult,
246
+ dims=dims,
247
+ use_checkpoint=use_checkpoint,
248
+ use_scale_shift_norm=use_scale_shift_norm,
249
+ )
250
+ ]
251
+ ch = model_channels * mult
252
+ if ds in attention_resolutions:
253
+ if num_head_channels == -1:
254
+ dim_head = ch // num_heads
255
+ else:
256
+ num_heads = ch // num_head_channels
257
+ dim_head = num_head_channels
258
+ if legacy:
259
+ #num_heads = 1
260
+ dim_head = ch // num_heads if use_spatial_transformer else num_head_channels
261
+ if exists(disable_self_attentions):
262
+ disabled_sa = disable_self_attentions[level]
263
+ else:
264
+ disabled_sa = False
265
+
266
+ if not exists(num_attention_blocks) or i < num_attention_blocks[level]:
267
+ layers1.append(
268
+ AttentionBlock(
269
+ ch,
270
+ use_checkpoint=use_checkpoint,
271
+ num_heads=num_heads_upsample,
272
+ num_head_channels=dim_head,
273
+ use_new_attention_order=use_new_attention_order,
274
+ ) if not use_spatial_transformer else SpatialTransformer(
275
+ ch, num_heads, dim_head, depth=transformer_depth, context_dim=context_dim,
276
+ disable_self_attn=disabled_sa, use_linear=use_linear_in_transformer,
277
+ use_checkpoint=use_checkpoint
278
+ )
279
+ )
280
+ layers2.append(
281
+ AttentionBlock(
282
+ ch,
283
+ use_checkpoint=use_checkpoint,
284
+ num_heads=num_heads_upsample,
285
+ num_head_channels=dim_head,
286
+ use_new_attention_order=use_new_attention_order,
287
+ ) if not use_spatial_transformer else SpatialTransformer(
288
+ ch, num_heads, dim_head, depth=transformer_depth, context_dim=context_dim,
289
+ disable_self_attn=disabled_sa, use_linear=use_linear_in_transformer,
290
+ use_checkpoint=use_checkpoint
291
+ )
292
+ )
293
+ if level and i == self.num_res_blocks[level]:
294
+ out_ch = ch
295
+ layers1.append(ResBlock(ch,
296
+ time_embed_dim,
297
+ dropout,
298
+ out_channels=out_ch,
299
+ dims=dims,
300
+ use_checkpoint=use_checkpoint,
301
+ use_scale_shift_norm=use_scale_shift_norm,
302
+ up=True,
303
+ ) if resblock_updown else
304
+ Upsample(ch, conv_resample, dims=dims, out_channels=out_ch))
305
+ layers2.append(ResBlock(ch,
306
+ time_embed_dim,
307
+ dropout,
308
+ out_channels=out_ch,
309
+ dims=dims,
310
+ use_checkpoint=use_checkpoint,
311
+ use_scale_shift_norm=use_scale_shift_norm,
312
+ up=True,
313
+ ) if resblock_updown else
314
+ Upsample(ch, conv_resample, dims=dims, out_channels=out_ch))
315
+ ds //= 2
316
+ self.output_blocks1.append(TimestepEmbedSequential(*layers1))
317
+ self.output_blocks2.append(TimestepEmbedSequential(*layers2))
318
+ self._feature_size += ch
319
+
320
+ self.out1 = nn.Sequential(
321
+ normalization(ch),
322
+ nn.SiLU(),
323
+ zero_module(conv_nd(dims, model_channels, 3, 3, padding=1)),
324
+ )
325
+ self.out2 = nn.Sequential(
326
+ normalization(ch),
327
+ nn.SiLU(),
328
+ zero_module(conv_nd(dims, model_channels, 1, 3, padding=1)),
329
+ )
330
+ if self.predict_codebook_ids:
331
+ self.id_predictor = nn.Sequential(
332
+ normalization(ch),
333
+ conv_nd(dims, model_channels, n_embed, 1),
334
+ #nn.LogSoftmax(dim=1) # change to cross_entropy and produce non-normalized logits
335
+ )
336
+
337
+ def forward(self, x, timesteps=None, context=None, y=None,**kwargs):
338
+ """
339
+ Apply the model to an input batch.
340
+ :param x: an [N x C x ...] Tensor of inputs.
341
+ :param timesteps: a 1-D batch of timesteps.
342
+ :param context: conditioning plugged in via crossattn
343
+ :param y: an [N] Tensor of labels, if class-conditional.
344
+ :return: an [N x C x ...] Tensor of outputs.
345
+ """
346
+ assert (y is not None) == (
347
+ self.num_classes is not None
348
+ ), "must specify y if and only if the model is class-conditional"
349
+ hs = []
350
+ t_emb = timestep_embedding(timesteps, self.model_channels, repeat_only=False)
351
+ emb = self.time_embed(t_emb)
352
+
353
+ if self.num_classes is not None:
354
+ assert y.shape[0] == x.shape[0]
355
+ emb = emb + self.label_emb(y)
356
+
357
+ h = x.type(self.dtype)
358
+ for module in self.input_blocks:
359
+ h = module(h, emb, context)
360
+ hs.append(h)
361
+ h = self.middle_block(h, emb, context)
362
+ h1 = h2 = h
363
+ for module1, module2 in zip(self.output_blocks1, self.output_blocks2):
364
+ pre_h = hs.pop()
365
+ h1 = torch.cat([h1, pre_h], dim=1)
366
+ h1 = module1(h1, emb, context)
367
+ h2 = torch.cat([h2, pre_h], dim=1)
368
+ h2 = module2(h2, emb, context)
369
+ h1 = h1.type(x.dtype)
370
+ h2 = h2.type(x.dtype)
371
+ return torch.cat([self.out1(h1), self.out2(h2)], dim=1)
372
+
373
+
374
+ class PostProcess(pl.LightningModule):
375
+ def __init__(self, infe_steps=50, *args, **kwargs):
376
+ super().__init__(*args, **kwargs)
377
+ self.post_process_net = Post_Process_Net(image_size=256,
378
+ in_channels=7,
379
+ out_channels=4,
380
+ model_channels=96,
381
+ attention_resolutions=[],
382
+ num_res_blocks=2,
383
+ channel_mult=[ 1, 2, 2, 4 ],
384
+ num_head_channels=64,
385
+ use_spatial_transformer=False,
386
+ use_linear_in_transformer=True,
387
+ transformer_depth=1,
388
+ context_dim=320,
389
+ legacy=False,
390
+ use_checkpoint=True)
391
+ self.learning_rate = 1e-5
392
+ self.model = None
393
+ self.infe_steps = infe_steps
394
+ self.generated_image_path = "/data/youjunqi/Foreground-Reconstruction/output"
395
+
396
+ def training_step(self, batch, batch_idx):
397
+ self.post_process_net.train()
398
+ # b,h,w,c
399
+ comp_img_scaled = batch['hint'][:, :, :, :3]
400
+ gt_mask_scaled = batch["gt_mask"]
401
+ gt_img_scaled = batch['jpg']
402
+ obj_mask = batch['hint'][:, :, :, 3:]
403
+ comp_img, gt_mask, gt_img = restore_img(comp_img_scaled, gt_mask_scaled, gt_img_scaled)
404
+ batch_size = gt_mask.shape[0]
405
+
406
+ with torch.no_grad():
407
+ if os.path.exists(os.path.join(self.generated_image_path, batch['name'][0])):
408
+ images = []
409
+ for name in batch['name']:
410
+ img_path = os.path.join(self.generated_image_path, name)
411
+ image = Image.open(img_path).convert('RGB').resize((256, 256),Image.NEAREST)
412
+ image = np.array(image)
413
+ images.append(torch.tensor(image[None, :, : ,:]))
414
+ image = torch.clamp(torch.concat(images, dim=0).to(comp_img.device) + 10, 0, 255)
415
+ image_scaled = (image / 127.5) - 1
416
+ else:
417
+ images = self.model.log_images(batch, mode='pndm', input=(comp_img_scaled*2-1).permute(0,3,1,2),
418
+ ddim_steps=self.infe_steps, add_noise_strength=1)
419
+ image_scaled = images['samples_cfg_scale_9.00'].permute(0,2,3,1)
420
+ image = torch.clamp(image_scaled, -1., 1.)
421
+ image = (image + 1.0) / 2.0
422
+ image = (image * 255).int() # bchw -> bhwc
423
+ for i in range(batch_size):
424
+ image_to_save = np.array(image[i].detach().cpu(), dtype=np.uint8)
425
+ img_path = os.path.join(self.generated_image_path, batch['name'][i])
426
+ image_to_save = Image.fromarray(image_to_save)
427
+ image_to_save.save(img_path)
428
+ image.to(comp_img.device)
429
+
430
+ input = torch.concat([image_scaled, comp_img_scaled * 2 - 1, obj_mask], dim=-1)
431
+ null_timeteps = torch.zeros(batch_size, device=input.device)
432
+ output = self.post_process_net(input.permute(0,3,1,2), timesteps=null_timeteps)
433
+ output = output.permute(0,2,3,1)
434
+
435
+ pred_mask = output[:, :, :, 3]
436
+ adjusted_img = output[:, :, :, :3]
437
+
438
+ loss1 = nn.functional.l1_loss(pred_mask, gt_mask_scaled * 2 - 1)
439
+ loss2 = nn.functional.l1_loss(adjusted_img, gt_img_scaled, reduction='none')
440
+ loss = loss1 + loss2.mean()
441
+
442
+ return loss
443
+
444
+ def configure_optimizers(self):
445
+ lr = self.learning_rate
446
+ params = list(self.post_process_net.parameters())
447
+ opt = torch.optim.AdamW(params, lr=lr)
448
+ return opt
449
+
450
+ # get pred_mask, adjusted img and new composite img for logging sake
451
+ def get_log(self, batch, batch_idx, log_num=1):
452
+ comp_img_scaled = batch['hint'][:, :, :, :3][:log_num]
453
+ gt_mask_scaled = batch["gt_mask"][:log_num]
454
+ gt_img_scaled = batch['jpg'][:log_num]
455
+ obj_mask = batch['hint'][:, :, :, 3:][:log_num]
456
+ comp_img, gt_mask, gt_img = restore_img(comp_img_scaled, gt_mask_scaled, gt_img_scaled)
457
+ trimed_batch = {}
458
+ for key, dataset in batch.items():
459
+ trimed_batch[key] = dataset[:log_num]
460
+ self.post_process_net.eval()
461
+
462
+ with torch.no_grad():
463
+ if os.path.exists(os.path.join(self.generated_image_path, trimed_batch['name'][0])):
464
+ images = []
465
+ for name in trimed_batch['name']:
466
+ img_path = os.path.join(self.generated_image_path, name)
467
+ image = Image.open(img_path).convert('RGB').resize((256, 256),Image.NEAREST)
468
+ image = np.array(image)
469
+ images.append(torch.tensor(image[None, :, : ,:]))
470
+ image = torch.clamp(torch.concat(images, dim=0).to(comp_img.device) + 10, 0, 255)
471
+ image_scaled = (image / 127.5) - 1
472
+ else:
473
+ images = self.model.log_images(trimed_batch, mode='pndm', input=(comp_img_scaled*2-1).permute(0,3,1,2),
474
+ ddim_steps=self.infe_steps, add_noise_strength=1)
475
+ image_scaled = images['samples_cfg_scale_9.00'].permute(0,2,3,1)
476
+ image = torch.clamp(image_scaled, -1., 1.)
477
+ image = (image + 1.0) / 2.0
478
+ image = (image * 255).int()
479
+
480
+ input = torch.concat([image_scaled, comp_img_scaled * 2 - 1, obj_mask], dim=-1)
481
+ null_timeteps = torch.zeros(log_num, device=input.device)
482
+ output = self.post_process_net(input.permute(0,3,1,2), timesteps=null_timeteps)
483
+ output = output.permute(0,2,3,1)
484
+
485
+ pred_mask = torch.greater_equal(output[:, :, :, 3], -0.1).int()
486
+ adjusted_img = output[:, :, :, :3]
487
+ adjusted_img = torch.clamp(adjusted_img, -1., 1.)
488
+ adjusted_img = (adjusted_img + 1.0) / 2.0
489
+ adjusted_img = (adjusted_img * 255).int()
490
+ new_composite_img = adjusted_img * pred_mask.unsqueeze(3) + (1-pred_mask.unsqueeze(3)) * comp_img
491
+
492
+ self.post_process_net.train()
493
+
494
+ log_info = {"gt_img": gt_img, "gt_mask":gt_mask, "original_pred_img":image, "adjusted_imgs":adjusted_img,
495
+ "new_comp_imgs": new_composite_img, "pred_masks":pred_mask*255}
496
+ for key, k in log_info.items():
497
+ log_info[key] = k.detach().cpu()
498
+
499
+ return log_info
500
+
501
+ @torch.no_grad()
502
+ def restore_img(comp_img, gt_mask, gt_img):
503
+ assert torch.all(torch.greater_equal(comp_img, 0)) and torch.all(torch.less_equal(comp_img, 1)), "wrong scale for comp_img"
504
+ assert torch.all(torch.greater_equal(gt_img, -1) ) and torch.all(torch.less_equal(gt_img, 1)), "wrong scale for gt_img"
505
+ assert torch.all(torch.greater_equal(gt_mask, 0) ) and torch.all(torch.less_equal(gt_mask, 1)), "wrong scale for gt_mask"
506
+
507
+ comp_img = comp_img * 255
508
+ gt_mask = gt_mask * 255
509
+ gt_img = (gt_img + 1) * 127.5
510
+
511
+ return comp_img, gt_mask, gt_img
File without changes