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,82 @@
1
+ import torch
2
+ import torch.nn as nn
3
+ import math
4
+ from torch.utils.checkpoint import checkpoint
5
+
6
+ from transformers import CLIPTokenizer, CLIPModel
7
+
8
+ import open_clip
9
+ import re
10
+ from libcom.painterly_image_harmonization.source.PHDiffusion.ldm.util import default, count_params
11
+
12
+
13
+ class AbstractEncoder(nn.Module):
14
+ def __init__(self):
15
+ super().__init__()
16
+
17
+ def encode(self, *args, **kwargs):
18
+ raise NotImplementedError
19
+
20
+
21
+ class IdentityEncoder(AbstractEncoder):
22
+
23
+ def encode(self, x):
24
+ return x
25
+
26
+
27
+ class ClassEmbedder(nn.Module):
28
+ def __init__(self, embed_dim, n_classes=1000, key='class'):
29
+ super().__init__()
30
+ self.key = key
31
+ self.embedding = nn.Embedding(n_classes, embed_dim)
32
+
33
+ def forward(self, batch, key=None):
34
+ if key is None:
35
+ key = self.key
36
+ # this is for use in crossattn
37
+ c = batch[key][:, None]
38
+ c = self.embedding(c)
39
+ return c
40
+
41
+
42
+ class FrozenCLIPEmbedder(AbstractEncoder):
43
+ """Uses the CLIP transformer encoder for text (from huggingface)"""
44
+ def __init__(self, model_path="openai/clip-vit-large-patch14", device="cuda", max_length=77,
45
+ freeze=True, layer="last"): # clip-vit-base-patch32
46
+ super().__init__()
47
+ import os
48
+ self.tokenizer = CLIPTokenizer.from_pretrained(pretrained_model_name_or_path=model_path)
49
+ self.transformer = CLIPModel.from_pretrained(pretrained_model_name_or_path=model_path).text_model
50
+ self.device = device
51
+ self.max_length = max_length
52
+ if freeze:
53
+ self.freeze()
54
+ self.layer = layer
55
+
56
+ def freeze(self):
57
+ self.transformer = self.transformer.eval()
58
+ for param in self.parameters():
59
+ param.requires_grad = False
60
+
61
+ def forward(self, text):
62
+ batch_encoding = self.tokenizer(text, truncation=True, max_length=self.max_length, return_length=True,
63
+ return_overflowing_tokens=False, padding="max_length", return_tensors="pt")
64
+ device = next(self.transformer.parameters()).device
65
+ tokens = batch_encoding["input_ids"].to(device)
66
+ outputs = self.transformer(input_ids=tokens, output_hidden_states=self.layer != 'last')
67
+
68
+ if self.layer == 'penultimate':
69
+ z = outputs.hidden_states[-2]
70
+ z = self.transformer.final_layer_norm(z)
71
+ else:
72
+ z = outputs.last_hidden_state
73
+ return z
74
+
75
+ def encode(self, text):
76
+ return self(text)
77
+
78
+
79
+
80
+ if __name__ == "__main__":
81
+ model = FrozenCLIPEmbedder()
82
+ count_params(model, verbose=True)
@@ -0,0 +1,269 @@
1
+ from enum import Enum, unique
2
+
3
+ import cv2
4
+ import torch
5
+ from basicsr.utils import img2tensor
6
+ from libcom.painterly_image_harmonization.source.ldm.util import resize_numpy_image
7
+ from PIL import Image
8
+ from torch import autocast
9
+
10
+
11
+ @unique
12
+ class ExtraCondition(Enum):
13
+ sketch = 0
14
+ keypose = 1
15
+ seg = 2
16
+ depth = 3
17
+ canny = 4
18
+ style = 5
19
+ color = 6
20
+ openpose = 7
21
+
22
+
23
+ def get_cond_model(opt, cond_type: ExtraCondition):
24
+ if cond_type == ExtraCondition.sketch:
25
+ from libcom.painterly_image_harmonization.source.ldm.modules.extra_condition.model_edge import pidinet
26
+ model = pidinet()
27
+ ckp = torch.load('models/table5_pidinet.pth', map_location='cpu')['state_dict']
28
+ model.load_state_dict({k.replace('module.', ''): v for k, v in ckp.items()}, strict=True)
29
+ model.to(opt.device)
30
+ return model
31
+ elif cond_type == ExtraCondition.seg:
32
+ raise NotImplementedError
33
+ elif cond_type == ExtraCondition.keypose:
34
+ import mmcv
35
+ from mmdet.apis import init_detector
36
+ from mmpose.apis import init_pose_model
37
+ det_config = 'configs/mm/faster_rcnn_r50_fpn_coco.py'
38
+ det_checkpoint = 'models/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
39
+ pose_config = 'configs/mm/hrnet_w48_coco_256x192.py'
40
+ pose_checkpoint = 'models/hrnet_w48_coco_256x192-b9e0b3ab_20200708.pth'
41
+ det_config_mmcv = mmcv.Config.fromfile(det_config)
42
+ det_model = init_detector(det_config_mmcv, det_checkpoint, device=opt.device)
43
+ pose_config_mmcv = mmcv.Config.fromfile(pose_config)
44
+ pose_model = init_pose_model(pose_config_mmcv, pose_checkpoint, device=opt.device)
45
+ return {'pose_model': pose_model, 'det_model': det_model}
46
+ elif cond_type == ExtraCondition.depth:
47
+ from libcom.painterly_image_harmonization.source.ldm.modules.extra_condition.midas.api import MiDaSInference
48
+ model = MiDaSInference(model_type='dpt_hybrid').to(opt.device)
49
+ return model
50
+ elif cond_type == ExtraCondition.canny:
51
+ return None
52
+ elif cond_type == ExtraCondition.style:
53
+ from transformers import CLIPProcessor, CLIPVisionModel
54
+ version = 'openai/clip-vit-large-patch14'
55
+ processor = CLIPProcessor.from_pretrained(version)
56
+ clip_vision_model = CLIPVisionModel.from_pretrained(version).to(opt.device)
57
+ return {'processor': processor, 'clip_vision_model': clip_vision_model}
58
+ elif cond_type == ExtraCondition.color:
59
+ return None
60
+ elif cond_type == ExtraCondition.openpose:
61
+ from libcom.painterly_image_harmonization.source.ldm.modules.extra_condition.openpose.api import OpenposeInference
62
+ model = OpenposeInference().to(opt.device)
63
+ return model
64
+ else:
65
+ raise NotImplementedError
66
+
67
+
68
+ def get_cond_sketch(opt, cond_image, cond_inp_type, cond_model=None):
69
+ if isinstance(cond_image, str):
70
+ edge = cv2.imread(cond_image)
71
+ else:
72
+ # for gradio input, pay attention, it's rgb numpy
73
+ edge = cv2.cvtColor(cond_image, cv2.COLOR_RGB2BGR)
74
+ edge = resize_numpy_image(edge, max_resolution=opt.max_resolution, resize_short_edge=opt.resize_short_edge)
75
+ opt.H, opt.W = edge.shape[:2]
76
+ if cond_inp_type == 'sketch':
77
+ edge = img2tensor(edge)[0].unsqueeze(0).unsqueeze(0) / 255.
78
+ edge = edge.to(opt.device)
79
+ elif cond_inp_type == 'image':
80
+ edge = img2tensor(edge).unsqueeze(0) / 255.
81
+ edge = cond_model(edge.to(opt.device))[-1]
82
+ else:
83
+ raise NotImplementedError
84
+
85
+ # edge = 1-edge # for white background
86
+ edge = edge > 0.5
87
+ edge = edge.float()
88
+
89
+ return edge
90
+
91
+
92
+ def get_cond_seg(opt, cond_image, cond_inp_type='image', cond_model=None):
93
+ if isinstance(cond_image, str):
94
+ seg = cv2.imread(cond_image)
95
+ else:
96
+ seg = cv2.cvtColor(cond_image, cv2.COLOR_RGB2BGR)
97
+ seg = resize_numpy_image(seg, max_resolution=opt.max_resolution, resize_short_edge=opt.resize_short_edge)
98
+ opt.H, opt.W = seg.shape[:2]
99
+ if cond_inp_type == 'seg':
100
+ seg = img2tensor(seg).unsqueeze(0) / 255.
101
+ seg = seg.to(opt.device)
102
+ else:
103
+ raise NotImplementedError
104
+
105
+ return seg
106
+
107
+
108
+ def get_cond_keypose(opt, cond_image, cond_inp_type='image', cond_model=None):
109
+ if isinstance(cond_image, str):
110
+ pose = cv2.imread(cond_image)
111
+ else:
112
+ pose = cv2.cvtColor(cond_image, cv2.COLOR_RGB2BGR)
113
+ pose = resize_numpy_image(pose, max_resolution=opt.max_resolution, resize_short_edge=opt.resize_short_edge)
114
+ opt.H, opt.W = pose.shape[:2]
115
+ if cond_inp_type == 'keypose':
116
+ pose = img2tensor(pose).unsqueeze(0) / 255.
117
+ pose = pose.to(opt.device)
118
+ elif cond_inp_type == 'image':
119
+ from libcom.painterly_image_harmonization.source.ldm.modules.extra_condition.utils import imshow_keypoints
120
+ from mmdet.apis import inference_detector
121
+ from mmpose.apis import (inference_top_down_pose_model, process_mmdet_results)
122
+
123
+ # mmpose seems not compatible with autocast fp16
124
+ with autocast("cuda", dtype=torch.float32):
125
+ mmdet_results = inference_detector(cond_model['det_model'], pose)
126
+ # keep the person class bounding boxes.
127
+ person_results = process_mmdet_results(mmdet_results, 1)
128
+
129
+ # optional
130
+ return_heatmap = False
131
+ dataset = cond_model['pose_model'].cfg.data['test']['type']
132
+
133
+ # e.g. use ('backbone', ) to return backbone feature
134
+ output_layer_names = None
135
+ pose_results, returned_outputs = inference_top_down_pose_model(
136
+ cond_model['pose_model'],
137
+ pose,
138
+ person_results,
139
+ bbox_thr=0.2,
140
+ format='xyxy',
141
+ dataset=dataset,
142
+ dataset_info=None,
143
+ return_heatmap=return_heatmap,
144
+ outputs=output_layer_names)
145
+
146
+ # show the results
147
+ pose = imshow_keypoints(pose, pose_results, radius=2, thickness=2)
148
+ pose = img2tensor(pose).unsqueeze(0) / 255.
149
+ pose = pose.to(opt.device)
150
+ else:
151
+ raise NotImplementedError
152
+
153
+ return pose
154
+
155
+
156
+ def get_cond_depth(opt, cond_image, cond_inp_type='image', cond_model=None):
157
+ if isinstance(cond_image, str):
158
+ depth = cv2.imread(cond_image)
159
+ else:
160
+ depth = cv2.cvtColor(cond_image, cv2.COLOR_RGB2BGR)
161
+ depth = resize_numpy_image(depth, max_resolution=opt.max_resolution, resize_short_edge=opt.resize_short_edge)
162
+ opt.H, opt.W = depth.shape[:2]
163
+ if cond_inp_type == 'depth':
164
+ depth = img2tensor(depth).unsqueeze(0) / 255.
165
+ depth = depth.to(opt.device)
166
+ elif cond_inp_type == 'image':
167
+ depth = img2tensor(depth).unsqueeze(0) / 127.5 - 1.0
168
+ depth = cond_model(depth.to(opt.device)).repeat(1, 3, 1, 1)
169
+ depth -= torch.min(depth)
170
+ depth /= torch.max(depth)
171
+ else:
172
+ raise NotImplementedError
173
+
174
+ return depth
175
+
176
+
177
+ def get_cond_canny(opt, cond_image, cond_inp_type='image', cond_model=None):
178
+ if isinstance(cond_image, str):
179
+ canny = cv2.imread(cond_image)
180
+ else:
181
+ canny = cv2.cvtColor(cond_image, cv2.COLOR_RGB2BGR)
182
+ canny = resize_numpy_image(canny, max_resolution=opt.max_resolution, resize_short_edge=opt.resize_short_edge)
183
+ opt.H, opt.W = canny.shape[:2]
184
+ if cond_inp_type == 'canny':
185
+ canny = img2tensor(canny)[0:1].unsqueeze(0) / 255.
186
+ canny = canny.to(opt.device)
187
+ elif cond_inp_type == 'image':
188
+ canny = cv2.Canny(canny, 100, 200)[..., None]
189
+ canny = img2tensor(canny).unsqueeze(0) / 255.
190
+ canny = canny.to(opt.device)
191
+ else:
192
+ raise NotImplementedError
193
+
194
+ return canny
195
+
196
+
197
+ def get_cond_style(opt, cond_image, cond_inp_type='image', cond_model=None):
198
+ assert cond_inp_type == 'image'
199
+ if isinstance(cond_image, str):
200
+ style = Image.open(cond_image)
201
+ else:
202
+ # numpy image to PIL image
203
+ style = Image.fromarray(cond_image)
204
+
205
+ style_for_clip = cond_model['processor'](images=style, return_tensors="pt")['pixel_values']
206
+ style_feat = cond_model['clip_vision_model'](style_for_clip.to(opt.device))['last_hidden_state']
207
+
208
+ return style_feat
209
+
210
+
211
+ def get_cond_color(opt, cond_image, cond_inp_type='image', cond_model=None):
212
+ if isinstance(cond_image, str):
213
+ color = cv2.imread(cond_image)
214
+ else:
215
+ color = cv2.cvtColor(cond_image, cv2.COLOR_RGB2BGR)
216
+ color = resize_numpy_image(color, max_resolution=opt.max_resolution, resize_short_edge=opt.resize_short_edge)
217
+ opt.H, opt.W = color.shape[:2]
218
+ if cond_inp_type == 'image':
219
+ color = cv2.resize(color, (opt.W//64, opt.H//64), interpolation=cv2.INTER_CUBIC)
220
+ color = cv2.resize(color, (opt.W, opt.H), interpolation=cv2.INTER_NEAREST)
221
+ color = img2tensor(color).unsqueeze(0) / 255.
222
+ color = color.to(opt.device)
223
+ return color
224
+
225
+
226
+ def get_cond_openpose(opt, cond_image, cond_inp_type='image', cond_model=None):
227
+ if isinstance(cond_image, str):
228
+ openpose_keypose = cv2.imread(cond_image)
229
+ else:
230
+ openpose_keypose = cv2.cvtColor(cond_image, cv2.COLOR_RGB2BGR)
231
+ openpose_keypose = resize_numpy_image(
232
+ openpose_keypose, max_resolution=opt.max_resolution, resize_short_edge=opt.resize_short_edge)
233
+ opt.H, opt.W = openpose_keypose.shape[:2]
234
+ if cond_inp_type == 'openpose':
235
+ openpose_keypose = img2tensor(openpose_keypose).unsqueeze(0) / 255.
236
+ openpose_keypose = openpose_keypose.to(opt.device)
237
+ elif cond_inp_type == 'image':
238
+ with autocast('cuda', dtype=torch.float32):
239
+ openpose_keypose = cond_model(openpose_keypose)
240
+ openpose_keypose = img2tensor(openpose_keypose).unsqueeze(0) / 255.
241
+ openpose_keypose = openpose_keypose.to(opt.device)
242
+
243
+ else:
244
+ raise NotImplementedError
245
+
246
+ return openpose_keypose
247
+
248
+
249
+ def get_adapter_feature(inputs, adapters):
250
+ ret_feat_map = None
251
+ ret_feat_seq = None
252
+ if not isinstance(inputs, list):
253
+ inputs = [inputs]
254
+ adapters = [adapters]
255
+
256
+ for input, adapter in zip(inputs, adapters):
257
+ cur_feature = adapter['model'](input)
258
+ if isinstance(cur_feature, list):
259
+ if ret_feat_map is None:
260
+ ret_feat_map = list(map(lambda x: x * adapter['cond_weight'], cur_feature))
261
+ else:
262
+ ret_feat_map = list(map(lambda x, y: x + y * adapter['cond_weight'], ret_feat_map, cur_feature))
263
+ else:
264
+ if ret_feat_seq is None:
265
+ ret_feat_seq = cur_feature * adapter['cond_weight']
266
+ else:
267
+ ret_feat_seq = torch.cat([ret_feat_seq, cur_feature * adapter['cond_weight']], dim=1)
268
+
269
+ return ret_feat_map, ret_feat_seq
@@ -0,0 +1,175 @@
1
+ # based on https://github.com/isl-org/MiDaS
2
+ import os
3
+
4
+ import cv2
5
+ import torch
6
+ import torch.nn as nn
7
+ from torchvision.transforms import Compose
8
+
9
+ from libcom.painterly_image_harmonization.source.ldm.modules.extra_condition.midas.midas.dpt_depth import DPTDepthModel
10
+ from libcom.painterly_image_harmonization.source.ldm.modules.extra_condition.midas.midas.midas_net import MidasNet
11
+ from libcom.painterly_image_harmonization.source.ldm.modules.extra_condition.midas.midas.midas_net_custom import MidasNet_small
12
+ from libcom.painterly_image_harmonization.source.ldm.modules.extra_condition.midas.midas.transforms import Resize, NormalizeImage, PrepareForNet
13
+
14
+
15
+ ISL_PATHS = {
16
+ "dpt_large": "models/dpt_large-midas-2f21e586.pt",
17
+ "dpt_hybrid": "models/dpt_hybrid-midas-501f0c75.pt",
18
+ "midas_v21": "",
19
+ "midas_v21_small": "",
20
+ }
21
+
22
+ remote_model_path = "https://github.com/intel-isl/DPT/releases/download/1_0/dpt_hybrid-midas-501f0c75.pt"
23
+
24
+ def disabled_train(self, mode=True):
25
+ """Overwrite model.train with this function to make sure train/eval mode
26
+ does not change anymore."""
27
+ return self
28
+
29
+
30
+ def load_midas_transform(model_type):
31
+ # https://github.com/isl-org/MiDaS/blob/master/run.py
32
+ # load transform only
33
+ if model_type == "dpt_large": # DPT-Large
34
+ net_w, net_h = 384, 384
35
+ resize_mode = "minimal"
36
+ normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
37
+
38
+ elif model_type == "dpt_hybrid": # DPT-Hybrid
39
+ net_w, net_h = 384, 384
40
+ resize_mode = "minimal"
41
+ normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
42
+
43
+ elif model_type == "midas_v21":
44
+ net_w, net_h = 384, 384
45
+ resize_mode = "upper_bound"
46
+ normalization = NormalizeImage(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
47
+
48
+ elif model_type == "midas_v21_small":
49
+ net_w, net_h = 256, 256
50
+ resize_mode = "upper_bound"
51
+ normalization = NormalizeImage(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
52
+
53
+ else:
54
+ assert False, f"model_type '{model_type}' not implemented, use: --model_type large"
55
+
56
+ transform = Compose(
57
+ [
58
+ Resize(
59
+ net_w,
60
+ net_h,
61
+ resize_target=None,
62
+ keep_aspect_ratio=True,
63
+ ensure_multiple_of=32,
64
+ resize_method=resize_mode,
65
+ image_interpolation_method=cv2.INTER_CUBIC,
66
+ ),
67
+ normalization,
68
+ PrepareForNet(),
69
+ ]
70
+ )
71
+
72
+ return transform
73
+
74
+
75
+ def load_model(model_type):
76
+ # https://github.com/isl-org/MiDaS/blob/master/run.py
77
+ # load network
78
+ model_path = ISL_PATHS[model_type]
79
+ if model_type == "dpt_large": # DPT-Large
80
+ model = DPTDepthModel(
81
+ path=model_path,
82
+ backbone="vitl16_384",
83
+ non_negative=True,
84
+ )
85
+ net_w, net_h = 384, 384
86
+ resize_mode = "minimal"
87
+ normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
88
+
89
+ elif model_type == "dpt_hybrid": # DPT-Hybrid
90
+ if not os.path.exists(model_path):
91
+ from basicsr.utils.download_util import load_file_from_url
92
+ load_file_from_url(remote_model_path, model_dir='models')
93
+
94
+ model = DPTDepthModel(
95
+ path=model_path,
96
+ backbone="vitb_rn50_384",
97
+ non_negative=True,
98
+ )
99
+ net_w, net_h = 384, 384
100
+ resize_mode = "minimal"
101
+ normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
102
+
103
+ elif model_type == "midas_v21":
104
+ model = MidasNet(model_path, non_negative=True)
105
+ net_w, net_h = 384, 384
106
+ resize_mode = "upper_bound"
107
+ normalization = NormalizeImage(
108
+ mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
109
+ )
110
+
111
+ elif model_type == "midas_v21_small":
112
+ model = MidasNet_small(model_path, features=64, backbone="efficientnet_lite3", exportable=True,
113
+ non_negative=True, blocks={'expand': True})
114
+ net_w, net_h = 256, 256
115
+ resize_mode = "upper_bound"
116
+ normalization = NormalizeImage(
117
+ mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
118
+ )
119
+
120
+ else:
121
+ print(f"model_type '{model_type}' not implemented, use: --model_type large")
122
+ assert False
123
+
124
+ transform = Compose(
125
+ [
126
+ Resize(
127
+ net_w,
128
+ net_h,
129
+ resize_target=None,
130
+ keep_aspect_ratio=True,
131
+ ensure_multiple_of=32,
132
+ resize_method=resize_mode,
133
+ image_interpolation_method=cv2.INTER_CUBIC,
134
+ ),
135
+ normalization,
136
+ PrepareForNet(),
137
+ ]
138
+ )
139
+
140
+ return model.eval(), transform
141
+
142
+
143
+ class MiDaSInference(nn.Module):
144
+ MODEL_TYPES_TORCH_HUB = [
145
+ "DPT_Large",
146
+ "DPT_Hybrid",
147
+ "MiDaS_small"
148
+ ]
149
+ MODEL_TYPES_ISL = [
150
+ "dpt_large",
151
+ "dpt_hybrid",
152
+ "midas_v21",
153
+ "midas_v21_small",
154
+ ]
155
+
156
+ def __init__(self, model_type):
157
+ super().__init__()
158
+ assert (model_type in self.MODEL_TYPES_ISL)
159
+ model, _ = load_model(model_type)
160
+ self.model = model
161
+ self.model.train = disabled_train
162
+
163
+ def forward(self, x):
164
+ # x in 0..1 as produced by calling self.transform on a 0..1 float64 numpy array
165
+ # NOTE: we expect that the correct transform has been called during dataloading.
166
+ with torch.no_grad():
167
+ prediction = self.model(x)
168
+ prediction = torch.nn.functional.interpolate(
169
+ prediction.unsqueeze(1),
170
+ size=x.shape[2:],
171
+ mode="bicubic",
172
+ align_corners=False,
173
+ )
174
+ assert prediction.shape == (x.shape[0], 1, x.shape[2], x.shape[3])
175
+ return prediction
@@ -0,0 +1,16 @@
1
+ import torch
2
+
3
+
4
+ class BaseModel(torch.nn.Module):
5
+ def load(self, path):
6
+ """Load model from file.
7
+
8
+ Args:
9
+ path (str): file path
10
+ """
11
+ parameters = torch.load(path, map_location=torch.device('cpu'))
12
+
13
+ if "optimizer" in parameters:
14
+ parameters = parameters["model"]
15
+
16
+ self.load_state_dict(parameters)