improve inpainting quality

This commit is contained in:
Vladimir Mandic
2023-12-28 07:14:14 -05:00
parent af606973cf
commit eef08675b2
4 changed files with 11 additions and 28 deletions
+2 -19
View File
@@ -164,34 +164,17 @@ def process_diffusers(p: StableDiffusionProcessing):
p.ops.append('inpaint')
if getattr(p, 'mask', None) is None:
p.mask = TF.to_pil_image(torch.ones_like(TF.to_tensor(p.init_images[0]))).convert("L")
p.mask = shared.sd_model.mask_processor.blur(p.mask, blur_factor=p.mask_blur)
width = 8 * math.ceil(p.init_images[0].width / 8)
height = 8 * math.ceil(p.init_images[0].height / 8)
# option-1: use images as inputs
task_args = {
'image': p.init_images,
'mask_image': p.mask,
'strength': p.denoising_strength,
'height': height,
'width': width,
# 'padding_mask_crop': p.inpaint_full_res_padding # done back in main processing method
}
""" # option-2: preprocess images into latents using diffusers
vae_scale_factor = 2 ** (len(model.vae.config.block_out_channels) - 1)
image_processor = diffusers.image_processor.VaeImageProcessor(vae_scale_factor=vae_scale_factor)
mask_processor = diffusers.image_processor.VaeImageProcessor(vae_scale_factor=vae_scale_factor, do_normalize=False, do_binarize=True, do_convert_grayscale=True)
init_image = image_processor.preprocess(p.init_images[0], width=width, height=height)
mask_image = mask_processor.preprocess(p.mask, width=width, height=height)
task_args = {"image": p.init_images, "mask_image": p.mask, "strength": p.denoising_strength, "height": height, "width": width}
"""
""" # option-2: manually assemble masked image latents
masked_image_latents = []
mask_image = TF.to_tensor(p.mask)
for init_image in p.init_images:
init_image = TF.to_tensor(p.init_images[0])
masked_image = init_image * (mask_image > 0.5)
masked_image_latents.append(torch.cat([masked_image, mask_image], dim=0))
masked_image_latents = torch.stack(masked_image_latents, dim=0).to(shared.device)
task_args = {"image": p.init_images, "mask_image": mask_image, "masked_image_latents": masked_image_latents, "strength": p.denoising_strength, "height": height, "width": width}
"""
if model.__class__.__name__ == 'LatentConsistencyModelPipeline' and hasattr(p, 'init_images') and len(p.init_images) > 0:
p.ops.append('lcm')
init_latents = [vae_encode(image, model=shared.sd_model, full_quality=p.full_quality).squeeze(dim=0) for image in p.init_images]