你知道Stable Diffusion可以用于在任何方向上扩展图像吗?该功能被称为outpainting。它可以生成原本在帧外的相干背景。在本文中,我们将逐步介绍如何在AUTOMATIC111GUI中实现这一点。我还将介绍其他优秀的外涂模型作为替代方案。
所需软件
我们将在本指南中使用AUTOMATIC111,这是一个流行的全功能稳定扩散GUI。我们将在《快速入门指南》中使用一键启动Colab笔记本。请参阅使用说明。您也可以在Windows和Mac上安装此GUI。
启动笔记本电脑时,请确保选择将在本教程中使用的F222型号。
分步指南
第一步是准备好你的形象。我将使用这个由稳定扩散生成的图像。在本教程中,我们将使用以下图像作为起点。我们将使用outpainting来将图像居中,并将其转换为风景大小。
outpainting的起始图像
您可以使用下面的按钮下载此图像以遵循教程。
将图像上传到AUTOMATIC111
如果图像是由AUTOMATIC111GUI生成的,则提示和其他生成参数会写入PNG文件的元数据中。
在AUTOMATIC111GUI中,转到PNGinfo选项卡。将图像从本地存储拖放到画布区域。生成参数应显示在右侧。
按“Send to img2img”发送此图像和参数以进行外画。图像和提示应该出现在img2img选项卡的img2img子选项卡中。
使用“PNG info”选项卡提取生成参数。
如果您的起始图像不是由AUTOMATIC111GUI创建的,只需转到img2img选项卡。将图像上传到img2img画布。你需要写一个提示来准确描述图像和风格。(点击“询问CLIP”可能会自动生成提示。但我认为这不是很好。)
调整outpainting参数
首先,您需要选择一个合适的模型进行outpainting。为了风格的一致性,您应该使用生成图像的相同模型。例如,我使用了F222模型,所以我将使用相同的模型进行outpainting。
如果您使用的是基础模型v1.4和v1.5,或者您正在使用照片,您也可以使用v1 inpainting模型。它应该会产生更好的结果。尽管我不用它也没问题。
如果您使用PNG info,则图像大小应该已自动正确设置。对于自定义图像,您应该将短边设置为模型的本地分辨率,例如v1模型的512 px。应相应地调整较长的一侧,以保持纵横比。
将调整大小模式resize mode设置为裁剪和调整crop and resize大小,以便纵横比不会更改。
将seed设置为-1,每次都会得到不同的结果。
Denoising strength 将是一个你会玩得很开心的结……现在让我们把它设置为0.6。
其余部分可以使用标准的文本到图像设置
- Sampling method: DPM++ 2M Karras
- Sampling Steps: 30
- Batch size: 4
这是我的设置部分:
启用outpainting绘制脚本
向下滚动,您应该会看到一个“Script”下拉框。outpainting有两种选择:(1)outpainting mk2和(2)poor man’s outpainting。输出mk2效果不太好。选择Choose Poor man’s outpainting。
可以将“Pixels”保留为128pixels展开。选择masked content的填充。它将使用图像的平均颜色来填充展开的区域,然后再进行outpainting。
最好一次画出一个方向。我为这张图片选择了outpaint方向。
我正在重复使用原始提示词。
按下Generate,您就开始工作了!重新生成所需的时间,直到您看到自己喜欢的图像为止。
增加denoising strength以改变更多。降低去噪强度变化较小。就这么简单。
将图像居中
这就是结果。她已经不在照片的右边了,但已经是在中心了。展开的像素在视觉上与图像的其余部分一致。我很高兴!
Outpainting用于扩展右手边
一旦你对其中一方感到满意,你就可以点击结果画布下的Send to img2img来迭代这个过程。
转换为横向大小
让我们多次扩展左侧和右侧,使肖像大小的图像变成横向图像。这可以完全改变对图像的感知。现在这不是拍摄对象的特写镜头。广阔的反乌托邦城市背景形成了巨大的对比,告诉了一个好故事。
inpainting修复细节
你不需要太在意扩展部分的小细节,因为你可以在以后的inpainting中重新生成任何区域。下面我将向你展示如何再生整个右手边。
首先,按Send to inpainting将新生成的图像发送到修复选项卡。确保选“Inpaint”选项卡。使用画笔工具在区域上创建遮罩mask。
我使用的设置是
- Mask mode: Inpaint masked
- Inpaint area: Only masked
- Only masked padding, pixels: 36-72 (adjust as need)
- Script: None (Don’t forget the turn off the outpainting script!)
- Denoising strength: 0.6-0.9. You will want to look at the result and adjust this. Increase to change more.
- Batch size: 2-4. Generate multiple images at a time for comparison.
- Seed: -1 (random)
- Masked content: original or fill. (Fill will use the average color under the mask as the initial value)
下面是我修复设置的屏幕截图。有关详细说明,请参阅《修复指南》。
Inpainting 设置
经过几轮修复,这是我最后一张景观尺寸的照片。
输出复杂场景
上面的Stable Diffusion方法在简单的背景下工作得很好。它将与复杂的场景作斗争。原因是Outpainting方法只考虑与Outpainting区域相邻的一小部分图像。为了扩展复杂的场景,需要考虑长距离信息。
它不是Stable Diffusion(对不起,Stable Diffusion散纯粹主义者!),但有一种出色的inpainting/outpainting方法,称为MAT(Mask Aware Transformer)。它是一个GAN模型,设计用于在构成图像的部分时考虑长距离信息。
Stable Diffusion outpainting的失效示例
为了说明建模长距离信息的重要性,让我们描绘以下复杂的街道场景。
使用上述方法展开右手边,我们得到了以下图像:
扩展部分本身看起来不错,但与整个图像的其余部分不一致。
MAT outpainting
MAT outpainting不仅速度更快,而且效果更好。请看下面由MAT扩展的图片。它并不完美,但要好得多。
转到Stable Diffusion Mat Outpainting使用Mat。GUI只允许您生成方形图像。您可以生成一个更大的正方形图像,并将其裁剪为横向大小。比例是在画外之前应用于上传图像的比例。在上面的图像中,我将比例设置为1,并将输出大小设置为768,这样它就可以将512×768的图像绘制为768×768,扩展左右两侧。
MAT在我们的例子中也起到了很好的作用。下面是横向绘制的图像。
其他外涂outpainting选项
如果您出于任何原因不想使用AUTOMATIC111,本节为您准备。
Stable Diffusion无穷大
Stable Diffusion Infinity是一个很好的图形化用户界面。Huggingface demo是免费使用的。如果没有其他人使用,它可以运行得很快。你也可以启动一个colab笔记本来运行你自己的实例。
该界面允许您一次绘制一个平铺tile。您需要为每个tile写一个提示词。每个tile都应该与现有图像有一个小的重叠。
Github页面中有一个演示视频,向您展示如何使用它。