选自Max Woolfs Blog
作者:Max Woolf
机器之心编译
编辑:悉闲
在这篇博客文章中,美国数字媒体公司 BuzzFeed 的数据科学家 Max Woolf 做了一项实验,证明 Negative Prompt 可以改善 Stable Diffusion 2.0 的图像生成质量。
StabilityAI 前段时间发布了 StableDiffusion2.0 。这一全新版本的出现颠覆了整个 AI 生态系统。从架构上看, Stable Diffusion 2.0 与之前的 V1 版本基本相同,只是采用了新的文本编码器(OpenCLIP 而非 OpenAI 的 CLIPText)。Stability AI 宣称 Stable Diffusion 2.0 在算力方面的表现更为优异,但艺术始终是主观的。
使用 Stable Diffusion 2.0 生成的图像示例,图像分辨率为 768x768
在发布后的 24 小时内,Reddit 和 Twitter 用户注意到,在完全相同的输入 prompt 和设置下,新模型的性能比 Stability Diffusion 1.5 要差。一些用户还注意到,输入GregRutkowski等在世艺术家的名字对输出结果没有任何影响(Greg Rutkowski 的名字是一个著名的文本 prompt,之前可以让 Stable Diffusion迅速生成Rutkowski风格的绘画,这遭到了Greg Rutkowski本人的质疑)。
Greg Rutkowski说,“我在AI工具上遇到的问题是缺乏版权。没有人问他们是否可以用我的工作来训练这些程序。我认为这些工具不应该使用在世艺术家的作品。这是一种不受控制或监管的版权侵犯,是对人权的侵犯。我听说风格是不能有版权的,但我认为在某种程度上应该有。”
一些人指出,新模型的训练样本减少了NSFW(NotSuitableForWork)图像的数量,因而导致了这些变化(因为新模型使用NSFW filter 过滤掉一些不可描述的内容)。但在我看来,主要问题在于新版本使用了 OpenCLIP。采用新的文本编码器意味着适用 Stable Diffusion 早期版本的一些假设和 prompt hack 可能失效。另一方面,这又可能引发新的 prompt hack。比如,Stability AI 首席执行官 Emad Mostaque 提到,考虑到模型训练的方式,否定形式的 prompt(negative prompt)应该会更有效。尽管这仍是理论,但真正的实践效果往往更好。
我之前没怎么在 Stable Diffusion 上弄过negative prompt,尽管有传言称这是某些知名商用 Stable Diffusion 服务背后的秘籍。在用 SD 2.0 对negative prompt 进行大量实验之后,我发现,negative prompt 对于从模型中获取良好结果着实意义重大。而最令人惊讶的是,negativeprompt 可能远远优于传统 prompt addition。
什么是negative prompt?
首先我们简单解释一下什么是 negative prompt。与正常的文本到图像 prompt 类似,Negative Prompting 表示你不希望在结果图像中看到的术语。这个强大的功能允许用户从原始生成的图像中删除任何对象、样式或异常。尽管 Stable Diffusion 以人类语言的形式接受被称为 prompt 的输入,但它很难理解否定词,如「no, not, except, without」等。因此,用户需要使用 negative prompting 来完全控制 prompt。
再就是关于 prompt 权重的问题。
Prompt 权重是 Stable Diffusion 支持的一项技术,可以让用户精细地控制他们的 prompt。使用 prompt 权重,用户可以告诉 Stable Diffusion 哪里应该多关注,哪里应该少关注。
例如 Prompt :柴犬和北极熊(占 0.7)的混合体。由于给北极熊赋予了更多权重,所以在输出图像中看到北极熊特征占主导地位。
我们用 Stable Diffusion 2.0 来测试一下。先回到我的 VQGAN+CLIP prompt(参见:https://minimaxir.com/2021/08/vqgan-clip/),看看它生成的达利风格的赛博朋克森林是个什么样子:
prompt:cyberpunk forest
注:达利是西班牙超现实主义画家,代表作品有《记忆的永恒》等。
达利代表作品《记忆的永恒》。
假如你想删除树或某种颜色(如绿色),那么这两者(trees、green)就是在 negative prompt 中要写的内容。例如下图中,prompt 为「cyberpunk forest by Salvador Dali」;negative prompt 为 「trees, green」。
prompt:cyberpunk forest by Salvador Dali;negative prompt: trees, green
虽然充斥着大量超现实主义赛博朋克隐喻,这依然是一片森林。
从理论上来说,要改进上述图像,一个很流行的技巧是纳入更抽象的不良图像概念,如模糊和马赛克。但是,这些 negative prompt 是否比其他“成分”(如 4k hd)更好呢?negative prompt 如何与那些 positive promt addition 相互作用?我们来进一步实际测试一下。
negative prompt 和 positive prompt 会碰撞出什么火花?
这里插句题外话。有种名为 textual inversion 的技术(可供文本编码器学习特定对象或风格,可以在 prompt 中轻松调用)在 Stable Diffusion 2.0 中同样适用,尽管由于文本编码器不同(更大,嵌入是 1024D 而非 768D),每个 textual inversion 嵌入都必须重新训练,但在其他方面表现相同。
SD1.X 中的一种常见风格是 “Midjourney” 风格(见下图),有种过度幻想的美学意味。我还训练了 <midjourney> token 的新版本(参见:https://huggingface.co/minimaxir/midjourney_sd_2_0)。
此外, textual inversion 或许还可以创新地运用于negative prompt。Redditor Nerfgun3 为 SD1.X 训练了一个“否定嵌入”,具体来说就是通过将通常的negative prompt 用作 positive prompt 来生成合成图像数据集,然后在其上训练 textual inversion 嵌入。我做了一些调整来再现这个过程,改进了合成数据集,进而训练出一个新的 <wrong> token。
现在我们对 positive prompt addition(positive token)与negative prompt(negative token)进行交叉测试,看看negative prompt 的影响力有多大。以下是要测试的 prompt 列表,其中 positive prompt 为绿色,negative prompt 为红色:
例如,Stable Diffusion 2.0 的一项测试输入可能是「cyberpunk forest by Salvador Dali, in the style of <midjourney>」以及一个negative prompt「in the style of <wrong>」分别对应绿色 “TOKEN” prompt 标签和红色“TOKEN” 标签。
此外,每个单独生成的图像将以相同的初始潜态开始,同时进行 seeded 调度。这样能更清楚地显示negative prompt 的影响,因为在恒定初始潜态下保持相同 prompt 可以使生成的图像成分在negative prompt 改变的情况下保持不变。
现在总算可以开始了。那就让我们以 Steve Jobs 的头像为基本 prompt 开始吧,相当简单。
base prompt: Steve Jobs head, seed: 59049
两个 prompt addition 都改变了风格;base prompt 生成的是卡通图像;写实的 prompt addition 使其更像是 3D 渲染,而 Midjourney token 又使其成为一种艺术手法。然而,当加入negative prompt,每张图像都更清晰,模糊度降低,色调呈中性,皮肤细节也更丰富。值得一提的是, <wrong> token 要优于较小的negative prompt。
再来看一个经典的图像生成:用 original DALL-E 演示的著名牛油果扶手椅,怎么样?
base prompt: an armchair in the shape of an avocado. an armchair imitating an avocado., seed: 59049
有趣的地方在这儿,positive 文本 prompt addition 完全破坏了原始 prompt 意图,而每个negative prompt 却更加精准地完善了相应图像(包括整个牛油果!)
演示都很不错,我们再次回到达利风格的赛博朋克森林:
base prompt: cyberpunk forest by Salvador Dali, seed: 59049
在这个示例中,两个 positive prompt 都抹杀了达利的风格,倾向于更写实的森林,随后又为negative prompt 所强化。在原始 prompt 下,negative prompt 更能突显达利的艺术风格。这个例子充分说明,positive prompt addition 并不一定就是好的。
negative prompt 能否帮助 AI 生成美味食物的图像?就像 DALL-E 2 可以实现的那种?我们看能不能生成一个汉堡:
baseprompt:adelicioushamburger,seed:19683
这个示例相当清楚地展示了negative prompt 对得出最终结果大有帮助;使用两个 token 的结果输出逼近 DALL-E 2 的质量!
Stable Diffusion 2.0 另一个有意思的地方是文本渲染效果更好;小字不一定完全清晰,但大字更容易辨认。或许 Stable Diffusion 2.0 可以生成一篇《纽约时报》(NYT)头版文章来描绘机器人霸主的崛起。
base prompt: an evil robot on the front page of the New York Times, seed: 19683
尽管潜在输入固定,但 Stable Diffusion 2.0 还是生成了很多种不同类型的邪恶机器人,报纸版式可以说很 NYT。如此怪异的仅由negative prompt 文本生成的图像表明一种非常罕见模式的崩溃,这挺有趣(或者说是 Stable Diffusion 在隐藏某些东西)。
我们还可以研究一下negative prompt 如何帮助渲染人类对象。我们来看看 Taylor Swift。如果她成了 Taylor Swift 总统会怎么样?(希望 Stable Diffusion 不会把她和其他 Taylor 总统搞混)
base prompt: President Taylor Swift giving her presidential inauguration speech, seed: 6561
两种 positive prompt addition 得到的初始输出都明显更差,令人意外。但negative prompt 又一次解决了问题,为 Taylor 总统换了几套华服。值得注意的是,与 SD 1.X 相比,Stable Diffusion 2.0 生成的手更逼真…… 不过也不能细看。
最后,不能忘了《刺猬索尼克》中那个刺猬 Ugly Sonic,也是我上一篇 Stable Diffusion 博文的主题(参见:https://minimaxir.com/2022/09/stable-diffusion-ugly-sonic/)。上一次,我收到很多控诉,说 AI 生成的 Ugly Sonic 并不是真正的 Ugly Sonic,因为生成的 Ugly Sonic 没有人类牙齿!是时候解决这个问题了!
base prompt: <ugly-sonic> smiling with human teeth, seed: 6561
在这个示例中,negative prompt 破坏了 Ugly Sonic,因为把他的人类牙齿一步步去除了!
结论
在 AI 艺术中,我们总会有不同收获,不过negative prompt 将是 AI 图像生成领域的一个有力工具。固守曾用的 prompt 策略这种做法不太对。这也给了我们一个很好的机会,摆脱在世艺术家提供的这根 prompt 设计拐杖,因为拄拐难行。这对整个行业来说也是一件好事(尤其是考虑到法律的不确定性!)。
我用于生成本文图像的所有代码都可以在一个 GitHub 库中找到(参见:https://github.com/minimaxir/stable-diffusion-negative-prompt),其中有一个 Colab Notebook,用于 <wrong> token 下的常规生成,还有一个 Colab Notebook 用于 3x3 标记的网格图像,都能轻松调整 prompt 输入,你自己也可以在其中实验。
原文链接 https://minimaxir.com/2022/11/stable-diffusion-negative-prompt/