本站是 ODERSA 的官方网站。 如何确认这一点

官方域名

本站的网址以 odersa.org 结尾。协会的每一项服务都放在 odersa.org 的子域名下,别处一概没有。如果浏览器地址栏里的网址不是以 odersa.org 结尾,这个站点就不是我们的。

免费,也不用账号

所有内容一开始就全部开放:不用注册,不用账号,不用密码,不用订阅,也没有广告。没有什么是留给付费的人的,因为这里什么都不收费。

不收集任何数据

本站不跟踪您:没有跟踪代码,没有跟踪 cookie,这些页面里没有内嵌任何统计工具,也不在您的设备上测量任何东西。我们的主机会以汇总方式统计请求,就像任何会应答的服务器一样:只是一个总数,绝不是一份个人档案。您不必相信我们的话:打开浏览器的开发者工具,切到“网络”标签页,然后刷新页面。您会看到本站请求的完整清单。所有内容都来自 odersa.org,没有任何东西发往别处。

内容自由使用

内容以 CC BY 4.0 许可协议发布。您可以复制、翻译、打印并再分发,用于课堂或身边的人都可以,唯一的条件是署名 ODERSA。

一张被造出来的图片

机器造出来的图片,往往带着产生它的那些运算留下的痕迹,而这个痕迹是可以测量的。这个演示在你的设备上造两张图片,指出痕迹出现在哪里,也指出它从什么时候起变得读不出来。

一名摄影师蹲在足球场边,手里拿着一支长焦镜头
一张照片带着拍下它的那台相机的痕迹。一张被造出来的图片,带着产生它的那套东西的痕迹。 照片:Ximeg, 文件页面,许可协议 CC BY-SA 3.0 (许可协议文本).
说明

一切都在你的浏览器里计算。两张图片都在这台设备上画出来,它们的频谱也在这里算出来,没有任何图片是从别处下载的。打开浏览器的“网络”标签页,再动手玩这个演示:不会有任何请求发出去。

两张图片,同样的内容,一次求差的运算

下面两张图片出自同一个起始场。一张原样呈现。另一张要过一道瓶颈:先被缩小,再靠重复每个像素放大回去,这正是图像生成器一层层串起来、把一张小的数值图变成大尺寸图片所用的上采样运算。除此之外,两张图片没有任何区别。

一个词或一个数字。同一个种子在任何设备上都会给出完全相同的图片和完全相同的测量值。
图片在被放大回去之前被缩小了多少。这个数字决定测量要在频谱里找的那张网格的间距。
0
以灰阶计,量程为 255。两张图片加的是同样的噪声,好让比较保持公平。这是本页最有教益的一个设置。

启动生成。两张图片、它们的两个频谱和测出的数字都会显示在这里。

测量显示了什么

痕迹是一处缺失,不是一个尖峰

流行的说法是,被造出来的图片会在频谱里出现尖峰。这个演示测出来的恰恰相反,而且更有意思。在上采样网格对应的那些频率上,被造出来的图片能量总是低于它周围,大约低 11 分贝。这些频率正是重复核所抹掉的那些:把每个像素重复固定的次数,等于施加了一个滤波器,它的零点就落在这个次数的整数倍上。所以频谱里留着的是产生它的那件工具留下的凹陷。

在对照图片上,没有加入噪声时,同一次测量的差值不到 1 分贝,往哪个方向都一样,因为没有任何理由让一种纹理偏爱或回避这些频率。所以两张图片之间的差别不是一种印象:它是一个数字,而且可以重做。

它在几乎没有什么的情况下就消失了

把噪声滑块往上推,看着测量值化掉。在默认种子、倍数为 8 时,测得的数值如下。

按加入的噪声测出的网格差值,单位为分贝。种子“ODERSA”,上采样倍数 8。
加入的噪声对照图片被造出来的图片
无+0.2-11.0
2 级-0.5-4.6
5 级-0.8-1.6
10 级-1.2-0.5
20 级-0.7+0.2
40 级-0.4+0.8

