在这个系列的文章中,我们会讨论关于使用区域提取词的话题,分为4篇。
- 区域提取词的作用和简单的示例
- 复杂组成的一维及二维区域使用
- 将区域提取词与ControlNet结合使用
- 将区域提取词作为一种创新工具
在这第一篇文章中,我们首先会通过一个简单的示例逐步了解区域提取词技术的存在意义以及基本的使用方法。
为什么需要使用区域提取词
让我们用一个简单的例子来理解一下为什么需要使用区域提取词技术。 假如我们想生成一幅图,图里同时有一个男性和一个女性。
正向提取词:a man and a woman
负向提取词:nsfw, disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w, odd eyes

不使用区域提取词生成的图像
从生成的图像来看,还不错。如果我们想更精确的控制图片的细节呢?比如,我们想得到一幅图,图里同时有一位黑发的男性和一位金发的女性。
正向提取词:a man with black hair, a woman with blonde hair
负向提取词:nsfw, disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w, odd eyes

想控制生成图像细节但又不使用区域提取词生成的图像
通过生成的结果可以发现,有时我们可以得到所描述的结果,但是更多的时候Stable Diffusion会搞不清楚哪种发色应该与哪个人搭配。在这种情况下,如果您想进一步指定衣服的颜色等属性,会变得更加困难。 那么这里究竟发生了什么呢?为什么Stable Diffusion连这么简单的事都做不好?答案是self-attention机制错误的将头发颜色和人联系了起来。 我们从这个例子就可以理解为什么需要区域提取词了。使用区域提取词,我们可以将黑发男性的提取词指定在图像的左侧,将金发女性的提取词指定在图像的右侧。
安装和使用区域提取词插件
这里,我们仍然可以使用Github的插件代码库地址来进行安装,安装过程和之前的插件安装步骤一样,此处略过。 使用区域提取词插件,可以按照下面的步骤进行。
- 打开txt2img页面的Regional Prompter选项;
- 勾选Active来激活Regional Prompter插件;

配置区域提取词的参数
- 对于我们的例子来说,大多数选项的默认值已经足够了,我们只需要改其中的一些。
Divide mode: Horizontal
Generation mode: Attention
Divide Ratio: 1, 1
- 点击visualize and make template,您将看到下面的区域图像显示:左侧为区域0,右侧为区域1,分布比率为1比1平分。

将图像分成左右两个区域
- 输入提取词。正向提取词会由关键词BREAK分成两部分,我们会有两个正向提取词。第一个正向提取词会控制区域0,而第二个正向提取词会控制区域1。因为负向提取词中不包含BREAK,所以负向提取词会控制整幅图像。
正向提取词:
a man and a woman, a man with black hair
BREAK
a man and a woman, a woman with blonde hair
负向提取词:nsfw, disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w, odd eyes
下面是我们生成的图像,这回可以看到Stable Diffusion根据我们的提取词正确的生成了我们希望的图像,一个区域里有一位黑发男性,而另一个区域里有一位金发女性。另外,根据我的经验,使用区域提取词并不会100%成功,成功的概率大概在75%,不过即使如此,也比单纯靠运气好多了。

使用区域提取词来控制图像区域细节的生成图像
公共提取词
对于上面的使用区域词的例子,您或许已经注意到了左右两个区域的提取词里有一个公共部分“a man and a woman”。
a man and a woman, a man with black hair
BREAK
a man and a woman, a woman with blonde hair
如果我们去掉这个公共部分,Stable Diffusion会只生成一个人,如下图所示。
a man with black hair
BREAK
a woman with blonde hair

去掉公共提取词生成的图像
究其原因,是我们输入的提取词在左边和右边区域描述的是同一个人,所以我们最后只得到一个人。因此,我们需要告诉Stable Diffusion这是两个人的图片:一个男性和一个女性。 这就是为什么我们需要公共提取词“a man and a woman”的原因。 和这个小示例不同的是,如果我们生成的是真实图片,那么提取词通常会很长。这里有一种方便的方法可以解决这个问题。
- 勾选“Use common prompt”。

