这篇文章中,您将首先通过一个简单的分步示例了解如何使用区域提示技术。然后您将了解将区域提示与 ControlNet 一起使用的更多高级用法。
软件
我们将使用 AUTOMATIC1111 Stable Diffusion GUI。您可以在Windows、 Mac或 Google Colab上使用此 GUI 。
安装区域提示器扩展
Colab 笔记本
在Quick Start Gudie的Colab Notebook中安装 Regional Prompter 扩展很容易。您需要做的就是检查区域提示器扩展。
Windows 或 Mac
按照以下步骤在 AUTOMATIC1111 中安装区域提示器扩展。
一个简单的例子
让我们看一个简单的例子。我将使用一个非常简单的提示来说明效果。
假设您要生成同一图像中的**男人和女人。**使用简单提示
一个男人和一个女人
和否定提示
毁容的,丑陋的
我们得到……一个男人和一个女人。
到目前为止,一切都很好。但是,如果您想更具体一点怎么办?就像生成一个黑发男人和一个金发女人?自然地,您将其写在提示符中。
一个黑头发的男人,一个金发女人
稳定扩散有时会混淆属性。
有时你会得到你所描述的_,_但更多时候稳定扩散混淆了哪种头发颜色应该和谁搭配。如果要进一步指定服装的颜色等,情况就更难了。
发生了什么?为什么 Stable Diffusion 连这个简单的事情都做不了?自注意力机制错误地将头发颜色和人联系起来。
这个问题有一个解决方案:只在图像的左侧指定黑发男性提示,在图像右侧指定金发女性提示。
区域提示器
要使用区域提示器:
- 分割方式:水平
- 生成方式:注意力
- 分频比:1, 1
5.放入提示
一个男人和一个女人,一个黑头发的男人 BREAK一个男人和一个女人,一个金头发的女人
提示由关键字分隔**BREAK**
。我们上面有两个提示。
第一个提示将应用于区域 0。第二个提示将应用于区域 1。
否定提示:
毁容的,畸形的,丑陋的
由于否定提示中没有BREAK
,整个提示将应用于两个区域。
这些是我们得到的:
稳定扩散在区域 0(左)中正确生成黑发男性,在区域 1 中生成金发女性。(右)
请注意,这并非 100% 的时间都有效。根据我的经验,它更像是 75% 的时间。但这仍然比纯属偶然要好得多。
常用提示
您可能已经注意到这两个提示有一个共同的部分“一个男人和一个女人”。
一个男人和一个女人,一个黑头发的男人 BREAK一个男人和一个女人,一个金头发的女人
如果没有通用提示,Stable Diffusion 只会生成一个人:
一个黑头发的男人 BREAK一个金发女人
原因是左右区域的提示都描述了一个人。所以你得到一个人!您需要告诉 Stable Diffusion 这是两个人的照片:一个男人和一个女人。
这就是为什么你需要一个共同的提示“一个男人和一个女人”。
与这个玩具示例不同,如果您生成真实的图像,则常见提示通常会很长。有一个方便的方法来处理这个问题。
2、现在可以a man and a woman
在开头添加常用提示符( )。
一个男人和一个女人 BREAK 一个黑头发的男人 BREAK一个金头发的女人
我们上面有三个提示:(1)普通提示,(2)区域0提示,(2)区域1提示。
公共提示被添加到每个区域的提示的开头。
普通提示只是一个语法糖:它等同于原始提示中的内容。
更复杂的区域
使用区域提示器的秘诀在于准确定义区域。在本节中,我将解释如何设置分频比以按照您想要的方式分解图像。可能很难理解或记住如何正确指定区域。您可以随时单击可视化并制作模板来生成区域图像。
在一维划分中,可以水平或垂直划分区域。
横向划分
要水平划分区域,请在划分模式中选择****水平。每个区域都由一个用逗号分隔的数字表示。数字代表区域的大小。
分频比示例:
1,1
1,1,1
1,2,1
纵向划分
垂直划分模式类似,只是区域是垂直划分的。以下是分压比的一些示例。
1,1
1,1,1
1,2,1
二维区域
您可以在图像中垂直和水平划分区域。选择横向分割模型。规则是
- 行由
;
- 每行是由逗号分隔的一系列数字,例如
1,1,1
- 每行中的第一个数字表示行的高度。随后的数字代表区域的宽度。
让我们看几个例子。
1,1,1; 1,1,1
这定义了两行,每行的高度为 1。两行都有两个宽度相等的区域 (1,1)。
总共有4个区域。
1,1,1; 2,1,1
- 这定义了两行。
- 第一行的高度是1,第二行的高度是2。
- 每行有两个宽度相等的区域 (1,1)。
- 总共有4个区域。
最后,让我们看一个更复杂的例子。明白了这一点,你就明白了区域划分的一切!
1,1,1,1; 2,1,2
- 有两排。
- 第一行的高度是1,第二行的高度是2。
- 第一行有 3 个宽度为 1 的区域。(1,1,1)
- 第二行有两个宽度为 1 和 2 的区域。(1,2)
- 总共有5个区域。
二维区域提示示例
假设我正在尝试真实的图像。我想出了以下提示。
型号:Lyriel v1.5
迅速的:
一个女巫,非常详细的脸,半身,工作室照明,戏剧性的照明,非常详细的衣服,看着你,神秘的,戏剧性的照明,(满月:1.3),(美丽的火魔法:1.2)
否定提示:
未成年的,不成熟的,毁容的,畸形的
我们得到了一些不错的图像,如下所示。
不错,但没有办法控制月亮和火的位置。您所能做的就是不断点击“生成”按钮,直到获得您想要的展示位置。
这是区域提示器可以提供帮助的地方。
使用以下设置:
- 分割方式:水平
- 使用普通提示:是
- 分频比:
1,1,1;2,1,1
迅速的:
一个女巫,高度精细的脸,半身,工作室灯光,戏剧性的灯光,高度精细的衣服,看着你,神秘,戏剧性的灯光 BREAK(满月:1.3)BREAK BREAK BREAK ( 美丽 的 火魔法:1.2)
这将月亮置于区域 0(左上),将火置于区域 3(右下)。
我们现在可以控制位置了!
现在让我们把月亮放在右上角(区域 1),把火放在左下角(区域 2)。
一个女巫,高度精细的脸,半身,工作室灯光,戏剧性的灯光,高度精细的衣服,看着你,神秘,戏剧性的灯光 BREAK BREAK(满月:1.3) BREAK ( 美丽 的 火焰魔法:1.2)BREAK
请看右上角的月亮和****左下角的火。
同样,您应该知道区域提示并非在 100% 的时间都有效。所以一次至少生成几张图片。
使用 ControlNet 进行区域提示
区域提示器可以指定每个区域的提示,但它不能控制整体图像组成。嗯,我们有一个工具可以做到这一点:ControlNet。
让我们来看两个结合使用 Regional Prompter 和 ControlNet 的示例,以实现没有它们我们只能梦想的操纵程度。
示例 1:控制全局和局部组合
假设您想要生成一张巫师在小地窖空间中研究旧卷轴的图像。此外,您希望他旁边有一只狼,地板上有一些头骨。
有很多因素需要处理。如果您使用常规的文本到图像,您将看到各种各样的构图。
文本到图像
作为一个无知的 Stable Diffusion 用户,我输入了这个提示并希望一切顺利。
一个神秘的巫师,非常详细的脸,非常详细的衣服,电影,黑暗,恐怖,破旧的石墙,古老的符号,古老的神秘撕裂的卷轴,狼,许多头骨
否定提示:
未成年的,不成熟的,毁容的,畸形的
型号:Lyriel v1.5
由于我的提示技巧,这些都是不错的图像。(!)
但这并不是我想要生成的。可能我没说清楚他在研究卷轴。让我们稍微重新安排一下提示。
一个神秘的巫师研究古老的神秘撕裂的卷轴,非常详细的脸,非常详细的衣服,电影,黑暗,恐怖,破旧的石墙,古代符号,狼,许多头骨
现在它更接近我的想法。但我无法控制巫师的姿势及其放大的程度。
添加控制网
自然,下一步是使用ControlNet控制姿势。我假设您已经安装了它并且了解基础知识。
我将指导您在此工作流程中使用它。如果您想了解更多信息,请阅读ControlNet 文章。
我将使用此库存图片作为参考。
**步骤 1.**将参考图像上传到图像画布。您可以将参考图像拖放到那里。
步骤 2.检查启用。
第 3 步。在预处理器下拉菜单中选择openpose。
第 4 步。在模型下拉菜单中选择control_opepose。
或者,通过执行以下步骤预览提取的姿势。
- 检查允许预览。
- **一个看起来像爆炸的新图标将出现在“模型”**下拉菜单旁边。单击图标以预览姿势。
按生成以使用 ControlNet 生成图像。
这就是我们得到的。
现在它向前迈进了一步。我们已经修复了巫师的姿势。他现在总是坐下来展示他的完整身体。
但它仍然缺乏一种机制来指定某些区域的提示。你可能知道我要做什么。没错,添加区域提示!
添加区域提示
**现在,通过选中“活动”**复选框来激活区域提示器扩展。
我们仍将使用水平 分割模式。
检查使用通用提示。
我们将把图像分成 4 个区域。分频比是
1,1,1.5; 1,1,1.5
4个地区是这样的。
我们希望有以下内容:
- 整体形象:巫师
- 区域 0:带有古老符号的石墙
- 区域 1:巫师阅读卷轴
- 区域二:石墙边的狼
- 区域 3:一些头骨
所以提示是
一个神秘的巫师,非常详细的脸,非常详细的衣服,电影,黑暗,恐怖 BREAK 破旧的石墙,(古代符号:1.3) BREAK 古老的神秘(撕裂的卷轴:1.2) BREAK 破旧的石墙,(狼:1.5) BREAK(许多头骨:1.5),模糊
请注意,我增加了一些关键字的权重。否则对象可能不会显示。
现在您可以完全控制狗、技能和神秘符号的位置。请参见下图。
示例 2:正确的颜色分配
假设您想要生成一些棕色头发、黄色衬衫和蓝色连衣裙的女性的照片。听起来容易吗?
如果您尝试过生成类似的东西,您就会知道这是一个挑战。
让我们看一些带有以下提示的示例。(修改自Realistic People教程)
年轻女性的全身照片,天然棕色头发,黄色衬衫,蓝色连衣裙,繁忙的街道,边缘照明,工作室照明,看着相机,数码单反相机,超高品质,锐聚焦,粘性锐利,景深,胶片颗粒,Fujifilm XT3,晶莹剔透,8K UHD,高度细致的有光泽的眼睛,高度细致的皮肤,皮肤毛孔
毁容,丑陋,糟糕,不成熟,卡通,动漫,3d,绘画,黑白
型号:Realistic Vision v2
即兴稳定扩散!颜色都混在一起了。
您会发现要告诉 Stable Diffusion 哪种颜色应该放在哪里并不容易。prompt token 的 self-attention 在这里效果不佳。
你会偶然得到一个正确的作业。但我宁愿利用那个机会获得一个好的构图......
区域提示器
颜色分配是区域提示器可以提供帮助的事情。让我们将图像垂直分成 3 部分。
分割模式:垂直
分频比:1、1、1.5
使用普通提示:是
迅速的:
年轻女性的全身照片,繁忙的街道,边缘照明,工作室照明,看着相机,数码单反相机,超高品质,清晰的焦点,粘性锐利,自由度,胶片颗粒,Fujifilm XT3,晶莹剔透,8K UHD,高度详细的有光泽的眼睛, 高细节皮肤, 皮肤毛孔 BREAK 天然棕色头发 BREAK (黄色上衣: 1.3) BREAK(蓝色连衣裙: 1.3)
否定提示是一样的:
毁容,丑陋,糟糕,不成熟,卡通,动漫,3d,绘画,黑白
很不错!区域提示是解决颜色分配问题的有效方法。
使用 ControlNet Pose 获得更多控制。
区域提示器作为创意工具
我们有幸拥有 Stable Diffusion。区域提示器使您能够在图像的不同部分进行提示。让我们考虑做一些新的东西!创建一些以前不可能的视觉效果!
下面是将自然场景的图像水平划分为四个部分并为每个部分分配不同天气的示例。
分割方式:水平
分频比:1,1,1,1
使用普通提示:是
型号:Lyriel v1.5
迅速的:
一个美丽的野生公园,自由之路,勇气和爱,国家地理年度照片 BREAK 春天,树木,鸟类,绿草,(晴天,野花:1.2),上帝之光,晴空 BREAK 多云,干燥 BREAK 雷雨,雨 BREAK冬天,大雪,荒芜的树木
否定提示
BREAK 雪 BREAK BREAK BREAKBREAK
我相信你可以比我更有创造力。让您的想法畅通无阻并开始尝试!
最后的笔记
- 如果看不到对象,请增加关键字的权重。
- 得到不完美的图像是很正常的。用inpainting在这里或那里修复它。与许多其他扩展不同,区域提示器在 txt2img 和 img2img 之间共享设置。因此,如果您不想使用它进行修复,请务必取消选中**“活动” 。**
- 这个扩展的功能比我经历过的要多。请参阅区域提示器 GitHub 页面以了解更多信息。
- 有一个名为Latent Couple 的早期插件可以做类似的事情。区域提示器正在更新并具有一些额外的功能。
- 尝试使用注意力和潜在生成模式,看看哪一种最适合您。(注意力对我来说效果很好。)