[AI绘画]inpainting原理和实战

发布于 2023-04-19  2333 次阅读


一段时间没写关于stable diffusion使用了,这里就写写inpainting的大致原理和使用.

什么是Inpainting?

inpainting本意是修补的意思,而用在图像上就是 一种制作图片的方式,其中缺失的部分已经被视觉和语义上合理的内容所填补

我们可以选定一张图片里的某个区域,然后输出提示词再选择一个模型可以得到一张新图片.

原本的图片可以是生成的图片,如果是生成的图片,假设采用模型A,在使用inpainting生成新图片采用模型B.这两个模型可以差别很大也可以很小,可以产生很多不同的效果.

inpainting一般的使用场景是给人物或者一些场景更改,在生成二次元图片场景下,一般就是改发色,衣服等等.

Inpaint能力可以通过优化稀疏代价函数来实现,以最小化图像中已知部分与填充部分之间的差异。这种方法可以用于去除图像中的噪声或填补缺失的区域。

参数介绍

中文翻译下,在web ui中一般翻译为局部重绘

缩放模式(resize mode)

使用场景:如果你的输入和输出图像是相同的尺寸,那么你可以把它设置为默认值,也就是 "仅调整大小"。如果你的起始图像的尺寸或比例与你想最终得到的不同,那么你可能想把它改为其他选项之一

仅调整大小:这是默认选择的选项。Stable Diffusion会将图像缩放到你在页面下方指定的宽度和高度。这个动作类似于图像编辑器中的Transform动作,如果你的输出长宽比与你的输入长宽比有很大差别,就会导致你的图像出现很多变形。

裁剪和调整大小:如果你为你的输出图像指定的尺寸小于你的输入图像,那么Stable Diffusion将裁剪边缘以适应。如果您为您的输出图像指定的尺寸大于您的输入图像,那么它将以1:1的比例调整图像大小以适应这些尺寸,然后裁剪掉超过这些尺寸的边缘。

调整大小和填充:如果你想让你的输出图像比你的输入图像更高或更宽,你会使用这个选项。在大多数情况下,我不建议使用这个选项,因为它可以沿你生长的边缘引入许多奇怪的外观失真。然而,它可以作为一种快速和肮脏的方法,与 "Inpaint not masked "选项结合使用.

仅调整大小(放大潜变量):这与Just Resize相同,但没有使用Stable Diffusion的一个upscale模型。根据我的经验,这个选项不是很可靠,在99%的情况下,你应该使用第一个 "仅仅调整大小 "选项来代替

Mask blur

遮罩模糊有点像标准图像编辑器中的选区羽化,这意味着稳定扩散会给你的内画区域的边缘添加一个柔和的模糊。这有助于将你的内画区域与周围的图像相融合。一个较小的遮罩模糊意味着你的内画区域会有一个较硬的 "边缘".

默认值是4,但你可能想根据你的图像的大小、你内画的区域的大小和你的图像的主题来调整这个比例

Mask mode

Inpaint masked意味着你 涂成黑色的区域将由稳定扩散重新生成. Inpaint not masked 意味着你 没有涂黑的区域将由稳定扩散法重新生成.

Mask content

决定了你要涂抹的区域的起始内容

Fill:inPaint的结果将根据输入图像的一个极其模糊的版本生成。 Original:结果将根据图像的指定部分的原始内容生成,以进行修改。这是你在大多数情况下想要的。 LatentNoise:如果你想让喷绘输出与原始图像有很大不同,选择这个选项很好,因为指定区域将根据种子数产生的噪声进行喷绘。基本上这是从一张白纸开始的。 LatentNothing:在这个选项中,稳定扩散将在指定的区域内填充一种单一的纯色,这种颜色是周围像素的混合色。如果你想让InPaint与原始图像有很大的不同,但仍然保持其调色板的残余,那么选择这个选项很好。

inpaint area

whole picture:这是默认选项。稳定扩散将根据整个输入图像生成新的输出图像,然后根据你指定的蒙版模糊量将这些输出图像混合到指定的内画区域。

