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区域进行融合,得到新的噪声图。 
-  然后继续去噪声直到结束。 
 
-  
由于该方法不需要训练新模型,并且重建效果也不错,所以该方法比较通用
















![[Java]面向对象-抽象类/方法接口适配器设计模式](https://i-blog.csdnimg.cn/direct/4104db4399254460a555f2d696c86daf.png)


