区域提示词: 在Stable Diffusion中控制构图

您知道可以为图像的不同区域指定提示词吗?您可以使用区域提示词器扩展在 AUTOMATIC1111 上执行此操作。

在这篇文章中,您将首先浏览一个使用区域提示词技术的简单说明。然后您将了解将区域提示词与 ControlNet 结合使用的更多高级用法。

软件

我们将使用 AUTOMATIC1111 稳定扩散 GUI。您可以在Windows、  Mac或 Google Colab上使用此 GUI  。

安装区域提示器Regional Prompter 扩展

Colab Notebook

快速入门指南中的Colab Notebook中安装区域提示器(Regional Prompter)扩展非常简单。您所需要做的就是选中区域提示器扩展。

Windows 或 Mac

按照以下步骤在 AUTOMATIC1111 中安装区域提示器扩展。

  1. 正常启动 AUTOMATIC1111 Web-UI。
  2. 导航到扩展页面。
  3. 单击可用选项卡。
  4. 单击加载自:按钮。
  5. 找到扩展名“Regional Prompter”。
  6. 单击安装
  7. 重新启动网络用户界面。

一个简单的例子

让我们看一个简单的例子。我将使用一个非常简单的提示词来说明效果。

假设您想要在同一图像中生成一个男人和一个女人。使用简单的提示

一个男人和一个女人

a man and a woman

以及反向提示

毁容的,丑陋的

disfigured, ugly

我们得到……一个男人和一个女人。

到目前为止,一切都很好。但如果你想更具体怎么办?就像生成一个黑发男人一个金发女人一样?当然,您将其写在提示词中。

一个黑发男人,一个金发女人

a man with black hair, a woman with blonde hair


Stable Diffusion有时会混淆属性。

有时您会得到您所描述的结果Stable Diffusion常常会混淆哪种头发颜色应该与谁搭配。如果你想进一步指定衣服的颜色等,情况会更加困难。

发生了什么?为什么Stable Diffusion连这么简单的事情都做不到?自注意力机制错误地将头发颜色和人联系起来。

这个问题有一个解决方案:仅将黑发男士的提示词指定到图像的左侧,将金发女士的提示词指定到图像的右侧。

区域提示器Regional Prompter 扩展

要使用区域提示器:

  1. 展开txt2img页面上的区域提示器部分。

2. 选中“Active”以激活区域提示器。

3. 大多数默认设置都适合本示例。具体来说,他们是

  • Divide mode分割方式:水平
  • Generation mode生成模式:Attention
  • Divide Ratio分割比:1, 1

4. 点击可视化并制作模板visualize and make template)。您将看到下面的区域图像,指示两个区域:左侧的区域 0 和右侧的区域 1,以 1 比 1 的比例平分。

5.输入提示

一个男人和一个女人,一个黑发男人
BREAK
一个男人和一个女人,一个金发女人

a man and a woman, a man with black hair
BREAK
a man and a woman, a woman with blonde hair

提示词由关键字分隔BREAK。上面我们有两个提示词。

第一个提示词将应用于区域 0。第二个提示词将应用于区域 1。

反向提示词:

毁容的, 变形的, 丑陋的

disfigured, deformed, ugly

由于反向提示词中没有任何内容BREAK,因此整个提示词将应用于两个区域。

这些是我们得到的:

Stable Diffusion正确地在区域 0 中生成黑发男性(左),在区域 1 中正确生成金发女性。(右)

请注意,这并不是 100% 有效。根据我的经验,大约 75% 的情况是这样。但它仍然比完全靠运气好得多。

共同提示

您可能已经注意到这两个提示词有一个共同的部分“男人和女人”。

一个男人和一个女人,一个黑发男人
BREAK
一个男人和一个女人,一个金发女人

a man and a woman, a man with black hair
BREAK
a man and a woman, a woman with blonde hair

如果没有通用提示词,Stable Diffusion只会生成一个人:

一个黑发男人
BREAK
一个金发女人

a man with black hair
BREAK
a woman with blonde hair