- 接下来,我们可以把公共提取词(a man and a woman)加在正向提取词的开始。
a man and a woman
BREAK
a man with black hair
BREAK
a woman with blonde hair
现在我们就有了3个提取词,(1)公共提取词;(2)控制区域0的提取词;(3)控制区域1的提取词。其中,公共提取词会被添加到每个区域提取词的前面。 公共提取词只是一种语法糖:它等同于原始提取词中的内容。 下面就是使用公共提取词生成的图片效果。

使用公共提取词生成的图像效果
总结
这一篇里,我们简单讨论了为什么需要区域提取词,以及相关的一些基本知识和用法。第二篇我们会继续讨论如何把图片分割成更加复杂的一维甚至二维区域进行控制。
- 区域提取词的作用和简单的示例
- 复杂组成的一维及二维区域使用
- 将区域提取词与ControlNet结合使用
- 将区域提取词作为一种创新工具
水平分割
要水平划分区域,通过“Regional Prompter – Matrix – Split mode – Horizontal”选择水平分割图像。每个区域用一个数字表示,数字之间用逗号隔开。数字代表区域的大小。 下面举一些水平分割的例子:1,1

水平分割(1,1)
1,1,1

水平分割(1,1,1)
1,2,1

水平分割(1,2,1)
垂直分割
垂直分割模式与此类似,但区域是垂直分割的。下面是一些垂直分割的示例。1,1

垂直分割(1,1)
1,1,1

垂直分割(1,1,1)
1,2,1

垂直分割(1,2,1)
二维区域分割
我们可以通过同时设置水平分割和垂直分割来对图像进行二维区域分割。 方法是我们先选择水平分割模型,然后使用下面的规则进行设置。- 行之间用分号“;”分割;
- 每行是一系列数字,用逗号分隔,例如1,1,1;
- 每行的第一个数字代表该行的高度,后面的数字代表区域的宽度。
1,1,1;1,1,1
这个配置定义了两行,每行的高度是1,而每行都被分成两个等宽的区域。 如图所以,我们就把这幅图分成了四个区域。
二维分割 1,1,1;1,1,1
1,1,1;2,1,1
这个配置同样定义了两行,第一行的高度为1,第二行的高度为2,每行都被分成两个等宽的区域。如下图所以,我们同样把这幅图分成了四个区域。
二维分割 1,1,1;2,1,1
1,1,1,1; 2,1,2

二维分割 1,1,1,1; 2,1,2
使用二维区域分割生成图像
接下来,让我们使用二维区域分割的方法来生成一些图像。 首先,我们先不使用区域分割来生成图像,使用模型Lyriel v1.5。正向提取词: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)
负向提取词:nsfw, disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w, odd eyes, underage, deformed
下面是我们生成的图片。
不实用区域分割生成的图像
Split mode: Horizontal
Use common prompt: Yes
Divide ratio: 1,1,1;2,1,1

二维分割 1,1,1;2,1,1
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)
下面是生成的图像。
使用区域分割生成的图像 例1
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
可以看到生成的图像也满足了我们的预期。
使用区域分割生成的图像 例2
需要注意的是,区域提取词并不是100%的会成功,所以建议每次至少生成几张图片。
这一篇我们会讨论一下将区域提取词与ControlNet结合使用。 虽然区域提取词可以用来指定划分后每个区域的提取词,但是并不能控制整个图像的构成。这里,很容易想到ControlNet可以帮我们做全局控制。 让我们通过两个例子来了解如何同时使用区域提取词和ControlNet来实现我们梦寐以求的操控效果。例1: 控制图像的全局和局部组成
比方说,我们想生成一个巫师在一个小地窖里研究古老卷轴的图像。另外,我们还想在他旁边放一只狼,在地板上放一些骷髅头。 看起来我们要处理的元素可真不少,如果使用常规的文本到图像的转换,您将会看到一系列不同的组合。A. Text-to-Image
作为一个对这个图像主题没有一点头绪的Stable Diffusion用户,我输入了下面的提取词,并期望能得到最好的结果。正向提取词:a mysterious wizard , highly detailed face, highly detailed clothing, cinematic, dark, horror, worn stone wall, ancient symbol, old mystical torn scroll, wolf, many skulls
负向提取词:nsfw, disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w, odd eyes, underage, 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
这一次生成的图像更加接近我想要的图像,但是我们仍然无法控制巫师的姿势和图像放大的程度。
改进的不使用区域提取词生成的图像
B. 引入ControlNet
现在,我们很自然的会想到使用ControlNet来控制巫师的身体姿势。让我们使用下面的图像作为参考图像,按照下面的步骤进行操作。