加到 5 个灰阶的噪声,也就是量程的百分之二,痕迹就已经化掉了:从 11 分贝掉到不足 2 分贝,刚好是对照图片自身所显示的那个值的两倍。加到 10 级,它就不存在了:在被造出来的图片上测出的差值落到对照的差值以下,两者再也分不开。这个幅度的噪声肉眼看不出来,而且它会自己产生:一次重新压缩、一次截屏、一次改尺寸、一个修图滤镜,都会在没人特意去做的情况下达到同样的效果。

这个痕迹无可辩驳,而它几乎经不起任何折腾。这句话的两半同样重要。

方法

下面是完整的计算,供想不用这一页重做一遍的人参考。

  1. 生成起始场。五层平滑噪声,一层比一层细,叠加起来,每一层的幅度减半。得到的纹理其能量随频率下降,和一张照片的情形一样。抽取由显示出来的那个种子播种,所以可复现。
  2. 生成第二张图片。按所选边长的方块对场做平均,得到一张小图,然后把每个像素重复同样的次数放大回去。这就是最近邻上采样。
  3. 如果要加噪声,就以同样的幅度加到两张图片上。
  4. 把每张图片转成亮度,减掉它的均值,再算它的二维傅里叶变换。减掉均值是必须的:不然直流分量会压倒一切,频谱就只剩中间一个点。
  5. 把频谱重新居中,取每个频率的幅值,再换算成相对于最大值的分贝数。
  6. 测量。先对两个坐标都是网格间距整数倍的那些频率求分贝的平均值,再对其他所有地方求分贝的平均值,然后相减。这就是网格差值。接近零,说明这些频率没什么特别。明显为负,说明有一个重复核经过了这里。

网格间距等于图片边长除以上采样倍数。在演示里改一下倍数,间距就跟着变:测量会到别处去找那个痕迹,而它确实找得到。这说明测量真的跟着运算走,而不是找到它自己想找的东西。

这个演示不做的事

  • 它表明一次生成运算会在频率域里留下可测量、可复现的痕迹。
  • 它表明这个痕迹取决于运算的设置,并随设置移动。
  • 它表明从多大的扰动开始,这个痕迹就读不出来了。
  • 它不做任何检测。本页两张图片都是它自己造的:它知道哪张是哪张,不是猜出来的,也不给出任何置信分数。
  • 它不评判你带来的任何图片,也不接收文件。一个声称能对真实图片下结论的工具,那是在骗人。
  • 它不复现一个真正的图像生成器。上采样是它的运算之一,不是全部,而且较新的架构会刻意削弱这个签名。

研究测出了什么

三项已发表的结果为这个演示划定了范围,第四项给出了它的限度。

生成式网络产出的图片,在频率域里存在可见的系统性伪影,成因是这些架构共有的上采样运算。对抗生成网络的上采样部件会留下一个特征鲜明、可复现的频谱指纹,即使没有在训练中见过这个具体模型也能利用。这些研究说的和上面的测量是同一件事:工具会在自己经过的地方签名。

限度也有公开研究,而且很明确。一项经同行评议的工作确立:像素层面的不可见水印可以被一种“再生成”攻击去掉,这种攻击先加噪声再重建图片,而且这一类攻击能保住视觉质量。作者据此结论认为,应当从不可见水印转向保留图像语义的标记方式。本页的噪声滑块三秒钟做的事,就是这种攻击的初级版本。

最后一个事实,把关于肉眼的讨论关上了:观察者已经无法可靠地把合成人脸与真实人脸区分开,甚至平均而言觉得合成人脸更值得信任。所以靠自己的感觉并不是一条退路。

要守住的那个动作

面对一张来源要紧的图片,不要在图片里找线索。去找来源:谁最先发布的,哪一天,以及如果存在出处元数据的话它说了什么。这条路径讲在水印那一章。一条技术线索的用处是把一个疑问记录下来,而不是单凭它下结论。

想再往下走

对声音信号做同样的工作,见一段被造出来的声音那一章。标记内容的两种方式,见水印那一章。该把这个工具收起来的情形,汇集在什么时候不要用它。本站所有演示都汇集在演示页面,课程目录在理解页面。

来源