欢迎光临散文网 会员登陆 & 注册

AI绘图中的提示词书写:我所知道的一切

2023-06-20 12:38 作者:KaorinP_plkm160  | 我要投稿

写这篇专栏的起因,是 @Hina阳菜 在评论区提到,感觉不太清楚要如何选除了触发词以外的提示词。众所周知,提示词(prompts),或者大家经常说的标签(tags)对AI生成图像而言有重要的指引作用,是决定图像内容和质量的关键一环。虽然说仅凭提示词难以精确控制图像内容,其在控制人物姿态方面远不及ControlNet那般优异,而且标签之间还容易互相污染,什么棕色头发红色发卡暗蓝裙子白色衬衫深色衣领黄色领巾白色长筒袜对于AI来说那简直就是地狱难度,最后出来的颜色可以让你怀疑人生,但毋庸置疑的是提示词书写依旧是AI绘图的基本功,有必要花时间静下心来认真打磨。

其实就我个人而言,比起一篇关于提示词书写的专栏,可能自己更想整理一篇关于LoRA / LyCORIS模型训练的踩坑笔记吧。之所以如此,是因为我也自知没有什么值得传授的技巧,毕竟我写的东西还处在平面铺陈的初级阶段,平常觉得够用就好,出好图就像抽SSR,大家从后文的例子里大概就可以看出来了。所以,这篇专栏与其说是教程,不如说是关于提示词书写从入门到熟练的一篇指引;其中没有什么厉害的技巧,只有自己在写提示词时的一些习惯以及提升书写技能的一些可尝试的进路,让你在面对输入框时不再感到手足无措,可以将驰骋的思绪化作具象。如果大家能从这篇文章中找到一些有用的内容,那就太好了;如果本文有任何错误和不足也请随时指出,本人不吝赐教。

嗯,那我们就开始吧。



也许有人会好奇平常我是怎么写tag的(?)但其实也没啥特别的就是了,像是这张图:

链接:https://civitai.com/images/980609

提示词和参数如下:

还有这张:

链接:https://civitai.com/images/1116996

提示词和参数如下:

诚如前述,这里没有华丽的形容词,提示词也基本没有权重差别,而且几乎找不到描述人物姿态的标签,能出好图很大程度上仰仗抽卡运(不是)。不过从这里大家也能发现,就算提示词写得并不出众,AI好像也能产出很不错的内容。事实上,有些大模型(例如Cetus-Mix)制作的初衷便是“不需要太多标签就有不错表现”,而有些大模型就十分依赖用标签精细描述画面,这暗示了提示词的表现可能部分与大模型有关。对于初学者而言,虽然写提示词确实是门需要锤炼的技艺,但是也没有想象中的那么复杂;任何微小的进步在特定的模型上都可以很明显,而且能带来很强的成就感。只要不断积累经验,然后等待量变引起质变就好了。

我们继续将目光聚焦于提示词上。提示词由两部分组成,即正面提示词和负面/反向提示词(Negative prompt),前者是你想要让图像包含的内容,后者则是你不愿意在图像里出现的内容。

我们先来说说负面提示词。



负面提示词显然是必不可少的,缺少负面提示词会在很大程度上影响出图质量,问题在于应该要怎么写。

对于负面提示词,很多人会填入相当多低画质、奇怪的构图和背景、畸形的比例和肢体、水印文字等关键词,最后让负面提示词变得很长很长,像是下面的例子:

并不是说这有什么大问题,而是这样做值得商榷。事实上,即使负面提示词包罗万象,也无法消除肢体残缺畸形、光照不自然、违反透视规则、背景不连续、诸如“用手吃拉面”的怪异逻辑等AI绘图的固有问题,该出古神的终究还是会出。此外,负面提示词过多也可能影响某些模型的效果,像OrangeMix系列大模型的作者便这样告诫大家不要写那么多负面词(不是):

来源页面:https://huggingface.co/WarriorMama777/OrangeMixs