参考图像
- 把参考图像上传到ControlNet Single Image的画布,我们可以通过拖拽的方式把参考图像放在画布里。

配置使用ControlNet
- 选中Enable;
- 在Preprocessor下拉框中选openpose;
- 在Model下拉框中选control_openpose;
- 选中All Preview。
- 点击模型下拉框边上的炸弹形状的图标来预览提取的姿势。

加入ControlNet生成的图像
C. 添加区域提取词
现在,让我们加入区域提取词再生成一次。Divide mode: Horizaontal
Use common prompt: checked
Divide Ratio: 1,1,1.5;1,1,1.5
Base Ratio: 0.8

配置区域提取词

区域提取词分割图像示意图
现在,我们先来设计一下图像的大概组成。
全图:a wizard
Region 0: stone wall with ancient symbols
Region 1: wizard reading a scroll
Region 2: a wolf besides a stone wall
Region 3: some skulls
接下来,我们修改正向提取词,加入区域提取词。
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: 修正颜色
比方说,我们想生成一些棕色头发、黄色上衣和穿蓝色裙子的女性的照片。听起来是不是很容易?如果您已经尝试过生成类似的东西,那您就会知道这是一个很有挑战人物。 让我们试试下面的提取词。正向提取词: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
负向提取词:nsfw, disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w, odd eyes, underage, deformed
模型:Realistic Vision v2
从生成的图片看到,这些都是Stable Diffusion的即兴创作,颜色都混在一起了。

不使用区域提取词生成的图像
Divide Mode: Vertical
Divide ratio: 1,1,1.5
Use common prompt: Yes

区域提取词分割图像示意图
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.5)
BREAK
(blue jeans: 1.5)

使用区域提取词生成的图像
生成的图像看起来还不错,很好的解决了颜色分配的问题。在这个例子里面,我们可以尝试使用ControlNet Pose来进一步控制人的姿势。
我们现在手上有Stable Diffusion这个工具,结合区域提取词可以对图像的不同部分的组成进行控制。让我们考虑制作一些新的东西,创造一些以前无法实现的视觉效果。例1:绘制复杂的自然场景
下面是一个例子,将一幅自然场景图像横向分为四个部分,并为每个部分分配不同的天气。Divide mode: Horizontal
Divide ratio: 1,1,1,1;1,1,1.5
Use common prompt: Yes
Model: Lyriel v1.5
正向提取词:
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
thunderstorm, rain
BREAK
winter, heavy snow, barren trees
BREAK
blue ocean
BREAK
yellow desert
负向提取词:
BREAK
snow
BREAK
BREAK
BREAK
BREAK
BREAK
生成的图像效果挺不错,很有奇幻色彩。
绘制复杂的自然场景
例2:绘制复杂的人物场景
下面是另一个例子,我们绘制一个穿绿色衣服的女孩在指定的环境中。Divide mode: Horizontal
Divide ratio: 1,1,1.5
Use common prompt: Yes
Use common negative prompt: Yes
Model: Realistic v6
正向提取词:
A beautiful 19 year old girl who wears light green t shirt and brown skirt , small breast, black and shiny eyes long hair, high hills and beautiful smile
BREAK
spring, trees, birds, green grasses, (sunny, wild flowers:1.2), god ray, clear sky
BREAK
long hair
BREAK
light green t shirt and brown skirt
负向提取词:
nsfw, disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w, odd eyes
BREAK
snow
BREAK
BREAK
下面是生成的图片。
绘制复杂的人物场景
小技巧
- 如果没有画出指定的物体,可以尝试增加关键词的权重。
- 我们经常会遇到画出的图不那么完美,我们可以尝试使用inpainting在特定地方修补一下。Regional Prompter与其他扩展不同的是,它在txt2img和img2img之间共享配置。因此,如果我们确定不使用Regional Prompter的时候,请确保取消选中“Active”。
- Regional Prompter还有很多其他功能,请参阅Regional Prompter的Github页面了解更多信息。
- 还有一个更早出现的插件叫Latent Couple,也有类似的功能。相较之下,Regional Prompter在持续更新,并增加了其他的功能。
- 请尝试切换使用Attention和Latent生成模式,看看哪种模式最适合自己。