Onlymasked:如果你选择了这个选项,Stable Diffusion将只把你指定的区域升格到你设定的宽度和高度,在此基础上生成,然后把这些降格到原始尺寸,并把它们合并到输出图像中。如果你要涂抹的区域与整个图像的比例非常小,这是一个很好的选择,因为有时Stable Diffusion的涂抹会失败,否则输出结果就没有变化。如果你选择了这个选项,那么你还应该指定你想要多少只有遮盖的填充物的像素。你设置的遮蔽填充值越高,你的输出看起来就越像输入。

sampling method

关于不同的采样方法、它们的优缺点、它们对图像质量的影响以及它们推荐的采样步骤和CFG值,可以写一整篇文章和指南,这远远超出了本教程的范围。对于我在森林中使用的特定例子,我选择使用DDIM

Restore Faces

如果你有一个类似人脸的人或生物,你应该勾选这个复选框,因为它将大大改善输出图像中人脸的质量。

Tiling

这个设置更适用于txt2img和img2img,对于inpainting来说,几乎总是可以忽略。这个设置告诉Stable Diffusion,你想让输出图像的边缘相互匹配,这样你就可以把它们拼成一个重复的网格图案。

Batch count和Batch size

批量计数是指Stable Diffusion将按顺序运行的图像数量。批量大小是指你希望Stable Diffusion并行运行的图像数量。并行处理图像的速度会更快,但会消耗更多的内存。你可能需要玩玩什么对你的GPU最有效。实际上,这就是这些设置是如何相互影响的:

如果你把Batch count设置为8,Batch size设置为1,那么Stable Diffusion将一个接一个地生成8张图像。 如果你把批处理数设为1,批处理大小设为8,那么稳定扩散将同时生成8幅图像。 如果您将批次数设为2,批次大小设为4,那么稳定扩散将同时生成4个图像,然后再同时生成另外4个图像,共8个输出图像。

CFG scale

这代表分类器自由指导规模,它是控制Stable Diffusion应遵循你的文本提示的程度的设置。

该值越高,它就越严格地遵循你的提示。默认值是7,它在创作自由和遵循你的指示之间取得了良好的平衡。值为1时,Stable Diffusion几乎拥有完全的自由,而值超过15时,就会有相当大的限制。

Denoising strength

这个设置控制稳定扩散对输入图像的影响程度。去噪强度为0意味着输出的图像将看起来与输入的图像完全一样。设置为1.0将使你的输出看起来与输入的完全不同。默认设置是0.75。

实战

这里使用anything-v4,

正向词

masterpiece, best quality, makima (chainsaw man), ultra detailed, 1girl, solo, standing, red hair, long braided hair, golden eyes, bangs, medium breasts, white shirt, stare, smile, (evil:1.2), looking at viewer, (interview:1.3), (dark background, chains:1.3),

生成图片如上,这里更改衣服样式,点击下方重绘转到局部重绘页面.

开始画图

涂满衣服,其余选项可以默认,模型不变,prompt是

crop top,

意思是露腹短上衣,生成即可

效果还不错,这就是AI的强大吧.

下面继续修改头发,涂抹头发,prompt是blonde hair,masked content选择的是original

生成图片如下,不是金色的,可能原因是金色和红色的发色融合了. image-20230414211337413

再选择fill,

貌似颜色变化不明显.而latent noise顾名思义在原图上加噪声,latent nothing就是无关系了

再更改一下描述词messy_hair,更改发型

生成图片

生成的图片可以再搭配Depth Library,修改手部,由于中间我图片tag填的以前的,生成图片就很怪了

如果你想不到好的tag可以看我往期文章也有介绍的网站,这里可以用魔咒百科词典 (aitag.top)

参考资料

  1. https://onceuponanalgorithm.org/using-inpaint-in-stable-diffusion-tutorial/#:~:text=Tutorial%3A%20How%20to%20Use%20InPainting%20in%20the%20Stable,the%20Stable%20Diffusion%20InPaint%20Settings%20and%20Parameters%20
  2. Beginner's guide to inpainting (step-by-step examples) - Stable Diffusion Art (stable-diffusion-art.com)
  3. 在线体验inpainting Stable Diffusion Inpainting
  4. Stable Diffusion tutorial: Prompt Inpainting with Stable Diffusion (lablab.ai)
届ける言葉を今は育ててる
最后更新于 2023-04-19