除了码上一堆负面提示词,你也可以使用他人训练好的负面文本嵌入(embedding)模型,像是通用的EasyNegative和bad_prompt,还有专注于修手的badhandv4和negative_hand等,都可以在C站上找到。这些模型本质上是负面提示词的打包,使用方法是将下载好的模型放入WebUI根目录中的embeddings目录中,之后在负面提示词输入框中输入模型的名称(例如EasyNegative)即可调用。不过需要注意的是,文本嵌入模型会影响画风,有些大模型(例如AICE冰可 | KawAICE)的介绍页里就写明不推荐使用这类负面文本嵌入模型,所以在使用前建议先阅读模型介绍,并根据实际效果确定是否使用。

来源页面:https://civitai.com/models/51057/aice-or-kawaice

总而言之,负面提示词是必要的。你可以选择逐个写上负面标签,也可以使用现成的负面文本嵌入模型,还可以两种方案混用,但需要注意的是负面提示词不必包罗万象,负面提示词模型也不是万金油,需要视情况选择。

接下来是大家可能更为关注的正面提示词。



首先,正面提示词的写作没有条条框框的限制。简单的情形像上文提到的Cetus-Mix,只需要四个提示词就有很棒的表现:

效果如图:

所用模型:Cetus-Mix,来源页面:https://civitai.com/images/881816

而复杂的的情形甚至直接上小作文,用自然语言描述画面内容:

效果如下:

所用大模型:Fantasy World,所用LoRA:FairWorld(权重:0.8),来源页面:https://pd.qq.com/s/4nh9gugyl

目前看来,用标签和自然语言描述画面要素都是不错的选择。个人是习惯了用一个个标签去描述画面,而且以前还担心AI是否能准确地对自然语言进行语法分析,不过从结果看表现还挺好的。

在提示词数量较少而且权重信息不明时,AI自由发挥的空间很大,不同的模型有不同的表现(其实还和CFG Scale有关,不过这里暂时不讨论)。不过,如果大模型还加载了LoRA / LyCORIS模型(特别是模型有过拟合的倾向),那么此时如果提示词较少,则生成的图像可能受到LoRA / LyCORIS模型的特征影响,也就是没有那么自由了,这时候可能需要更多的提示词或者设置提示词的权重来实现预期效果。

接下来的讨论我打算从三个部分展开,分别是有哪些标签可以使用、提示词写作的框架以及标签书写的语法

对于刚刚接触AI绘图的人而言,最大的问题也许就是不知道有哪些标签可用,以及怎么用英语把心中的想法表达出来吧。如果你也有这样的困惑,或许可以通过以下方式学习标签的写法:

1. PNG图片信息反查:如果这是一张AI生成的图像的原图,那么可以将其拖入WebUI的PNG图片信息选项卡,程序会读取生成这张图片时的参数。

2. 标签反推:如果你看到了一张很棒的图,可以尝试反推出其中包含的标签。此功能需要安装stable-diffusion-webui-wd14-tagger插件,如果还未安装,可以依次点击WeUI的扩展选项卡——可下载——加载扩展列表,在下方的搜索框中输入stable-diffusion-webui-wd14-tagger,点击候选项右侧的安装。重启WebUI,就能看见多出了一个“WD 1.4 标签器 (Tagger) ”选项卡。点击该选项卡,在其中选择合适的反推模型并调整置信度阈值,然后拖入图片,单击“反推提示词”即可得到结果。这里推荐反推模型中的wd14-vit-v2-git、wd14-convnextv2-v2-git和wd14-swinv2-v2-git,其中wd14-vit-v2-git最快,wd14-swinv2-v2-git最准确。

图片来源:游戏《偶像大师 百万现场 剧场时光》SSR卡面 答えは1つだけ 馬場このみ
三种模型的比较,来源页面:https://github.com/toriato/stable-diffusion-webui-wd14-tagger/blob/master/docs/what-is-wd14-tagger.md

3. 标签分享站和在线元素法典:像是https://tags.novelai.dev/、https://aitag.top/和https://aiguidebook.top/index.php都是不错的选择,其中或是对标签进行了分类整理,或是提供了现成的提示词模板。

4. 标签中英转换:如果你知道某个标签的中文,可以使用sd-webui-prompt-all-in-one插件(似乎秋叶的整合包内置了此插件,若没有安装则参照stable-diffusion-webui-wd14-tagger),其中在输入中文标签时会自动翻译为英文(虽然有时候翻译得不准)。

4. 标签自动补全:如果你知道某个标签的大致范围(比如swimsuit),可以借助a1111-sd-webui-tagcomplete插件联想相关的标签。

