在这个系列的文章中,我们会讨论关于使用区域提取词的话题,分为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的提取词。其中,公共提取词会被添加到每个区域提取词的前面。 公共提取词只是一种语法糖:它等同于原始提取词中的内容。 下面就是使用公共提取词生成的图片效果。

使用公共提取词生成的图像效果

总结

这一篇里,我们简单讨论了为什么需要区域提取词,以及相关的一些基本知识和用法。第二篇我们会继续讨论如何把图片分割成更加复杂的一维甚至二维区域进行控制。

 
在这个系列的文章中,我们会讨论关于使用区域提取词的话题,分为4篇。
  • 区域提取词的作用和简单的示例
  • 复杂组成的一维及二维区域使用
  • 将区域提取词与ControlNet结合使用
  • 将区域提取词作为一种创新工具
这篇文章中,我们会通过例子来讨论一下复杂的一维及二维区域使用。 使用区域提示器的关键在于准确定义区域。在本节中,我将解释如何设置分割比例,以按照我们设想的方式分割图像。刚开始我们可能很难理解或记住如何正确指定区域,在这种情况下,我们可以随时点击“visualize and make template”来生成区域图像的示意图。 在一维分割中,我们可以水平或垂直分割区域。

水平分割

要水平划分区域,通过“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

这个配置把整个图片分成了两行,第一行的高度是1,第二行的高度时2。 第一行被分割成了3个等宽的区域,宽度都是1。 第二行被分割成了2个区域,宽度比例为1:2。 我们最终得到了5个区域。

使用二维区域分割生成图像

接下来,让我们使用二维区域分割的方法来生成一些图像。 首先,我们先不使用区域分割来生成图像,使用模型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

我们需要改一下正向提取词,把月亮放在区域0,而火焰放在区域3,负向提取词保持不变。

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

可以看到如我们预期的那样,月亮出现在了左上角,而火焰只能说大概率的出现在了右下角。现在我们可以控制图像的构成,我们再试试把月亮放在区域1,而把火焰放在区域2。 下面是现在的正向提取词。

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。
  • 点击模型下拉框边上的炸弹形状的图标来预览提取的姿势。
然后点击Generate来使用ControlNet的姿势生成图像,下面就是生成的图像。

加入ControlNet生成的图像

到这里,我们又向前迈进了一步,我们修正了巫师的姿势。他现在会保持坐姿,并且展示他的全身。同时,我们仍然缺少一种机制来指定某些区域的提取词,聪明的读者已经知道我想说什么了。是的,让我们开始添加区域提取词吧。

C. 添加区域提取词

现在,让我们加入区域提取词再生成一次。

Divide mode: Horizaontal

Use common prompt: checked

Divide Ratio: 1,1,1.5;1,1,1.5

Base Ratio: 0.8

配置区域提取词

分割成的4个区域如下图所示。

区域提取词分割图像示意图

现在,我们先来设计一下图像的大概组成。

全图: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的即兴创作,颜色都混在一起了。

不使用区域提取词生成的图像

你会发现,要告诉 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生成模式,看看哪种模式最适合自己。
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
在线客服
在线客服
QQ客服
旺旺客服