原因是左侧和右侧区域的提示词都描述了一个人。这样你就得到一个人了!您需要告诉Stable Diffusion这是两个人的照片:一个男人和一个女人。

这就是为什么您需要一个共同提示词“一个男人和一个女人”。

与这个玩具示例不同,如果您真实生成图像,常见提示通常会相当长。有一个方便的方法来处理这个问题。

  1. 选中选项使用共同提示Use common prompt)。

2. 现在可以在开头添加共同提示词(a man and a woman )。

一个男人和一个女人
BREAK
一个黑发男人
BREAK
一个金发女人

a man and a woman
BREAK
a man with black hair
BREAK
a woman with blonde hair

上面我们有3个提示词:(1)共同提示词,(2)区域0提示词,(2)区域1提示词。

共同提示词被添加到每个区域的提示词的开头。

共同提示词只是一个语法:它相当于原始提示词中的内容。

更复杂的区域

使用区域提示器的秘诀在于准确定义区域。在本节中,我将解释如何设置分割比以按照您想要的方式分解图像。可能很难理解或记住如何正确指定区域。您始终可以单击可视化并制作模板来生成区域图像。

一维划分中,可以水平或垂直划分区域。

Horizontal division横向划分

要水平分割区域,请在分割模式中选择水平horizontal)。每个区域都由用逗号分隔的数字表示。数字代表区域的大小。

分割比(Divide Ratio)示例:

1,1
1,1,1
1,2,1

Vertical division垂直划分

垂直划分模式类似,只是区域是垂直划分的。以下是分割比divide ratio)的一些示例。

1,1
1,1,1
1,2,1

二维区域

您可以在图像中垂直和水平划分区域。选择水平分割模式(horizontal divide model)。规则是

  • 行由分号“;”分隔
  • 每行是一系列用逗号分隔的数字,例如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)

a witch, highly detailed face, half body, studio lighting, dramatic lighting, highly detailed clothing, looking at you, mysterious, dramatic lighting, (full moon:1.3), (beautiful fire magic: 1.2)

反向提示词:

未成年的, 不成熟的, 毁容的, 变形的

underage, immature, disfigured, deformed

我们得到了一些像下面这样的不错的图像。

还不错,但是月亮火的位置是无法控制的您所能做的就是不断点击“生成”按钮,直到获得您想要的展示位置。

这就是区域提示器可以提供帮助的地方。

使用以下设置:

  • 分割方式:水平
  • 使用通用提示:是
  • 分割比:1,1,1;2,1,1

提示词:

女巫、高度细致的脸部、半身、工作室灯光、戏剧性灯光、高度细致的服装、看着你、神秘、戏剧性灯光 BREAK(满月:1.3) BREAK BREAK
BREAK

美丽


魔法:1.2)

a witch, highly detailed face, half body, studio lighting, dramatic lighting, highly detailed clothing, looking at you, mysterious, dramatic lighting
BREAK
(full moon:1.3)
BREAK
BREAK
BREAK
(beautiful fire magic: 1.2)

这会将月亮置于区域 0(左上),将火置于区域 3(右下)。

我们现在已经控制了位置!

现在让我们将月亮放在右上角(区域 1),将火放在左下角(区域 2)。

女巫、高度细致的脸部、半身、工作室灯光、戏剧性灯光、高度细致的服装、看着你、神秘、戏剧性灯光 BREAK BREAK(满月:1.3)
BREAK

美丽

火魔法:1.2)
BREAK

a witch, highly detailed face, half body, studio lighting, dramatic lighting, highly detailed clothing, looking at you, mysterious, dramatic lighting
BREAK
BREAK
(full moon:1.3)
BREAK
(beautiful fire magic: 1.2)
BREAK

看到右上角的月亮和左下角的火

再次强调,您应该意识到区域提示并非 100% 有效。因此一次至少生成一些图像。

同时使用 ControlNet 和区域提示

区域提示器可以为每个区域指定提示词,但无法控制整体图像合成。好吧,我们有一个工具可以做到这一点:ControlNet

