CNN为什么丢失了平移不变性?怎么保持?

1,740

卷积神经网络CNN极大提高了计算机视觉的性能,带来了计算机视觉的革命,但众所周知,

只要输入图片稍微改一个像素、平移一个像素,CNN的输出就会发生巨大的变化,所以很容易招到对抗攻击。

今天分享一篇致力于解决CNN平移不变性对抗性攻击的ICML2019的一篇论文,《Making Convolutional Networks Shift-Invariant Again》。

平移不变性丢失原因

根本原因就在于下采样,无论是Max Pooling,Average Pooling,还是Strided-Convolution,只要是步长大于1的下采样,均会导致平移不变性的丢失。

举个简单例子,正常输入是一维数字序列 00110011。

shift为0时的Maxpooling如下:

向左平移1时的Maxpooling:

只平移1个像素,Maxpooling结果就发生了巨大差异。下采样是CNN平移不变性丢失的罪魁祸首。

平移不变性和平移相等性的严格定义

上一小节只是感性的认识下采样对平移的敏感性,严格意义上讲,上一小节展现的是平行相等性,而不是平移不变性。我们给出平移不变性和平移相等性的严格定义。

用X表示一张分辨率为H x W的图片,则:

一个L层的CNN可以用以下特征提取器表示:

每一个Feature Map F可以上采样成与X相同分辨率:

1)平移相等性

如果输入的平移等于输出的平移,则是平移相等。

注意,上式中的F是经过上采样后的,与输入图片X分辨率相同。

2)平移不变性

如果输入平移后,输出不变,则是平移不变。

注意,上式中的F是经过上采样后的,与输入图片X分辨率相同。

就上一小节中的例子,我们对比一下shift=0和shift=1,并经过上采样后的结果:

明显的平移相等性和平移不变性都丢失了。

我们再对比一下shift=0和shift=2,并经过上采样后的结果:

这个明显的,保持了平移相等性但没有保持平移不变性,只要shift的像素数等于pooling的步长,就可以做到平移相等性。

对上一小节的例子做一个变种:

这个明显的保持了平移不变性和平移相等性。

在一般的CNN中,只要前几层保持住平移相等性,一般最后的分类具有平移不变性,所以后面主要讨论平移相等性。

3)平移相等性的度量

平移相等性如果保持固然最佳,如果平移不等,怎么衡量平移不等的程度?一般采用具体度量:

具体的,作者采用cos相似度进行衡量:

取值范围为[-1.0, 1.0],值越大,平移相等性越好。

Anti_aliasing(抗锯齿)

传统减少分辨率的方法如maxpooling、average pooling和strided convolution均打破了平移相等性,教科书上的解决方案是使用低通滤波器抗锯齿,average pooling自带抗锯齿,但具体怎么应用到maxpooling和strided convolution上,尚还没有优雅的解决方案,作者将pooling过程进行分解,稍作改进,提出了优雅的解决方案。

以maxpooling为例,其实可以分为相等的两步操作,如下图:

MaxPool/2 = Max/1 + Subsampling/2

作者提出,在Max/1之后,加一个Anti-aliasing Blur操作,再Subsamping/2。

MaxBurPool/2 = Max/1 + Anti-aliasing Blur/1 + Subsampling/2。

最后两步作者成为BlurPool,即记:

BlurPool/2 = Anti-aliasing Blur/1 + Subsampling/2。

那么maxpooling、average pooling和strided convolution就可以分为修改为Anti-aliased的版本。

Anti_aliasing效果

下图是shift=0时MaxPool/2和MaxBlurPool/2的结果:

下图是shift=1时MaxPool/2和MaxBlurPool/2的结果:

shift=0和shift=1时MaxPool/2的余弦相似度为:0.71

shift=0和shift=1时MaxBlurPool/2的余弦相似度为:0.95

可见,带Anti_aliasing的BlurPool平移相等性得到大大改善。

在数据集上的效果

1)ImageNet上的结果

下图给出了ImageNet数据集上添加Anti-aliasing后的consistency与Accuracy。consistency是输入图片,给两种不同shift后,类别保持一致的比例。可以添加Anti-aliasing以后,无论是选择哪种anti-aliasing kernel,相较于baseline无论准确度和一致性均有明显上升,这个是意外的,作者认为应该会损失准确度,但反而增加了准确度。图中的kernel是指:

Rect-2:[1, 1]

Tri-3: [1, 2, 1]

Bin-5: [1, 4, 6, 4, 1]

所有kernel均需要normalize,即除以kernel所有元素之和。

2)VGG内部各层的平移相等性度量

下图是VGG内部各层的FeatureMap,在CIFAR10上任意可能的shift对应的平移相等性度量(余弦相似度),因为CIFAR10的图片均是32x32的分辨率,因此也只有32x32种平移,所以结果是32x32的图片。蓝色表示完全的平移相等,红色代表较大的平移不等性。

明显的,平移相等性是周期性的,周期是累计的下采样率。每一次下采样,均会丧失一半的平移相等性。也可以看出,Anti-aliasing明显改善了平移相等性。

3)CIFAR10上不同kernel的结果对比

下图作者探讨了CIFAR10上不同网络结构(DenseNet和VGG),不同的Blur kernel,有无augmentation下,accuracy与consistency的变化。

可以明显的看出,数据增强对非传统pooling的重要性,也可以看出Anti-aliasing pooling的有效性,特别是无数据增强时。

结论

作者将Pooling改为BlurPooling后,确实可以有效的提高平移不变性,而且可以提高模型准确度,增加的计算量也基本可以忽略不计,的确是非常优雅的解决方案,希望能看到大规模的应用,成为以后模型的标配。