Stable Diffusion的Inpaint应用

导入:(实例部分可跳至正文)
首先用取自网络的一张梗图开篇吧。

我觉得这张图非常微妙地点明了当前大多数人应用扩散模型进行图像生成的尴尬境地:限制stable diffusion生产力的不是AI的算法,而是人的知识面。AI知道的摄影、绘画、影视剧、打光、构图、艺术历史等方面的专业术语tag,可以说超过了绝大多数个体的知识面,因而普通人只能用模糊、抽象、概念性的prompt(描述词,或曰咒语)去给AI描述画面,然后不停地generate生成图像来抽卡,希望从无数概率中抽出自己想要的图像。
这显然是低效的。(虽然开盲盒的快感也是SD有趣的一部分)
下图是比较高效、成品率更高的SD应用方法。SD能做的远比抽盲盒要多,合理借助其Inpaint部分重绘功能和外界工具(如PS),将会(在脑中有明确的目标构图的情况下)大大提高成品率,同时让我们有办法处理AI画出的小小瑕疵,而不至于忍痛割爱,丢弃那些明明瑕不掩瑜的好图。

下面这篇文章就来讲述inpaint的基础用法。本文内容基于个人实践与网址(https://rentry.org/inpainting-guide-SD)中的指导。(原文配图nsfw,但是配图由于网络原因打不开,故一般情况下可以安心点开。)

正文:
本文基于stable diffusion-webUI开源项目与stable diffusion1.4模型。
什么是inpaint:可理解为局部重绘,将画面中被手工遮罩的部分重新绘制。
基本设置:在SD绘图过程中,如果你发现了一张整体尚可、细节崩坏的图,就可以使用“send to inpaint”按钮开始局部重绘。
下面我们以这张图为例,图是自己偶然跑出来的。

单击WebUI中的send to inpaint, 或者在inpaint界面中插入该图片均可。
在网页下方的设置中,勾选inpaint at full resolution, 同时将右侧滑块滑到一个不为零的数值。

然后,绘制遮罩,使用黑色遮罩将右侧多出来的手臂盖住,以备重绘。注意,如果是想用背景遮盖瑕疵,应当在遮罩中涵盖部分背景,宁多勿少,详见下图。即如果想重绘出和上下文相关的部分,需要把部分相关元素一起遮罩住。

随后,我又以右下角的图为基础,对右侧手臂部分进行了重绘。换了个不那么扭曲的手部。图略。
最后解决手臂飞离问题,借助PS的魔棒工具选中手臂以及右半边背景,向左侧拖动即可。

拖动后,背景的烟雾等部分过渡有些不自然,可以再次通过inpaint解决,遮罩如图所示,盖住拖动后的边缘即可:(或者也可借助PS的模糊、仿制图章工具等,看个人喜好)

最终,得到的结果如图所示。
