Visualizing and Understanding Convolutional Networks

这篇文章基于AlexNet,对CNN中每层的作用进行了可视化的分析,提出了新颖的可视化工具,让开发者能够清晰地知道每一层提取到的feature,并且有助于研发出performance更好的CNN框架。同时,作者也对基于ImageNet进行训练的AlexNet其他训练集的泛化能力进行了测试。

AlexNet:https://blog.csdn.net/holmosaint/article/details/82220563

文章总结目前解释CNN能够在image classification上有非常好的performance的原因:1.拥有数量庞大的,有标签的数据集;2.GPU的使用使得大数据集的训练成为可能;3.更好的模型正规化的方式,eg:Dropout

但是这以上的原因并不足以CNN的具体机理,文章就这一点展开了阐述。

1 visualization with a Deconvnet

Deconv顾名思义,就是卷积的逆操作。作者将每层**出的feature重新映射到输入层的像素空间,便于人工的观察和判断。

原本卷积的过程是:filter→rectify(因为AlexNet中使用的activation function是ReLU)→pooling;那么Deconv的过程就是反过来:umpooling→rectify(ReLU的性质使得其逆仍然是其本身)→filter。

Visualizing and Understanding Convolutional Networks

1.1 unpooling

pooling本来是一个不可逆的过程,但是可以用近似的方式来做unpooling。在pooling的时候,记住最大值的位置,被称为:switch variables。在unpooling的时候依据记录的位置,然后将最大值还原用于近似。

1.2 rectification

ReLU function是max{0, x},所以直接将这个函数作用在unpooling之后的feature map上(由于unpooling过程中不会产生负值)就可以得到逆,和卷积中的操作没有什么不同。

1.3 filtering

使用与卷积的filter的转置作为Deconv中的filter,来最终还原到输入层的像素空间上。

作者指出以上visualization的方法的一个缺点就是只能看到单独一层的activation的表现,而不能够观察joint effect。

同时文章在train AlexNet的时候做了一定的改动,将原来两块GPU稀疏的网络连接改成了一块GPU的稠密连接。

2 Convnet visualization

2.1 feature visualization

作者将5层卷积层每层单独的activation feature映射到了输入层的像素空间,观察feature的特征,得到了下图的结论。

Visualizing and Understanding Convolutional Networks

作者发现每一层的图像feature的特点都有所不同:layer 2中主要集中在探测角落或者其他边缘、颜色的连接;layer 3有更加复杂的不变性,捕捉一些相似的纹理;layer 4的变化较大,观测不同类别的不同主要特征:如同狗脸,鸟腿等;layer 5展示了更多的姿势的变化等等。

2.2 feature evolution during training

作者同时也探测了feature map随着训练轮数的变化情况,发现在底层的网络中,activation feature收敛的速度更快;但是在顶层网络中,收敛的速度相对较慢。

Visualizing and Understanding Convolutional Networks

同时作者发现layer 1提取出来的feature更多的是高频和低频的,几乎没有中间频率的feature,这也进一步导致了layer 2中aliasing artifacts。

作者进一步分析这是因为在layer 1中的filter size和stride太大导致的问题,所以作者将filter size从11*11变成了7*7,stride有4变为2,得到了下图的对比结果。

Visualizing and Understanding Convolutional Networks

同时,在改进了stride之后,和原本的AlexNet相比,top-5的error rate下降了1.7%。

2.3 occlusion sensitivity

为了验证CNN所探测出的feature的确是图像关键信息本身,而不是一些其他无关紧要的内容(比如水印、网址啥的)。作者通过将图像不同部位的进行遮挡,然后观察CNN的performance,得出了以下的结论。

Visualizing and Understanding Convolutional Networks

我们发现当初关键部位的时候(比如第一幅图片狗狗的脸),layer 5的activation最低,同时预测的准确率也是最低的,便可以证明,CNN的确是提取到了图片中的关键信息来最终做出判断。

3 experiment

在这一部分,主要调整AlexNet的结构。作者发现,完全取出fully connected layer只会在validation error上出现4%左右的性能下降;取出3,4两层卷积,也只会增加4%左右的error rate。但是同时去掉3,4,6,7层,error rate的上升就会非常的恐怖。这个结果说明了神经网络的深度还是非常重要的。详细结果在下图。

Visualizing and Understanding Convolutional Networks

在接下来的一个部分,文章探究了基于ImageNet训练的AlexNet在其他数据集上的泛化能力。文章选用了3个数据集:Caltech-101,Caltech-256,PASCAL 2012.

文章测试了两种网络:1.1-7层的参数不变,仅仅retrain最后一层的softmax来适应新的数据集;2.重新在新的数据集上训练整个大网络。

3.1 Caltec-101

Visualizing and Understanding Convolutional Networks

明显发现原始AlexNet在该数据集上的泛化能力非常好。但是同时说明如此深的神经网络在小的数据集上进行训练是不太现实的事情。

3.2 PASCAL 2012

在PASCAL 2012数据集上的泛化能力不够理想,原因是这两个数据集在原始的图像上的风格类型差异较大,所有在所有类别的平均performance上比当前的state-of-art低了3.2%。