ZFNet(2013)及可视化的开端

博客:blog.shinelee.me | 博客园 | CSDNhtml

写在前面

ZFNet出自论文《 Visualizing and Understanding Convolutional Networks》,做者Matthew D. Zeiler和Rob Fergus——显然ZFNet是以两位做者名字的首字母命名的,截止20190911,论文引用量为4207。ZFNet一般被认为是ILSVRC 2013的冠军方法,但实际上ZFNet排在第3名,前两名分别是Clarifai和NUS,不过Clarifai和ZFNet都出自Matthew D. Zeiler之手,见ILSVRC2013 results网络

ZFNet(2013)在AlexNet(2012)的基础上,性能再次提高,以下图所示,图片来自cs231n_2019_lecture09架构

ImageNet Winners

论文最大的贡献有2个:ide

  • 提出了ZFNet,一种比AlexNet性能更好的网络架构
  • 提出了一种特征可视化的方法,并据此来分析和理解网络

本文将围绕上述2点展开,先介绍网络架构,再介绍特征可视化的方法。函数

网络架构与动机

ZFNet的网络架构以下性能

ZFNet Architecture

ZFNet的网络架构是在AlexNet基础上修改而来,与AlexNet相比,差别不大:ui

  • 第1个卷积层,kernel size从11减少为7,将stride从4减少为2(这将致使feature map增大1倍)
  • 为了让后续feature map的尺寸保持一致,第2个卷积层的stride从1变为2

仅这2项修改,就得到了几个点的性能提高。因此,重要的是为何这样修改?这样修改的动机是什么?文中这样叙述:spa

ZFNet Architecture Selection

经过对AlexNet的特征进行可视化,文章做者发现第2层出现了aliasing。在数字信号处理中,aliasing是指在采样频率太低时出现的不一样信号混淆的现象,做者认为这是第1个卷积层stride过大引发的,为了解决这个问题,能够提升采样频率,因此将stride从4调整为2,与之相应的将kernel size也缩小(能够认为stride变小了,kernel没有必要看那么大范围了),这样修改先后,特征的变化状况以下图所示,第1层呈现了更多更具区分力的特征,第二2层的特征也更加清晰,没有aliasing现象。更多关于aliasing的内容,能够参见Nyquist–Shannon sampling theoremAliasing.net

stride 2 vs 4, kernel size 7x7 vs 11x11

这就引出了另一个问题,如何将特征可视化?正如论文标题Visualizing and Understanding Convolutional Networks所显示的那样,与提出一个性能更好的网络结构相比,这篇论文更大的贡献在于提出一种将卷积神经网络深层特征可视化的方法

特征可视化

在博文《卷积神经万络之卷积计算、做用与思想》 博客园 | CSDN | blog.shinelee.me 中,咱们讲到卷积神经网络经过逐层卷积将原始像素空间逐层映射到特征空间,深层feature map上每一个位置的值都表明与某种模式的类似程度,但由于其位于特征空间,不利于人眼直接观察对应的模式,为了便于观察理解,须要将其映射回像素空间,“从群众中来,到群众中去”,论文《 Visualizing and Understanding Convolutional Networks》就重点介绍了如何“到群众中去”。

可视化操做,针对的是已经训练好的网络,或者训练过程当中的网络快照,可视化操做不会改变网络的权重,只是用于分析和理解在给定输入图像时网络观察到了什么样的特征,以及训练过程当中特征发生了什么变化。

下面这张图截自论文同款talk

Projecting Back

给定1张输入图像,先前向传播,获得每一层的feature map,若是想可视化第\(i\)层学到的特征,保留该层feature map的最大值,将其余位置和其余feature map置0,将其反向映射回原始输入所在的像素空间。对于通常的卷积神经网络,前向传播时不断经历 input image→conv → rectification → pooling →……,可视化时,则从某一层的feature map开始,依次反向经历 unpooling → rectification → deconv → …… → input space,以下图所示,上方对应更深层,下方对应更浅层,前向传播过程在右半侧从下至上,特征可视化过程在左半侧从上至下:

deconvnet

可视化时每一层的操做以下:

  • Unpooling:在前向传播时,记录相应max pooling层每一个最大值来自的位置,在unpooling时,根据来自上层的map直接填在相应位置上,如上图所示,Max Locations “Switches”是一个与pooling层输入等大小的二值map,标记了每一个局部极值的位置。
  • Rectification:由于使用的ReLU激活函数,前向传播时只将正值原封不动输出,负值置0,“反激活”过程与激活过程没什么分别,直接未来自上层的map经过ReLU。
  • Deconvolution:可能称为transposed convolution更合适,卷积操做output map的尺寸通常小于等于input map的尺寸,transposed convolution能够将尺寸恢复到与输入相同,至关于上采样过程,该操做的作法是,与convolution共享一样的卷积核,但须要将其左右上下翻转(即中心对称),而后做用在来自上层的feature map进行卷积,结果继续向下传递。关于Deconvolution的更细致介绍,能够参见博文《一文搞懂 deconvolution、transposed convolution、sub-­pixel or fractional convolution》 博客园 | CSDN | blog.shinelee.me

不断经历上述过程,将特征映射回输入所在的像素空间,就能够呈现出人眼能够理解的特征。给定不一样的输入图像,看看每一层关注到最显著的特征是什么,以下图所示:

Visualization of features in a fully trained model

其余

除了网络架构和可视化方法,论文中还有其余一些值得留意的点,限于篇幅就不展开了,这里仅作记录,详细内容能够读一读论文:

  • Occlusion Sensitivity 实验:使用一个灰色的小块,遮挡输入图像的不一样区域,观察对正类输出几率的影响,以此来分析哪一个区域对分类结果的影响最大,即对当前输入图像,网络最关注哪一个区域。结果发现,feature map最强响应可视化后对应的区域影响最大。
  • Feature Generalization:在ImageNet上预训练,固定权重,而后迁移到其余库上(Caltech-10一、Caltech-256),从新训练最后的softmax classifier,只须要不多的样本就能快速收敛,且性能不错。
  • Feature Analysis:对训练好的网络,基于每一层的特征单独训练SVM或Softmax分类器,来评估不一样层特征的区分能力,发现越深层的特征区分能力越强。

以上。

参考

相关文章
相关标签/搜索