5. ChatGPT辅助写作:sd-webui-prompt-all-in-one插件提供了ChatGPT辅助生成提示词的功能,非常方便。

你也可以考虑在本地搭建一个聊天机器人,这里推荐ChatRWKV:

了解了可用的标签,接下来便是如何将它们组织起来。就个人而言,我会按照“调用模型的标记——画质——画风和色彩——构图和拍摄角度——背景、特效和物件——人物特征和装饰物”的顺序去完成一幅图的提示词。其实不用非要按照这样的顺序来,不过这确实是一个好习惯,一是写起来比较符合逻辑,二是想要修改提示词的时候也比较方便定位大致位置。具体而言:

  • 个人会把类似<lora:XXXX:X.X>这样的调用模型的标记写在最前面,这主要是为了防止写到最后结果忘记调用模型;

  • 画质提升标签在大部分情形下还是需要的(不过一些大模型的介绍页有提到不需要某些提升画质的标签),但也不宜过多,一般而言best quality / masterpiece / HDR / 8K / ultra detailed这些比较常用,酌情使用即可;

  • 画风标签可以影响画面色彩和笔触等特征,比如surreal colors / colorful / pastel colors / high contrast / high saturation,还有sketch / pixel art / monochrome / watercolor \(medium\)等;

  • 构图和拍摄角度标签按照需要添加,像是dutch angle / cinematic angle / dynamic pose / wide shot / depth of field,和人物有关的close-up / profile / portrait / upper body / cowboy shot / full body之类的有时候我也会写到人物特征那里去; 

  • 背景和物件标签的话,我一般会先考虑某个场景,比如璀璨星空下的奇幻而又静谧的小镇,然后先从整体环境开始,在从天上依次写到地下(不是)。像是描述整体氛围的night, silent, peace, otherworldly atmosphere,描述天空的dappled moonlight, gradient sky, beautiful sky, starry sky, beautiful clouds, constellation, shooting star,以及描述地面物体的grassland, wildflowers, cobblestone streets, ancient architecture, reflective floor都可以试一试;

  • 特效标签,像是描述光照的backlighting / ray tracing / cinematic lighting / volume lights,还有描述虚化背景、模糊和光晕的bokeh / blurry background / lens flare / motion blur / light particles / sparkle,在需要实现某些特殊效果时可以考虑使用;

  • 人物特征和装饰物标签就无须赘述了,比如下面这一串描写海边的穿着水手服校服的女孩子的标签:wet hair, shiny skin, cute, happy, smile, :d, open mouth, collarbone, floating hair, sailor collar, pleated skirt, short sleeves, school uniform, serafuku, ribbon, earrings, bracelet, white thighhighs, hair bobbles, hair flower, neckerchief, necklace。

最后是标签书写的语法

  • 标签和标签用逗号隔开,如serafuku, school uniform, plaid skirt, sailor collar。在没有权重信息的情况下,同类标签的优先级以先后次序为准

  • 括号()表示给标签设定权重,一层括号为1.1倍权重;可以使用多重括号,括号有多少层就表示给标签加上1.1的多少次方倍的权重,比如(((swimsuit)))是给swimsuit加上1.1^3=1.331倍的权重。更推荐的是在括号内指定权重的倍数,此时权重以指定的数值为准,如(swimsuit:1.6)是给swimsuit加上1.6倍权重;

  • 管道符|表示标签混合,例如red|blue hair就可以生成红蓝混合的发色,cow|horse可以生成形态介于牛和马的生物;

  • 方括号[]表示减弱标签的权重。除此之外,方括号还可以实现渐变效果,后面的数字若小于1则视为比例,大于1则视为步数。例如[pink:light blue:0.85],画出来的可能就是三月七那样的发色。

详细的实例可以参考这个视频:


以上就是我所知道的关于提示词书写的全部内容了。虽然这些用文字表述起来很繁杂,但在实践时不必受到那么多限制,一边尝试一边积累经验就好,无论何时重要的都是追随自己心中的想法。毕竟,技术层面的内容终有一天能完全掌握,而将你与他人区分开的是你的想象力和独特的审美。

那么就下篇专栏再见啦,诶嘿嘿♪

AI绘图中的提示词书写:我所知道的一切的评论 (共 条)

分享到微博请遵守国家法律