让我们看一下两个示例,结合使用 Regional Prompter 和 ControlNet 。

示例 1:控制全局和局部组成

假设您想要生成一个巫师在小地窖空间中研究旧卷轴的图像。此外,你希望他旁边有一只狼,地板上有一些头骨。

有很多因素需要照顾。如果您使用常规的文本到图像,您将看到一系列的构图。

文本转图像

假设一个新手Stable Diffusionn用户,输入了这个提示词并希望得到最好的结果。

神秘的巫师,高度详细的脸,高度详细的服装,电影,黑暗,恐怖,破旧的石墙,古代符号,古老的神秘撕裂卷轴,狼,许多头骨

a mysterious wizard , highly detailed face, highly detailed clothing, cinematic, dark, horror, worn stone wall, ancient symbol, old mystical torn scroll, wolf, many skulls

反向提示词:

未成年的, 不成熟的, 毁容的, 变形的

underage, immature, disfigured, deformed

模型:Lyriel v1.5

这些都是不错的图像。

但这并不是我想要生成的。也许是我没说清楚他在研究卷轴。让我们稍微重新排列一下提示词。

一个神秘的巫师研究古老的神秘撕裂卷轴,高度详细的面孔,高度详细的服装,电影,黑暗,恐怖,破旧的石墙,古代符号,狼,许多头骨

a mysterious wizard studying old mystical torn scroll, highly detailed face, highly detailed clothing, cinematic, dark, horror, worn stone wall, ancient symbol, wolf, many skulls

现在已经更接近我的想法了。但我无法控制巫师的姿势以及它放大的距离。

添加 ControlNet

当然,下一步是使用ControlNet控制姿势。我假设您已经安装了它并且了解基础知识。

我将指导您在此工作流程中使用它。如果您想了解更多信息,请阅读ControlNet 文章。

我将使用这张库存图片作为参考。

 

步骤 1.将参考图像上传到图像画布。您可以将参考图像拖放到那里。

步骤 2.勾选启用

步骤3预处理器下拉菜单中选择openpose

步骤4模型下拉菜单中选择control_opepose

或者,通过执行以下步骤预览提取的姿势。

  • 选中允许预览
  • 模型下拉菜单旁边将出现一个看起来像爆炸的新图标单击该图标可预览姿势。

“生成”以使用 ControlNet 生成图像。

这是我们得到的。

现在又向前迈出了一步。我们已经修复了巫师的姿势。现在他总是坐下来展示他的全身。

但它仍然缺乏一种机制来指定某些区域的提示。你可能知道我要做什么。没错,添加区域提示词!

添加区域提示

现在,通过选中“激活Active复选框来激活区域提示器扩展。

我们仍将使用水平 划分模式Horizontal Divide mode)。

选中使用通用提示Use common prompt)。

我们将图像分为 4 个区域。分割比

1,1,1.5; 1,1,1.5

4个地区都是这样。

我们希望有以下内容:

  • 整体形象:巫师
  • 区域 0:带有古代符号的石墙
  • 区域 1:巫师阅读卷轴
  • 区域2:石墙旁的狼
  • 区域3:一些头骨

所以提示词是

神秘的巫师,高度细致的面孔,高度细致的服装,电影,黑暗,恐怖
BREAK
磨损的石墙,(古代符号:1.3)
BREAK
古老的神秘(撕裂的卷轴:1.2)
BREAK
磨损的石墙,(狼:1.5)
BREAK
(许多)头骨:1.5),模糊

a mysterious wizard , highly detailed face, highly detailed clothing, cinematic, dark, horror
BREAK
worn stone wall, (ancient symbols :1.3)
BREAK
old mystical (torn scroll :1.2)
BREAK
worn stone wall, (wolf:1.5)
BREAK
(many skulls:1.5), blurry

请注意,我增加了一些关键字的权重。否则对象可能不会显示词。

现在你可以完全控制狗、技能和神秘符号的位置。请参阅下面的图片。

示例 2:正确的颜色分配

假设您想要生成一些棕色头发、黄色衬衫和蓝色连衣裙的女人的照片。听起来很容易?

