From 1a6d313340501e3ec7e851bfd4c7c075e6f9e175 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 20 Jun 2024 13:46:31 -0400 Subject: [PATCH] cleanup --- modules/pag/pipe_sdxl.py | 56 ++++++++++---------- modules/sd_models.py | 2 + modules/sd_samplers_common.py | 7 ++- scripts/{face-details.py => face_details.py} | 0 4 files changed, 34 insertions(+), 31 deletions(-) rename scripts/{face-details.py => face_details.py} (100%) diff --git a/modules/pag/pipe_sdxl.py b/modules/pag/pipe_sdxl.py index 13ba99bd5..28690c577 100644 --- a/modules/pag/pipe_sdxl.py +++ b/modules/pag/pipe_sdxl.py @@ -461,8 +461,10 @@ class StableDiffusionXLPAGPipeline( image_encoder=image_encoder, feature_extractor=feature_extractor, ) - self.register_to_config(force_zeros_for_empty_prompt=force_zeros_for_empty_prompt) - self.register_to_config(requires_aesthetics_score=requires_aesthetics_score) + if 'force_zeros_for_empty_prompt' in self.config: + self.register_to_config(force_zeros_for_empty_prompt=force_zeros_for_empty_prompt) + if 'requires_aesthetics_score' in self.config: + self.register_to_config(requires_aesthetics_score=requires_aesthetics_score) self.vae_scale_factor = 2 ** (len(self.vae.config.block_out_channels) - 1) self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae_scale_factor) self.default_sample_size = self.unet.config.sample_size @@ -1500,7 +1502,7 @@ class StableDiffusionXLPAGPipeline( else: replace_processor = PAGIdentitySelfAttnProcessor() - if(self.pag_applied_layers_index): + if self.pag_applied_layers_index: drop_layers = self.pag_applied_layers_index for drop_layer in drop_layers: layer_number = int(drop_layer[1:]) @@ -1517,7 +1519,7 @@ class StableDiffusionXLPAGPipeline( raise ValueError( f"Invalid layer index: {drop_layer}. Available layers: {len(down_layers)} down layers, {len(mid_layers)} mid layers, {len(up_layers)} up layers." ) - elif(self.pag_applied_layers): + elif self.pag_applied_layers: drop_full_layers = self.pag_applied_layers for drop_full_layer in drop_full_layers: try: @@ -1621,7 +1623,7 @@ class StableDiffusionXLPAGPipeline( if XLA_AVAILABLE: xm.mark_step() - if not output_type == "latent": + if output_type != "latent": # make sure the VAE is in float32 mode, as it overflows in float16 needs_upcasting = self.vae.dtype == torch.float16 and self.vae.config.force_upcast @@ -1656,7 +1658,7 @@ class StableDiffusionXLPAGPipeline( else: image = latents - if not output_type == "latent": + if output_type != "latent": # apply watermark if available if self.watermark is not None: image = self.watermark.apply_watermark(image) @@ -1671,7 +1673,7 @@ class StableDiffusionXLPAGPipeline( #Change the attention layers back to original ones after PAG was applied if self.do_adversarial_guidance: - if(self.pag_applied_layers_index): + if self.pag_applied_layers_index: drop_layers = self.pag_applied_layers_index for drop_layer in drop_layers: layer_number = int(drop_layer[1:]) @@ -1685,26 +1687,22 @@ class StableDiffusionXLPAGPipeline( else: raise ValueError(f"Invalid layer type: {drop_layer[0]}") except IndexError: - raise ValueError( - f"Invalid layer index: {drop_layer}. Available layers: {len(down_layers)} down layers, {len(mid_layers)} mid layers, {len(up_layers)} up layers." - ) - elif(self.pag_applied_layers): - drop_full_layers = self.pag_applied_layers - for drop_full_layer in drop_full_layers: - try: - if drop_full_layer == "down": - for down_layer in down_layers: - down_layer.processor = AttnProcessor2_0() - elif drop_full_layer == "mid": - for mid_layer in mid_layers: - mid_layer.processor = AttnProcessor2_0() - elif drop_full_layer == "up": - for up_layer in up_layers: - up_layer.processor = AttnProcessor2_0() - else: - raise ValueError(f"Invalid layer type: {drop_full_layer}") - except IndexError: - raise ValueError( - f"Invalid layer index: {drop_full_layer}. Available layers are: down, mid and up. If you need to specify each layer index, you can use `pag_applied_layers_index`" - ) + raise ValueError(f"Invalid layer index: {drop_layer}. Available layers: {len(down_layers)} down layers, {len(mid_layers)} mid layers, {len(up_layers)} up layers.") + elif self.pag_applied_layers: + drop_full_layers = self.pag_applied_layers + for drop_full_layer in drop_full_layers: + try: + if drop_full_layer == "down": + for down_layer in down_layers: + down_layer.processor = AttnProcessor2_0() + elif drop_full_layer == "mid": + for mid_layer in mid_layers: + mid_layer.processor = AttnProcessor2_0() + elif drop_full_layer == "up": + for up_layer in up_layers: + up_layer.processor = AttnProcessor2_0() + else: + raise ValueError(f"Invalid layer type: {drop_full_layer}") + except IndexError: + raise ValueError(f"Invalid layer index: {drop_full_layer}. Available layers are: down, mid and up. If you need to specify each layer index, you can use `pag_applied_layers_index`") return StableDiffusionXLPipelineOutput(images=image) diff --git a/modules/sd_models.py b/modules/sd_models.py index be01df7b3..9de486987 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -1113,6 +1113,8 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No if sd_model is None: shared.log.error('Diffuser model not loaded') return + if 'requires_aesthetics_score' in sd_model.config: + sd_model.register_to_config(requires_aesthetics_score=False) sd_model.sd_model_hash = checkpoint_info.calculate_shorthash() # pylint: disable=attribute-defined-outside-init sd_model.sd_checkpoint_info = checkpoint_info # pylint: disable=attribute-defined-outside-init sd_model.sd_model_checkpoint = checkpoint_info.filename # pylint: disable=attribute-defined-outside-init diff --git a/modules/sd_samplers_common.py b/modules/sd_samplers_common.py index c6ef9131f..8d6694f5c 100644 --- a/modules/sd_samplers_common.py +++ b/modules/sd_samplers_common.py @@ -40,8 +40,11 @@ def single_sample_to_image(sample, approximation=None): warn_once('Unknown decode type') approximation = 0 # normal sample is [4,64,64] - if sample.dtype == torch.bfloat16: - sample = sample.to(torch.float16) + try: + if sample.dtype == torch.bfloat16: + sample = sample.to(torch.float16) + except Exception as e: + warn_once(f'live preview: {e}') if len(sample.shape) > 4: # likely unknown video latent (e.g. svd) return Image.new(mode="RGB", size=(512, 512)) if len(sample) == 16: # sd_cascade diff --git a/scripts/face-details.py b/scripts/face_details.py similarity index 100% rename from scripts/face-details.py rename to scripts/face_details.py