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,85 @@
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.nn.functional as F
4
+ from functools import partial
5
+
6
+ from libcom.image_harmonization.source.functions import PCT, ViT_Harmonizer
7
+
8
+
9
+ class PCTNet(nn.Module):
10
+
11
+ def __init__(
12
+ self,
13
+ backbone_type='ViT',
14
+ input_normalization = {'mean': [0.0, 0.0, 0.0], 'std':[1.0, 1.0, 1.0]},
15
+ dim=3, transform_type='linear', affine=True,
16
+ clamp=True, color_space = 'RGB', use_attn = False
17
+ ):
18
+ super(PCTNet, self).__init__()
19
+
20
+ self.color_space = color_space
21
+ self.use_attn = use_attn
22
+
23
+ self.dim = dim
24
+ self.transform_type = transform_type
25
+ self.affine = affine
26
+ self.PCT = PCT(transform_type, dim, affine, color_space, input_normalization['mean'], input_normalization['std'], clamp=clamp)
27
+ self.out_dim = self.PCT.get_out_dim()
28
+
29
+ input_dim = self.out_dim
30
+ self.backbone_type = backbone_type
31
+ self.encoder = ViT_Harmonizer(output_nc=input_dim)
32
+ self.decoder = lambda intermediates, img, mask: (intermediates, mask)
33
+
34
+ self.get_params = nn.Conv2d(input_dim, self.out_dim, kernel_size=1)
35
+
36
+
37
+ def forward(self, image, image_fullres=None, mask=None, mask_fullres=None, backbone_features=None):
38
+ self.device = image.get_device()
39
+
40
+ image = image.unsqueeze(0)
41
+ mask = mask.unsqueeze(0)
42
+ image_fullres = image_fullres.unsqueeze(0)
43
+ mask_fullres = mask_fullres.unsqueeze(0)
44
+ x = torch.cat((image, mask), dim=1)
45
+
46
+ intermediates = self.encoder(x, backbone_features)
47
+ latent, attention_map = self.decoder(intermediates, image, mask) # (N, 32, 256, 256), (N, 1, 256, 256)
48
+ params = self.get_params(latent)
49
+
50
+ output_lowres = self.PCT(image, params)
51
+
52
+ if self.use_attn:
53
+ output_lowres = output_lowres * attention_map + image * (1-attention_map)
54
+ else:
55
+ output_lowres = output_lowres * mask + image * (1 - mask)
56
+
57
+ # Full resolution branch
58
+ if torch.is_tensor(image_fullres):
59
+ fr_imgs = [image_fullres]
60
+ fr_masks = [mask_fullres]
61
+ idx = [[n for n in range(image_fullres.shape[0])]]
62
+ else:
63
+ fr_imgs = [img_fr.unsqueeze(0).to(image.get_device()) for img_fr in image_fullres]
64
+ fr_masks = [mask_fr.unsqueeze(0).to(image.get_device()) for mask_fr in mask_fullres]
65
+ idx = [[n] for n in range(len(image_fullres))]
66
+
67
+ out_fr = []
68
+ param_fr = []
69
+ for id, fr_img, fr_mask in zip(idx, fr_imgs, fr_masks):
70
+ H = fr_img.size(2)
71
+ W = fr_img.size(3)
72
+ params_fullres = F.interpolate(params[id], size=(H, W), mode='bicubic', align_corners=True)
73
+ output_fullres = self.PCT(fr_img, params_fullres)
74
+ if self.use_attn:
75
+ attention_map_fullres = F.interpolate(attention_map[id], size=(H, W), mode='bicubic', align_corners=True)
76
+ output_fullres = output_fullres * attention_map_fullres + fr_img * (1-attention_map_fullres)
77
+ else:
78
+ output_fullres = output_fullres * fr_mask + fr_img * (1 - fr_mask)
79
+ out_fr.append(output_fullres.squeeze())
80
+ param_fr.append(params_fullres.squeeze())
81
+
82
+ if len(out_fr) == 1:
83
+ out_fr = out_fr[0]
84
+
85
+ return out_fr
File without changes
File without changes
@@ -0,0 +1,141 @@
1
+ import json
2
+ import os
3
+ import warnings
4
+ from dataclasses import asdict, field
5
+ from typing import Any, Dict, Union
6
+
7
+ import yaml
8
+ from pydantic import ValidationError
9
+ from pydantic.dataclasses import dataclass
10
+ from yaml import safe_load
11
+
12
+
13
+ @dataclass
14
+ class BaseConfig:
15
+ """This is the BaseConfig class which defines all the useful loading and saving methods
16
+ of the configs"""
17
+
18
+ name: str = field(init=False)
19
+
20
+ def __post_init__(self):
21
+ self.name = self.__class__.__name__
22
+
23
+ @classmethod
24
+ def from_dict(cls, config_dict: Dict[str, Any]) -> "BaseConfig":
25
+ """Creates a BaseConfig instance from a dictionnary
26
+
27
+ Args:
28
+ config_dict (dict): The Python dictionnary containing all the parameters
29
+
30
+ Returns:
31
+ :class:`BaseConfig`: The created instance
32
+ """
33
+ try:
34
+ config = cls(**config_dict)
35
+ except (ValidationError, TypeError) as e:
36
+ raise e
37
+ return config
38
+
39
+ @classmethod
40
+ def _dict_from_json(cls, json_path: Union[str, os.PathLike]) -> Dict[str, Any]:
41
+ try:
42
+ with open(json_path) as f:
43
+ try:
44
+ config_dict = json.load(f)
45
+ return config_dict
46
+
47
+ except (TypeError, json.JSONDecodeError) as e:
48
+ raise TypeError(
49
+ f"File {json_path} not loadable. Maybe not json ? \n"
50
+ f"Catch Exception {type(e)} with message: " + str(e)
51
+ ) from e
52
+
53
+ except FileNotFoundError:
54
+ raise FileNotFoundError(
55
+ f"Config file not found. Please check path '{json_path}'"
56
+ )
57
+
58
+ @classmethod
59
+ def from_json(cls, json_path: str) -> "BaseConfig":
60
+ """Creates a BaseConfig instance from a JSON config file
61
+
62
+ Args:
63
+ json_path (str): The path to the json file containing all the parameters
64
+
65
+ Returns:
66
+ :class:`BaseConfig`: The created instance
67
+ """
68
+ config_dict = cls._dict_from_json(json_path)
69
+
70
+ config_name = config_dict.pop("name")
71
+
72
+ if cls.__name__ != config_name:
73
+ warnings.warn(
74
+ f"You are trying to load a "
75
+ f"`{ cls.__name__}` while a "
76
+ f"`{config_name}` is given."
77
+ )
78
+
79
+ return cls.from_dict(config_dict)
80
+
81
+ def to_dict(self) -> dict:
82
+ """Transforms object into a Python dictionnary
83
+
84
+ Returns:
85
+ (dict): The dictionnary containing all the parameters"""
86
+ return asdict(self)
87
+
88
+ def to_json_string(self):
89
+ """Transforms object into a JSON string
90
+
91
+ Returns:
92
+ (str): The JSON str containing all the parameters"""
93
+ return json.dumps(self.to_dict())
94
+
95
+ def save_json(self, file_path: str):
96
+ """Saves a ``.json`` file from the dataclass
97
+
98
+ Args:
99
+ file_path (str): path to the file
100
+ """
101
+ with open(os.path.join(file_path), "w", encoding="utf-8") as fp:
102
+ fp.write(self.to_json_string())
103
+
104
+ def save_yaml(self, file_path: str):
105
+ """Saves a ``.yaml`` file from the dataclass
106
+
107
+ Args:
108
+ file_path (str): path to the file
109
+ """
110
+ with open(os.path.join(file_path), "w", encoding="utf-8") as fp:
111
+ yaml.dump(self.to_dict(), fp)
112
+
113
+ @classmethod
114
+ def from_yaml(cls, yaml_path: str) -> "BaseConfig":
115
+ """Creates a BaseConfig instance from a YAML config file
116
+
117
+ Args:
118
+ yaml_path (str): The path to the yaml file containing all the parameters
119
+
120
+ Returns:
121
+ :class:`BaseConfig`: The created instance
122
+ """
123
+ with open(yaml_path, "r") as f:
124
+ try:
125
+ config_dict = safe_load(f)
126
+ except yaml.YAMLError as e:
127
+ raise yaml.YAMLError(
128
+ f"File {yaml_path} not loadable. Maybe not yaml ? \n"
129
+ f"Catch Exception {type(e)} with message: " + str(e)
130
+ ) from e
131
+
132
+ config_name = config_dict.pop("name")
133
+
134
+ if cls.__name__ != config_name:
135
+ warnings.warn(
136
+ f"You are trying to load a "
137
+ f"`{ cls.__name__}` while a "
138
+ f"`{config_name}` is given."
139
+ )
140
+
141
+ return cls.from_dict(config_dict)
@@ -0,0 +1,62 @@
1
+ """
2
+ This module contains a collection of data related classes and functions to train the :mod:`cr.models`.
3
+ In a training loop a batch of data is struvtued as a dictionnary on which the modules :mod:`cr.data.datasets`
4
+ and :mod:`cr.data.filters` allow to perform several operations.
5
+
6
+
7
+ Examples
8
+ ########
9
+
10
+ Create a DataModule to train a model
11
+
12
+ .. code-block::python
13
+
14
+ from cr.data import DataModule, DataModuleConfig
15
+ from cr.data.filters import KeyFilter, KeyFilterConfig
16
+ from cr.data.mappers import KeyRenameMapper, KeyRenameMapperConfig
17
+
18
+ # Create the filters and mappers
19
+ filters_mappers = [
20
+ KeyFilter(KeyFilterConfig(keys=["image", "txt"])),
21
+ KeyRenameMapper(
22
+ KeyRenameMapperConfig(key_map={"jpg": "image", "txt": "text"})
23
+ )
24
+ ]
25
+
26
+ # Create the DataModule
27
+ data_module = DataModule(
28
+ train_config=DataModuleConfig(
29
+ shards_path_or_urls="your urls or paths",
30
+ decoder="pil",
31
+ shuffle_buffer_size=100,
32
+ per_worker_batch_size=32,
33
+ num_workers=4,
34
+ ),
35
+ train_filters_mappers=filters_mappers,
36
+ eval_config=DataModuleConfig(
37
+ shards_path_or_urls="your urls or paths",
38
+ decoder="pil",
39
+ shuffle_buffer_size=100,
40
+ per_worker_batch_size=32,
41
+ num_workers=4,
42
+ ),
43
+ eval_filters_mappers=filters_mappers,
44
+ )
45
+
46
+ # This can then be passed to a :mod:`pytorch_lightning.Trainer` to train a model
47
+
48
+
49
+
50
+
51
+
52
+ The :mod:`cr.data` includes the following submodules:
53
+
54
+ - :mod:`cr.data.datasets`: a collection of :mod:`pytorch_lightning.LightningDataModule` used to train the models. In particular,
55
+ they can used to create the dataloaders and setup the data pipelines.
56
+ - :mod:`cr.data.filters`: a collection of filters used apply filters on a training batch of data/
57
+
58
+ """
59
+
60
+ from .datasets import DataModule
61
+
62
+ __all__ = ["DataModule"]
@@ -0,0 +1,9 @@
1
+ """
2
+ A collection of :mod:`pytorch_lightning.LightningDataModule` used to train the models. In particular,
3
+ they can be used to create the dataloaders and setup the data pipelines.
4
+ """
5
+
6
+ from .dataset import DataModule
7
+ from .datasets_config import DataModuleConfig
8
+
9
+ __all__ = ["DataModule", "DataModuleConfig"]
@@ -0,0 +1,41 @@
1
+ from typing import Dict, List, Union
2
+
3
+ import numpy as np
4
+ import torch
5
+
6
+
7
+ def custom_collation_fn(
8
+ samples: List[Dict[str, Union[int, float, np.ndarray, torch.Tensor]]],
9
+ combine_tensors: bool = True,
10
+ combine_scalars: bool = True,
11
+ ) -> dict:
12
+ """
13
+ Collate function for PyTorch DataLoader.
14
+
15
+ Args:
16
+ samples(List[Dict[str, Union[int, float, np.ndarray, torch.Tensor]]]): List of samples.
17
+ combine_tensors (bool): Whether to turn lists of tensors into a single tensor.
18
+ combine_scalars (bool): Whether to turn lists of scalars into a single ndarray.
19
+ """
20
+ keys = set.intersection(*[set(sample.keys()) for sample in samples])
21
+ batched = {key: [] for key in keys}
22
+ for s in samples:
23
+ [batched[key].append(s[key]) for key in batched]
24
+
25
+ result = {}
26
+ for key in batched:
27
+ if isinstance(batched[key][0], (int, float)):
28
+ if combine_scalars:
29
+ result[key] = np.array(list(batched[key]))
30
+ elif isinstance(batched[key][0], torch.Tensor):
31
+ if combine_tensors:
32
+ result[key] = torch.stack(list(batched[key]))
33
+ elif isinstance(batched[key][0], np.ndarray):
34
+ if combine_tensors:
35
+ result[key] = np.array(list(batched[key]))
36
+ else:
37
+ result[key] = list(batched[key])
38
+
39
+ del samples
40
+ del batched
41
+ return result
@@ -0,0 +1,243 @@
1
+ from typing import Callable, List, Union
2
+
3
+ import pytorch_lightning as pl
4
+ import webdataset as wds
5
+ from webdataset import DataPipeline
6
+
7
+ from ..filters import BaseFilter, FilterWrapper
8
+ from ..mappers import BaseMapper, MapperWrapper
9
+ from .collation_fn import custom_collation_fn
10
+ from .datasets_config import DataModuleConfig
11
+
12
+
13
+ class DataPipeline:
14
+ """
15
+ DataPipeline class for creating a dataloader from a single configuration
16
+
17
+ Args:
18
+
19
+ config (DataModuleConfig):
20
+ Configuration for the dataset
21
+
22
+ filters_mappers (Union[List[Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]]):
23
+ List of filters and mappers for the dataset. These will be sequentially applied.
24
+
25
+ batched_filters_mappers (List[Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]]):
26
+ List of batched transforms for the dataset. These will be sequentially applied.
27
+ """
28
+
29
+ def __init__(
30
+ self,
31
+ config: DataModuleConfig,
32
+ filters_mappers: List[
33
+ Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]
34
+ ],
35
+ batched_filters_mappers: List[
36
+ Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]
37
+ ] = None,
38
+ ):
39
+ self.config = config
40
+ self.shards_path_or_urls = config.shards_path_or_urls
41
+ self.filters_mappers = filters_mappers
42
+ self.batched_filters_mappers = batched_filters_mappers or []
43
+
44
+ if filters_mappers is None:
45
+ filters_mappers = []
46
+
47
+ # set processing pipeline
48
+ self.processing_pipeline = [wds.decode(config.decoder, handler=config.handler)]
49
+ self.processing_pipeline.extend(
50
+ self._add_filters_mappers(
51
+ filters_mappers=filters_mappers,
52
+ handler=config.handler,
53
+ )
54
+ )
55
+
56
+ def _add_filters_mappers(
57
+ self,
58
+ filters_mappers: List[
59
+ Union[
60
+ FilterWrapper,
61
+ MapperWrapper,
62
+ ]
63
+ ],
64
+ handler: Callable = wds.warn_and_continue,
65
+ ) -> List[Union[FilterWrapper, MapperWrapper]]:
66
+ tmp_pipeline = []
67
+ for filter_mapper in filters_mappers:
68
+ if isinstance(filter_mapper, FilterWrapper) or isinstance(
69
+ filter_mapper, BaseFilter
70
+ ):
71
+ tmp_pipeline.append(wds.select(filter_mapper))
72
+ elif isinstance(filter_mapper, MapperWrapper) or isinstance(
73
+ filter_mapper, BaseMapper
74
+ ):
75
+ tmp_pipeline.append(wds.map(filter_mapper, handler=handler))
76
+ elif isinstance(filter_mapper) or isinstance(filter_mapper):
77
+ tmp_pipeline.append(wds.map(filter_mapper, handler=handler))
78
+ else:
79
+ raise ValueError("Unknown type of filter/mapper")
80
+ return tmp_pipeline
81
+
82
+ def setup(self):
83
+ pipeline = [wds.SimpleShardList(self.shards_path_or_urls)]
84
+
85
+ # shuffle before split by node
86
+ if self.config.shuffle_before_split_by_node_buffer_size is not None:
87
+ pipeline.append(
88
+ wds.shuffle(
89
+ self.config.shuffle_before_split_by_node_buffer_size,
90
+ handler=self.config.handler,
91
+ )
92
+ )
93
+ # split by node
94
+ pipeline.append(wds.split_by_node)
95
+
96
+ # shuffle before split by workers
97
+ if self.config.shuffle_before_split_by_workers_buffer_size is not None:
98
+ pipeline.append(
99
+ wds.shuffle(
100
+ self.config.shuffle_before_split_by_workers_buffer_size,
101
+ handler=self.config.handler,
102
+ )
103
+ )
104
+ # split by worker
105
+ pipeline.extend(
106
+ [
107
+ wds.split_by_worker,
108
+ wds.tarfile_to_samples(
109
+ handler=self.config.handler,
110
+ rename_files=self.config.rename_files_fn,
111
+ ),
112
+ ]
113
+ )
114
+
115
+ # shuffle before filter mappers
116
+ if self.config.shuffle_before_filter_mappers_buffer_size is not None:
117
+ pipeline.append(
118
+ wds.shuffle(
119
+ self.config.shuffle_before_filter_mappers_buffer_size,
120
+ handler=self.config.handler,
121
+ )
122
+ )
123
+
124
+ # apply filters and mappers
125
+ pipeline.extend(self.processing_pipeline)
126
+
127
+ # shuffle after filter mappers
128
+ if self.config.shuffle_after_filter_mappers_buffer_size is not None:
129
+ pipeline.append(
130
+ wds.shuffle(
131
+ self.config.shuffle_after_filter_mappers_buffer_size,
132
+ handler=self.config.handler,
133
+ ),
134
+ )
135
+
136
+ # batching
137
+ pipeline.append(
138
+ wds.batched(
139
+ self.config.per_worker_batch_size,
140
+ collation_fn=custom_collation_fn,
141
+ )
142
+ )
143
+
144
+ # apply batched transforms
145
+ pipeline.extend(
146
+ self._add_filters_mappers(
147
+ filters_mappers=self.batched_filters_mappers,
148
+ handler=self.config.handler,
149
+ )
150
+ )
151
+
152
+ # create the data pipeline
153
+ pipeline = wds.DataPipeline(*pipeline, handler=self.config.handler)
154
+
155
+ # set the pipeline
156
+ self.pipeline = pipeline
157
+
158
+ def dataloader(self):
159
+ # return the loader
160
+ return wds.WebLoader(
161
+ self.pipeline,
162
+ batch_size=None,
163
+ num_workers=self.config.num_workers,
164
+ )
165
+
166
+
167
+ class DataModule(pl.LightningDataModule):
168
+ """
169
+ Main DataModule class for creating data loaders and training/evaluating models
170
+
171
+ Args:
172
+
173
+ train_config (DataModuleConfig):
174
+ Configuration for the training dataset
175
+
176
+ train_filters_mappers (Union[List[Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]]):
177
+ List of filters and mappers for the training dataset. These will be sequentially applied.
178
+
179
+ train_batched_filters_mappers (List[Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]]):
180
+ List of batched transforms for the training dataset. These will be sequentially applied.
181
+
182
+ eval_config (DataModuleConfig):
183
+ Configuration for the evaluation dataset
184
+
185
+ eval_filters_mappers (List[Union[FilterWrapper, MapperWrapper]]):
186
+ List of filters and mappers for the evaluation dataset.These will be sequentially applied.
187
+
188
+ eval_batched_filters_mappers (List[Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]]):
189
+ List of batched transforms for the evaluation dataset. These will be sequentially applied.
190
+ """
191
+
192
+ def __init__(
193
+ self,
194
+ train_config: DataModuleConfig,
195
+ train_filters_mappers: List[
196
+ Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]
197
+ ] = None,
198
+ train_batched_filters_mappers: List[
199
+ Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]
200
+ ] = None,
201
+ eval_config: DataModuleConfig = None,
202
+ eval_filters_mappers: List[Union[FilterWrapper, MapperWrapper]] = None,
203
+ eval_batched_filters_mappers: List[
204
+ Union[BaseMapper, BaseFilter, FilterWrapper, MapperWrapper]
205
+ ] = None,
206
+ ):
207
+ super().__init__()
208
+
209
+ self.train_config = train_config
210
+ self.train_filters_mappers = train_filters_mappers
211
+ self.train_batched_filters_mappers = train_batched_filters_mappers
212
+
213
+ self.eval_config = eval_config
214
+ self.eval_filters_mappers = eval_filters_mappers
215
+ self.eval_batched_filters_mappers = eval_batched_filters_mappers
216
+
217
+ def setup(self, stage=None):
218
+ """
219
+ Setup the data module and create the webdataset processing pipelines
220
+ """
221
+
222
+ # train pipeline
223
+ self.train_pipeline = DataPipeline(
224
+ config=self.train_config,
225
+ filters_mappers=self.train_filters_mappers,
226
+ batched_filters_mappers=self.train_batched_filters_mappers,
227
+ )
228
+ self.train_pipeline.setup()
229
+
230
+ # eval pipeline
231
+ if self.eval_config is not None:
232
+ self.eval_pipeline = DataPipeline(
233
+ config=self.eval_config,
234
+ filters_mappers=self.eval_filters_mappers,
235
+ batched_filters_mappers=self.eval_batched_filters_mappers,
236
+ )
237
+ self.eval_pipeline.setup()
238
+
239
+ def train_dataloader(self):
240
+ return self.train_pipeline.dataloader()
241
+
242
+ def val_dataloader(self):
243
+ return self.eval_pipeline.dataloader()
@@ -0,0 +1,42 @@
1
+ from typing import Callable, List, Optional, Union
2
+
3
+ import webdataset as wds
4
+ from pydantic.dataclasses import dataclass
5
+
6
+ from ...config import BaseConfig
7
+
8
+
9
+ @dataclass
10
+ class DataModuleConfig(BaseConfig):
11
+ """
12
+ Configuration for the DataModule
13
+
14
+ Args:
15
+
16
+ shards_path_or_urls (Union[str, List[str]]): The path or url to the shards. Defaults to None.
17
+ per_worker_batch_size (int): The batch size for the dataset. Defaults to 16.
18
+ num_workers (int): The number of workers to use. Defaults to 1.
19
+ shuffle_before_split_by_node_buffer_size (Optional[int]): The buffer size for the shuffle before split by node. Defaults to 100.
20
+ shuffle_before_split_by_workers_buffer_size (Optional[int]): The buffer size for the shuffle before split by workers. Defaults to 100.
21
+ shuffle_before_filter_mappers_buffer_size (Optional[int]): The buffer size for the shuffle before filter mappers. Defaults to 1000.
22
+ shuffle_after_filter_mappers_buffer_size (Optional[int]): The buffer size for the shuffle after filter mappers. Defaults to 1000.
23
+ decoder (str): The decoder to use. Defaults to "pil".
24
+ handler (Callable): A callable to handle the warnings. Defaults to wds.warn_and_continue.
25
+ rename_files_fn (Optional[Callable[[str], str]]): A callable to rename the files. Defaults to None.
26
+ """
27
+
28
+ shards_path_or_urls: Union[str, List[str]] = None
29
+ per_worker_batch_size: int = 16
30
+ num_workers: int = 1
31
+ shuffle_before_split_by_node_buffer_size: Optional[int] = 100
32
+ shuffle_before_split_by_workers_buffer_size: Optional[int] = 100
33
+ shuffle_before_filter_mappers_buffer_size: Optional[int] = 1000
34
+ shuffle_after_filter_mappers_buffer_size: Optional[int] = 1000
35
+ decoder: str = "pil"
36
+ handler: Callable = wds.warn_and_continue
37
+ rename_files_fn: Optional[Callable[[str], str]] = None
38
+
39
+ def __post_init__(self):
40
+ super().__post_init__()
41
+ if self.rename_files_fn is not None:
42
+ assert callable(self.rename_files_fn), "rename_files must be a callable"
@@ -0,0 +1,12 @@
1
+ from .base import BaseFilter
2
+ from .filter_wrapper import FilterWrapper
3
+ from .filters import KeyFilter
4
+ from .filters_config import BaseFilterConfig, KeyFilterConfig
5
+
6
+ __all__ = [
7
+ "BaseFilter",
8
+ "FilterWrapper",
9
+ "KeyFilter",
10
+ "BaseFilterConfig",
11
+ "KeyFilterConfig",
12
+ ]
@@ -0,0 +1,21 @@
1
+ from typing import Any, Dict
2
+
3
+ from .filters_config import BaseFilterConfig
4
+
5
+
6
+ class BaseFilter:
7
+ """
8
+ Base class for filters. This class should be subclassed to create a new filter.
9
+
10
+ Args:
11
+
12
+ config (BaseFilterConfig):
13
+ Configuration for the filter
14
+ """
15
+
16
+ def __init__(self, config: BaseFilterConfig):
17
+ self.verbose = config.verbose
18
+
19
+ def __call__(self, sample: Dict[str, Any]) -> bool:
20
+ """This function should be implemented by the subclass"""
21
+ raise NotImplementedError