libcom 0.0.1.post10__tar.gz → 0.0.2.post1__tar.gz
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-0.0.1.post10 → libcom-0.0.2.post1}/PKG-INFO +4 -3
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/README.md +3 -2
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/__init__.py +2 -1
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/controllable_composition.py +11 -6
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/configs/controlcom.yaml +6 -6
- libcom-0.0.2.post1/libcom/controllable_composition/source/ControlCom/ldm/data/datamodule.py +128 -0
- libcom-0.0.2.post1/libcom/controllable_composition/source/ControlCom/ldm/models/diffusion/classifier.py +267 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/models/diffusion/ddpm.py +1 -2
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/attention.py +1 -1
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/diffusionmodules/openaimodel.py +2 -2
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/encoders/modules.py +4 -5
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/local_module.py +2 -2
- libcom-0.0.2.post1/libcom/controllable_composition/source/ControlCom/ldm/modules/losses/__init__.py +1 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/util.py +0 -2
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/fopa_heat_map.py +3 -2
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fos_score/fos_score_prediction.py +2 -2
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/harmony_score/harmony_score_prediction.py +2 -1
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/image_harmonization/image_harmonization.py +4 -3
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/image_harmonization/source/functions.py +1 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/inharmonious_region_localization/inharmonious_region_localization.py +3 -2
- libcom-0.0.2.post1/libcom/objectstitch/__init__.py +4 -0
- libcom-0.0.2.post1/libcom/objectstitch/objectstitch.py +200 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/configs/objectstitch.yaml +74 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/data/base.py +23 -0
- {libcom-0.0.1.post10/libcom/controllable_composition/source/ControlCom → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch}/ldm/data/datamodule.py +2 -2
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/data/imagenet.py +394 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/data/lsun.py +92 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/data/open_images.py +409 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/models/autoencoder.py +443 -0
- {libcom-0.0.1.post10/libcom/controllable_composition/source/ControlCom → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch}/ldm/models/diffusion/classifier.py +2 -2
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/models/diffusion/ddim.py +263 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/models/diffusion/ddpm.py +1416 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/models/diffusion/plms.py +252 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/attention.py +261 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/diffusionmodules/model.py +835 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/diffusionmodules/openaimodel.py +1108 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/diffusionmodules/util.py +267 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/ema.py +76 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/encoders/modules.py +189 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/encoders/xf.py +130 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/losses/__init__.py +1 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/losses/contperceptual.py +111 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/losses/vqperceptual.py +167 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/x_transformer.py +641 -0
- libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/util.py +203 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/opa_score/opa_score_prediction.py +2 -1
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/painterly_image_harmonization.py +6 -5
- libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/lr_scheduler.py +98 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddim.py +2 -2
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddpm.py +0 -1
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/sampler.py +1 -1
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/util.py +1 -5
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/stable_diffusion.yaml +5 -5
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/shadow_generation.py +4 -3
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/cldm/ddim_hacked.py +2 -2
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/models/__init__.py +0 -0
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/models/diffusion/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/models/diffusion/ddim.py +3 -3
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/sampler.py +1 -1
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/models/diffusion/plms.py +2 -2
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/models/mask_predictor/__init__.py +0 -0
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/modules/__init__.py +0 -0
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/modules/diffusionmodules/__init__.py +0 -0
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/modules/distributions/__init__.py +0 -0
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/modules/distributions/distributions.py +92 -0
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/modules/encoders/__init__.py +0 -0
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/modules/midas/__init__.py +0 -0
- libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/modules/midas/midas/__init__.py +0 -0
- libcom-0.0.2.post1/libcom/shadow_generation/source/sampler/__init__.py +0 -0
- libcom-0.0.2.post1/libcom/utils/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom.egg-info/PKG-INFO +4 -3
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom.egg-info/SOURCES.txt +38 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/setup.py +1 -1
- libcom-0.0.1.post10/libcom/controllable_composition/source/ControlCom/ldm/modules/losses/__init__.py +0 -1
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/LICENSE +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/color_transfer/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/color_transfer/reinhard.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/configs/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/data/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/data/base.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/data/open_images_control.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/lr_scheduler.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/models/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/models/autoencoder.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/models/diffusion/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/models/diffusion/ddim.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/models/diffusion/plms.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/diffusionmodules/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/diffusionmodules/model.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/diffusionmodules/util.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/distributions/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/distributions/distributions.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/ema.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/encoders/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/encoders/xf.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/losses/contperceptual.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/losses/vqperceptual.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/ControlCom/ldm/modules/x_transformer.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/controllable_composition/source/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/backbone/ResNet.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/backbone/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/data/OBdataset.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/data/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/data/all_transforms.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/network/BaseBlocks.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/network/DynamicModules.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/network/ObPlaNet_simple.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/network/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/network/tensor_ops.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fopa_heat_map/source/prepare_multi_fg_scales.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fos_score/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fos_score/source/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fos_score/source/config/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fos_score/source/config/config.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fos_score/source/config/config.sfosd.yaml +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fos_score/source/config/config_rfosd.yaml +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fos_score/source/loss_function.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/fos_score/source/networks.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/harmony_score/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/harmony_score/source/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/harmony_score/source/bargainnet.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/image_harmonization/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/image_harmonization/source/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/image_harmonization/source/cdt_net.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/image_harmonization/source/pct_net.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/inharmonious_region_localization/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/inharmonious_region_localization/source/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/inharmonious_region_localization/source/blocks.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/inharmonious_region_localization/source/functions.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/inharmonious_region_localization/source/madis_net.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/naive_composition/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/naive_composition/generate_composite_image.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDNet → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/configs}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch}/ldm/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/data}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch}/ldm/lr_scheduler.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/models}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/models/diffusion}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/diffusionmodules}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/distributions}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch}/ldm/modules/distributions/distributions.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas → libcom-0.0.2.post1/libcom/objectstitch/source/ObjectStitch/ldm/modules/encoders}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose → libcom-0.0.2.post1/libcom/objectstitch/source}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/opa_score/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/opa_score/source/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/opa_score/source/object_place_net.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/opa_score/source/oblect_place_config.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/opa_score/source/resnet_4ch.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDNet}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDNet/networks.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDNet/phdnet.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDNet/phdnet_config.py +0 -0
- {libcom-0.0.1.post10/libcom/painterly_image_harmonization/source → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/inference_base.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/cldm → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/autoencoder.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/dpm_solver.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/plms.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/scheduling_pndm.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/attention.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/data → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/model.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/openaimodel.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/util.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/models → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion}/ldm/modules/distributions/distributions.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/ema.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/models/diffusion → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/adapter.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/modules.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/api.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/models/mask_predictor → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/api.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/modules → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/base_model.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/blocks.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/dpt_depth.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/midas_net.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/midas_net_custom.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/transforms.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/vit.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/utils.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/model_edge.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/modules/diffusionmodules → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/api.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/body.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/hand.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/model.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/util.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/utils.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/modules/distributions → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion/dual_encoder_fusion.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan_light.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/utils_image.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/modules/encoders → libcom-0.0.2.post1/libcom/painterly_image_harmonization/source}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/PostProcessModel.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/modules/midas → libcom-0.0.2.post1/libcom/shadow_generation/source}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/ldm/modules/midas/midas → libcom-0.0.2.post1/libcom/shadow_generation/source/cldm}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/cldm/cldm.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/cldm/hack.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/cldm/logger.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/cldm/model.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/cldm_v15.yaml +0 -0
- {libcom-0.0.1.post10/libcom/shadow_generation/source/sampler → libcom-0.0.2.post1/libcom/shadow_generation/source/ldm}/__init__.py +0 -0
- {libcom-0.0.1.post10/libcom/utils → libcom-0.0.2.post1/libcom/shadow_generation/source/ldm/data}/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/data/util.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/models/autoencoder.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/models/diffusion/ddpm.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/dpm_solver.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/models/diffusion/sampling_util.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/models/mask_predictor/mask_predictor.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/attention.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/model.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/openaimodel.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/upscaling.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/util.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/ema.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/encoders/modules.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/image_degradation/__init__.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan_light.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/image_degradation/utils_image.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/midas/api.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/midas/midas/base_model.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/midas/midas/blocks.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/midas/midas/dpt_depth.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net_custom.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/midas/midas/transforms.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/midas/midas/vit.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/modules/midas/utils.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/ldm/util.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/sampler/pndm.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/shadow_generation/source/sampler/scheduling_pndm.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/utils/environment.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/utils/model_download.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom/utils/process_image.py +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom.egg-info/dependency_links.txt +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom.egg-info/requires.txt +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/libcom.egg-info/top_level.txt +0 -0
- {libcom-0.0.1.post10 → libcom-0.0.2.post1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: libcom
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.2.post1
|
|
4
4
|
Summary: Image Composition Toolbox
|
|
5
5
|
Home-page: https://github.com/bcmi/libcom
|
|
6
6
|
Author: BCMI Lab
|
|
@@ -36,7 +36,7 @@ License-File: LICENSE
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
## Introduction
|
|
39
|
-
**_libcom_ (the library of image composition) is an image composition toolbox.** The goal of image composition is inserting one foreground into a background image to get a realistic composite image, by addressing the inconsistencies (appearance, geometry, and semantic inconsistency) between foreground and background. Generally speaking, image composition could be used to combine the visual elements from different images.
|
|
39
|
+
**_libcom_ (the library of image composition) is an image composition toolbox.** The goal of image composition (object insertion) is inserting one foreground into a background image to get a realistic composite image, by addressing the inconsistencies (appearance, geometry, and semantic inconsistency) between foreground and background. Generally speaking, image composition could be used to combine the visual elements from different images.
|
|
40
40
|
<div align="center">
|
|
41
41
|
</br>
|
|
42
42
|
<img src="https://raw.githubusercontent.com/bcmi/libcom/main/resources/image_composition_task.gif" width="600" />
|
|
@@ -57,7 +57,8 @@ License-File: LICENSE
|
|
|
57
57
|
- **HarmonyScoreModel** evaluates the harmony level between foreground and background in a composite image.
|
|
58
58
|
- **InharmoniousLocalizationModel** localizes the inharmonious region in a synthetic image.
|
|
59
59
|
- **FOSScoreModel** evaluates the compatibility between foreground and background in a composite image in terms of geometry and semantics.
|
|
60
|
-
- **ControlComModel** is a generative image composition model, which unifies image blending
|
|
60
|
+
- **ControlComModel** is a generative image composition model, which unifies image blending, image harmonization, view synthesis, and generative composition within a diffusion model.
|
|
61
|
+
- **ObjectStitchModel** is another generative image composition model that aims to generate a composite image from a pair of background and foreground, with non-object pixels filled with black.
|
|
61
62
|
- **ShadowGenerationModel** generates plausible shadow for the inserted object in a composite image.
|
|
62
63
|
|
|
63
64
|
**For the detailed method descriptions, code examples, visualization results, and performance comments, please refer to our [[documents]](https://libcom.readthedocs.io/en/latest/).**
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
## Introduction
|
|
20
|
-
**_libcom_ (the library of image composition) is an image composition toolbox.** The goal of image composition is inserting one foreground into a background image to get a realistic composite image, by addressing the inconsistencies (appearance, geometry, and semantic inconsistency) between foreground and background. Generally speaking, image composition could be used to combine the visual elements from different images.
|
|
20
|
+
**_libcom_ (the library of image composition) is an image composition toolbox.** The goal of image composition (object insertion) is inserting one foreground into a background image to get a realistic composite image, by addressing the inconsistencies (appearance, geometry, and semantic inconsistency) between foreground and background. Generally speaking, image composition could be used to combine the visual elements from different images.
|
|
21
21
|
<div align="center">
|
|
22
22
|
</br>
|
|
23
23
|
<img src="https://raw.githubusercontent.com/bcmi/libcom/main/resources/image_composition_task.gif" width="600" />
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
- **HarmonyScoreModel** evaluates the harmony level between foreground and background in a composite image.
|
|
39
39
|
- **InharmoniousLocalizationModel** localizes the inharmonious region in a synthetic image.
|
|
40
40
|
- **FOSScoreModel** evaluates the compatibility between foreground and background in a composite image in terms of geometry and semantics.
|
|
41
|
-
- **ControlComModel** is a generative image composition model, which unifies image blending
|
|
41
|
+
- **ControlComModel** is a generative image composition model, which unifies image blending, image harmonization, view synthesis, and generative composition within a diffusion model.
|
|
42
|
+
- **ObjectStitchModel** is another generative image composition model that aims to generate a composite image from a pair of background and foreground, with non-object pixels filled with black.
|
|
42
43
|
- **ShadowGenerationModel** generates plausible shadow for the inserted object in a composite image.
|
|
43
44
|
|
|
44
45
|
**For the detailed method descriptions, code examples, visualization results, and performance comments, please refer to our [[documents]](https://libcom.readthedocs.io/en/latest/).**
|
|
@@ -9,11 +9,12 @@ from .fopa_heat_map import *
|
|
|
9
9
|
from .fos_score import *
|
|
10
10
|
from .controllable_composition import *
|
|
11
11
|
from .shadow_generation import *
|
|
12
|
+
from .objectstitch import *
|
|
12
13
|
|
|
13
14
|
__all__ = [
|
|
14
15
|
'color_transfer', 'get_composite_image', 'OPAScoreModel',
|
|
15
16
|
'HarmonyScoreModel', 'InharmoniousLocalizationModel',
|
|
16
17
|
'ImageHarmonizationModel', 'PainterlyHarmonizationModel',
|
|
17
18
|
'FOPAHeatMapModel', 'FOSScoreModel', 'ControlComModel',
|
|
18
|
-
'ShadowGenerationModel'
|
|
19
|
+
'ShadowGenerationModel', 'ObjectStitchModel'
|
|
19
20
|
]
|
|
@@ -29,8 +29,9 @@ from .source.ControlCom.ldm.models.diffusion.plms import PLMSSampler
|
|
|
29
29
|
from .source.ControlCom.ldm.data.open_images_control import get_tensor, get_tensor_clip, get_bbox_tensor, bbox2mask, tensor2numpy
|
|
30
30
|
|
|
31
31
|
cur_dir = os.path.dirname(os.path.abspath(__file__))
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
model_dir = os.environ.get('LIBCOM_MODEL_DIR',cur_dir)
|
|
33
|
+
model_set = ['ControlCom', 'ControlCom_blend_harm', 'ControlCom_view_comp']
|
|
34
|
+
task_set = ['blending', 'harmonization', 'viewsynthesis', 'composition']
|
|
34
35
|
|
|
35
36
|
class ControlComModel:
|
|
36
37
|
"""
|
|
@@ -38,7 +39,7 @@ class ControlComModel:
|
|
|
38
39
|
|
|
39
40
|
Args:
|
|
40
41
|
device (str | torch.device): gpu id
|
|
41
|
-
model_type (str): predefined model type
|
|
42
|
+
model_type (str): predefined model type. "ControlCom" refers to the version trained on all four tasks comprehensively, covering a wide range of domains or objectives. "ControlCom_blend_harm" fine-tunes the "full" version specifically for image blending and harmonization tasks. "ControlCom_view_comp" fine-tunes the "full" version to excel in view synthesis and generative composition tasks.
|
|
42
43
|
kwargs (dict): sampler='ddim' (default) or 'plms', other parameters for building model
|
|
43
44
|
|
|
44
45
|
Examples:
|
|
@@ -53,7 +54,7 @@ class ControlComModel:
|
|
|
53
54
|
>>> fg_img = test_dir + 'foreground/' + img_names[i]
|
|
54
55
|
>>> bbox = bboxes[i]
|
|
55
56
|
>>> mask = test_dir + 'foreground_mask/' + img_names[i]
|
|
56
|
-
>>> net = ControlComModel(device=0)
|
|
57
|
+
>>> net = ControlComModel(device=0, model_type="ControlCom")
|
|
57
58
|
>>> comp = net(bg_img, fg_img, bbox, mask, task=['blending', 'harmonization'])
|
|
58
59
|
>>> bg_img = draw_bbox_on_image(bg_img, bbox)
|
|
59
60
|
>>> grid_img = make_image_grid([bg_img, fg_img, comp[0], comp[1]])
|
|
@@ -73,7 +74,7 @@ class ControlComModel:
|
|
|
73
74
|
self.model_type = model_type
|
|
74
75
|
self.option = kwargs
|
|
75
76
|
|
|
76
|
-
weight_path = os.path.join(cur_dir, 'pretrained_models', '
|
|
77
|
+
weight_path = os.path.join(cur_dir, 'pretrained_models', f'{self.model_type}.pth')
|
|
77
78
|
download_pretrained_model(weight_path)
|
|
78
79
|
|
|
79
80
|
self.device = check_gpu_device(device)
|
|
@@ -84,7 +85,7 @@ class ControlComModel:
|
|
|
84
85
|
pl_sd = torch.load(weight_path, map_location="cpu")
|
|
85
86
|
sd = pl_sd["state_dict"]
|
|
86
87
|
config = OmegaConf.load(os.path.join(cur_dir, 'source/ControlCom/configs/controlcom.yaml'))
|
|
87
|
-
clip_path = os.path.join(
|
|
88
|
+
clip_path = os.path.join(model_dir, '../shared_pretrained_models', 'openai-clip-vit-large-patch14')
|
|
88
89
|
download_entire_folder(clip_path)
|
|
89
90
|
config.model.params.cond_stage_config.params.version = clip_path
|
|
90
91
|
model = instantiate_from_config(config.model)
|
|
@@ -181,6 +182,10 @@ class ControlComModel:
|
|
|
181
182
|
indicator.append([0,0])
|
|
182
183
|
elif t == 'harmonization':
|
|
183
184
|
indicator.append([1,0])
|
|
185
|
+
elif t == 'viewsynthesis':
|
|
186
|
+
indicator.append([0,1])
|
|
187
|
+
else:
|
|
188
|
+
indicator.append([1,1])
|
|
184
189
|
return indicator
|
|
185
190
|
|
|
186
191
|
@torch.no_grad()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
model:
|
|
2
2
|
base_learning_rate: 1.0e-05
|
|
3
|
-
target: ldm.models.diffusion.ddpm.LatentDiffusion
|
|
3
|
+
target: libcom.controllable_composition.source.ControlCom.ldm.models.diffusion.ddpm.LatentDiffusion
|
|
4
4
|
params:
|
|
5
5
|
linear_start: 0.00085
|
|
6
6
|
linear_end: 0.012
|
|
@@ -41,7 +41,7 @@ model:
|
|
|
41
41
|
use_guidance: true
|
|
42
42
|
local_uncond: same
|
|
43
43
|
scheduler_config:
|
|
44
|
-
target: ldm.lr_scheduler.LambdaLinearScheduler
|
|
44
|
+
target: libcom.controllable_composition.source.ControlCom.ldm.lr_scheduler.LambdaLinearScheduler
|
|
45
45
|
params:
|
|
46
46
|
warm_up_steps:
|
|
47
47
|
- 1000
|
|
@@ -54,7 +54,7 @@ model:
|
|
|
54
54
|
f_min:
|
|
55
55
|
- 1.0
|
|
56
56
|
unet_config:
|
|
57
|
-
target: ldm.modules.diffusionmodules.openaimodel.UNetModel
|
|
57
|
+
target: libcom.controllable_composition.source.ControlCom.ldm.modules.diffusionmodules.openaimodel.UNetModel
|
|
58
58
|
params:
|
|
59
59
|
image_size: 32
|
|
60
60
|
in_channels: 11
|
|
@@ -78,7 +78,7 @@ model:
|
|
|
78
78
|
legacy: false
|
|
79
79
|
add_conv_in_front_of_unet: false
|
|
80
80
|
local_encoder_config:
|
|
81
|
-
conditioning_key: ldm.modules.local_module.LocalRefineBlock
|
|
81
|
+
conditioning_key: libcom.controllable_composition.source.ControlCom.ldm.modules.local_module.LocalRefineBlock
|
|
82
82
|
add_position_emb: false
|
|
83
83
|
roi_size: 16
|
|
84
84
|
context_dim: 1024
|
|
@@ -89,7 +89,7 @@ model:
|
|
|
89
89
|
add_in_decoder: true
|
|
90
90
|
add_before_crossattn: false
|
|
91
91
|
first_stage_config:
|
|
92
|
-
target: ldm.models.autoencoder.AutoencoderKL
|
|
92
|
+
target: libcom.controllable_composition.source.ControlCom.ldm.models.autoencoder.AutoencoderKL
|
|
93
93
|
params:
|
|
94
94
|
embed_dim: 4
|
|
95
95
|
monitor: val/rec_loss
|
|
@@ -111,7 +111,7 @@ model:
|
|
|
111
111
|
lossconfig:
|
|
112
112
|
target: torch.nn.Identity
|
|
113
113
|
cond_stage_config:
|
|
114
|
-
target: ldm.modules.encoders.modules.FrozenCLIPImageEmbedder
|
|
114
|
+
target: libcom.controllable_composition.source.ControlCom.ldm.modules.encoders.modules.FrozenCLIPImageEmbedder
|
|
115
115
|
params:
|
|
116
116
|
version: openai-clip-vit-large-patch14
|
|
117
117
|
local_hidden_index: 12
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import argparse, os, sys, datetime, glob, importlib, csv
|
|
2
|
+
import numpy as np
|
|
3
|
+
import time
|
|
4
|
+
import torch
|
|
5
|
+
import torchvision
|
|
6
|
+
import pytorch_lightning as pl
|
|
7
|
+
|
|
8
|
+
from packaging import version
|
|
9
|
+
from omegaconf import OmegaConf
|
|
10
|
+
from torch.utils.data import random_split, DataLoader, Dataset, Subset
|
|
11
|
+
from functools import partial
|
|
12
|
+
from PIL import Image
|
|
13
|
+
|
|
14
|
+
from pytorch_lightning import seed_everything
|
|
15
|
+
from pytorch_lightning.trainer import Trainer
|
|
16
|
+
from pytorch_lightning.callbacks import ModelCheckpoint, Callback, LearningRateMonitor
|
|
17
|
+
from pytorch_lightning.utilities.rank_zero import rank_zero_only
|
|
18
|
+
from pytorch_lightning.utilities import rank_zero_info
|
|
19
|
+
|
|
20
|
+
from libcom.controllable_composition.source.ControlCom.ldm.data.base import Txt2ImgIterableBaseDataset
|
|
21
|
+
from libcom.controllable_composition.source.ControlCom.ldm.util import instantiate_from_config
|
|
22
|
+
import socket
|
|
23
|
+
from pytorch_lightning.plugins.environments import ClusterEnvironment,SLURMEnvironment
|
|
24
|
+
|
|
25
|
+
class WrappedDataset(Dataset):
|
|
26
|
+
"""Wraps an arbitrary object with __len__ and __getitem__ into a pytorch dataset"""
|
|
27
|
+
|
|
28
|
+
def __init__(self, dataset):
|
|
29
|
+
self.data = dataset
|
|
30
|
+
|
|
31
|
+
def __len__(self):
|
|
32
|
+
return len(self.data)
|
|
33
|
+
|
|
34
|
+
def __getitem__(self, idx):
|
|
35
|
+
return self.data[idx]
|
|
36
|
+
|
|
37
|
+
def worker_init_fn(_):
|
|
38
|
+
worker_info = torch.utils.data.get_worker_info()
|
|
39
|
+
|
|
40
|
+
dataset = worker_info.dataset
|
|
41
|
+
worker_id = worker_info.id
|
|
42
|
+
|
|
43
|
+
if isinstance(dataset, Txt2ImgIterableBaseDataset):
|
|
44
|
+
split_size = dataset.num_records // worker_info.num_workers
|
|
45
|
+
# reset num_records to the true number to retain reliable length information
|
|
46
|
+
dataset.sample_ids = dataset.valid_ids[worker_id * split_size:(worker_id + 1) * split_size]
|
|
47
|
+
current_id = np.random.choice(len(np.random.get_state()[1]), 1)
|
|
48
|
+
return np.random.seed(np.random.get_state()[1][current_id] + worker_id)
|
|
49
|
+
else:
|
|
50
|
+
return np.random.seed(np.random.get_state()[1][0] + worker_id)
|
|
51
|
+
|
|
52
|
+
class DataModuleFromConfig(pl.LightningDataModule):
|
|
53
|
+
def __init__(self, batch_size, num_workers=None, train=None, validation=None, test=None, predict=None,
|
|
54
|
+
wrap=False, shuffle_test_loader=False, use_worker_init_fn=False,
|
|
55
|
+
shuffle_val_dataloader=False):
|
|
56
|
+
super().__init__()
|
|
57
|
+
self.batch_size = batch_size
|
|
58
|
+
self.dataset_configs = dict()
|
|
59
|
+
self.num_workers = num_workers if num_workers is not None else batch_size
|
|
60
|
+
self.use_worker_init_fn = use_worker_init_fn
|
|
61
|
+
if train is not None:
|
|
62
|
+
self.dataset_configs["train"] = train
|
|
63
|
+
self.train_dataloader = self._train_dataloader
|
|
64
|
+
if validation is not None:
|
|
65
|
+
self.dataset_configs["validation"] = validation
|
|
66
|
+
self.val_dataloader = partial(self._val_dataloader, shuffle=shuffle_val_dataloader)
|
|
67
|
+
if test is not None:
|
|
68
|
+
self.dataset_configs["test"] = test
|
|
69
|
+
self.test_dataloader = partial(self._test_dataloader, shuffle=shuffle_test_loader)
|
|
70
|
+
if predict is not None:
|
|
71
|
+
self.dataset_configs["predict"] = predict
|
|
72
|
+
self.predict_dataloader = self._predict_dataloader
|
|
73
|
+
self.wrap = wrap
|
|
74
|
+
|
|
75
|
+
def prepare_data(self):
|
|
76
|
+
for data_cfg in self.dataset_configs.values():
|
|
77
|
+
instantiate_from_config(data_cfg)
|
|
78
|
+
|
|
79
|
+
def setup(self, stage=None):
|
|
80
|
+
self.datasets = dict(
|
|
81
|
+
(k, instantiate_from_config(self.dataset_configs[k]))
|
|
82
|
+
for k in self.dataset_configs)
|
|
83
|
+
if self.wrap:
|
|
84
|
+
for k in self.datasets:
|
|
85
|
+
self.datasets[k] = WrappedDataset(self.datasets[k])
|
|
86
|
+
|
|
87
|
+
def _train_dataloader(self):
|
|
88
|
+
is_iterable_dataset = isinstance(self.datasets['train'], Txt2ImgIterableBaseDataset)
|
|
89
|
+
if is_iterable_dataset or self.use_worker_init_fn:
|
|
90
|
+
init_fn = worker_init_fn
|
|
91
|
+
else:
|
|
92
|
+
init_fn = None
|
|
93
|
+
return DataLoader(self.datasets["train"], batch_size=self.batch_size,
|
|
94
|
+
num_workers=self.num_workers, shuffle=False if is_iterable_dataset else True,
|
|
95
|
+
worker_init_fn=init_fn)
|
|
96
|
+
|
|
97
|
+
def _val_dataloader(self, shuffle=False):
|
|
98
|
+
if isinstance(self.datasets['validation'], Txt2ImgIterableBaseDataset) or self.use_worker_init_fn:
|
|
99
|
+
init_fn = worker_init_fn
|
|
100
|
+
else:
|
|
101
|
+
init_fn = None
|
|
102
|
+
return DataLoader(self.datasets["validation"],
|
|
103
|
+
batch_size=self.batch_size,
|
|
104
|
+
num_workers=self.num_workers,
|
|
105
|
+
worker_init_fn=init_fn,
|
|
106
|
+
shuffle=shuffle)
|
|
107
|
+
|
|
108
|
+
def _test_dataloader(self, shuffle=False):
|
|
109
|
+
is_iterable_dataset = isinstance(self.datasets['train'], Txt2ImgIterableBaseDataset)
|
|
110
|
+
if is_iterable_dataset or self.use_worker_init_fn:
|
|
111
|
+
init_fn = worker_init_fn
|
|
112
|
+
else:
|
|
113
|
+
init_fn = None
|
|
114
|
+
|
|
115
|
+
# do not shuffle dataloader for iterable dataset
|
|
116
|
+
shuffle = shuffle and (not is_iterable_dataset)
|
|
117
|
+
|
|
118
|
+
return DataLoader(self.datasets["test"], batch_size=self.batch_size,
|
|
119
|
+
num_workers=self.num_workers, worker_init_fn=init_fn, shuffle=shuffle)
|
|
120
|
+
|
|
121
|
+
def _predict_dataloader(self, shuffle=False):
|
|
122
|
+
if isinstance(self.datasets['predict'], Txt2ImgIterableBaseDataset) or self.use_worker_init_fn:
|
|
123
|
+
init_fn = worker_init_fn
|
|
124
|
+
else:
|
|
125
|
+
init_fn = None
|
|
126
|
+
return DataLoader(self.datasets["predict"], batch_size=self.batch_size,
|
|
127
|
+
num_workers=self.num_workers, worker_init_fn=init_fn)
|
|
128
|
+
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import torch
|
|
3
|
+
import pytorch_lightning as pl
|
|
4
|
+
from omegaconf import OmegaConf
|
|
5
|
+
from torch.nn import functional as F
|
|
6
|
+
from torch.optim import AdamW
|
|
7
|
+
from torch.optim.lr_scheduler import LambdaLR
|
|
8
|
+
from copy import deepcopy
|
|
9
|
+
from einops import rearrange
|
|
10
|
+
from glob import glob
|
|
11
|
+
from natsort import natsorted
|
|
12
|
+
|
|
13
|
+
from libcom.controllable_composition.source.ControlCom.ldm.modules.diffusionmodules.openaimodel import EncoderUNetModel, UNetModel
|
|
14
|
+
from libcom.controllable_composition.source.ControlCom.ldm.util import log_txt_as_img, default, ismap, instantiate_from_config
|
|
15
|
+
|
|
16
|
+
__models__ = {
|
|
17
|
+
'class_label': EncoderUNetModel,
|
|
18
|
+
'segmentation': UNetModel
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def disabled_train(self, mode=True):
|
|
23
|
+
"""Overwrite model.train with this function to make sure train/eval mode
|
|
24
|
+
does not change anymore."""
|
|
25
|
+
return self
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class NoisyLatentImageClassifier(pl.LightningModule):
|
|
29
|
+
|
|
30
|
+
def __init__(self,
|
|
31
|
+
diffusion_path,
|
|
32
|
+
num_classes,
|
|
33
|
+
ckpt_path=None,
|
|
34
|
+
pool='attention',
|
|
35
|
+
label_key=None,
|
|
36
|
+
diffusion_ckpt_path=None,
|
|
37
|
+
scheduler_config=None,
|
|
38
|
+
weight_decay=1.e-2,
|
|
39
|
+
log_steps=10,
|
|
40
|
+
monitor='val/loss',
|
|
41
|
+
*args,
|
|
42
|
+
**kwargs):
|
|
43
|
+
super().__init__(*args, **kwargs)
|
|
44
|
+
self.num_classes = num_classes
|
|
45
|
+
# get latest config of diffusion model
|
|
46
|
+
diffusion_config = natsorted(glob(os.path.join(diffusion_path, 'configs', '*-project.yaml')))[-1]
|
|
47
|
+
self.diffusion_config = OmegaConf.load(diffusion_config).model
|
|
48
|
+
self.diffusion_config.params.ckpt_path = diffusion_ckpt_path
|
|
49
|
+
self.load_diffusion()
|
|
50
|
+
|
|
51
|
+
self.monitor = monitor
|
|
52
|
+
self.numd = self.diffusion_model.first_stage_model.encoder.num_resolutions - 1
|
|
53
|
+
self.log_time_interval = self.diffusion_model.num_timesteps // log_steps
|
|
54
|
+
self.log_steps = log_steps
|
|
55
|
+
|
|
56
|
+
self.label_key = label_key if not hasattr(self.diffusion_model, 'cond_stage_key') \
|
|
57
|
+
else self.diffusion_model.cond_stage_key
|
|
58
|
+
|
|
59
|
+
assert self.label_key is not None, 'label_key neither in diffusion model nor in model.params'
|
|
60
|
+
|
|
61
|
+
if self.label_key not in __models__:
|
|
62
|
+
raise NotImplementedError()
|
|
63
|
+
|
|
64
|
+
self.load_classifier(ckpt_path, pool)
|
|
65
|
+
|
|
66
|
+
self.scheduler_config = scheduler_config
|
|
67
|
+
self.use_scheduler = self.scheduler_config is not None
|
|
68
|
+
self.weight_decay = weight_decay
|
|
69
|
+
|
|
70
|
+
def init_from_ckpt(self, path, ignore_keys=list(), only_model=False):
|
|
71
|
+
sd = torch.load(path, map_location="cpu")
|
|
72
|
+
if "state_dict" in list(sd.keys()):
|
|
73
|
+
sd = sd["state_dict"]
|
|
74
|
+
keys = list(sd.keys())
|
|
75
|
+
for k in keys:
|
|
76
|
+
for ik in ignore_keys:
|
|
77
|
+
if k.startswith(ik):
|
|
78
|
+
print("Deleting key {} from state_dict.".format(k))
|
|
79
|
+
del sd[k]
|
|
80
|
+
missing, unexpected = self.load_state_dict(sd, strict=False) if not only_model else self.model.load_state_dict(
|
|
81
|
+
sd, strict=False)
|
|
82
|
+
print(f"Restored from {path} with {len(missing)} missing and {len(unexpected)} unexpected keys")
|
|
83
|
+
if len(missing) > 0:
|
|
84
|
+
print(f"Missing Keys: {missing}")
|
|
85
|
+
if len(unexpected) > 0:
|
|
86
|
+
print(f"Unexpected Keys: {unexpected}")
|
|
87
|
+
|
|
88
|
+
def load_diffusion(self):
|
|
89
|
+
model = instantiate_from_config(self.diffusion_config)
|
|
90
|
+
self.diffusion_model = model.eval()
|
|
91
|
+
self.diffusion_model.train = disabled_train
|
|
92
|
+
for param in self.diffusion_model.parameters():
|
|
93
|
+
param.requires_grad = False
|
|
94
|
+
|
|
95
|
+
def load_classifier(self, ckpt_path, pool):
|
|
96
|
+
model_config = deepcopy(self.diffusion_config.params.unet_config.params)
|
|
97
|
+
model_config.in_channels = self.diffusion_config.params.unet_config.params.out_channels
|
|
98
|
+
model_config.out_channels = self.num_classes
|
|
99
|
+
if self.label_key == 'class_label':
|
|
100
|
+
model_config.pool = pool
|
|
101
|
+
|
|
102
|
+
self.model = __models__[self.label_key](**model_config)
|
|
103
|
+
if ckpt_path is not None:
|
|
104
|
+
print('#####################################################################')
|
|
105
|
+
print(f'load from ckpt "{ckpt_path}"')
|
|
106
|
+
print('#####################################################################')
|
|
107
|
+
self.init_from_ckpt(ckpt_path)
|
|
108
|
+
|
|
109
|
+
@torch.no_grad()
|
|
110
|
+
def get_x_noisy(self, x, t, noise=None):
|
|
111
|
+
noise = default(noise, lambda: torch.randn_like(x))
|
|
112
|
+
continuous_sqrt_alpha_cumprod = None
|
|
113
|
+
if self.diffusion_model.use_continuous_noise:
|
|
114
|
+
continuous_sqrt_alpha_cumprod = self.diffusion_model.sample_continuous_noise_level(x.shape[0], t + 1)
|
|
115
|
+
# todo: make sure t+1 is correct here
|
|
116
|
+
|
|
117
|
+
return self.diffusion_model.q_sample(x_start=x, t=t, noise=noise,
|
|
118
|
+
continuous_sqrt_alpha_cumprod=continuous_sqrt_alpha_cumprod)
|
|
119
|
+
|
|
120
|
+
def forward(self, x_noisy, t, *args, **kwargs):
|
|
121
|
+
return self.model(x_noisy, t)
|
|
122
|
+
|
|
123
|
+
@torch.no_grad()
|
|
124
|
+
def get_input(self, batch, k):
|
|
125
|
+
x = batch[k]
|
|
126
|
+
if len(x.shape) == 3:
|
|
127
|
+
x = x[..., None]
|
|
128
|
+
x = rearrange(x, 'b h w c -> b c h w')
|
|
129
|
+
x = x.to(memory_format=torch.contiguous_format).float()
|
|
130
|
+
return x
|
|
131
|
+
|
|
132
|
+
@torch.no_grad()
|
|
133
|
+
def get_conditioning(self, batch, k=None):
|
|
134
|
+
if k is None:
|
|
135
|
+
k = self.label_key
|
|
136
|
+
assert k is not None, 'Needs to provide label key'
|
|
137
|
+
|
|
138
|
+
targets = batch[k].to(self.device)
|
|
139
|
+
|
|
140
|
+
if self.label_key == 'segmentation':
|
|
141
|
+
targets = rearrange(targets, 'b h w c -> b c h w')
|
|
142
|
+
for down in range(self.numd):
|
|
143
|
+
h, w = targets.shape[-2:]
|
|
144
|
+
targets = F.interpolate(targets, size=(h // 2, w // 2), mode='nearest')
|
|
145
|
+
|
|
146
|
+
# targets = rearrange(targets,'b c h w -> b h w c')
|
|
147
|
+
|
|
148
|
+
return targets
|
|
149
|
+
|
|
150
|
+
def compute_top_k(self, logits, labels, k, reduction="mean"):
|
|
151
|
+
_, top_ks = torch.topk(logits, k, dim=1)
|
|
152
|
+
if reduction == "mean":
|
|
153
|
+
return (top_ks == labels[:, None]).float().sum(dim=-1).mean().item()
|
|
154
|
+
elif reduction == "none":
|
|
155
|
+
return (top_ks == labels[:, None]).float().sum(dim=-1)
|
|
156
|
+
|
|
157
|
+
def on_train_epoch_start(self):
|
|
158
|
+
# save some memory
|
|
159
|
+
self.diffusion_model.model.to('cpu')
|
|
160
|
+
|
|
161
|
+
@torch.no_grad()
|
|
162
|
+
def write_logs(self, loss, logits, targets):
|
|
163
|
+
log_prefix = 'train' if self.training else 'val'
|
|
164
|
+
log = {}
|
|
165
|
+
log[f"{log_prefix}/loss"] = loss.mean()
|
|
166
|
+
log[f"{log_prefix}/acc@1"] = self.compute_top_k(
|
|
167
|
+
logits, targets, k=1, reduction="mean"
|
|
168
|
+
)
|
|
169
|
+
log[f"{log_prefix}/acc@5"] = self.compute_top_k(
|
|
170
|
+
logits, targets, k=5, reduction="mean"
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
self.log_dict(log, prog_bar=False, logger=True, on_step=self.training, on_epoch=True)
|
|
174
|
+
self.log('loss', log[f"{log_prefix}/loss"], prog_bar=True, logger=False)
|
|
175
|
+
self.log('global_step', self.global_step, logger=False, on_epoch=False, prog_bar=True)
|
|
176
|
+
lr = self.optimizers().param_groups[0]['lr']
|
|
177
|
+
self.log('lr_abs', lr, on_step=True, logger=True, on_epoch=False, prog_bar=True)
|
|
178
|
+
|
|
179
|
+
def shared_step(self, batch, t=None):
|
|
180
|
+
x, *_ = self.diffusion_model.get_input(batch, k=self.diffusion_model.first_stage_key)
|
|
181
|
+
targets = self.get_conditioning(batch)
|
|
182
|
+
if targets.dim() == 4:
|
|
183
|
+
targets = targets.argmax(dim=1)
|
|
184
|
+
if t is None:
|
|
185
|
+
t = torch.randint(0, self.diffusion_model.num_timesteps, (x.shape[0],), device=self.device).long()
|
|
186
|
+
else:
|
|
187
|
+
t = torch.full(size=(x.shape[0],), fill_value=t, device=self.device).long()
|
|
188
|
+
x_noisy = self.get_x_noisy(x, t)
|
|
189
|
+
logits = self(x_noisy, t)
|
|
190
|
+
|
|
191
|
+
loss = F.cross_entropy(logits, targets, reduction='none')
|
|
192
|
+
|
|
193
|
+
self.write_logs(loss.detach(), logits.detach(), targets.detach())
|
|
194
|
+
|
|
195
|
+
loss = loss.mean()
|
|
196
|
+
return loss, logits, x_noisy, targets
|
|
197
|
+
|
|
198
|
+
def training_step(self, batch, batch_idx):
|
|
199
|
+
loss, *_ = self.shared_step(batch)
|
|
200
|
+
return loss
|
|
201
|
+
|
|
202
|
+
def reset_noise_accs(self):
|
|
203
|
+
self.noisy_acc = {t: {'acc@1': [], 'acc@5': []} for t in
|
|
204
|
+
range(0, self.diffusion_model.num_timesteps, self.diffusion_model.log_every_t)}
|
|
205
|
+
|
|
206
|
+
def on_validation_start(self):
|
|
207
|
+
self.reset_noise_accs()
|
|
208
|
+
|
|
209
|
+
@torch.no_grad()
|
|
210
|
+
def validation_step(self, batch, batch_idx):
|
|
211
|
+
loss, *_ = self.shared_step(batch)
|
|
212
|
+
|
|
213
|
+
for t in self.noisy_acc:
|
|
214
|
+
_, logits, _, targets = self.shared_step(batch, t)
|
|
215
|
+
self.noisy_acc[t]['acc@1'].append(self.compute_top_k(logits, targets, k=1, reduction='mean'))
|
|
216
|
+
self.noisy_acc[t]['acc@5'].append(self.compute_top_k(logits, targets, k=5, reduction='mean'))
|
|
217
|
+
|
|
218
|
+
return loss
|
|
219
|
+
|
|
220
|
+
def configure_optimizers(self):
|
|
221
|
+
optimizer = AdamW(self.model.parameters(), lr=self.learning_rate, weight_decay=self.weight_decay)
|
|
222
|
+
|
|
223
|
+
if self.use_scheduler:
|
|
224
|
+
scheduler = instantiate_from_config(self.scheduler_config)
|
|
225
|
+
|
|
226
|
+
print("Setting up LambdaLR scheduler...")
|
|
227
|
+
scheduler = [
|
|
228
|
+
{
|
|
229
|
+
'scheduler': LambdaLR(optimizer, lr_lambda=scheduler.schedule),
|
|
230
|
+
'interval': 'step',
|
|
231
|
+
'frequency': 1
|
|
232
|
+
}]
|
|
233
|
+
return [optimizer], scheduler
|
|
234
|
+
|
|
235
|
+
return optimizer
|
|
236
|
+
|
|
237
|
+
@torch.no_grad()
|
|
238
|
+
def log_images(self, batch, N=8, *args, **kwargs):
|
|
239
|
+
log = dict()
|
|
240
|
+
x = self.get_input(batch, self.diffusion_model.first_stage_key)
|
|
241
|
+
log['inputs'] = x
|
|
242
|
+
|
|
243
|
+
y = self.get_conditioning(batch)
|
|
244
|
+
|
|
245
|
+
if self.label_key == 'class_label':
|
|
246
|
+
y = log_txt_as_img((x.shape[2], x.shape[3]), batch["human_label"])
|
|
247
|
+
log['labels'] = y
|
|
248
|
+
|
|
249
|
+
if ismap(y):
|
|
250
|
+
log['labels'] = self.diffusion_model.to_rgb(y)
|
|
251
|
+
|
|
252
|
+
for step in range(self.log_steps):
|
|
253
|
+
current_time = step * self.log_time_interval
|
|
254
|
+
|
|
255
|
+
_, logits, x_noisy, _ = self.shared_step(batch, t=current_time)
|
|
256
|
+
|
|
257
|
+
log[f'inputs@t{current_time}'] = x_noisy
|
|
258
|
+
|
|
259
|
+
pred = F.one_hot(logits.argmax(dim=1), num_classes=self.num_classes)
|
|
260
|
+
pred = rearrange(pred, 'b h w c -> b c h w')
|
|
261
|
+
|
|
262
|
+
log[f'pred@t{current_time}'] = self.diffusion_model.to_rgb(pred)
|
|
263
|
+
|
|
264
|
+
for key in log:
|
|
265
|
+
log[key] = log[key][:N]
|
|
266
|
+
|
|
267
|
+
return log
|
|
@@ -80,7 +80,6 @@ class DDPM(pl.LightningModule):
|
|
|
80
80
|
super().__init__()
|
|
81
81
|
assert parameterization in ["eps", "x0"], 'currently only supporting "eps" and "x0"'
|
|
82
82
|
self.parameterization = parameterization
|
|
83
|
-
# print(f"{self.__class__.__name__}: Running in {self.parameterization}-prediction mode")
|
|
84
83
|
self.cond_stage_model = None
|
|
85
84
|
self.clip_denoised = clip_denoised
|
|
86
85
|
self.log_every_t = log_every_t
|
|
@@ -1636,7 +1635,7 @@ def log_local(save_dir,
|
|
|
1636
1635
|
|
|
1637
1636
|
if __name__ == '__main__':
|
|
1638
1637
|
from omegaconf import OmegaConf
|
|
1639
|
-
from ldm.util import instantiate_from_config
|
|
1638
|
+
from libcom.controllable_composition.source.ControlCom.ldm.util import instantiate_from_config
|
|
1640
1639
|
import os, torchvision
|
|
1641
1640
|
from PIL import Image
|
|
1642
1641
|
import shutil
|
|
@@ -8,7 +8,7 @@ from einops import rearrange, repeat
|
|
|
8
8
|
import os, sys
|
|
9
9
|
proj_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
10
10
|
sys.path.insert(0, proj_dir)
|
|
11
|
-
from ldm.modules.diffusionmodules.util import checkpoint
|
|
11
|
+
from libcom.controllable_composition.source.ControlCom.ldm.modules.diffusionmodules.util import checkpoint
|
|
12
12
|
from torchvision.ops import roi_align
|
|
13
13
|
|
|
14
14
|
def exists(val):
|
|
@@ -11,7 +11,7 @@ import torch.nn.functional as F
|
|
|
11
11
|
import os, sys
|
|
12
12
|
proj_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
|
13
13
|
sys.path.insert(0, proj_dir)
|
|
14
|
-
from ldm.modules.diffusionmodules.util import (
|
|
14
|
+
from libcom.controllable_composition.source.ControlCom.ldm.modules.diffusionmodules.util import (
|
|
15
15
|
checkpoint,
|
|
16
16
|
conv_nd,
|
|
17
17
|
linear,
|
|
@@ -1141,7 +1141,7 @@ if __name__ == '__main__':
|
|
|
1141
1141
|
import torch
|
|
1142
1142
|
device = torch.device("cuda:0")
|
|
1143
1143
|
from omegaconf import OmegaConf
|
|
1144
|
-
from ldm.util import instantiate_from_config
|
|
1144
|
+
from libcom.controllable_composition.source.ControlCom.ldm.util import instantiate_from_config
|
|
1145
1145
|
cfg_path = os.path.join(proj_dir, 'configs/finetune_paint.yaml')
|
|
1146
1146
|
configs = OmegaConf.load(cfg_path).model.params
|
|
1147
1147
|
model = instantiate_from_config(configs.unet_config).to(device)
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import torch
|
|
2
2
|
import torch.nn as nn
|
|
3
3
|
from functools import partial
|
|
4
|
-
from
|
|
5
|
-
from transformers import CLIPTokenizer, CLIPTextModel,CLIPVisionModel,CLIPModel,CLIPVisionModelWithProjection
|
|
4
|
+
from transformers import CLIPVisionModel
|
|
6
5
|
import os,sys
|
|
7
6
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))
|
|
8
|
-
from ldm.modules.x_transformer import Encoder, TransformerWrapper # TODO: can we directly rely on lucidrains code and simply add this as a reuirement? --> test
|
|
9
|
-
from ldm.modules.encoders.xf import LayerNorm, Transformer
|
|
7
|
+
from libcom.controllable_composition.source.ControlCom.ldm.modules.x_transformer import Encoder, TransformerWrapper # TODO: can we directly rely on lucidrains code and simply add this as a reuirement? --> test
|
|
8
|
+
from libcom.controllable_composition.source.ControlCom.ldm.modules.encoders.xf import LayerNorm, Transformer
|
|
10
9
|
import math
|
|
11
10
|
import torch.nn.functional as F
|
|
12
11
|
|
|
@@ -217,7 +216,7 @@ class FrozenCLIPImageEmbedder(AbstractEncoder):
|
|
|
217
216
|
|
|
218
217
|
|
|
219
218
|
if __name__ == "__main__":
|
|
220
|
-
from ldm.util import count_params
|
|
219
|
+
from libcom.controllable_composition.source.ControlCom.ldm.util import count_params
|
|
221
220
|
device = torch.device("cuda:0")
|
|
222
221
|
model = FrozenCLIPImageEmbedder().to(device)
|
|
223
222
|
count_params(model, verbose=True)
|
|
@@ -6,8 +6,8 @@ import torch.nn.functional as F
|
|
|
6
6
|
from torch import nn, einsum
|
|
7
7
|
from einops import rearrange, repeat
|
|
8
8
|
import os, sys
|
|
9
|
-
from ldm.modules.diffusionmodules.util import checkpoint
|
|
10
|
-
from ldm.modules.attention import CrossAttention, zero_module, Normalize
|
|
9
|
+
from libcom.controllable_composition.source.ControlCom.ldm.modules.diffusionmodules.util import checkpoint
|
|
10
|
+
from libcom.controllable_composition.source.ControlCom.ldm.modules.attention import CrossAttention, zero_module, Normalize
|
|
11
11
|
from torchvision.ops import roi_align
|
|
12
12
|
|
|
13
13
|
class FDN(nn.Module):
|
libcom-0.0.2.post1/libcom/controllable_composition/source/ControlCom/ldm/modules/losses/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from libcom.controllable_composition.source.ControlCom.ldm.modules.losses.contperceptual import LPIPSWithDiscriminator
|
|
@@ -90,8 +90,6 @@ def get_obj_from_str(string, reload=False):
|
|
|
90
90
|
if reload:
|
|
91
91
|
module_imp = importlib.import_module(module)
|
|
92
92
|
importlib.reload(module_imp)
|
|
93
|
-
if 'ldm' in module:
|
|
94
|
-
module = '.source.ControlCom.' + module
|
|
95
93
|
return getattr(importlib.import_module(module, package='libcom.controllable_composition'), cls)
|
|
96
94
|
|
|
97
95
|
|