如果您尝试过生成类似的东西,您就会知道这是一个挑战。

让我们看一些带有以下提示的示例。(根据现实人物教程修改)

年轻女子的全身照片,自然棕色头发,黄色衬衫,蓝色连衣裙,繁忙的街道,边缘照明,工作室照明,看着相机,单反相机,超品质,锐焦点,锐利,自由度,胶片颗粒,Fujifilm XT3,晶莹剔透、8K超高清、高细节光泽眼睛、高细节皮肤、皮肤毛孔

full body photo of young woman, natural brown hair, yellow blouse, blue dress, busy street, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores

毁容、丑陋、不良、不成熟、卡通、动漫、3D、绘画、黑白

disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w

模型:Realistic Vision v2

 

您会发现,告诉Stable Diffusion哪种颜色应该去哪里并不容易。提示词标记的自注意力在这里效果不佳。

您将有机会获得正确的任务。但我宁愿利用这个机会得到一个好的构图……

区域提示器

区域提示器可以帮助分配颜色。让我们将图像垂直分为三部分。

分割方式:垂直

分割比:1,1,1.5

使用通用提示:是

提示词:

年轻女子的全身照片,繁忙的街道,边缘照明,工作室照明,看着相机,数码单反相机,超品质,锐焦,大头钉,自由度,胶片颗粒,Fujifilm XT3,晶莹剔透,8K UHD,高度详细的光泽眼睛、高细节皮肤、皮肤毛孔
BREAK
自然棕色头发
BREAK
(黄色上衣:1.3)
BREAK
(蓝色连衣裙:1.3)

full body photo of young woman, busy street, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores
BREAK
natural brown hair
BREAK
(yellow blouse: 1.3)
BREAK
(blue dress: 1.3)

反向提示词也是一样:

毁容、丑陋、不良、不成熟、卡通、动漫、3D、绘画、黑白

disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w

很不错!区域提示词是解决颜色分配问题的有效方法。

使用 ControlNet Pose 获得更多控制。

区域提示器作为创意工具

我们很幸运拥有Stable Diffusion。区域提示器使您能够在图像的不同部分进行构图。让我们考虑做一些新的事情吧!创造一些以前不可能的视觉效果!

下面是一个将自然场景图像水平划分为四个部分并为每个部分分配不同天气的示例。

分割方式:水平

分割比:1,1,1,1

使用通用提示:是

模型:Lyriel v1.5

提示词:

美丽的野生公园,通往自由、勇气和爱的道路,国家地理年度照片
BREAK
春天,树木,鸟类,绿草,(阳光明媚,野花:1.2),上帝射线,晴朗的天空
BREAK
多云,干燥
BREAK
雷暴,下雨
BREAK
冬天,大雪,光秃秃的树木

a beautiful wild park, path to freedom, courage and love, national geographic photo of the year
BREAK
spring, trees, birds, green grasses, (sunny, wild flowers:1.2), god ray, clear sky
BREAK
cloudy, dry
BREAK
thunderstorm, rain
BREAK
winter, heavy snow, barren trees

反向提示词

BREAK

BREAK
BREAK
BREAK
BREAK

BREAK
snow
BREAK
BREAK
BREAK
BREAK

我相信你会比我更有创造力。让您的想法流动并开始尝试!

最后的笔记

  • 如果您没有看到想要的对象,请增加关键字的权重。
  • 获得不完美的图像是很正常的。用inpainting来修复它。与许多其他扩展不同,区域提示器在 txt2img 和 img2img 之间共享设置。因此,如果您不想将其用于inpainting,请务必取消选中“激活Active” 。
  • 这个扩展比我经历过的扩展有更多的功能。请参阅区域提示器 GitHub 页面以了解更多信息。
  • 有一个名为Latent Couple 的早期插件可以做类似的事情。区域提示器正在更新并具有一些额外的功能。
  • 尝试注意力(Attention)和潜在(Latent)模式,看看哪一种最适合您。(Attention模式对我来说效果很好。)

发表评论