Stable Diffusion Prompt提示词指南

用户头像
深圳/产品设计师/3年前/2977浏览
Stable Diffusion Prompt提示词指南

一些Stable Diffusion Prompt提示词书写的小技巧

对于很多用户来说书写prompt是一件令人头疼的事情,一串好的prompt很多时候会直接影响到出图的质量,本文旨在给到初学者一些想法,鉴于本人也是个萌新,如有问题,欢迎大家斧正。

一、什么是prompt


Prompt,提示词,以书面或口头语言形式向计算机系统发出的指令,它可以指导网络生成更加符合要求的输出结果。在SD中,我们也会输入一些prompt来指导SD生成理想的图像。
在SD中,提示词分为prompt正向提示词和Negative prompt反向提示词。
正向提示词,就是你希望出现在画面中的东西。
反向提示词,就是你不希望出现在画面中的东西。


此外需要知道的一个小知识就是,在 stable diffusion提示词输入框显示了一个0/75,很多小萌新一开始以为时75个字符,其实不是的,这个75指的是75个token。


这边简单说明一下,首先我们的计算机其实是不认识字,为了让计算机认识理解这个字,需要经过一系列的步骤,而这第一步就是分词,就是将提示词分割为tokens词元的过程。但是有的时候我们会发现为什么提示词的字数和token数是不一样的呢?
stable diffusion采用的CLIP(Contrastive Language-Image Pre-Training)模型来进行分词,但所采用的分词方法不是简单地按字符数量来分的。举个例子,对于像"Dreambeach"(蓝梦岛)这样的单词,系统可能之前没有见过,但是呢在之前其中的"dream"和"beach"两个词序列的频率可能都比较高,因为模型不认识这个词,所以模型把这个词分解成它知道的dream和beach,然后算作2个token,而不是将整个单词视为一个token,这也是为什么提示词可能和token数不一样的原因,当然,大多数的时候他们是一样的。


如果想了解stable diffusion原理,可查看李宏毅讲解生成式AI(大模型,文本,图像)
如果想了解CLIP模型,可查看CLIP 论文逐段精读【论文精读】

二、prompt支持输入什么

1、单词tag


单词tag,就是用一个字或者一个词来表达出画面里的元素,再使用特定的语法对权重进行调整,这也是我们最常使用的方式。
对于在单词tag上特化训练的模型,建议使用逗号隔开的单词作为提示词。
书写时避免出现拼写错误,否则模型可能将拼写错误的单词拆分为字母处理。
友情提示,手一直是图像生成中的难点,如果你一直在提示词中过渡强调它做的不好的部分,反而会得到反向的效果。比如你在提示词中加重了对手的描述,比如好看的手,那么模型会认为重点是手,然后可能会出现让你san值直掉的东西。所以如果对于整个画面,如果手不是非得出现,建议在反向提示词中输入没有手。如果一定需要,建议用ControlNet来控制手部细节。

2、自然语言


对于在自然语言上特化训练的模型,建议使用描述物体的句子作为提示词。
什么是自然语言,简单地理解,就是我们平常沟通的一些语言。比如一个拥有金色头发带着花环,穿着白色纱裙的女孩正坐在一颗月桂树下,她的周围是粉色薰衣草草地。如果是用单词tag的方式,可能就是,一个女孩,金色头发,花环,白色纱裙,月桂树,粉色薰衣草。
可以使用英文,日文,特殊符号或一些中文,但是还是建议使用英文,之所以支持日文以及一些其他的文字,主要是取决于训练时使用的数据集,比如Stable Diffusion训练的数据集里面就包含Danbooru。(建议不要在上班的时候随便打开这个网站,很多NSFW内容)
另外不要使用太过于复杂的语法,语言模型不一定能够理解,导致在解析上出现偏差。

3、Emoji和颜文字


Emoji因为只有一个字符,模型在语义理解上准确度表现优秀,如有需要可以采用,比如在比耶这个动作上,用Emoji有奇效。
比如✌🏻,虽然有点奇怪,但是还行


另外对于某些颜文字也是支持的,对于某些模型来说,利用颜文字可以在一定程度上控制表情。目前模型对西方颜文字支持情况比较好。
表情符号参考:https://unicode.org/emoji/charts/emoji-list.html
颜文字参考:https://zh.wikipedia.org/wiki/表情符號列表?oldformat=true

4、标点符号


特定的符号具有一定的作用,这里先简单介绍一些基础的用法,详细内容可以看提示词进阶部分。
【,】逗号,分割提示词,有一定的权重排序功能,逗号前权重高,逗号后权重低。
【:】冒号,自定义权重数值,比如(blue hair:1.5),这个就是权重1.5的意思。
【()】圆括号,(blue hair)没有数值,增加权重,默认为权重1.1。
【[]】方括号,减少权重,方括号不支持自定义数值,[blue hair]在新的版本是0.9,由于NovelAI使用的是在22年9月29号之前的版本,方括号的权重是减弱0.05,就是0.95。请注意方括号是不能自定义权重的。
【{}】花括号,在NovelAI旧版本,他的权重加强就是花括号,花括号的权重为加强0.05,就是原1.05倍。

