Stable Diffusion Prompt提示词指南

用户头像
深圳/产品设计师/3年前/3002浏览
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吧!
加载中
推荐素材
餐饮插画背景素材
餐饮插画背景素材
二十四节气寒露霜降节气插画
餐饮插画背景素材
西安城市插画 (21)
餐饮插画背景素材
西安城市插画 (12)
卡通风格电商展台插画
全运会体育比赛运动主题插画
二十四节气寒露霜降节气插画
餐饮插画背景素材
运动人物插画
餐饮插画背景素材
运动人物插画
卡通风格电商展台插画
运动人物插画
运动人物插画
运动人物插画
卡通风格电商展台插画
卡通风格电商展台插画
二十四节气寒露霜降节气插画
餐饮插画背景素材
运动人物插画
二十四节气寒露霜降节气插画
二十四节气寒露霜降节气插画
你可能喜欢
相关收藏夹
大家都在看
登录注册