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,524 @@
|
|
|
1
|
+
import einops
|
|
2
|
+
import torch
|
|
3
|
+
import torch as th
|
|
4
|
+
import torch.nn as nn
|
|
5
|
+
import torch.nn.functional as F
|
|
6
|
+
import os
|
|
7
|
+
import pickle
|
|
8
|
+
import cv2
|
|
9
|
+
|
|
10
|
+
from libcom.shadow_generation.source.ldm.modules.diffusionmodules.util import (
|
|
11
|
+
conv_nd,
|
|
12
|
+
linear,
|
|
13
|
+
zero_module,
|
|
14
|
+
timestep_embedding,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
from einops import rearrange, repeat
|
|
18
|
+
from torchvision.utils import make_grid
|
|
19
|
+
from libcom.shadow_generation.source.ldm.modules.attention import SpatialTransformer
|
|
20
|
+
from libcom.shadow_generation.source.ldm.modules.diffusionmodules.openaimodel import UNetModel, TimestepEmbedSequential, ResBlock, Downsample, AttentionBlock
|
|
21
|
+
from libcom.shadow_generation.source.ldm.models.diffusion.ddpm import LatentDiffusion
|
|
22
|
+
from libcom.shadow_generation.source.ldm.util import log_txt_as_img, exists, instantiate_from_config
|
|
23
|
+
from libcom.shadow_generation.source.ldm.models.diffusion.ddim import DDIMSampler
|
|
24
|
+
import numpy as np
|
|
25
|
+
from .base_network import MaskCls, RegNetwork
|
|
26
|
+
import torchvision.models as models
|
|
27
|
+
|
|
28
|
+
class ControlledUnetModel(UNetModel):
|
|
29
|
+
|
|
30
|
+
def forward(self, x, timesteps=None, context=None, control=None, only_mid_control=False, get_stable_features=False, remask=None, **kwargs):
|
|
31
|
+
if remask is not None:
|
|
32
|
+
return self.out(remask)
|
|
33
|
+
hs = []
|
|
34
|
+
with torch.no_grad():
|
|
35
|
+
t_emb = timestep_embedding(timesteps, self.model_channels, repeat_only=False)
|
|
36
|
+
emb = self.time_embed(t_emb)
|
|
37
|
+
h = x.type(self.dtype)
|
|
38
|
+
for module in self.input_blocks:
|
|
39
|
+
h = module(h, emb, context)
|
|
40
|
+
hs.append(h)
|
|
41
|
+
h = self.middle_block(h, emb, context)
|
|
42
|
+
encoder_features = hs.copy()
|
|
43
|
+
unet_features = h.clone()
|
|
44
|
+
decoder_features = []
|
|
45
|
+
if control is not None:
|
|
46
|
+
h += control.pop()
|
|
47
|
+
|
|
48
|
+
for i, module in enumerate(self.output_blocks):
|
|
49
|
+
if only_mid_control or control is None:
|
|
50
|
+
h = torch.cat([h, hs.pop()], dim=1)
|
|
51
|
+
else:
|
|
52
|
+
h = torch.cat([h, hs.pop() + control.pop()], dim=1)
|
|
53
|
+
h = module(h, emb, context)
|
|
54
|
+
decoder_features.append(h)
|
|
55
|
+
h = h.type(x.dtype)
|
|
56
|
+
if get_stable_features:
|
|
57
|
+
return self.out(h), [unet_features, encoder_features, decoder_features]
|
|
58
|
+
return self.out(h)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class ControlNet(nn.Module):
|
|
62
|
+
def __init__(
|
|
63
|
+
self,
|
|
64
|
+
image_size,
|
|
65
|
+
in_channels,
|
|
66
|
+
model_channels,
|
|
67
|
+
hint_channels,
|
|
68
|
+
num_res_blocks,
|
|
69
|
+
attention_resolutions,
|
|
70
|
+
dropout=0,
|
|
71
|
+
channel_mult=(1, 2, 4, 8),
|
|
72
|
+
conv_resample=True,
|
|
73
|
+
dims=2,
|
|
74
|
+
use_checkpoint=False,
|
|
75
|
+
use_fp16=False,
|
|
76
|
+
num_heads=-1,
|
|
77
|
+
num_head_channels=-1,
|
|
78
|
+
num_heads_upsample=-1,
|
|
79
|
+
use_scale_shift_norm=False,
|
|
80
|
+
resblock_updown=False,
|
|
81
|
+
use_new_attention_order=False,
|
|
82
|
+
use_spatial_transformer=False, # custom transformer support
|
|
83
|
+
transformer_depth=1, # custom transformer support
|
|
84
|
+
context_dim=None, # custom transformer support
|
|
85
|
+
n_embed=None, # custom support for prediction of discrete ids into codebook of first stage vq model
|
|
86
|
+
legacy=True,
|
|
87
|
+
disable_self_attentions=None,
|
|
88
|
+
num_attention_blocks=None,
|
|
89
|
+
disable_middle_self_attn=False,
|
|
90
|
+
use_linear_in_transformer=False,
|
|
91
|
+
):
|
|
92
|
+
super().__init__()
|
|
93
|
+
if use_spatial_transformer:
|
|
94
|
+
assert context_dim is not None, 'Fool!! You forgot to include the dimension of your cross-attention conditioning...'
|
|
95
|
+
|
|
96
|
+
if context_dim is not None:
|
|
97
|
+
assert use_spatial_transformer, 'Fool!! You forgot to use the spatial transformer for your cross-attention conditioning...'
|
|
98
|
+
from omegaconf.listconfig import ListConfig
|
|
99
|
+
if type(context_dim) == ListConfig:
|
|
100
|
+
context_dim = list(context_dim)
|
|
101
|
+
|
|
102
|
+
if num_heads_upsample == -1:
|
|
103
|
+
num_heads_upsample = num_heads
|
|
104
|
+
|
|
105
|
+
if num_heads == -1:
|
|
106
|
+
assert num_head_channels != -1, 'Either num_heads or num_head_channels has to be set'
|
|
107
|
+
|
|
108
|
+
if num_head_channels == -1:
|
|
109
|
+
assert num_heads != -1, 'Either num_heads or num_head_channels has to be set'
|
|
110
|
+
|
|
111
|
+
self.dims = dims
|
|
112
|
+
self.image_size = image_size
|
|
113
|
+
self.in_channels = in_channels
|
|
114
|
+
self.model_channels = model_channels
|
|
115
|
+
if isinstance(num_res_blocks, int):
|
|
116
|
+
self.num_res_blocks = len(channel_mult) * [num_res_blocks]
|
|
117
|
+
else:
|
|
118
|
+
if len(num_res_blocks) != len(channel_mult):
|
|
119
|
+
raise ValueError("provide num_res_blocks either as an int (globally constant) or "
|
|
120
|
+
"as a list/tuple (per-level) with the same length as channel_mult")
|
|
121
|
+
self.num_res_blocks = num_res_blocks
|
|
122
|
+
if disable_self_attentions is not None:
|
|
123
|
+
# should be a list of booleans, indicating whether to disable self-attention in TransformerBlocks or not
|
|
124
|
+
assert len(disable_self_attentions) == len(channel_mult)
|
|
125
|
+
if num_attention_blocks is not None:
|
|
126
|
+
assert len(num_attention_blocks) == len(self.num_res_blocks)
|
|
127
|
+
assert all(map(lambda i: self.num_res_blocks[i] >= num_attention_blocks[i], range(len(num_attention_blocks))))
|
|
128
|
+
print(f"Constructor of UNetModel received num_attention_blocks={num_attention_blocks}. "
|
|
129
|
+
f"This option has LESS priority than attention_resolutions {attention_resolutions}, "
|
|
130
|
+
f"i.e., in cases where num_attention_blocks[i] > 0 but 2**i not in attention_resolutions, "
|
|
131
|
+
f"attention will still not be set.")
|
|
132
|
+
|
|
133
|
+
self.attention_resolutions = attention_resolutions
|
|
134
|
+
self.dropout = dropout
|
|
135
|
+
self.channel_mult = channel_mult
|
|
136
|
+
self.conv_resample = conv_resample
|
|
137
|
+
self.use_checkpoint = use_checkpoint
|
|
138
|
+
self.dtype = th.float16 if use_fp16 else th.float32
|
|
139
|
+
self.num_heads = num_heads
|
|
140
|
+
self.num_head_channels = num_head_channels
|
|
141
|
+
self.num_heads_upsample = num_heads_upsample
|
|
142
|
+
self.predict_codebook_ids = n_embed is not None
|
|
143
|
+
self.add_color_channel = 0
|
|
144
|
+
|
|
145
|
+
time_embed_dim = model_channels * 4
|
|
146
|
+
self.time_embed = nn.Sequential(
|
|
147
|
+
linear(model_channels, time_embed_dim),
|
|
148
|
+
nn.SiLU(),
|
|
149
|
+
linear(time_embed_dim, time_embed_dim),
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
self.input_blocks = nn.ModuleList(
|
|
153
|
+
[
|
|
154
|
+
TimestepEmbedSequential(
|
|
155
|
+
conv_nd(dims, in_channels, model_channels, 3, padding=1)
|
|
156
|
+
)
|
|
157
|
+
]
|
|
158
|
+
)
|
|
159
|
+
self.zero_convs = nn.ModuleList([self.make_zero_conv(model_channels, self.add_color_channel)])
|
|
160
|
+
|
|
161
|
+
self.input_hint_block = TimestepEmbedSequential(
|
|
162
|
+
conv_nd(dims, 5, 16, 3, padding=1), #TODO
|
|
163
|
+
nn.SiLU(),
|
|
164
|
+
conv_nd(dims, 16, 16, 3, padding=1),
|
|
165
|
+
nn.SiLU(),
|
|
166
|
+
conv_nd(dims, 16, 32, 3, padding=1, stride=2),
|
|
167
|
+
nn.SiLU(),
|
|
168
|
+
conv_nd(dims, 32, 32, 3, padding=1),
|
|
169
|
+
nn.SiLU(),
|
|
170
|
+
conv_nd(dims, 32, 96, 3, padding=1, stride=2),
|
|
171
|
+
nn.SiLU(),
|
|
172
|
+
conv_nd(dims, 96, 96, 3, padding=1),
|
|
173
|
+
nn.SiLU(),
|
|
174
|
+
conv_nd(dims, 96, 256, 3, padding=1, stride=2),
|
|
175
|
+
nn.SiLU(),
|
|
176
|
+
zero_module(conv_nd(dims, 256, model_channels, 3, padding=1))
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
self._feature_size = model_channels
|
|
180
|
+
input_block_chans = [model_channels]
|
|
181
|
+
ch = model_channels
|
|
182
|
+
ds = 1
|
|
183
|
+
for level, mult in enumerate(channel_mult):
|
|
184
|
+
for nr in range(self.num_res_blocks[level]):
|
|
185
|
+
layers = [
|
|
186
|
+
ResBlock(
|
|
187
|
+
ch,
|
|
188
|
+
time_embed_dim,
|
|
189
|
+
dropout,
|
|
190
|
+
out_channels=mult * model_channels,
|
|
191
|
+
dims=dims,
|
|
192
|
+
use_checkpoint=use_checkpoint,
|
|
193
|
+
use_scale_shift_norm=use_scale_shift_norm,
|
|
194
|
+
)
|
|
195
|
+
]
|
|
196
|
+
ch = mult * model_channels
|
|
197
|
+
if ds in attention_resolutions:
|
|
198
|
+
if num_head_channels == -1:
|
|
199
|
+
dim_head = ch // num_heads
|
|
200
|
+
else:
|
|
201
|
+
num_heads = ch // num_head_channels
|
|
202
|
+
dim_head = num_head_channels
|
|
203
|
+
if legacy:
|
|
204
|
+
# num_heads = 1
|
|
205
|
+
dim_head = ch // num_heads if use_spatial_transformer else num_head_channels
|
|
206
|
+
if exists(disable_self_attentions):
|
|
207
|
+
disabled_sa = disable_self_attentions[level]
|
|
208
|
+
else:
|
|
209
|
+
disabled_sa = False
|
|
210
|
+
|
|
211
|
+
if not exists(num_attention_blocks) or nr < num_attention_blocks[level]:
|
|
212
|
+
layers.append(
|
|
213
|
+
AttentionBlock(
|
|
214
|
+
ch,
|
|
215
|
+
use_checkpoint=use_checkpoint,
|
|
216
|
+
num_heads=num_heads,
|
|
217
|
+
num_head_channels=dim_head,
|
|
218
|
+
use_new_attention_order=use_new_attention_order,
|
|
219
|
+
) if not use_spatial_transformer else SpatialTransformer(
|
|
220
|
+
ch, num_heads, dim_head, depth=transformer_depth, context_dim=context_dim,
|
|
221
|
+
disable_self_attn=disabled_sa, use_linear=use_linear_in_transformer,
|
|
222
|
+
use_checkpoint=use_checkpoint
|
|
223
|
+
)
|
|
224
|
+
)
|
|
225
|
+
self.input_blocks.append(TimestepEmbedSequential(*layers))
|
|
226
|
+
self.zero_convs.append(self.make_zero_conv(ch, self.add_color_channel))
|
|
227
|
+
self._feature_size += ch
|
|
228
|
+
input_block_chans.append(ch)
|
|
229
|
+
if level != len(channel_mult) - 1:
|
|
230
|
+
out_ch = ch
|
|
231
|
+
self.input_blocks.append(
|
|
232
|
+
TimestepEmbedSequential(
|
|
233
|
+
ResBlock(
|
|
234
|
+
ch,
|
|
235
|
+
time_embed_dim,
|
|
236
|
+
dropout,
|
|
237
|
+
out_channels=out_ch,
|
|
238
|
+
dims=dims,
|
|
239
|
+
use_checkpoint=use_checkpoint,
|
|
240
|
+
use_scale_shift_norm=use_scale_shift_norm,
|
|
241
|
+
down=True,
|
|
242
|
+
)
|
|
243
|
+
if resblock_updown
|
|
244
|
+
else Downsample(
|
|
245
|
+
ch, conv_resample, dims=dims, out_channels=out_ch
|
|
246
|
+
)
|
|
247
|
+
)
|
|
248
|
+
)
|
|
249
|
+
ch = out_ch
|
|
250
|
+
input_block_chans.append(ch)
|
|
251
|
+
self.zero_convs.append(self.make_zero_conv(ch, self.add_color_channel))
|
|
252
|
+
ds *= 2
|
|
253
|
+
self._feature_size += ch
|
|
254
|
+
|
|
255
|
+
if num_head_channels == -1:
|
|
256
|
+
dim_head = ch // num_heads
|
|
257
|
+
else:
|
|
258
|
+
num_heads = ch // num_head_channels
|
|
259
|
+
dim_head = num_head_channels
|
|
260
|
+
if legacy:
|
|
261
|
+
# num_heads = 1
|
|
262
|
+
dim_head = ch // num_heads if use_spatial_transformer else num_head_channels
|
|
263
|
+
self.middle_block = TimestepEmbedSequential(
|
|
264
|
+
ResBlock(
|
|
265
|
+
ch,
|
|
266
|
+
time_embed_dim,
|
|
267
|
+
dropout,
|
|
268
|
+
dims=dims,
|
|
269
|
+
use_checkpoint=use_checkpoint,
|
|
270
|
+
use_scale_shift_norm=use_scale_shift_norm,
|
|
271
|
+
),
|
|
272
|
+
AttentionBlock(
|
|
273
|
+
ch,
|
|
274
|
+
use_checkpoint=use_checkpoint,
|
|
275
|
+
num_heads=num_heads,
|
|
276
|
+
num_head_channels=dim_head,
|
|
277
|
+
use_new_attention_order=use_new_attention_order,
|
|
278
|
+
) if not use_spatial_transformer else SpatialTransformer( # always uses a self-attn
|
|
279
|
+
ch, num_heads, dim_head, depth=transformer_depth, context_dim=context_dim,
|
|
280
|
+
disable_self_attn=disable_middle_self_attn, use_linear=use_linear_in_transformer,
|
|
281
|
+
use_checkpoint=use_checkpoint
|
|
282
|
+
),
|
|
283
|
+
ResBlock(
|
|
284
|
+
ch,
|
|
285
|
+
time_embed_dim,
|
|
286
|
+
dropout,
|
|
287
|
+
dims=dims,
|
|
288
|
+
use_checkpoint=use_checkpoint,
|
|
289
|
+
use_scale_shift_norm=use_scale_shift_norm,
|
|
290
|
+
),
|
|
291
|
+
)
|
|
292
|
+
self.middle_block_out = self.make_zero_conv(ch)
|
|
293
|
+
self._feature_size += ch
|
|
294
|
+
|
|
295
|
+
def make_zero_conv(self, channels, color_hist_channels=0):
|
|
296
|
+
return TimestepEmbedSequential(zero_module(conv_nd(self.dims, channels + color_hist_channels, channels, 1, padding=0)))
|
|
297
|
+
|
|
298
|
+
def forward(self, x, hint, timesteps, context, **kwargs): # TODO
|
|
299
|
+
t_emb = timestep_embedding(timesteps, self.model_channels, repeat_only=False)
|
|
300
|
+
emb = self.time_embed(t_emb)
|
|
301
|
+
|
|
302
|
+
guided_hint = self.input_hint_block(hint, emb, context)
|
|
303
|
+
|
|
304
|
+
outs = []
|
|
305
|
+
|
|
306
|
+
h = x.type(self.dtype)
|
|
307
|
+
for module, zero_conv in zip(self.input_blocks, self.zero_convs):
|
|
308
|
+
if guided_hint is not None:
|
|
309
|
+
h = module(h, emb, context)
|
|
310
|
+
h += guided_hint
|
|
311
|
+
guided_hint = None
|
|
312
|
+
else:
|
|
313
|
+
h = module(h, emb, context)
|
|
314
|
+
outs.append(zero_conv(h, emb, context))
|
|
315
|
+
|
|
316
|
+
h = self.middle_block(h, emb, context)
|
|
317
|
+
outs.append(self.middle_block_out(h, emb, context))
|
|
318
|
+
|
|
319
|
+
return outs
|
|
320
|
+
|
|
321
|
+
class ControlLDM(LatentDiffusion):
|
|
322
|
+
|
|
323
|
+
def __init__(self, control_stage_config, control_key, only_mid_control, cls_net_path, reg_net_path, cls_label, *args, **kwargs):
|
|
324
|
+
super().__init__(*args, **kwargs)
|
|
325
|
+
self.control_model = instantiate_from_config(control_stage_config)
|
|
326
|
+
self.control_key = control_key
|
|
327
|
+
self.only_mid_control = only_mid_control
|
|
328
|
+
self.cls_net_path = cls_net_path
|
|
329
|
+
self.reg_net_path = reg_net_path
|
|
330
|
+
self.cls_label = cls_label
|
|
331
|
+
self.control_scales = [1.0] * 13
|
|
332
|
+
self.mask_cls = MaskCls(num_classes=256)
|
|
333
|
+
|
|
334
|
+
if os.path.exists(self.cls_net_path):
|
|
335
|
+
self.mask_cls.load_state_dict(torch.load(self.cls_net_path)['net'])
|
|
336
|
+
for param in self.mask_cls.parameters():
|
|
337
|
+
param.requires_grad = False
|
|
338
|
+
self.bbx_reg = RegNetwork()
|
|
339
|
+
if os.path.exists(self.reg_net_path):
|
|
340
|
+
self.bbx_reg.load_state_dict(torch.load(self.reg_net_path)['net'])
|
|
341
|
+
for param in self.bbx_reg.parameters():
|
|
342
|
+
param.requires_grad = False
|
|
343
|
+
self.mask_threshold = 0.5
|
|
344
|
+
|
|
345
|
+
@torch.no_grad()
|
|
346
|
+
def get_input(self, batch, k, bs=None, *args, **kwargs):
|
|
347
|
+
x, c = super().get_input(batch, self.first_stage_key, *args, **kwargs)
|
|
348
|
+
control = batch[self.control_key]
|
|
349
|
+
if bs is not None:
|
|
350
|
+
control = control[:bs]
|
|
351
|
+
control = control.to(self.device)
|
|
352
|
+
control = einops.rearrange(control, 'b h w c -> b c h w')
|
|
353
|
+
control = control.to(memory_format=torch.contiguous_format).float()
|
|
354
|
+
return x, dict(c_crossattn=[c], c_concat=[control])
|
|
355
|
+
|
|
356
|
+
def gen_bbx(self, pred_t, fg_instance_bbx, mask):
|
|
357
|
+
img_height, img_width = 512, 512
|
|
358
|
+
pred_bbx = pred_t.new(pred_t.shape)
|
|
359
|
+
pred_bbx[:,0] = pred_t[:,0] * fg_instance_bbx[:,2] + fg_instance_bbx[:,0]
|
|
360
|
+
pred_bbx[:,1] = pred_t[:,1] * fg_instance_bbx[:,3] + fg_instance_bbx[:,1]
|
|
361
|
+
pred_bbx[:,2] = fg_instance_bbx[:,2] * torch.exp(pred_t[:,2])
|
|
362
|
+
pred_bbx[:,3] = fg_instance_bbx[:,3] * torch.exp(pred_t[:,3])
|
|
363
|
+
pred_bbx[:,4] = pred_t[:,4] * 180 / np.pi +fg_instance_bbx[:,4]
|
|
364
|
+
mask = mask.cpu().numpy()
|
|
365
|
+
bs = mask.shape[0]
|
|
366
|
+
for i in range(bs):
|
|
367
|
+
if pred_bbx[i,4] > 0:
|
|
368
|
+
temp = pred_bbx[i,2]
|
|
369
|
+
pred_bbx[i,2] = pred_bbx[i,3]
|
|
370
|
+
pred_bbx[i,3] = temp
|
|
371
|
+
pred_bbx[i,4] = pred_bbx[i,4] - 90
|
|
372
|
+
x, y, w, h, theta = pred_bbx[i,0], pred_bbx[i,1], pred_bbx[i,2], pred_bbx[i,3], pred_bbx[i,4]
|
|
373
|
+
box = ((x, y), (w, h), theta)
|
|
374
|
+
box_points = cv2.boxPoints(box)
|
|
375
|
+
|
|
376
|
+
box_points = np.clip(box_points, 0, [img_width - 1, img_height - 1])
|
|
377
|
+
box_points_int = np.int32(box_points)
|
|
378
|
+
cv2.fillPoly(mask[i], [box_points_int], 1)
|
|
379
|
+
mask = torch.tensor(mask).unsqueeze(1).to(dtype=torch.float32).to(self.device)
|
|
380
|
+
return mask
|
|
381
|
+
|
|
382
|
+
def apply_model(self, x_noisy, t, cond, get_stable_features=True, batch=None, *args, **kwargs): # TODO
|
|
383
|
+
assert isinstance(cond, dict)
|
|
384
|
+
diffusion_model = self.model.ip_adapter
|
|
385
|
+
cond_txt = torch.cat(cond['c_crossattn'], 1)
|
|
386
|
+
|
|
387
|
+
if cond['c_concat'] is None:
|
|
388
|
+
eps = diffusion_model(sample=x_noisy, timestep=t, encoder_hidden_states=cond_txt)
|
|
389
|
+
return eps
|
|
390
|
+
else:
|
|
391
|
+
input = batch['cls']
|
|
392
|
+
input = input.to(self.device)
|
|
393
|
+
input = einops.rearrange(input, 'b h w c -> b c h w')
|
|
394
|
+
pred_t = self.bbx_reg(input)
|
|
395
|
+
bbx_mask = batch['bbx']
|
|
396
|
+
fg_instance_bbx = batch['fg']
|
|
397
|
+
fg_instance_bbx = fg_instance_bbx.to(self.device)
|
|
398
|
+
bbx_region = self.gen_bbx(pred_t, fg_instance_bbx, bbx_mask)
|
|
399
|
+
hint = torch.cat(cond['c_concat'], 1)
|
|
400
|
+
control = self.control_model(x=x_noisy, hint=torch.cat((hint, bbx_region), 1), timesteps=t, context=cond_txt)
|
|
401
|
+
control = [c * scale for c, scale in zip(control, self.control_scales)]
|
|
402
|
+
mid_control = control.pop()
|
|
403
|
+
down_control = tuple(control)
|
|
404
|
+
|
|
405
|
+
mask_label = self.mask_cls(input)
|
|
406
|
+
with open(self.cls_label, 'rb') as f:
|
|
407
|
+
centroid_dict = pickle.load(f)
|
|
408
|
+
_, top64_label = torch.topk(mask_label, self.k, largest=True, sorted=False)
|
|
409
|
+
mask_embeddings = batch['embeddings'].to(self.device)
|
|
410
|
+
for i in range(mask_embeddings.shape[0]):
|
|
411
|
+
for j in range(top64_label.shape[1]):
|
|
412
|
+
label = top64_label[i,j].item()
|
|
413
|
+
if label in centroid_dict:
|
|
414
|
+
mask_embeddings[i,j,:] += torch.tensor(centroid_dict[label]).to(self.device)
|
|
415
|
+
else:
|
|
416
|
+
print(f"Warning: label {label} not found in centroid_dict")
|
|
417
|
+
|
|
418
|
+
eps = diffusion_model(noisy_latents=x_noisy, timesteps=t, encoder_hidden_states=cond_txt, down_block_additional_residuals=down_control, mid_block_additional_residual=mid_control, mask_embeddings=mask_embeddings)
|
|
419
|
+
return eps
|
|
420
|
+
|
|
421
|
+
@torch.no_grad()
|
|
422
|
+
def get_unconditional_conditioning(self, N):
|
|
423
|
+
return self.get_learned_conditioning([""] * N)
|
|
424
|
+
|
|
425
|
+
@torch.no_grad()
|
|
426
|
+
def log_images(self, batch, N=1, n_row=2, sample=False, ddim_steps=50, ddim_eta=0.0, return_keys=None,
|
|
427
|
+
quantize_denoised=True, inpaint=True, plot_denoise_rows=False, plot_progressive_rows=True,
|
|
428
|
+
plot_diffusion_rows=False, unconditional_guidance_scale=9.0, unconditional_guidance_label=None,
|
|
429
|
+
use_ema_scope=True, use_x_T=False,
|
|
430
|
+
**kwargs):
|
|
431
|
+
use_ddim = ddim_steps is not None
|
|
432
|
+
|
|
433
|
+
log = dict()
|
|
434
|
+
z, c = self.get_input(batch, self.first_stage_key, bs=N)
|
|
435
|
+
c_cat, c = c["c_concat"][0][:N], c["c_crossattn"][0][:N]
|
|
436
|
+
N = min(z.shape[0], N)
|
|
437
|
+
n_row = min(z.shape[0], n_row)
|
|
438
|
+
log["reconstruction"] = self.decode_first_stage(z)
|
|
439
|
+
log_control = c_cat * 2.0 - 1.0
|
|
440
|
+
log["control"] = log_control
|
|
441
|
+
log["conditioning"] = log_txt_as_img((512, 512), batch[self.cond_stage_key], size=16)
|
|
442
|
+
|
|
443
|
+
if use_x_T == True:
|
|
444
|
+
x_T = super().q_sample(x_start=z, t=torch.tensor([999], device=self.device, dtype=torch.long), noise=torch.randn_like(z))
|
|
445
|
+
else:
|
|
446
|
+
x_T = None
|
|
447
|
+
|
|
448
|
+
if plot_diffusion_rows:
|
|
449
|
+
# get diffusion row
|
|
450
|
+
diffusion_row = list()
|
|
451
|
+
z_start = z[:n_row]
|
|
452
|
+
for t in range(self.num_timesteps):
|
|
453
|
+
if t % self.log_every_t == 0 or t == self.num_timesteps - 1:
|
|
454
|
+
t = repeat(torch.tensor([t]), '1 -> b', b=n_row)
|
|
455
|
+
t = t.to(self.device).long()
|
|
456
|
+
noise = torch.randn_like(z_start)
|
|
457
|
+
z_noisy = self.q_sample(x_start=z_start, t=t, noise=noise)
|
|
458
|
+
diffusion_row.append(self.decode_first_stage(z_noisy))
|
|
459
|
+
|
|
460
|
+
diffusion_row = torch.stack(diffusion_row) # n_log_step, n_row, C, H, W
|
|
461
|
+
diffusion_grid = rearrange(diffusion_row, 'n b c h w -> b n c h w')
|
|
462
|
+
diffusion_grid = rearrange(diffusion_grid, 'b n c h w -> (b n) c h w')
|
|
463
|
+
diffusion_grid = make_grid(diffusion_grid, nrow=diffusion_row.shape[0])
|
|
464
|
+
log["diffusion_row"] = diffusion_grid
|
|
465
|
+
|
|
466
|
+
if sample:
|
|
467
|
+
# get denoise row
|
|
468
|
+
samples, z_denoise_row = self.sample_log(cond={"c_concat": [c_cat], "c_crossattn": [c]},
|
|
469
|
+
batch_size=N, ddim=use_ddim,
|
|
470
|
+
ddim_steps=ddim_steps, eta=ddim_eta,
|
|
471
|
+
batch=batch)
|
|
472
|
+
x_samples = self.decode_first_stage(samples)
|
|
473
|
+
log["samples"] = x_samples
|
|
474
|
+
if plot_denoise_rows:
|
|
475
|
+
denoise_grid = self._get_denoise_row_from_list(z_denoise_row)
|
|
476
|
+
log["denoise_row"] = denoise_grid
|
|
477
|
+
|
|
478
|
+
if unconditional_guidance_scale >= 1.0:
|
|
479
|
+
uc_cross = self.get_unconditional_conditioning(N)
|
|
480
|
+
uc_cat = c_cat # torch.zeros_like(c_cat)
|
|
481
|
+
uc_full = {"c_concat": [uc_cat], "c_crossattn": [uc_cross]}
|
|
482
|
+
samples_cfg, _ = self.sample_log(cond={"c_concat": [c_cat], "c_crossattn": [c]},
|
|
483
|
+
batch_size=N, ddim=use_ddim,
|
|
484
|
+
ddim_steps=ddim_steps, eta=ddim_eta,
|
|
485
|
+
unconditional_guidance_scale=unconditional_guidance_scale,
|
|
486
|
+
unconditional_conditioning=uc_full, x_T=x_T,
|
|
487
|
+
batch=batch)
|
|
488
|
+
x_samples_cfg = self.decode_first_stage(samples_cfg)
|
|
489
|
+
log[f"samples_cfg_scale_{unconditional_guidance_scale:.2f}"] = x_samples_cfg
|
|
490
|
+
# log['predicted_mask'] = pred_mask
|
|
491
|
+
|
|
492
|
+
return log
|
|
493
|
+
|
|
494
|
+
@torch.no_grad()
|
|
495
|
+
def sample_log(self, cond, batch_size, ddim, ddim_steps, x_T=None, **kwargs):
|
|
496
|
+
ddim_sampler = DDIMSampler(self)
|
|
497
|
+
b, c, h, w = cond["c_concat"][0].shape
|
|
498
|
+
shape = (self.channels, h // 8, w // 8)
|
|
499
|
+
samples, intermediates = ddim_sampler.sample(ddim_steps, batch_size, shape, cond, verbose=False, x_T=x_T, **kwargs) #add x_T
|
|
500
|
+
return samples, intermediates
|
|
501
|
+
|
|
502
|
+
def configure_optimizers(self):
|
|
503
|
+
lr = self.learning_rate
|
|
504
|
+
params = []
|
|
505
|
+
params += list(self.control_model.parameters())
|
|
506
|
+
params += list(self.model.adapter_modules.parameters())
|
|
507
|
+
params += list(self.model.image_proj_model.parameters())
|
|
508
|
+
if not self.sd_locked:
|
|
509
|
+
params += list(self.model.diffusion_model.output_blocks.parameters())
|
|
510
|
+
params += list(self.model.diffusion_model.out.parameters())
|
|
511
|
+
opt = torch.optim.AdamW(params, lr=lr)
|
|
512
|
+
return opt
|
|
513
|
+
|
|
514
|
+
def low_vram_shift(self, is_diffusing):
|
|
515
|
+
if is_diffusing:
|
|
516
|
+
self.model = self.model.cuda()
|
|
517
|
+
self.control_model = self.control_model.cuda()
|
|
518
|
+
self.first_stage_model = self.first_stage_model.cpu()
|
|
519
|
+
self.cond_stage_model = self.cond_stage_model.cpu()
|
|
520
|
+
else:
|
|
521
|
+
self.model = self.model.cpu()
|
|
522
|
+
self.control_model = self.control_model.cpu()
|
|
523
|
+
self.first_stage_model = self.first_stage_model.cuda()
|
|
524
|
+
self.cond_stage_model = self.cond_stage_model.cuda()
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import torch
|
|
3
|
+
|
|
4
|
+
from omegaconf import OmegaConf
|
|
5
|
+
from libcom.shadow_generation.source.ldm.util import instantiate_from_config
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def get_state_dict(d):
|
|
9
|
+
return d.get('state_dict', d)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def load_state_dict(ckpt_path, location='cpu'):
|
|
13
|
+
_, extension = os.path.splitext(ckpt_path)
|
|
14
|
+
if extension.lower() == ".safetensors":
|
|
15
|
+
import safetensors.torch
|
|
16
|
+
state_dict = safetensors.torch.load_file(ckpt_path, device=location)
|
|
17
|
+
else:
|
|
18
|
+
state_dict = get_state_dict(torch.load(ckpt_path, map_location=torch.device(location)))
|
|
19
|
+
state_dict = get_state_dict(state_dict)
|
|
20
|
+
print(f'Loaded state_dict from [{ckpt_path}]')
|
|
21
|
+
return state_dict
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def create_model(config_path):
|
|
25
|
+
config = OmegaConf.load(config_path)
|
|
26
|
+
model = instantiate_from_config(config.model).cpu()
|
|
27
|
+
print(f'Loaded model config from [{config_path}]')
|
|
28
|
+
return model
|
|
File without changes
|
|
File without changes
|