三、如何写prompt


一个好的提示词,必须是详细的具体的,这个过程就像做需求分析一样,先想要自己到底要什么,很多人刷出来图,觉得不是自己想要的,那么先看看自己的描述,如果自己的需求都很模糊,那AI生成出来的图像也很难去符合你心中所想,毕竟你没有告诉它你到底想要啥,就像某些老板的需求一样,纯靠自己猜自己悟。

1、基础模板

一般来说,可以按照一下格式来:

  • Subject主题
  • Medium媒介,材料
  • Style风格
  • Artist艺术家
  • Website网站
  • Quality质量
  • Additional details附加细节
  • Color色彩色调
  • Lighting灯光

你不需要把所有的类别都写上,就选择自己最需要的来就行,这里给大家推荐一个网站,可以帮助书写提示词:
https://promptomania.com/stable-diffusion-prompt-builder/

Subject

主题,画面的主题,锚定画面内容,这是提示词必须的部分,一个非常常见的问题,就是对主题的描述不够。比如说,我们想生成一个女孩子,可能新手就直接写1girl,但是这个女孩子看起来怎么样,穿什么,在哪里,做什么动作全部都没有。这样模型是没办法了解我们的需求的,我们必须详细准确地说出我们想要什么。

Medium

媒介,材料,这个非常强大,可以直接影响到整个图像的风格,比如手绘,摄影,3D渲染,等等。

Style

艺术风格,比如什么野兽派,印象派,超现实主义,达达主义,波普艺术等等。

Artist

艺术家,这是一个非常强大修饰词,模型会直接使用特定艺术家作为参考来拨入确切的风格,比如穆夏,不过需要注意,这个前提是这个艺术家的数据曾经被模型学习过,否则这个提示词不会生效。

Website

网站,模型训练的时候抓取了很多网站的数据,因此在提示词中加入如Artstation 和 Deviant Art 这样的网站,可以让图像像在这些网站上找到的一样。

Quality

画面品质,一般都是什么masterpiece, best quality, masterpiece,best quality之类的词汇。

Additional details

附加信息,可以为图像增加氛围,比如科幻,赛博朋克,蒸汽朋克之类的。

Color

颜色,通过添加颜色来控制画面的整体颜色。

Lighting

灯光,联想到摄影自拍的时候,各种灯,就知道它对于整体画面的重要影响。

参考原文:Stable Diffusion Prompt

负向提示词

在负向提示词里面,你可以填上不想要的东西。可以是名称,可以是样式,水印,文字,不需要的属性等等,比如low quality, ugly,watermark, logo, nsfw等等
负向提示词拓展阅读:负向提示词

2、提示词进阶


长度


前面说到输入框在默认状态写着0/75,但是其实,并不是只让你输入75个token,Stable Diffusion 是没有这方面的限制的,只是CLIP要求每组不能超过75个token,一旦超过75之后,会形成一个新的token组,变成150,这个过程会一直持续下去,直到内存耗尽。


提示词的长度需要和你的画面的分辨率以及采样步数来匹配。如果不匹配,比如你将分辨率及采样步数设置的非常高,但是结果你的描述词很短,比如就一个女孩,那么很可能模型没地方发挥,给你整出多头,多手来。

词序

提示词默认权重默认值都是1,从前到后依次减弱,权重会影响画面生成结果,举个例子,你人物tag放在前面,那么你人物是核心,场景就会很小,你场景tag放前面,那么你人物就变小,因此选择正确的词序,来帮助你更有效率地炼丹。

权重


模型会依照概率来选择性执行,如提示词之间有冲突,系统会根据权重确定的概率来随机选择执行哪个提示词。
权重系数是可以改变提示词特定部分的比重。现在以blue hair在stable diffusion web UI举例,不考虑老版NoverAI的情况。

  • (blue hair) - 将权重提高 1.1 倍。
  • ((blue hair)) - 将权重提高 1.21 倍(= 1.1 * 1.1),乘法的关系,叠加权重。
  • [blue hair] - 将权重降低0.9倍。
  • [[blue hair]]- 将权重降低0.81倍,乘法的关系,叠加权重。
  • (blue hair:1.5) - 将权重提高 1.5 倍。
  • (blue hair:0.25) - 将权重减少为原先的0.25倍。
  • \(blue hair\) - 在提示词中使用字面意义上的 () 字符,不具有权重作用。

需要注意的一个事情就是权重增加通常会占一个提示词位,应当避免加特别多括号,可选中指定权重值。

提示编辑


提示编辑允许你开始先使用一个提示词,但在生成过程中间切换到其他提示词
基本语法包含以下几种:

  • [to:when] 在指定步数后添加 to 到提示词
  • [from::when] 在指定步数后从提示词中删除 from
  • [from:to:when] 在指定步数后将 from 替换为 to

其中 from 与 to 是替换前后的提示词,when 表示替换时机。
如果 when 是介于 0 和 1 之间的数字,则它指采样周期步数的百分比。如果它是一个大于零的整数,那么这代表它进行切换之前的步数。

