Glaze 和扩散模型反 AI 方法的有效性
本文将讨论两种反 AI 训练方法:Glaze 和 Nightshade,以及它们未能按预期发挥作用的原因。本文还将讨论绕过这些“保护”的方法,尽管这可能不是您想要的。
它们有什么作用?
Glaze(以及在较小程度上,Nightshade)都试图以这样一种方式操纵图像,使扩散模型/文本编码器混淆图像的概念(猫)与另一个概念(独木舟)。根据 Glaze 的开发者所说,当模型在经过 Glaze 处理的图像上训练时,他们实现了 92% 的干扰率。Nightshade 也尝试了这一点,但更侧重于文本编码器/标签,因为它试图通过在图像上训练一个小的“遮蔽”来扭曲标签器的输出(他们选择 BLIP 作为标签器)来将一个概念映射到另一个概念。
一个缺陷是这两种方法对现在每个人都在使用的东西都不起作用。对于 Glaze,扭曲的所谓效果并没有在 LoRA/微调测试中显示出来。对于 Nightshade,图像不会对 LoRA 产生负面影响。(旁注:Glaze 团队一直声称测试失败是因为是 LoRA 而不是完整的微调。据我所知,这完全是捏造的,因为训练 LoRA 和微调模型应该具有相同的效果,只是 LoRA 更优化,但代价是“学习”更少。)
它们可以被绕过吗?
是的!最流行和被链接的例子是 lllyasviel(ControlNet 的三位作者之一)制作的 AdverseCleaner,它据说可以用 10 行代码清除 Glaze。
import numpy as np
import cv2
from cv2.ximgproc import guidedFilter
img = cv2.imread('input.png').astype(np.float32)
y = img.copy()
for _ in range(64):
y = cv2.bilateralFilter(y, 5, 8, 8)
for _ in range(4):
y = guidedFilter(img, y, 4, 16)
cv2.imwrite('output.png', y.clip(0, 255).astype(np.uint8))
尽管 lllyasviel 曾说过“指导中存在对抗性噪声”,并且“将其传递到过滤器可能不安全”,然后撤下了仓库(这个仓库已经被多次重新实现,例如在 deglazer 中)。这种方法去除了大部分伪影,只留下似乎“适合消费”的残余部分。
另一种常见的去除 Glaze 的方法是将其通过 VAE。VAE 将图像编码为潜在变量(最流行的是潜在扩散 VAE,它将 8x8 像素网格转换为一组潜在变量),并可以尝试将这些潜在变量解码回像素。VAE 的一个缺点是编码时会丢失细节,这仅仅是因为没有足够的数字来表示这些像素的所有可能值。这个缺点被用于“VAE 循环”中,我们对图像进行编码然后解码,从而产生一些明显的差异,主要是在 Glaze 区域,使图像“适合消费”。
这些方法都试图去除 Glaze/Nightshade 的伪影。这可以用于数据集的预防/安全,尽管在去除这些伪影时,我们忘记了一件事。
噪声偏移
噪声偏移,正如 crosslabs 的文章 所述,其工作原理是在将图像传递给扩散器之前,向潜在图像添加一个小的非零数字。这有效地通过使模型看到更多亮/暗颜色来增加最大的对比度。Glaze 和 Nightshade 有效地向图像添加噪声,在训练时充当一种噪声偏移。这可以解释为什么使用经过 Glaze 处理的图像训练的 LoRA 生成的图像看起来比未处理的图像更好。
结论
Glaze 和 Nightshade 是保护艺术作品免受 AI 侵害的两种最流行的方法,尽管它们并非唯一。所有“AI 艺术保护器”都必须面对的一个问题是,AI 看到了人类所看到的一切。这些保护器无法修改图像使其无法识别,但它们也不能仅仅留下几乎无法察觉的伪影,因为这些伪影很容易被绕过。