翻译自 Regional Prompter: Control image composition in Stable Diffusion - Stable Diffusion Art,希望对大家使用Stable Diffusion有帮助。
你知道你可以为图像的不同区域指定提示词吗?你可以在AUTOMATIC1111上使用区域提示词(Regional Prompter)扩展来实现这一点。
我们将使用Stable Diffusion 的图像化界面 AUTOMATIC1111,可以在各平台使用 Windows, Mac, 或 Google Colab(略过).
按照以下步骤在AUTOMATIC1111中安装区域提示词扩展:
正常启动AUTOMATIC1111的Web-UI界面。
导航到Extension页面。
点击“Available”选项卡。
点击“Load from:”按钮。
找到扩展名为“Regional Prompter”的扩展。
点击“Install”。
重新启动Web-UI界面。
下面通过一个简单的例子来展示效果。
假设你想在同一张图片中生成一个男生和一个女生。使用简单的提示词如下:
a man and a woman
反向提示词如下:
disfigured, ugly
我们可以 得到一男一女
目前为止,一切都很好。但是,如果你想更具体一些呢?比如生成一个黑发男子和一个金发女子?自然而然,你会这样写提示词。
a man with black hair, a woman with blonde hair
stable diffusion有时会混淆属性
有时候你会得到你描述的结果,但更多时候,Stable Diffusion会混淆哪个发色应该与谁匹配。如果你想进一步指定服装颜色等,情况将更加困难。
发生了什么?为什么Stable Diffusion甚至不能做这么简单的事情?自注意机制(self-attention)错误地将发色和人物关联起来。
针对这个问题有一个解决方案:将黑发男子的提示仅应用于图像的左侧,将金发女子的提示应用于图像的右侧。
步骤如下:
在txt2img页面展开“Regional Prompter”部分。
2. 勾选“Active”以启用区域提示词。
3. 对于这个例子,大多数默认设置都可以使用。具体设置如下:
Divide mode: Horizontal
Generation mode: Attention
Divide Ratio: 1, 1
4. 点击“visualize and make template”。你将在下方看到分成两块区域的图像,表示左侧的区域0和右侧的区域1,它们按照1:1的比例平均分割。
5. 在提示词中输入以下内容:
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(右侧)生成了一个金发女子。
需要注意的是,这并非百分之一百有效。根据我的经验,成功率大约为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这是一张两个人的图片:一个男人和一个女人。
与这个简单示例不同,如果想生成真实的图片,公共的提示词通常会很长。以下是一个方便的处理方法。
勾选“Use common prompt”选项。
2. 现在你可以在开头添加共同的提示(a man and a woman)。
a man and a woman
BREAK
a man with black hair
BREAK
a woman with blonde hair
我们有三个提示词:(1)共同的提示词,(2)区域0的提示词,(3)区域1的提示词。
公共的提示词被添加到每个区域的提示之前。
公共的提示只是一种语法替换:它等价于原始提示词中的内容。
使用区域提示词的关键是准确地定义区域。下面将解释如何设置划分比例以实现你想要的图像划分方式,这个很难理解或记住,可以随时点击“visualize and make template”来生成区域图像,可视化来确认。
在一维划分中,可以水平或垂直地划分区域。
要水平划分区域,在divide mode下选择horizontal。每个区域由逗号分隔的数字表示,数字表示区域的大小(这是相对的比例)。
下面为几个示例:
1,1
1,1,1
1,2,1
垂直划分模式也类似,只是区域被垂直划分(纵轴方向)。下面为几个示例:
1,1
1,1,1
1,2,1
我们也可以在图像中同时进行垂直和水平划分。在divide mode下选择horizontal。规则如下:
行之间用分号分隔;
每一行是一系列逗号分隔的数字,例如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
提示词:
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
我们得到了一些不错的图片,如下所示。
效果不错,但是没有办法控制月亮和火焰出现的位置。你只能不断点击生成按钮,直到得到你想要的位置,纯碰运气。
这就是区域提示词可以提供帮助的地方。
使用以下设置:
Divide mode: Horizontal
Use common prompt: Yes
Divide ratio: 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)
这将把月亮放在区域0(左上方),火焰放在区域3(右下方)。
现在我们有了位置的控制权!
现在让我们把月亮放在右上方(区域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
确实可以看到月亮在右上方,火焰在左下方。
同样需要注意的是,区域提示词并非百分之一百有效,所以每次至少生成几张图片。
区域提示词可以为每个区域指定提示,但无法控制整体图像构图。我们有一个工具可以做到这一点: ControlNet。
让我们通过两个例子来演示如何同时使用区域提示词和ControlNet,以实现在没有它们的情况下无法企及的操作。
假设你想生成一张画面中一个巫师在一个小地下室里研究一卷古老的卷轴的图像。此外,你还想在他旁边放一只狼和一些头骨在地板上。
这里有很多元素要处理。如果使用普通的文本到图像转换,你将看到各种构图。
作为对 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
反向提示词:
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步. 勾选 Enable.
第3步. 在 Preprocessor 下拉框选择 openpose。
第4步. 在 Model 下拉框选择 control_opepose。
下述步骤可选:执行以下步骤预览提取的姿态。
勾选 Allow Preview.
在Model下拉菜单旁边会出现一个看起来像炸弹的新图标。点击图标预览姿势。
按下生成按钮以使用ControlNet生成图像。
这是我们得到的结果。
现在前进了一步。我们固定了巫师的姿势。他现在总是坐着展示他的全身。
但是它仍然缺乏在特定区域指定提示的机制。你可能知道我要怎么做了,没错,添加区域提示!
现在,通过勾选 Active 复选框来激活区域提示词扩展。
还是使用水平划分模式,勾选Use common prompt。
我们把图像划分为 4 个区域, Divide Ratio 设置如下
1,1,1.5; 1,1,1.5
4个区域大致如下图。
我们希望如下:
全图: 一个巫师
区域 0: 附有古代元素的石墙
区域 1: 巫师在读卷轴
区域 2: 一只狐狸在石墙边
区域 3: 许多头骨
所以提示词如下:
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
注意一下,我增加了部分关键词的权重,否则一些物体可能无法出现。
现在我们对狐狸的位置,头骨和其它元素有了充分的控制,结果如下。
假设你想生成一些照片:一个棕色头发,穿着黄色上衣和蓝色连衣裙的女生。听起来很容易?
如果你尝试过生成类似的照片,你就会知道这是一个挑战。
让我们看一些例子,使用以下提示。(修改自 Realistic People 教程)
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 disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w
Stable Diffusion 即兴创作了! 颜色都混合在一起。
你可以发现,很难告诉 Stable Diffusion 哪种颜色应该放在哪里。提示词的自注意力机制效果并不好。
你可能会偶尔得到正确的配色,但我宁愿利用这个机会获得一个好的构图...
颜色分配是区域提示词可以帮助解决的问题。让我们将图像垂直分成三个部分。
Divide Mode: Veritical
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.3) BREAK (blue dress: 1.3)
反向提示词不变:
disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w
非常好!区域提示词是颜色分配问题的有效解决方案。
你可以使用ControlNet pose 来获得更多控制。
我们手中拥有 Stable Diffusion 。区域提示词使你能够在图像的不同部分进行提示。让我们思考一些以前不可能实现的新创意!创造一些视觉效果!
下面是一个将大自然场景图像水平分成四个部分,并给每个部分分配不同天气的示例。
Divide mode: Horizontal
Divide ratio: 1,1,1,1
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 cloudy, dry BREAK thunderstorm, rain BREAK winter, heavy snow, barren trees
反向提示词:
BREAK snow BREAK BREAK BREAK BREAK
大家尽情发挥创意吧,我个理工男看到上面的天气图片都望洋兴叹了
推荐文章