举个例子:

  • [dog:10]在第10步之后开始渲染狗子
  • [dog:0.5]假定采样步数是30,那么就是第15步之后开始渲染狗子
  • [cat::10] 在第10步之后不再渲染猫,其他元素继续渲染
  • [cat::0.5] 假定采样步数是30,在第15步之后不再渲染猫,其他元素继续渲染
  • [cat:dog:10]假定采样步数为30,在前10步渲染猫,在后面20步渲染狗子

  • [cat:dog:0.5]假定采样步数为30,在前15步渲染猫,在后面15步渲染狗子


同样的参数,提示词前后的顺序调换,可能会产生不一样的效果哦
[dog:cat:10]


[dog:cat:0.5]



标签可进行嵌套使用的。
举个例子:
对于 a [fantasy:cyberpunk:16] landscape
开始时,模型将绘制 a fantasy landscape。
在第 16 步之后,它将采用 a cyberpunk landscape 继续生成



再来一个超级复杂的案例:
fantasy landscape with a [mountain:lake:0.25] and [an oak:a christmas tree:0.75][ in foreground::0.6][ in background:0.25] [shoddy:masterful:0.5] (假设采样步骤是100步)
一开始, fantasy landscape with a mountain and an oak in foreground shoddy
在第 25 步之后, fantasy landscape with a lake and an oak in foreground in background shoddy
在第 50 步之后, fantasy landscape with a lake and an oak in foreground in background masterful
在第 60 步之后, fantasy landscape with a lake and an oak in background masterful
在第 75 步之后, fantasy landscape with a lake and a christmas tree in background masterful


看看下面这些对比图,用的是同样的提示词,但是种子和替换时机不一样。
提示词:Official portrait of a smiling world war ii general, [male:female:0.99], cheerful, happy, detailed face, 20th century, highly detailed, cinematic lighting, digital art painting by Greg Rutkowski's
可以看出来非常特别的是最后一列,替换时机为0,这本质就是让模型从female开始,可以直接不用提示编辑,直接用female,效果也是一样的。

(该图为网图)

原文可参考:Prompt Editing


交替渲染


每隔一步就更换渲染对象的方式,可添加多个对象,不局限于2个对象
基本语法:

  • [A|B] 第一步渲染A,第二步渲染B,第三步渲染A,依次循环
  • [A|B|C] 第一步渲染A,第二步渲染B,第三步渲染C,第四步渲染A依次循环

举个例子:
[cow|horse] in a field

(该图为网图)

还有一种宅男们非常喜欢的用法,猫耳萌妹,也可以通过这种方法实现, [cat|girl]


此外,还可以输入 [red|blue] hair,对发色进行融合

原文可参考:Alternating Words


可组合扩散Composable diffusion


AND,此处一定要谨记,是全部大写,不要小写,小写没有这个作用。
a girl AND a cat


组合是支持权重的,默认权重都为1,a cat :1.2 AND a dog AND a penguin :2,这种混合真的非常容易掉SAN
放上一张相对正常的,没那么可怕的


但是也需要注意,如果你的某个提示词权重低于0.1,那么该提示词对应的要素就很难产生影响,a cat AND a dog:0.03 将产生与 a cat 基本相同的输出
参考论文:Composable-Diffusion

提示矩阵

使用 | 分隔多个 Tag,程序将为它们的每个组合生成一个图像,并将所有的结果最后拼成矩阵图的形式方便我们观察对比效果,经常用于我们在构思画作的定调 风格选择时使用 。
举个例子:
如果使用 a busy city street in a modern city|illustration|cinematic lighting ,则可能有四种组合(始终保留提示的第一部分):
a busy city street in a modern city
a busy city street in a modern city, illustration
a busy city street in a modern city, cinematic lighting
a busy city street in a modern city, illustration, cinematic lighting

(该图为网图)


原文可查看:参数矩阵


CFG Scale


CFG ,Classifier-Free Guidance,无分类器引导,其前身,分类器引导(Classifier guidance)。
CFG Scale是用来调整图像与提示词的相关性,该值越高,提示词对最终生成结果的影响越大,相关性越高,但它也在一定程度上降低了图像质量,可以用更多的采样步骤来抵消。过高的 CFG Scale 体现为粗犷的线条和过锐化的图像,越低的值产生越有创意的结果,比如3。但是如果太低,例如 1,那提示词就完全没用了,我一般在设置在7-12。


四、总结


纸上得来终觉浅,绝知此事要躬行。什么都比不上自己上手试,很多的知识看再多遍也比不上实践,才能发现内在的门道。
非常感谢大家坚持读到这里,最后附上一些参考资料,希望此篇文章能为大家的炼丹之路提供一点帮助。

Prompt词典


https://openart.ai/promptbook
aitusprompts
元素法典——Novel AI 元素魔法全收录
NovelAI炼丹
提示词资料
提示词相关网站

26
举报
|
70
分享
相关推荐
评论
用户头像
评论你的想法~
表情
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
加载中
你可能喜欢
相关收藏夹
大家都在看
登录注册