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.
- libcom/__init__.py +23 -0
- libcom/color_transfer/__init__.py +3 -0
- libcom/color_transfer/reinhard.py +57 -0
- libcom/fopa_heat_map/__init__.py +4 -0
- libcom/fopa_heat_map/fopa_heat_map.py +212 -0
- libcom/fopa_heat_map/source/__init__.py +0 -0
- libcom/fopa_heat_map/source/backbone/ResNet.py +229 -0
- libcom/fopa_heat_map/source/backbone/__init__.py +0 -0
- libcom/fopa_heat_map/source/data/OBdataset.py +292 -0
- libcom/fopa_heat_map/source/data/__init__.py +0 -0
- libcom/fopa_heat_map/source/data/all_transforms.py +25 -0
- libcom/fopa_heat_map/source/network/BaseBlocks.py +26 -0
- libcom/fopa_heat_map/source/network/DynamicModules.py +43 -0
- libcom/fopa_heat_map/source/network/ObPlaNet_simple.py +112 -0
- libcom/fopa_heat_map/source/network/__init__.py +1 -0
- libcom/fopa_heat_map/source/network/tensor_ops.py +37 -0
- libcom/fopa_heat_map/source/prepare_multi_fg_scales.py +85 -0
- libcom/fos_score/__init__.py +4 -0
- libcom/fos_score/fos_score_prediction.py +218 -0
- libcom/fos_score/source/__init__.py +0 -0
- libcom/fos_score/source/config/__init__.py +1 -0
- libcom/fos_score/source/config/config.py +68 -0
- libcom/fos_score/source/config/config.sfosd.yaml +43 -0
- libcom/fos_score/source/config/config_rfosd.yaml +43 -0
- libcom/fos_score/source/loss_function.py +118 -0
- libcom/fos_score/source/networks.py +355 -0
- libcom/harmony_score/__init__.py +3 -0
- libcom/harmony_score/harmony_score_prediction.py +119 -0
- libcom/harmony_score/source/__init__.py +0 -0
- libcom/harmony_score/source/bargainnet.py +226 -0
- libcom/image_harmonization/__init__.py +4 -0
- libcom/image_harmonization/image_harmonization.py +193 -0
- libcom/image_harmonization/source/__init__.py +0 -0
- libcom/image_harmonization/source/functions.py +747 -0
- libcom/image_harmonization/source/pct_net.py +85 -0
- libcom/image_harmonization/source/src/__init__.py +0 -0
- libcom/image_harmonization/source/src/lbm/__init__.py +0 -0
- libcom/image_harmonization/source/src/lbm/config.py +141 -0
- libcom/image_harmonization/source/src/lbm/data/__init__.py +62 -0
- libcom/image_harmonization/source/src/lbm/data/datasets/__init__.py +9 -0
- libcom/image_harmonization/source/src/lbm/data/datasets/collation_fn.py +41 -0
- libcom/image_harmonization/source/src/lbm/data/datasets/dataset.py +243 -0
- libcom/image_harmonization/source/src/lbm/data/datasets/datasets_config.py +42 -0
- libcom/image_harmonization/source/src/lbm/data/filters/__init__.py +12 -0
- libcom/image_harmonization/source/src/lbm/data/filters/base.py +21 -0
- libcom/image_harmonization/source/src/lbm/data/filters/filter_wrapper.py +36 -0
- libcom/image_harmonization/source/src/lbm/data/filters/filters.py +33 -0
- libcom/image_harmonization/source/src/lbm/data/filters/filters_config.py +32 -0
- libcom/image_harmonization/source/src/lbm/data/mappers/__init__.py +19 -0
- libcom/image_harmonization/source/src/lbm/data/mappers/base.py +26 -0
- libcom/image_harmonization/source/src/lbm/data/mappers/mappers.py +135 -0
- libcom/image_harmonization/source/src/lbm/data/mappers/mappers_config.py +109 -0
- libcom/image_harmonization/source/src/lbm/data/mappers/mappers_wrapper.py +31 -0
- libcom/image_harmonization/source/src/lbm/inference/__init__.py +4 -0
- libcom/image_harmonization/source/src/lbm/inference/inference.py +70 -0
- libcom/image_harmonization/source/src/lbm/inference/utils.py +222 -0
- libcom/image_harmonization/source/src/lbm/models/__init__.py +0 -0
- libcom/image_harmonization/source/src/lbm/models/base/__init__.py +4 -0
- libcom/image_harmonization/source/src/lbm/models/base/base_model.py +66 -0
- libcom/image_harmonization/source/src/lbm/models/base/model_config.py +8 -0
- libcom/image_harmonization/source/src/lbm/models/embedders/__init__.py +4 -0
- libcom/image_harmonization/source/src/lbm/models/embedders/base/__init__.py +4 -0
- libcom/image_harmonization/source/src/lbm/models/embedders/base/base_conditioner.py +60 -0
- libcom/image_harmonization/source/src/lbm/models/embedders/base/base_conditioner_config.py +27 -0
- libcom/image_harmonization/source/src/lbm/models/embedders/conditioners_wrapper.py +114 -0
- libcom/image_harmonization/source/src/lbm/models/embedders/latents_concat/__init__.py +4 -0
- libcom/image_harmonization/source/src/lbm/models/embedders/latents_concat/latents_concat_embedder_config.py +31 -0
- libcom/image_harmonization/source/src/lbm/models/embedders/latents_concat/latents_concat_embedder_model.py +80 -0
- libcom/image_harmonization/source/src/lbm/models/lbm/__init__.py +4 -0
- libcom/image_harmonization/source/src/lbm/models/lbm/lbm_config.py +101 -0
- libcom/image_harmonization/source/src/lbm/models/lbm/lbm_model.py +359 -0
- libcom/image_harmonization/source/src/lbm/models/unets/__init__.py +14 -0
- libcom/image_harmonization/source/src/lbm/models/unets/unet.py +148 -0
- libcom/image_harmonization/source/src/lbm/models/utils.py +377 -0
- libcom/image_harmonization/source/src/lbm/models/vae/__init__.py +4 -0
- libcom/image_harmonization/source/src/lbm/models/vae/autoencoderKL.py +136 -0
- libcom/image_harmonization/source/src/lbm/models/vae/autoencoderKL_config.py +27 -0
- libcom/image_harmonization/source/src/lbm/trainer/__init__.py +85 -0
- libcom/image_harmonization/source/src/lbm/trainer/loggers.py +324 -0
- libcom/image_harmonization/source/src/lbm/trainer/trainer.py +199 -0
- libcom/image_harmonization/source/src/lbm/trainer/training_config.py +82 -0
- libcom/image_harmonization/source/src/lbm/trainer/utils.py +193 -0
- libcom/inharmonious_region_localization/__init__.py +4 -0
- libcom/inharmonious_region_localization/inharmonious_region_localization.py +97 -0
- libcom/inharmonious_region_localization/source/__init__.py +0 -0
- libcom/inharmonious_region_localization/source/blocks.py +368 -0
- libcom/inharmonious_region_localization/source/functions.py +679 -0
- libcom/inharmonious_region_localization/source/madis_net.py +79 -0
- libcom/kontext_blending_harmonization/__init__.py +3 -0
- libcom/kontext_blending_harmonization/kontext_blending_harmonization.py +148 -0
- libcom/kontext_blending_harmonization/source/__init__.py +0 -0
- libcom/kontext_blending_harmonization/source/pipeline.py +1135 -0
- libcom/naive_composition/__init__.py +3 -0
- libcom/naive_composition/generate_composite_image.py +116 -0
- libcom/opa_score/__init__.py +3 -0
- libcom/opa_score/opa_score_prediction.py +101 -0
- libcom/opa_score/source/__init__.py +3 -0
- libcom/opa_score/source/object_place_net.py +55 -0
- libcom/opa_score/source/oblect_place_config.py +66 -0
- libcom/opa_score/source/resnet_4ch.py +213 -0
- libcom/os_insert/__init__.py +3 -0
- libcom/os_insert/diffusers_osinsert/__init__.py +78 -0
- libcom/os_insert/diffusers_osinsert/_patched_pipeline_flux_fill.py +878 -0
- libcom/os_insert/os_insert.py +534 -0
- libcom/os_insert/source/__init__.py +1 -0
- libcom/os_insert/source/ia_utils.py +183 -0
- libcom/os_insert/source/insertanything_infer.py +529 -0
- libcom/os_insert/source/ldm/__init__.py +0 -0
- libcom/os_insert/source/ldm/data/__init__.py +0 -0
- libcom/os_insert/source/ldm/data/base.py +23 -0
- libcom/os_insert/source/ldm/data/datamodule.py +128 -0
- libcom/os_insert/source/ldm/data/imagenet.py +394 -0
- libcom/os_insert/source/ldm/data/lsun.py +92 -0
- libcom/os_insert/source/ldm/data/open_images.py +728 -0
- libcom/os_insert/source/ldm/lr_scheduler.py +98 -0
- libcom/os_insert/source/ldm/models/__init__.py +0 -0
- libcom/os_insert/source/ldm/models/autoencoder.py +443 -0
- libcom/os_insert/source/ldm/models/diffusion/__init__.py +0 -0
- libcom/os_insert/source/ldm/models/diffusion/classifier.py +267 -0
- libcom/os_insert/source/ldm/models/diffusion/ddim.py +263 -0
- libcom/os_insert/source/ldm/models/diffusion/ddpm.py +1417 -0
- libcom/os_insert/source/ldm/models/diffusion/plms.py +252 -0
- libcom/os_insert/source/ldm/modules/__init__.py +0 -0
- libcom/os_insert/source/ldm/modules/attention.py +261 -0
- libcom/os_insert/source/ldm/modules/diffusionmodules/__init__.py +0 -0
- libcom/os_insert/source/ldm/modules/diffusionmodules/model.py +835 -0
- libcom/os_insert/source/ldm/modules/diffusionmodules/openaimodel.py +1108 -0
- libcom/os_insert/source/ldm/modules/diffusionmodules/util.py +267 -0
- libcom/os_insert/source/ldm/modules/distributions/__init__.py +0 -0
- libcom/os_insert/source/ldm/modules/distributions/distributions.py +92 -0
- libcom/os_insert/source/ldm/modules/ema.py +76 -0
- libcom/os_insert/source/ldm/modules/encoders/__init__.py +0 -0
- libcom/os_insert/source/ldm/modules/encoders/modules.py +190 -0
- libcom/os_insert/source/ldm/modules/encoders/xf.py +130 -0
- libcom/os_insert/source/ldm/modules/losses/__init__.py +1 -0
- libcom/os_insert/source/ldm/modules/losses/contperceptual.py +111 -0
- libcom/os_insert/source/ldm/modules/losses/vqperceptual.py +167 -0
- libcom/os_insert/source/ldm/modules/x_transformer.py +641 -0
- libcom/os_insert/source/ldm/util.py +203 -0
- libcom/os_insert/source/objectstitch_data.py +66 -0
- libcom/os_insert/source/objectstitch_infer.py +618 -0
- libcom/os_insert/source/sam_on_objectstitch.py +253 -0
- libcom/os_insert/source/utils.py +41 -0
- libcom/os_insert/source/v1.yaml +108 -0
- libcom/painterly_image_harmonization/__init__.py +4 -0
- libcom/painterly_image_harmonization/painterly_image_harmonization.py +215 -0
- libcom/painterly_image_harmonization/source/PHDNet/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDNet/networks.py +202 -0
- libcom/painterly_image_harmonization/source/PHDNet/phdnet.py +47 -0
- libcom/painterly_image_harmonization/source/PHDNet/phdnet_config.py +18 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/inference_base.py +300 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/lr_scheduler.py +98 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/autoencoder.py +211 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/__init__.py +3 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddim.py +336 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddpm.py +1400 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/__init__.py +1 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/dpm_solver.py +1217 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/sampler.py +87 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/plms.py +243 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/scheduling_pndm.py +518 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/attention.py +378 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/model.py +857 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/openaimodel.py +823 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/util.py +270 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions/distributions.py +92 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/ema.py +80 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/adapter.py +213 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/modules.py +82 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/__init__.py +1 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/api.py +269 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/api.py +175 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/base_model.py +16 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/blocks.py +342 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/dpt_depth.py +109 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/midas_net.py +76 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/midas_net_custom.py +128 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/transforms.py +234 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/vit.py +491 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/utils.py +189 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/model_edge.py +653 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/api.py +35 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/body.py +209 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/hand.py +75 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/model.py +178 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/util.py +203 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/utils.py +72 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion/__init__.py +0 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion/dual_encoder_fusion.py +93 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/__init__.py +2 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan.py +730 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan_light.py +651 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/utils_image.py +916 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/ldm/util.py +200 -0
- libcom/painterly_image_harmonization/source/PHDiffusion/stable_diffusion.yaml +75 -0
- libcom/painterly_image_harmonization/source/__init__.py +0 -0
- libcom/reflection_generation/__init__.py +3 -0
- libcom/reflection_generation/reflection_generation.py +174 -0
- libcom/reflection_generation/source/PostProcessModel.py +513 -0
- libcom/reflection_generation/source/__init__.py +0 -0
- libcom/reflection_generation/source/cldm/__init__.py +0 -0
- libcom/reflection_generation/source/cldm/base_network.py +166 -0
- libcom/reflection_generation/source/cldm/cldm.py +509 -0
- libcom/reflection_generation/source/cldm/ddim_hacked.py +317 -0
- libcom/reflection_generation/source/cldm/hack.py +111 -0
- libcom/reflection_generation/source/cldm/logger.py +127 -0
- libcom/reflection_generation/source/cldm/model.py +26 -0
- libcom/reflection_generation/source/cldm_v15.yaml +81 -0
- libcom/reflection_generation/source/cluster_feature.py +109 -0
- libcom/reflection_generation/source/ldm/__init__.py +0 -0
- libcom/reflection_generation/source/ldm/models/__init__.py +0 -0
- libcom/reflection_generation/source/ldm/models/autoencoder.py +219 -0
- libcom/reflection_generation/source/ldm/models/diffusion/__init__.py +0 -0
- libcom/reflection_generation/source/ldm/models/diffusion/attention_processor.py +188 -0
- libcom/reflection_generation/source/ldm/models/diffusion/ddim.py +340 -0
- libcom/reflection_generation/source/ldm/models/diffusion/ddpm.py +1892 -0
- libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/__init__.py +1 -0
- libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/dpm_solver.py +1154 -0
- libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/sampler.py +87 -0
- libcom/reflection_generation/source/ldm/models/diffusion/ip_adapter.py +57 -0
- libcom/reflection_generation/source/ldm/models/diffusion/plms.py +244 -0
- libcom/reflection_generation/source/ldm/models/diffusion/sampling_util.py +22 -0
- libcom/reflection_generation/source/ldm/modules/__init__.py +0 -0
- libcom/reflection_generation/source/ldm/modules/attention.py +341 -0
- libcom/reflection_generation/source/ldm/modules/diffusionmodules/__init__.py +0 -0
- libcom/reflection_generation/source/ldm/modules/diffusionmodules/model.py +852 -0
- libcom/reflection_generation/source/ldm/modules/diffusionmodules/openaimodel.py +786 -0
- libcom/reflection_generation/source/ldm/modules/diffusionmodules/upscaling.py +81 -0
- libcom/reflection_generation/source/ldm/modules/diffusionmodules/util.py +280 -0
- libcom/reflection_generation/source/ldm/modules/distributions/__init__.py +0 -0
- libcom/reflection_generation/source/ldm/modules/distributions/distributions.py +92 -0
- libcom/reflection_generation/source/ldm/modules/ema.py +80 -0
- libcom/reflection_generation/source/ldm/modules/encoders/__init__.py +0 -0
- libcom/reflection_generation/source/ldm/modules/encoders/modules.py +214 -0
- libcom/reflection_generation/source/ldm/modules/image_degradation/__init__.py +0 -0
- libcom/reflection_generation/source/ldm/modules/image_degradation/bsrgan.py +730 -0
- libcom/reflection_generation/source/ldm/modules/image_degradation/bsrgan_light.py +651 -0
- libcom/reflection_generation/source/ldm/modules/image_degradation/utils_image.py +916 -0
- libcom/reflection_generation/source/ldm/util.py +198 -0
- libcom/reflection_generation/source/local_clip.py +749 -0
- libcom/reflection_generation/source/tool_add_control.py +49 -0
- libcom/shadow_generation/__init__.py +3 -0
- libcom/shadow_generation/shadow_generation.py +754 -0
- libcom/shadow_generation/source/PostProcessModel.py +511 -0
- libcom/shadow_generation/source/__init__.py +0 -0
- libcom/shadow_generation/source/attention_processor.py +234 -0
- libcom/shadow_generation/source/cldm/__init__.py +0 -0
- libcom/shadow_generation/source/cldm/base_network.py +166 -0
- libcom/shadow_generation/source/cldm/cldm.py +524 -0
- libcom/shadow_generation/source/cldm/model.py +28 -0
- libcom/shadow_generation/source/ldm/__init__.py +0 -0
- libcom/shadow_generation/source/ldm/models/__init__.py +0 -0
- libcom/shadow_generation/source/ldm/models/autoencoder.py +219 -0
- libcom/shadow_generation/source/ldm/models/diffusion/__init__.py +0 -0
- libcom/shadow_generation/source/ldm/models/diffusion/attention_processor.py +188 -0
- libcom/shadow_generation/source/ldm/models/diffusion/ddim.py +340 -0
- libcom/shadow_generation/source/ldm/models/diffusion/ddpm.py +1893 -0
- libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/__init__.py +1 -0
- libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/dpm_solver.py +1154 -0
- libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/sampler.py +87 -0
- libcom/shadow_generation/source/ldm/models/diffusion/ip_adapter.py +57 -0
- libcom/shadow_generation/source/ldm/models/diffusion/plms.py +244 -0
- libcom/shadow_generation/source/ldm/models/diffusion/sampling_util.py +22 -0
- libcom/shadow_generation/source/ldm/modules/__init__.py +0 -0
- libcom/shadow_generation/source/ldm/modules/attention.py +341 -0
- libcom/shadow_generation/source/ldm/modules/diffusionmodules/__init__.py +0 -0
- libcom/shadow_generation/source/ldm/modules/diffusionmodules/model.py +852 -0
- libcom/shadow_generation/source/ldm/modules/diffusionmodules/openaimodel.py +786 -0
- libcom/shadow_generation/source/ldm/modules/diffusionmodules/upscaling.py +81 -0
- libcom/shadow_generation/source/ldm/modules/diffusionmodules/util.py +270 -0
- libcom/shadow_generation/source/ldm/modules/distributions/__init__.py +0 -0
- libcom/shadow_generation/source/ldm/modules/distributions/distributions.py +92 -0
- libcom/shadow_generation/source/ldm/modules/ema.py +80 -0
- libcom/shadow_generation/source/ldm/modules/encoders/__init__.py +0 -0
- libcom/shadow_generation/source/ldm/modules/encoders/modules.py +214 -0
- libcom/shadow_generation/source/ldm/modules/image_degradation/__init__.py +2 -0
- libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan.py +730 -0
- libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan_light.py +651 -0
- libcom/shadow_generation/source/ldm/modules/image_degradation/utils_image.py +916 -0
- libcom/shadow_generation/source/ldm/modules/midas/__init__.py +0 -0
- libcom/shadow_generation/source/ldm/modules/midas/api.py +170 -0
- libcom/shadow_generation/source/ldm/modules/midas/midas/__init__.py +0 -0
- libcom/shadow_generation/source/ldm/modules/midas/midas/base_model.py +16 -0
- libcom/shadow_generation/source/ldm/modules/midas/midas/blocks.py +342 -0
- libcom/shadow_generation/source/ldm/modules/midas/midas/dpt_depth.py +109 -0
- libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net.py +76 -0
- libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net_custom.py +128 -0
- libcom/shadow_generation/source/ldm/modules/midas/midas/transforms.py +234 -0
- libcom/shadow_generation/source/ldm/modules/midas/midas/vit.py +491 -0
- libcom/shadow_generation/source/ldm/modules/midas/utils.py +189 -0
- libcom/shadow_generation/source/ldm/util.py +199 -0
- libcom/utils/__init__.py +0 -0
- libcom/utils/environment.py +12 -0
- libcom/utils/model_download.py +67 -0
- libcom/utils/process_image.py +108 -0
- libcom-0.1.8.dist-info/METADATA +157 -0
- libcom-0.1.8.dist-info/RECORD +310 -0
- libcom-0.1.8.dist-info/WHEEL +5 -0
- libcom-0.1.8.dist-info/licenses/LICENSE +201 -0
- libcom-0.1.8.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Union
|
|
2
|
+
|
|
3
|
+
from .base import BaseFilter
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class FilterWrapper:
|
|
7
|
+
"""
|
|
8
|
+
Wrapper for multiple filters. This class allows to apply multiple filters to a batch of data.
|
|
9
|
+
The filters are applied in the order they are passed to the wrapper.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
|
|
13
|
+
filters (List[BaseFilter]):
|
|
14
|
+
List of filters to apply to the batch of data
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
filters: Union[List[BaseFilter], None] = None,
|
|
20
|
+
):
|
|
21
|
+
self.filters = filters
|
|
22
|
+
|
|
23
|
+
def __call__(self, batch: Dict[str, Any]) -> None:
|
|
24
|
+
"""
|
|
25
|
+
Forward pass through all filters
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
|
|
29
|
+
batch: batch of data
|
|
30
|
+
"""
|
|
31
|
+
filter_output = True
|
|
32
|
+
for filter in self.filters:
|
|
33
|
+
filter_output = filter(batch)
|
|
34
|
+
if not filter_output:
|
|
35
|
+
return False
|
|
36
|
+
return True
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from .base import BaseFilter
|
|
4
|
+
from .filters_config import KeyFilterConfig
|
|
5
|
+
|
|
6
|
+
logging.basicConfig(level=logging.INFO)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class KeyFilter(BaseFilter):
|
|
10
|
+
"""
|
|
11
|
+
This filter checks if ALL the given keys are present in the sample
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
|
|
15
|
+
config (KeyFilterConfig): configuration for the filter
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, config: KeyFilterConfig):
|
|
19
|
+
super().__init__(config)
|
|
20
|
+
keys = config.keys
|
|
21
|
+
if isinstance(keys, str):
|
|
22
|
+
keys = [keys]
|
|
23
|
+
|
|
24
|
+
self.keys = set(keys)
|
|
25
|
+
|
|
26
|
+
def __call__(self, batch: dict) -> bool:
|
|
27
|
+
try:
|
|
28
|
+
res = self.keys.issubset(set(batch.keys()))
|
|
29
|
+
return res
|
|
30
|
+
except Exception as e:
|
|
31
|
+
if self.verbose:
|
|
32
|
+
logging.error(f"Error in KeyFilter: {e}")
|
|
33
|
+
return False
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from typing import List, Union
|
|
2
|
+
|
|
3
|
+
from pydantic.dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
from ...config import BaseConfig
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class BaseFilterConfig(BaseConfig):
|
|
10
|
+
"""
|
|
11
|
+
Base configuration for filters
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
|
|
15
|
+
verbose (bool):
|
|
16
|
+
If True, print debug information. Defaults to False"""
|
|
17
|
+
|
|
18
|
+
verbose: bool = False
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass
|
|
22
|
+
class KeyFilterConfig(BaseFilterConfig):
|
|
23
|
+
"""
|
|
24
|
+
This filter checks if the keys are present in a sample.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
|
|
28
|
+
keys (Union[str, List[str]]):
|
|
29
|
+
Key or list of keys to check. Defaults to "txt"
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
keys: Union[str, List[str]] = "txt"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from .base import BaseMapper
|
|
2
|
+
from .mappers import KeyRenameMapper, RescaleMapper, TorchvisionMapper
|
|
3
|
+
from .mappers_config import (
|
|
4
|
+
KeyRenameMapperConfig,
|
|
5
|
+
RescaleMapperConfig,
|
|
6
|
+
TorchvisionMapperConfig,
|
|
7
|
+
)
|
|
8
|
+
from .mappers_wrapper import MapperWrapper
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"BaseMapper",
|
|
12
|
+
"KeyRenameMapper",
|
|
13
|
+
"RescaleMapper",
|
|
14
|
+
"TorchvisionMapper",
|
|
15
|
+
"KeyRenameMapperConfig",
|
|
16
|
+
"RescaleMapperConfig",
|
|
17
|
+
"TorchvisionMapperConfig",
|
|
18
|
+
"MapperWrapper",
|
|
19
|
+
]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
|
|
3
|
+
from .mappers_config import BaseMapperConfig
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class BaseMapper:
|
|
7
|
+
"""
|
|
8
|
+
Base class for the mappers used to modify the samples in the data pipeline.
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
|
|
12
|
+
config (BaseMapperConfig):
|
|
13
|
+
Configuration for the mapper.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, config: BaseMapperConfig):
|
|
17
|
+
self.config = config
|
|
18
|
+
self.key = config.key
|
|
19
|
+
|
|
20
|
+
if config.output_key is None:
|
|
21
|
+
self.output_key = config.key
|
|
22
|
+
else:
|
|
23
|
+
self.output_key = config.output_key
|
|
24
|
+
|
|
25
|
+
def map(self, batch: Dict[str, Any], *args, **kwargs) -> Dict[str, Any]:
|
|
26
|
+
raise NotImplementedError
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
|
|
3
|
+
from torchvision import transforms
|
|
4
|
+
|
|
5
|
+
from .base import BaseMapper
|
|
6
|
+
from .mappers_config import (
|
|
7
|
+
KeyRenameMapperConfig,
|
|
8
|
+
RescaleMapperConfig,
|
|
9
|
+
TorchvisionMapperConfig,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class KeyRenameMapper(BaseMapper):
|
|
14
|
+
"""
|
|
15
|
+
Rename keys in a sample according to a key map
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
|
|
19
|
+
config (KeyRenameMapperConfig): Configuration for the mapper
|
|
20
|
+
|
|
21
|
+
Examples
|
|
22
|
+
########
|
|
23
|
+
|
|
24
|
+
1. Rename keys in a sample according to a key map
|
|
25
|
+
|
|
26
|
+
.. code-block:: python
|
|
27
|
+
|
|
28
|
+
from cr.data.mappers import KeyRenameMapper, KeyRenameMapperConfig
|
|
29
|
+
|
|
30
|
+
config = KeyRenameMapperConfig(
|
|
31
|
+
key_map={"old_key": "new_key"}
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
mapper = KeyRenameMapper(config)
|
|
35
|
+
|
|
36
|
+
sample = {"old_key": 1}
|
|
37
|
+
new_sample = mapper(sample)
|
|
38
|
+
print(new_sample) # {"new_key": 1}
|
|
39
|
+
|
|
40
|
+
2. Rename keys in a sample according to a key map and a condition key
|
|
41
|
+
|
|
42
|
+
.. code-block:: python
|
|
43
|
+
|
|
44
|
+
from cr.data.mappers import KeyRenameMapper, KeyRenameMapperConfig
|
|
45
|
+
|
|
46
|
+
config = KeyRenameMapperConfig(
|
|
47
|
+
key_map={"old_key": "new_key"},
|
|
48
|
+
condition_key="condition",
|
|
49
|
+
condition_fn=lambda x: x == 1
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
mapper = KeyRenameMapper(config)
|
|
53
|
+
|
|
54
|
+
sample = {"old_key": 1, "condition": 1}
|
|
55
|
+
new_sample = mapper(sample)
|
|
56
|
+
print(new_sample) # {"new_key": 1}
|
|
57
|
+
|
|
58
|
+
sample = {"old_key": 1, "condition": 0}
|
|
59
|
+
new_sample = mapper(sample)
|
|
60
|
+
print(new_sample) # {"old_key": 1}
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
def __init__(self, config: KeyRenameMapperConfig):
|
|
66
|
+
super().__init__(config)
|
|
67
|
+
self.key_map = config.key_map
|
|
68
|
+
self.condition_key = config.condition_key
|
|
69
|
+
self.condition_fn = config.condition_fn
|
|
70
|
+
self.else_key_map = config.else_key_map
|
|
71
|
+
|
|
72
|
+
def __call__(self, batch: Dict[str, Any], *args, **kwrags):
|
|
73
|
+
if self.condition_key is not None:
|
|
74
|
+
condition_key = batch[self.condition_key]
|
|
75
|
+
if self.condition_fn(condition_key):
|
|
76
|
+
for old_key, new_key in self.key_map.items():
|
|
77
|
+
if old_key in batch:
|
|
78
|
+
batch[new_key] = batch.pop(old_key)
|
|
79
|
+
|
|
80
|
+
elif self.else_key_map is not None:
|
|
81
|
+
for old_key, new_key in self.else_key_map.items():
|
|
82
|
+
if old_key in batch:
|
|
83
|
+
batch[new_key] = batch.pop(old_key)
|
|
84
|
+
|
|
85
|
+
else:
|
|
86
|
+
for old_key, new_key in self.key_map.items():
|
|
87
|
+
if old_key in batch:
|
|
88
|
+
batch[new_key] = batch.pop(old_key)
|
|
89
|
+
return batch
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class TorchvisionMapper(BaseMapper):
|
|
93
|
+
"""
|
|
94
|
+
Apply torchvision transforms to a sample
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
|
|
98
|
+
config (TorchvisionMapperConfig): Configuration for the mapper
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
def __init__(self, config: TorchvisionMapperConfig):
|
|
102
|
+
super().__init__(config)
|
|
103
|
+
chained_transforms = []
|
|
104
|
+
for transform, kwargs in zip(config.transforms, config.transforms_kwargs):
|
|
105
|
+
transform = getattr(transforms, transform)
|
|
106
|
+
chained_transforms.append(transform(**kwargs))
|
|
107
|
+
self.transforms = transforms.Compose(chained_transforms)
|
|
108
|
+
|
|
109
|
+
def __call__(self, batch: Dict[str, Any], *args, **kwrags) -> Dict[str, Any]:
|
|
110
|
+
if self.key in batch:
|
|
111
|
+
batch[self.output_key] = self.transforms(batch[self.key])
|
|
112
|
+
return batch
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class RescaleMapper(BaseMapper):
|
|
116
|
+
"""
|
|
117
|
+
Rescale a sample from [0, 1] to [-1, 1]
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
|
|
121
|
+
config (RescaleMapperConfig): Configuration for the mapper
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
def __init__(self, config: RescaleMapperConfig):
|
|
125
|
+
super().__init__(config)
|
|
126
|
+
|
|
127
|
+
def __call__(self, batch: Dict[str, Any], *args, **kwrags) -> Dict[str, Any]:
|
|
128
|
+
if isinstance(batch[self.key], list):
|
|
129
|
+
tmp = []
|
|
130
|
+
for i, image in enumerate(batch[self.key]):
|
|
131
|
+
tmp.append(2 * image - 1)
|
|
132
|
+
batch[self.output_key] = tmp
|
|
133
|
+
else:
|
|
134
|
+
batch[self.output_key] = 2 * batch[self.key] - 1
|
|
135
|
+
return batch
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
from typing import Any, Callable, Dict, List, Optional
|
|
2
|
+
|
|
3
|
+
from pydantic.dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
from ...config import BaseConfig
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class BaseMapperConfig(BaseConfig):
|
|
10
|
+
"""
|
|
11
|
+
Base configuration for mappers.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
|
|
15
|
+
verbose (bool):
|
|
16
|
+
If True, print debug information. Defaults to False
|
|
17
|
+
|
|
18
|
+
key (Optional[str]):
|
|
19
|
+
Key to apply the mapper to. Defaults to None
|
|
20
|
+
|
|
21
|
+
output_key (Optional[str]):
|
|
22
|
+
Key to store the output of the mapper. Defaults to None
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
verbose: bool = False
|
|
26
|
+
key: Optional[str] = None
|
|
27
|
+
output_key: Optional[str] = None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class KeyRenameMapperConfig(BaseMapperConfig):
|
|
32
|
+
"""
|
|
33
|
+
Rename keys in a sample according to a key map
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
|
|
37
|
+
key_map (Dict[str, str]): Dictionary with the old keys as keys and the new keys as values
|
|
38
|
+
condition_key (Optional[str]): Key to use for the condition. Defaults to None
|
|
39
|
+
condition_fn (Optional[Callable[[Any], bool]]): Function to use for the condition to be met so
|
|
40
|
+
the key map is applied. Defaults to None.
|
|
41
|
+
else_key_map (Optional[Dict[str, str]]): Dictionary with the old keys as keys and the new keys as values
|
|
42
|
+
if the condition is not met. Defaults to None *i.e.* the original key will be used.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
key_map: Dict[str, str] = None
|
|
46
|
+
condition_key: Optional[str] = None
|
|
47
|
+
condition_fn: Optional[Callable[[Any], bool]] = None
|
|
48
|
+
else_key_map: Optional[Dict[str, str]] = None
|
|
49
|
+
|
|
50
|
+
def __post_init__(self):
|
|
51
|
+
super().__post_init__()
|
|
52
|
+
assert self.key_map is not None, "key_map should be provided"
|
|
53
|
+
assert all(
|
|
54
|
+
isinstance(old_key, str) and isinstance(new_key, str)
|
|
55
|
+
for old_key, new_key in self.key_map.items()
|
|
56
|
+
), "key_map should be a dictionary with string keys and values"
|
|
57
|
+
if self.condition_key is not None:
|
|
58
|
+
assert self.condition_fn is not None, "condition_fn should be provided"
|
|
59
|
+
assert callable(self.condition_fn), "condition_fn should be callable"
|
|
60
|
+
if self.condition_fn is not None:
|
|
61
|
+
assert self.condition_key is not None, "condition_key should be provided"
|
|
62
|
+
assert isinstance(
|
|
63
|
+
self.condition_key, str
|
|
64
|
+
), "condition_key should be a string"
|
|
65
|
+
if self.else_key_map is not None:
|
|
66
|
+
assert all(
|
|
67
|
+
isinstance(old_key, str) and isinstance(new_key, str)
|
|
68
|
+
for old_key, new_key in self.else_key_map.items()
|
|
69
|
+
), "else_key_map should be a dictionary with string keys and values"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@dataclass
|
|
73
|
+
class TorchvisionMapperConfig(BaseMapperConfig):
|
|
74
|
+
"""
|
|
75
|
+
Apply torchvision transforms to a sample
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
|
|
79
|
+
key (str): Key to apply the transforms to
|
|
80
|
+
transforms (torchvision.transforms): List of torchvision transforms to apply
|
|
81
|
+
transforms_kwargs (Dict[str, Any]): List of kwargs for the transforms
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
key: str = "image"
|
|
85
|
+
transforms: List[str] = None
|
|
86
|
+
transforms_kwargs: List[Dict[str, Any]] = None
|
|
87
|
+
|
|
88
|
+
def __post_init__(self):
|
|
89
|
+
super().__post_init__()
|
|
90
|
+
if self.transforms is None:
|
|
91
|
+
self.transforms = []
|
|
92
|
+
if self.transforms_kwargs is None:
|
|
93
|
+
self.transforms_kwargs = []
|
|
94
|
+
assert len(self.transforms) == len(
|
|
95
|
+
self.transforms_kwargs
|
|
96
|
+
), "Number of transforms and kwargs should be same"
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@dataclass
|
|
100
|
+
class RescaleMapperConfig(BaseMapperConfig):
|
|
101
|
+
"""
|
|
102
|
+
Rescale a sample from [0, 1] to [-1, 1]
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
|
|
106
|
+
key (str): Key to rescale
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
key: str = "image"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Union
|
|
2
|
+
|
|
3
|
+
from .base import BaseMapper
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MapperWrapper:
|
|
7
|
+
"""
|
|
8
|
+
Wrapper for the mappers to allow iterating over several mappers in one go.
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
|
|
12
|
+
mappers (Union[List[BaseMapper], None]): List of mappers to apply to the batch
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
mappers: Union[List[BaseMapper], None] = None,
|
|
18
|
+
):
|
|
19
|
+
self.mappers = mappers
|
|
20
|
+
|
|
21
|
+
def __call__(self, batch: Dict[str, Any]) -> Dict[str, Any]:
|
|
22
|
+
"""
|
|
23
|
+
Forward pass through all mappers
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
|
|
27
|
+
batch (Dict[str, Any]): batch of data
|
|
28
|
+
"""
|
|
29
|
+
for mapper in self.mappers:
|
|
30
|
+
batch = mapper(batch)
|
|
31
|
+
return batch
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
import PIL
|
|
4
|
+
import torch
|
|
5
|
+
from torchvision.transforms import ToPILImage, ToTensor
|
|
6
|
+
|
|
7
|
+
from lbm.models.lbm import LBMModel
|
|
8
|
+
|
|
9
|
+
logging.basicConfig(level=logging.INFO)
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
ASPECT_RATIOS = {
|
|
13
|
+
str(512 / 2048): (512, 2048),
|
|
14
|
+
str(1024 / 1024): (1024, 1024),
|
|
15
|
+
str(2048 / 512): (2048, 512),
|
|
16
|
+
str(896 / 1152): (896, 1152),
|
|
17
|
+
str(1152 / 896): (1152, 896),
|
|
18
|
+
str(512 / 1920): (512, 1920),
|
|
19
|
+
str(640 / 1536): (640, 1536),
|
|
20
|
+
str(768 / 1280): (768, 1280),
|
|
21
|
+
str(1280 / 768): (1280, 768),
|
|
22
|
+
str(1536 / 640): (1536, 640),
|
|
23
|
+
str(1920 / 512): (1920, 512),
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@torch.no_grad()
|
|
28
|
+
def evaluate(
|
|
29
|
+
model: LBMModel,
|
|
30
|
+
source_image: PIL.Image.Image,
|
|
31
|
+
num_sampling_steps: int = 1,
|
|
32
|
+
):
|
|
33
|
+
"""
|
|
34
|
+
Evaluate the model on an image coming from the source distribution and generate a new image from the target distribution.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
model (LBMModel): The model to evaluate.
|
|
38
|
+
source_image (PIL.Image.Image): The source image to evaluate the model on.
|
|
39
|
+
num_sampling_steps (int): The number of sampling steps to use for the model.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
PIL.Image.Image: The generated image.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
ori_h_bg, ori_w_bg = source_image.size
|
|
46
|
+
ar_bg = ori_h_bg / ori_w_bg
|
|
47
|
+
closest_ar_bg = min(ASPECT_RATIOS, key=lambda x: abs(float(x) - ar_bg))
|
|
48
|
+
source_dimensions = ASPECT_RATIOS[closest_ar_bg]
|
|
49
|
+
|
|
50
|
+
source_image = source_image.resize(source_dimensions)
|
|
51
|
+
|
|
52
|
+
img_pasted_tensor = ToTensor()(source_image).unsqueeze(0) * 2 - 1
|
|
53
|
+
batch = {
|
|
54
|
+
"source_image": img_pasted_tensor.cuda().to(torch.bfloat16),
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
z_source = model.vae.encode(batch[model.source_key])
|
|
58
|
+
|
|
59
|
+
output_image = model.sample(
|
|
60
|
+
z=z_source,
|
|
61
|
+
num_steps=num_sampling_steps,
|
|
62
|
+
conditioner_inputs=batch,
|
|
63
|
+
max_samples=1,
|
|
64
|
+
).clamp(-1, 1)
|
|
65
|
+
|
|
66
|
+
output_image = (output_image[0].float().cpu() + 1) / 2
|
|
67
|
+
output_image = ToPILImage()(output_image)
|
|
68
|
+
output_image.resize((ori_h_bg, ori_w_bg))
|
|
69
|
+
|
|
70
|
+
return output_image
|