ZFNet详解

ZFNet

论文《Visualizing and Understanding Convolutional Neural Networks》

1 论文思想

文章主要用于实现卷积神经网络(CNN,Convelutional Neural Network)的可视化工作,主要是针对于CNN每层得到的特征映射(feature mapping)的可视化。

博客中提到的feature mapping指的是一般化的特征映射,即经过卷积激活池化后得到的特征映射,这一点与论文中的表述有所冲突,请注意分辨。

文中指出,CNN的可视化工作有利于去理解CNN网络的工作原理,并在此基础上去改进CNN网络已获得更好的性能表现。

2 feature mapping可视化

文中使用反卷积神经网络(deconvnet)来实现对feature mapping的可视化。

deconvnet实际上就是convnet的逆操作。通过在已训练好的AlexNet的基础上,在网络的每一层都加入deconvnet。feature mapping通过deconvnet的多次迭代,实现feature mapping到输入空间(input space)的映射(projection)。

deconvnet主要包括三部分:

  1. unpooling

    ​ unpooling是pooling的逆操作。

    ​ convnet中的pooling是一个损失信息以实现降维的过程。以maxpooling为例,卷积层通过激活函数ReLU得到rectified feature mappings,经过maxpooling取局部区域(一般为2*2的区域,步长s=2)的最大值代表整个局部区域,此时得到的pooled mappings空间大小是rectified feature mappings空间大小的四分之一。

    ​ 在整个maxpooling过程中,模型损失了最大值的具体位置信息(下图中pooled mappings中的4只知道是来自rectified feature mappings中的左上角,并不知道其具体的位置)和其他值的所有信息(丢失了非最大值的位置信息和具体值)。

    ​ 对于deconvnet,它只关注feature mapping的可视化,换句话说,只有池化后的到的pooled mapping中的值才是deconvnet要进行可视化的值。所以,文中通过使用switch来记录pooled mappings中各值的具体位置,在unpoling过程中根据switch来得到unpooled mappings。

    ​ 观察下图,对比unpooled mappings与rectified feature mappings,前者在后者的基础上,只保留了最大值,其余值全变为0。

ZFNet详解_第1张图片

  1. ReLU

    ​ 为了在unpooled mapping中获得有效的特征值(值为正数),文中在deconvnet中也加入了ReLU激活函数。

  2. 转置filter

    ​ 为了实现convnet中卷积的逆操作,deconvnet中使用convnet中filter的转置来进行卷积。

    ​ 与传统的转置矩阵不同,deconvnet中的filter只是在convnet中filter的基础上进行了水平翻转和竖直翻转。

ZFNet详解_第2张图片

总体来看,deconvnet的结构如上图。右边是convnet的结构:conv、ReLU、maxpooling;左边是deconvnet的结构:unpooling、ReLU、conv(T)。

需要注意的是,文中的deconvnet是在已经训练好的AlexNet的基础上进行的改进,所以deconvnet并不需要进行训练。另外,文中指出,deconvnet每次只针对一个activity(feature mappings的一个通道)进行操作。

3 研究成果

文中通过将feature mapping projection与输入图片进行对比,进行了进一步的研究。

  1. 在CNN某一层得到的feature mapping中激活值最强的activity未必对分类结果其积极作用。

    ​ 下图是文中对CNN模型第五层feature mapping中激活值最强的activity进行可视化得到的feature mapping projection。

    ​ 左边是projection,右边是输入图像,观察右上角9副图像和对应的projection,可以发现activity关注点在背景的草坪上,而不是前景中的狗。

ZFNet详解_第3张图片

  1. 随着CNN层数增加,得到的feature mapping更加有代表性。

  2. 待识别目标所在的局部区域对分类结果影响最大。

    ​ 文中通过对输入图片进行局部遮挡,测试被遮挡区域对模型精度影响程度。

    ​ 实验发现,当待测目标所在的局部区域被遮挡时,模型基本无法获得正确的分类结果,这表明了CNN模型确实”认出了“待测目标,而不是通过整个图片上下文来进行分类的

    ZFNet详解_第4张图片

    ​ 在上图中的第二行,也出现了1所描述的问题:图中要检测的目标为汽车轮胎,而第五层中激活值最大的feature mapping projection所提取到的是车上的文字部分。这并不会影响模型最终的分类结果,因为分类结果依赖于feature mapping中所有的activity(所有通道),而不是激活值最大的单个activity

  3. 随着训练epoch的增加,同一层中激活值最大的activity可能会发生改变。

    ​ 下图是模型训练epoch=[1,2,5,10,20,30,40,64]时,各层得到的激活值最大的feature mapping projection,每一行表示同一个图像。

    ZFNet详解_第5张图片

    ​ 观察可以发现,随着epoch的增加,图中的feature mapping projection可能会发生明显的改变。

    ​ 还可以发现的是,模型的低层比高层收敛速度更快。这可能是因为模型使用ReLU后基本遏止了梯度消失的问题,这使得在SGD中,底层参数的更新值比高层参数的更新值大。

  4. ZFNet

    文中通过可视化发现,AlexNet模型中第一层conv只关注图像的高频和低频特征,而中频特征被忽略,同时在第二层得到的feature mappings中出现了伪影问题。

    为了解决上述问题,文中对AlexNet进行了改进:将第一层中的11*11的步长为4的卷积层更改为7*7的步长为2的卷积层。

    实验表明,改进后得到的ZFNet分类表现更好。

ZFNet详解_第6张图片

你可能感兴趣的:(卷积神经网络,计算机视觉,卷积,可视化,神经网络)