stable-diffusion
stable-diffusion copied to clipboard
Repeated inpainting leads to saturated pixels
Repeated inpainting leads to saturated pixels. Quick and dirty example:
import subprocess
import os
import numpy as np
from PIL import Image, ImageDraw
import shutil
directory = lambda x: "./Diffusion/Diffusion_{}/".format(x)
for i in range(240):
if i!=0:
if os.path.exists(directory(i)):
shutil.rmtree(directory(i))
for i in range(240):
im = Image.new('RGB', (512, 512), (0, 0, 0))
draw = ImageDraw.Draw(im)
x = np.random.randint(512-128)
y = np.random.randint(512-128)
draw.rectangle([(x,y),(x+128,y+128)], fill=(255, 255, 255))
im.save('{}Diffusion_mask.png'.format(directory(i)))
os.mkdir(directory(i+1))
subprocess.run('python scripts/inpaint.py --steps 20 --indir {} --outdir {}'.format(directory(i),directory(i+1)), shell=True)
im = Image.open('{}Diffusion.png'.format(directory(i+1)))
# pixels = 2
# im = im.crop((pixels, pixels, 512-pixels, 512-pixels))
# im = im.resize((512,512), resample=Image.BICUBIC, box=None, reducing_gap=None)
# im.save('{}Diffusion.png'.format(directory(i+1)))
im.save('./DiffusionOut/{0:06d}.png'.format(i))
if i!=0:
shutil.rmtree(directory(i))
Add folders/files: ./Diffusion/Diffusion_0/Diffusion.png ./DiffusionOut/
In scripts/inpainting changing
inpainted = inpainted.cpu().numpy().transpose(0,2,3,1)[0]*255
To
inpainted = np.round(inpainted.cpu().numpy().transpose(0,2,3,1)[0]*255)
Fixes the issue I think