
首先感谢知乎网友——“然诺”提供的思路指导。
《参同真解》StableDiffusionWebUI 扩展功能研究(NovelAI)—— https://zhuanlan.zhihu.com/p/572780162
但是在文章中并没能揭示Clip skip参数对输出结果的影响方向是什么。
或许是因为文章作者本身所给定的prompt比较“朴素”,影响因子最终导致的差异不明显。
于是我本人又尝试着用一个稍微复杂的prompt来测试Clip。
固定所有值,seed依旧保持随机。
变量只有两个,Clip和Sampler。
Clip=0 Euler a——

Clip=0 Euler——

Clip1 Euler a——

Clip1 Euler——

Clip2 Euler a——

Clip2 Euler——

其实原图都没有露,别锁了
Clip3 Euler a——

其实原图都没有露,别锁了
Clip3 Euler——

其实原图都没有露,别锁了
Clip4 Euler a——

Clip4 Euler ——

其实原图都没有露,别锁了
Clip5 Euler a——

Clip5 Euler ——

从clip0到clip5,每个阶段两种采样算法,4张图一组。
以上全部都是同样的prompt,一个词都没改,其他参数也没动的情况下产出的图片。
大家前后对比下来,最直观的感受是什么?
clip越低,风格越华丽?
clip越高,越突出人物主体?
看图说话,其实这两个回答从结论而言都是正确的,但没有涉及到本质。
先卖个关子,暂且不谈。
因为这里忽略了重要的一点,就是我在prompt里是有“银发”、“单人”这样的tag描述的,
但是很显然,
随着clip skip的提高,输出的结果显然已经偏离了一些关键词。

Clip4 Euler a

Clip4 Euler
在clip4中,出现了“黑发”、“双人”,这种偏离严重的输出结果,场景也逐渐不受控制。

Clip5 Euler a

Clip5 Euler
在clip5中基本上就是放飞自我了,noobAI非要指着这个说是“银发”我也没办法,而且“高跟鞋”、“吊带白丝”这写要素也彻底消失了,糊弄谁呢?

那么clip skip的提高,除了带来这些负面影响,它的作用究竟是什么?
要理解clip,就要了解它的本质——
CLIP全称Contrastive Language-Image Pre-training,
直译过来就是“语言与图像的对比预训练”,
翻译成大白话,这是一套模型,用于构建起自然语言(日常描述)与图片(图像特征)之间的预测算法。
最终的目标就是——你对着文本框里输入“dog”,它就会给你一张小狗的图片。
CLIP模型用大量来源于网络的图-文数据对,将文本作为图像标签,使用NLP监督预训练图像分类器,经过长时间的炼丹-蒸馏,最终生成了这样一套“图-文相似性”预测模型。
好,那么clip skip值是什么?
在Stable Diffusion Web UI的描述中,是Ignore last layers of CLIP model,
当然,在NovelAI官网上的描述可能更好理解,
Stop At last layers of CLIP model
在CLIP模型的最后N层终止,“N”就是clip0~5后面的0~5数值。
这个值设定为2,就表示忽略最后两层CLIP。
这一阶段获取的CLIP Image embedding就是condition,
之后就是交给diffusion model来进行GLIDE了。(关于diffusion我就不在这篇文章展开说了)
大白话,最终生成的结果,就来源于CLIP所提供的“养料”,
生成结果要经过两次筛选,第一次就是挑选符合要求的“养料”,
第二次是从“养料”里汲取所需的资源。
这里的CLIP skip,指的是第一次筛选的精度。
(至于第二次筛选的精度是什么,肯定有人猜到了,就是CFG scale)
那么是不是越准越好呢?并不是,因为“养料”的筛选池并不是无限大的,
找出一个完美的“养料”很困难,也很稀少。
最终的结果就是,养料的稀缺导致原始风格化特征极其明显,“养料”本身的特性反映到了输出结果上。
clip skip较低时,最终给出的答案里或许有惊喜,但也极其不稳定。
反映到AI绘图上,就是我们所说的“画风不稳定”,一眼就能看出这种画风是参考了某一位特定画师的。
AI是不能无中生有的,你训练集里没有的东西,它不可能凭空造出来。
要不是AI最近把D站整个数据库给爬了一遍,进步也不可能这么快。
现在的道理也是一样的,如果挑选出的养料里没有目标所需,它就只能“凑合”一下。
于是就有了上面的情况。
但稍微放宽一点限制,让“养料”的量级上升一个档次,对于diffusion model来说也不至于太“束手无策”。
因为有了足够多的“养料”,最终的结果就可以做到相对统一,不至于一张图换一个画风。
这也是为什么NovelAI官方选择了clip2,在这个值,输出结果的画风非常稳定,也很耐看。
但是过高的clip skip也会导致“养料”泛滥,除非在二次筛选时加以约束。
否则NoobAI就会开始天马行空。
最后用一张截图结尾吧——

PS:本系列文章旨在分析clip、sampler、noise等因子所造成的影响,后续会继续跟进(如果有兴致)
如果还有读者不知道怎么描述激励(prompt),可以参考文章开头的链接,作者已经分析得很清楚了,这里不再赘述。