如何使用outpainting扩展图像

你知道稳定扩散可以用来在任何方向上扩展图像吗?这个功能被称为outpainting,它可以生成原本超出画面范围的连贯背景。在本文中,我们将逐步介绍如何在AUTOMATIC1111 GUI中进行outpainting,并介绍其他优秀的outpainting模型作为替代方案。

逐步指南

第一步是准备好你的图像。我将使用由稳定扩散生成的这个图像作为例子。在本教程中,我们将使用以下图像作为起点。我们将使用outpainting将图像居中并将其转换为横向尺寸。

图1

将图像上传到AUTOMATIC1111

如果图像是由AUTOMATIC1111 GUI生成的,那么提示信息和其他生成参数将被写入PNG文件的元数据中。

在AUTOMATIC1111 GUI中,进入"PNG Info"选项卡。将图像从本地存储拖放到画布区域。生成参数应该会显示在右侧。

点击"Send to img2img",将此图像和参数发送到outpainting。图像和提示应该会显示在"img2img"选项卡下的"img2img"子选项卡中。

图2

如果你的起始图像不是由AUTOMATIC1111 GUI创建的,请直接进入"img2img"选项卡。将图像上传到"img2img"画布中。你需要编写一个准确描述图像和风格的提示。(你可以通过点击"Interrogate CLIP"来自动生成提示,但我认为它效果不太好。)

调整outpainting的参数

图3

首先,你需要选择适合outpainting的合适模型。为了保持风格的一致性,你应该使用生成图像的相同模型。例如,我使用了F222模型,所以我将使用相同的模型进行outpainting。

如果你使用了基础模型v1.4和v1.5,或者使用的是照片,你也可以使用v1修复模型。据说它可以得到更好的结果,尽管我没有使用它也没问题。

如果你使用了"PNG Info",图像大小应该已经自动正确设置。对于自定义图像,你应该将较短的一边设置为模型的原生分辨率,例如v1模型的512像素。较长的一边应相应调整以保持纵横比。

将"resize mode"设置为"crop and resize",以保持纵横比不变。

将"seed"设置为-1,每次得到不同的结果。

"denoising strength"将是你有很多乐趣玩弄的节点...现在先将其设置为0.6。

对于其余部分,你可以使用标准的文本到图像设置。为了完整起见,这是我使用的设置:

  • 采样方法:DPM++ 2M Karras
  • 采样步骤:30
  • 批处理大小:4

我的设置部分如下所示:

图4

启用outpainting脚本

向下滚动,你应该会看到一个"Script"下拉框。outpainting有两个选项:(1) outpainting mk2和(2) poor man's outpainting。outpainting mk2的效果并不好,选择poor man's outpainting。

图5

将"Pixels to expand"设置为128像素。

选择"fill"作为"masked"内容。它将使用图像的平均颜色填充扩展区域之前的部分。

最好一次只outpaint一个方向。我选择将此图像的outpaint方向设置为"right"。

我重复使用了原始的提示。

点击"Generate",开始生成!根据需要重新生成,直到你看到你喜欢的图像为止。

增加denoising strength以进行更多的修改。减小denoising strength以进行较少的修改。就是这么简单。

居中图像

这就是我的结果。她不再在照片的右侧,而是居中。扩展的像素与图像的其余部分在视觉上是一致的。我很满意!

图6

一旦你对一侧满意,你可以点击结果画布下的"Send to img2img"来迭代这个过程。

转换为横向尺寸

让我们多次扩展左右两侧,使这个纵向尺寸的图像变成横向。这可以完全改变图像的感知。现在它不再是对主题的特写。广阔的反乌托邦城市背景营造出很好的对比,讲述了一个很好的故事。

图7

用inpainting修复细节

你不需要太过于纠结于扩展部分的细节,因为你始终可以使用inpainting重新生成任何区域。下面我将向你展示如何重新生成整个右侧。

首先,点击"Send to inpainting",将你新生成的图像发送到inpainting选项卡。确保选择"Inpaint"选项卡。使用画笔工具在你想要重新生成的区域上创建一个mask。

图8

我使用的设置是:

  • Mask mode: Inpaint masked
  • Inpaint area: Only masked
  • Only masked padding, pixels: 36-72 (根据需要进行调整)
  • Script: None (别忘了关闭outpainting脚本!)
  • Denoising strength: 0.6-0.9。你需要查看结果并进行调整。增加以进行更多修改。
  • Batch size: 2-4。同时生成多个图像进行比较。
  • Seed: -1 (随机)
  • Masked content: original或fill (fill将使用mask下的平均颜色作为初始值)

下面是我inpainting设置的屏幕截图。请参阅"Inpainting Guide"以获取更详细的说明。

图9

经过几轮的inpainting后,这是我最终的横向图像。

图10

outpainting复杂场景

以上的Stable Diffusion方法在简单背景下效果很好,但在复杂场景下会遇到困难。原因是outpainting方法只考虑了靠近outpainted区域的图像的一小部分。要扩展复杂场景,需要考虑到长距离信息。

虽然不是Stable Diffusion(抱歉,Stable Diffusion纯粹主义者!),但有一种称为MAT(Mask-Aware Transformer)的出色的inpainting/outpainting方法可供选择。它是一个GAN模型,设计用于在生成图像的部分时考虑长距离信息。

Stable Diffusion outpainting的失败示例

为了说明建模长距离信息的重要性,让我们来outpaint下面这个复杂的街景场景。

图11

扩展的部分看起来单独还可以,但与整个图像不协调。

MAT outpainting

访问"Stable Diffusion Mat Outpainting"以使用MAT。该GUI只允许生成方形图像。你可以生成一个更大的方形图像,并将其裁剪为横向尺寸。"Scale"是在outpainting之前对上传的图像应用的缩放。我在上面的图像中将scale设置为1,并将输出尺寸设置为768,以将512×768的图像outpaint到768×768,从而扩展了左右两侧。

MAT在我们的示例中也表现得非常好。下面是横向outpaint的图像。

图14

其他的outpainting选项

如果出于任何原因你不想使用AUTOMATIC1111,那么这一部分适用于你。

Stable Diffusion Infinity

Stable Diffusion Infinity是一个很好的图形化outpainting用户界面。Huggingface的演示可以免费使用。如果没有其他用户在使用,它的运行速度可以很快。你还可以启动一个colab笔记本来运行你自己的实例。

该界面让你一次outpaint一个瓷砖。你需要为每个瓷砖编写一个提示。每个瓷砖应与现有图像有一些重叠。在inpainting之后,你可以手动将它们合并起来。

图15

标签: AI绘画教程, AI绘画教程网, AI绘画, Stable Diffusion, Stable Diffusion教程, Stable Diffusion社区, Stable Diffusion社群, Stable Diffusion中文社区, Stable Diffusion入口, Stable Diffusion注册, Stable Diffusion注册教程, Stable Diffusion共享账号