如何使用outpainting来扩展图像

你知道Stable Diffusion可以用于在任何方向上扩展图像吗?该功能被称为outpainting。它可以生成原本在帧外的相干背景。在本文中,我们将逐步介绍如何在AUTOMATIC111GUI中实现这一点。我还将介绍其他优秀的外涂模型作为替代方案。

所需软件

我们将在本指南中使用AUTOMATIC111,这是一个流行的全功能稳定扩散GUI。我们将在《快速入门指南》中使用一键启动Colab笔记本。请参阅使用说明。您也可以在WindowsMac上安装此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.4v1.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页面中有一个演示视频,向您展示如何使用它。

发表评论