文/栗子晓查
来源:量子位(ID:QbitAI)
AI 造出的假图片恐怕很难再骗过 AI 了。
连英伟达本月刚上线的 StyleGAN2 也被攻破了。即使是人眼都分辨看不出来假脸图片,还是可以被 AI 正确鉴别。
最新研究发现,只要用让 AI 学会鉴别某一只 GAN 生成的假图片,它就掌握了鉴别各种假图的能力。
不论是 GAN 生成的,Deepfake 的,超分辨率的,还是怎样得来的,只要是 AI 合成图片,都可以拿一个通用的模型检测出来。
尽管各种 CNN 的原理架构完全不同,但是并不影响检测器发现造假的通病。
只要做好适当的预处理和后处理,以及适当的数据扩增,便可以鉴定图片是真是假,不论训练集里有没有那只 AI 的作品。
这就是 Adobe 和 UC 伯克利的科学家们发表的新成果。
有网友表示,如果他们把这项研究用来参加 Kaggle 的假脸识别大赛,那么将有可能获得最高 50 万美元奖金。
然而他们并没有,而是先在 ArXiv 公布了预印本,并且还被 CVPR 2020 收录。
最近,他们甚至将论文代码在 GitHub 上开源,还提供了训练后的权重供读者下载。
造出 7 万多张假图
要考验 AI 鉴别假货的能力,论文的第一作者、来自伯克利的学生 Wang Sheng-Yu 用 11 种模型生成了不同的图片,涵盖了各种 CNN 架构、数据集和损失。
所有这些模型都具有上采样卷积结构,通过一系列卷积运算和放大操作来生成图像,这是 CNN 生成图像最常见的设计。
有 ProGAN、StyleGAN、BigGAN、BigGAN、GauGAN 等等,这些 GAN 各有特色。
ProGAN 和 StyleGAN 为每个类别训练不同的网络;StyleGAN 将较大的像素噪声注入模型,引入高频细节;BigGAN 具有整体式的类条件结构;进行图像转换的 GauGAN、CycleGAN、StarGAN。
除了 GAN 以外,还有其他处理图片的神经网络:
直接优化感知损失 ,无需对抗训练的级联细化网络(CRN);
条件图像转换模型隐式最大似然估计(IMLE);
改善低光照曝光不足的 SITD 模型;
超分辨率模型,即二阶注意力网络(SAN);
用于换脸的的开源 DeepFake 工具 faceswap。
主流图片处理 CNN 模型应有尽有。他们总共造出了 7 万多张“假图”。
虽然生成这些图片所用的算法大相径庭、风格迥异,但是总有会有一些固有缺陷,这里面既有 CNN 本身的问题,也有 GAN 的局限性。
这是因为常见的 CNN 生成的内容降低了图片的表征能力,而这些工作大部分集中在网络执行上采样和下采样的方式上。下采样是将图像压缩,上采样是将图像插值到更大的分辨率上。
之前,Azulay 和 Weiss 等人的研究表明,表明卷积网络忽略了经典的采样定理,而跨步卷积(strided convolutions)操作减少了平移不变性,导致很小的偏移也会造成输出的极大波动。
另外,朱俊彦团队发表在 ICCV 2019 上的论文表明,GAN 的生成能力有限,并分析了预训练 GAN 无法生成的图像结构。
今年 7 月,哥伦比亚大学的 Zhang Xu 等人进一步发现了 GAN 的“通病”,常见 GAN 中包含的上采样组件会引起伪像。
他们从理论上证明了,这些伪像在频域中表现为频谱的复制,这在频谱图上表现十分明显。
比如同样是一张马的图片,真实照片的信号主要集中在中心区域,而 GAN 生成的图像,频谱图上出现了四个小点。
因此他们提出了一种基于频谱而不是像素的分类器模型,在分辨假图像上达到了最先进的性能。
而 Wang 同学发现,不仅是 GAN,其他的 CNN 在生成图像时,也会在频谱图中观察到周期性的图案。
训练 AI 辨别真伪
刚才生成的数据集,包含了 11 个模型生成的假图。
不过,真假分类器并不是用这个大合集来训练的。
真正的训练集里,只有英伟达ProGAN这一个模型的作品,这是关键。
△ ProGAN 过往作品展
团队说,只选一个模型的作品用来训练,是因为这样的做法更能适应现实任务:
现实世界里,数据多样性永远是未知的,你不知道自己训练出的 AI 需要泛化到怎样的数据上。所以,干脆就用一种模型生成的图像来训练,专注于帮 AI 提升泛化能力。
而其他模型生成的作品,都是测试泛化能力用的。
(如果用很多模型的假图来训练,泛化任务就变得简单了,很难观察出泛化能力有多强。)
具体说来,真假分类器是个基于 ResNet-50 的网络,先在 ImageNet 上做了预训练,然后用 ProGAN 的作品做二分类训练。
△ ProGAN 原理
不过,训练集不是一只 ProGAN 的作品。团队用了 20 只 ProGAN,每只负责生成 LSUN 数据集里的一个类别。一只 ProGAN 得到 3.6 万张训练用图,200 张验证用图,一半是生成的假图,一半是真图。
把 20 只 ProGAN 的成果加在一起,训练集有72 万张,验证集有4000 张。
为了把单一数据集的训练成果,推广到其他的数据集上,团队用了自己的方法:
最重要的就是数据扩增。先把所有图像左右翻转,然后用高斯模糊,JPEG 压缩,以及模糊 +JPEG 这些手段来处理图像。
扩增手段并不特别,重点是让数据扩增以后处理的形式出现。团队说,这种做法带来了惊人的泛化效果 (详见后文) 。
训练好了就来看看成果吧。
明辨真伪
研究人员主要是用平均精度 (Average Precision) 这个指标,来衡量分类器的表现。
在多个不同的 CNN 模型生成的图片集里,ProGAN 训练出的分类器都得到了不错的泛化:
几乎所有测试集,AP 分值都在 90 以上。只在 StyleGAN 的分值略低,是 88.2。
不论是 GAN,还是不用对抗训练、只优化感知损失的模型、还是超分辨率模型,还是 Deepfake 的作品,全部能够泛化。
团队还分别测试了不同因素对泛化能力产生的影响:
一是,数据扩增对泛化能力有所提升。比如,StyleGAN 从 96.3 提升到 99.6,BigGAN 从 72.2 提升到 88.2,GauGAN 从 67.0 提升到 98.1 等等。更直观的表格如下,左边是没有扩增:
另外,数据扩增也让分类器更加鲁棒了。
二是,数据多样性也对泛化能力有提升。还记得当时 ProGAN 生成了 LSUN 数据集里 20 个类别的图片吧。大体上看,用越多类别的图像来训练,得到的成绩就越好:
然后,再来试想一下,这时候如果突然有个新模型被开发出来,AI 也能适应么?
这里,团队用了刚出炉没多久的英伟达StyleGAN2,发现分类器依然可以良好地泛化:
最后,还有一个问题。
AI 识别假图,和人类用肉眼判断的机制一样么?
团队用了一个“Fakeness (假度) ”分值,来表示 AI 眼里一张图有多假。AI 觉得越假,分值越高。
实验结果是,在大部分数据集里,AI 眼里的假度,和人类眼里的假度,并没有明显的相关性。
只在 BigGAN 和 StarGAN 两个数据集上,假度分值越高时,能看到越明显的瑕疵。
更多数据集上没有这样的表现,说明分类器很有可能更倾向于学习低层的缺陷,而肉眼看到的瑕疵可能更偏向于高层。
安装使用
说完了论文,下面我们就可以去 GitHub 上体验一下这个模型的厉害了。
论文源代码基于 PyTorch 框架,需要安装 NVIDIA GPU 才能运行,因为项目依赖于 CUDA。
首先将项目克隆到本地,安装依赖项。
pip install -r requirements.txt
考虑到训练成本巨大,作者还提供权重和测试集下载,由于这些文件存放在 Dropbox 上不便国内用户下载,在我们公众号中回复CNN即可获得国内网盘地址。
下载完成后将这两个文件移动到 weights 目录下。
然后我们就可以用来判别图像的真假了:
# Model weights need to be downloaded.python demo.py examples/real.png weights/blur_jpg_prob0.1.pthpython demo.py examples/fake.png weights/blur_jpg_prob0.1.pth
如果你有能力造出一个自己的 GAN,还可以用它来检测你模型的造假能力。
# Run evaluation script. Model weights need to be downloaded.python eval.py
作者就用它鉴别了 13 种 CNN 模型制造的图片,证明了它的泛化能力。
闪闪发光作者团
这篇文章的第一作者是来自加州大学伯克利分校的Wang Sheng-Yu,他现在是伯克利人工智能研究实验室(BAIR)的一名研究生,在鉴别假图上是个好手。
今年他和 Adobe 合作的另一篇论文 Detecting Photoshopped Faces by Scripting Photoshop,可以发现照片是否经过 PS 瘦脸美颜的操作,而且还能恢复“照骗”之前的模样。
这篇的另一名作者 Richard Zhang 与 Wang 同学在上面的文章中也有合作,2018 年之前他在伯克利攻读博士学位,毕业后进入 Adobe 工作。
这篇文章的通讯作者 Alexei Efros,他曾是朱俊彦的导师,本文提到的 CycleGAN 正是出自朱俊彦博士之手。Alexei 现在是加州大学伯克利分校计算机系教授,此前曾在 CMU 机器人学院任教 9 年。
传送门
论文地址:
https://arxiv.org/abs/1912.11035
源代码:
https://github.com/peterwang512/CNNDetection