AIGC专栏4——Stable Diffusion原理解析-inpaint修复图片为例_diffusion inpaint-CSDN博客
如果我们必须训练一个inpaint模型才能对当前的模型进行inpaint,那就太麻烦了,有没有什么方法可以不需要训练就能inpaint呢?
Stable Diffusion就是一个生成模型,如果我们可以做到让Stable Diffusion只生成指定区域,并且在生成指定区域的时候参考其它区域,那么它自身便是一个天然的inpaint模型。
如何做到这一点呢?我们需要结合img2img方法,我们首先考虑inpaint的两个输入:一个是原图,另外一个是mask图。
在img2img中,存在一个denoise参数,假设我们设置denoise数值为0.8,总步数为20步,那么我们会对输入图片进行0.8x20次的加噪声。如果我们可以在这个加噪声图片的基础上进行重建,那么网络必然会考虑原始图片的特征。(意思就是不让给定输入的图像完全加噪,而是加噪成还是含有一定原始图像特征的噪声图像,这样就对应了图生图的原理,利用到了给定图像的特征)。
具体步骤:
-
将原图x0映射到VAE隐空间,得到img_orig;
-
初始化随机噪声图像img(也可以使用img_orig完全加噪后的噪声);
-
开始循环:
-
对于每一次时间步,根据时间步生成img_orig对应的加噪图像特征;
-
一个是基于上个时间步降噪后得到的img,一个是基于原图得到的加噪img_orig。通过mask将两者融合:img=img_orig∗mask+(1.0−mask)∗img 。即,将原图中的非mask区域和噪声图中的mask区域进行融合,得到新的噪声图。
-
然后继续去噪声直到结束。
-
由于该方法不需要训练新模型,并且重建效果也不错,所以该方法比较通用