[深度学习]Visualizing and Understanding Convolutional Networks阅读笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lhanchao/article/details/55506295

现在我需要用到深度学习做图像分类的任务,虽然之前对CNN有过一定的了解,但我还是第一次真正使用它来解决问题,相关论文看的也比较少,最近恶补了一下近几年比较有名的关于深度学习的论文,写到博客上总结一下,接下来应该会陆续写一个系列。
《Visualizing and Understanding Convolutional Networks》一文是Matthew和Rob两人在2013年发表的论文,文章的主要贡献是使用反卷积神经网络(Deconvolutional Network)对CNN中各层进行可视化,从而确定我们的网络确实学到了东西,而且可以根据可视化结果对网络的结构修改进行指导。

Abstract

虽然最近的CNN模型能够极大的提升在ImageNet上的识别结果,但是人们始终没有弄明白为什么CNN模型能够有如此出色的表现,或者说怎样才能改进模型呢。在文章中通过一种简单的可视化手段,可以对CNN网络中中间层进行可视化,从而可以起到一种诊断的作用,来改进当前以后的模型。

1、Introduction

作者首先介绍了CNN在诸多领域取得的成功,并提出取得更好的成功的三种可能:(1)更大的训练集;(2)更加powerful的GPU;(3)更好的模型正则化策略(如Dropout)。接下来作者提出了上面提到的问题,当前仍然不能知道CNN模型内部是如何工作的,也不清楚到底学到了什么样的特征,因此提出可以通过使用反卷积神经网络对网络中间层进行可视化。最后作者通过对AlexNet的模型进行可视化,并根据可视化结果对其进行改进从而得到了更优的结果。

2、Approach

作者在文中测试的网络结构分别为LeNet和AlexNet。这些模型都是根据输入的2维图像 xi 通过在各层中的处理,最终输出一个概率向量 yi^ 。在网络中每层的结构都由如下几部分组成:(1)对上一层的输出结果的卷积;(2)激活函数(eg:ReLU);(3)[可选] max pooling;(4)[可选] 归一化层。网络的最高层由若干全连接层和一个softmax层组成。

2.1 Visualization with a Deconvet

Deconvet是可以看做是卷积网络(convnet)的反操作,convnet是把图像映射为特征图(feature map),因此Deconvnet是把特征图转换为图像。Deconvnet最初发表的目的是为非监督学习的,在本文中作者使用Deconvnet并不具有学习能力,只是用于可视化已经训练好的模型。
为了对convnet的各层进行可视化,需要在convnet的各层都加上Deconvnet,如下图所示:


这里写图片描述

图中上部的右侧为卷积网络,左侧为反卷积网络。可以从图中看出,最初输入图像进入卷积神经网络,经过conv-》rectified linear-》pooling之后得到本层的输出结果,然后把输出结果作为输入进入反卷积神经网络中,经过Unpooling-》rectified linear-》deconv的处理,最终重建出输入图像。
下面依次介绍Unpooling、recifified linear和deconv的处理过程:
Unpooling:在卷积神经网络中,max pooling是一个不可逆的过程,但是作者提出可以通过记录每个窗口最大值像素坐标的方式对max pooling过程进行反操作,在Unpooling时,把最大值临近区域部分的像素值设为该最大值像素的像素值。如上图所示,图中的下部的右侧和左侧图像分别表示pooling和Unpooling的操作过程,中间记录的灰黑相间的网格记录最大值所在的位置,其中灰色部分表示最大值的位置。
Rectification:由于作者实验的网络中激活函数都是ReLU函数,而ReLU函数的作用是保证feature map的值总是正的,因此直接对Unpooling的重建结果进行ReLU操作进行反操作,保证值为正即可。(不太懂原理。。。有人懂的话请指教)
Filter(deconv):卷积网络通过对输入的2D图像进行卷积得到输出的feature map,因此为了进行反操作,直接对ReLU反操作后的结果进行卷积操作即可,卷积核即为原卷积核的转置(即对原卷积核进行水平和竖直方向的翻转)

3 Training Details

这部分主要讲作者训练的网络模型结果以及训练的方法细节,这不是本篇论文的重点,略过,有兴趣可以读论文原文。

4. Convet Visualization

Feature Visualization: 下图展示了特征可视化后的结果,对每个feature map,选择最大的9个激活值分别进行可视化,这样可以看出CNN提取的特征相对输入图像的不变性,这一点可以在更高层的特征可视化图像看出,如layer 5中第一行第二列的图像,原图中这9个图像似乎并没有多大的共同点,但是可以从提取的特征看出,提取的是这些图中的草地,而不是他们的前景图像(这张图太大了,如果看不清可以去看论文原文)。


这里写图片描述

从上图中可以看出每一层提取的特征,以及各层的特征的不同点,如Layer 2中提取的特征主要是图像中的角点、边缘和颜色特征,Layer 3中提取的特征则更具有稳定性,能够获得相似的纹理,Layer 4中提取的特征就更加具有分类性,Layer 5中提取的则是整个物体,尽管这些物体在图像的不同位置。
Feature Evolution during Training: 图4中展示了训练过程中的各层的可视化结果,可以看出,底层的特征首先收敛,而更高层的特征收敛的越慢。

这里写图片描述

Feature Invariance: 图5是针对5张图像进行不同的变换,如平移、缩放和旋转变化后看卷积网络的处理结果。其中1、2、3行分别对应竖直评议、缩放和旋转变换,第2、3列表示这5张图像在第1和第7层的输出向量随着变换的程度与对原始图像处理后的输出向量之间的欧式距离,第4列则表示预测结果相对于变换(平移、缩放、旋转)程度的变化的变化情况。可以看出图像稍有变换,第1层输出的向量变换就比较明显,但是第7层输出的结果则相对比较稳定。同时也可以从图像中看出CNN对于图像的旋转变换基本没有鲁棒性,除非对于中心对称的物体。

这里写图片描述

4.1 Architecture Selection

通过可视化已经学习到的网络模型各层提取的特征可以对我们改进模型有一定程度的帮助,作者通过对AlexNet网络模型的可视化结果发现AlexNet的可改进之处。如图6所示,AlexNet的第1层提取了很多高频和低频信息,但是对中频的信息提取的较少,同时由于AlexNet采用了比较大的stride(步长)在第2层中提取的特征中有混叠效应。作者根据这些问题提出了如下解决方法:(1)把第1层的卷积核大小由 11×11 变为 7×7 ;(2)把原有为4的stride改为2;改变这些以后作者提升了AlexNet的识别效果。


这里写图片描述

4.2 Occlusion Sensitivity

作者提出这样一个问题,即CNN对物体进行识别时,是真的定位到物体上了,还是只是通过识别周围的环境呢?图7展示了作者进行的一系列实验的结果,作者使用一个灰色方块依次遮挡图像的诸个部分,发现只要遮挡了待识别物体的物体以后,将图像识别为该物体的概率迅速下降,这证明了CNN识别物体时是真的定位到该物体并对其进行识别的。同时当遮挡物挡住原图中可视化图像中显示的物体的部分时,该图像对该特征图的激活值迅速下降,这也证明了可视化中显示的物体真的与对特征图的激活有关。(翻译起来太拗口了,大体是这个意思,实在看不懂我翻译的可以去看原文= =)


这里写图片描述

4.3 Correspondence Analysis

深度学习模型与之前已有的识别方法的不同之处在于,深度学习没有用在不同图像中的特定对象部分(例如,脸部具有眼睛和鼻子的特定空间配置)之间建立对应的明确机制。但是作者猜测,深度学习可能隐式的对这种关系进行了对应(即检测脸的话,脸中非常可能有眼睛和鼻子)。作者随机挑选了5张具有狗的正脸的图像,并分别遮挡左眼、右眼、鼻子以及其他一些随机部位,如图8所示,然后通过以下公式进行分析:
对每个图像 i ,计算 ϵli=xlix^li ,其中 xli x^li 分别表示遮挡前和遮挡后的第 l 层的输出向量,然后通过通过以下公式计算遮挡某位置的值 Δl=5i,j=1,ijH(sign(ϵli)sign(ϵlj) ,其中 H 表示Hamming距离。作者提出,越低的 Δ 表示遮挡该部位与狗脸具有更强的相关性。下面我来说明以下我的理解,由于 ϵli 表示遮挡某部位以前和以后的神经网络第 l 层的输出特征向量,那么如果遮挡的部位与要检测的狗脸具有比较强的相关性(比如狗脸中一定在某位置处有眼睛),那么不同的狗脸图像在提取的狗脸的特征向量中的某部分则一定是相似的,比如狗脸的特征向量是由16维的,则其中一定有固定的某几维表示狗的眼睛,而Hamming距离 H(sign(ϵli)sign(ϵlj) 就是检测遮挡这一部位后,是否所有狗脸的特征都变了(即变成遮挡的灰色方块的特征了),如果是,那么说明在狗脸的特征中确实存在那么那么固定的几维表示狗眼特征,即狗眼睛与狗脸具有很强的相关性。作者在表1中对遮挡狗脸中左眼、右眼、鼻子和随机位置进行了结果统计,如下所示:


这里写图片描述
这里写图片描述

其中第5层中结果可以看出,遮挡眼睛和鼻子的计算结果要远小于随机遮挡的计算结果,因此可以看出深度学习隐式的计算出了狗脸与眼睛鼻子的相关性。但是第7层中结果差异不大,原因可能是因为第7层中学习了更高层的特征,其特征可能是用于区分这些狗的品种,而非识别这是一只狗。

5. Experiments

接下来文章主要讲解的是作者进行的实验,作者通过对AlexNet进行的修改进一步提升了在ImageNet上的识别率,并达到了当时最好的识别率,这里不再赘述。
这里记录一下作者提出的两个观点:
(1)训练网络时,改变全连接层的大小对于识别的结果似乎并没有太大的影响;
(2)训练网路时,增加中间卷积层的大小(layers)似乎可以在识别率上有一定的提升。
这里作者的两个观点大家姑妄听之,在实际实验中可以已它为指导进行尝试,但这不一定是正确的,因为深度学习过于复杂,理论依据还不是很清楚,大家现在提出的看法大多是根据实验的结果总结出的经验,在这里有效,对我们特定的实验情况就不一定有效,比如AlexNet中提出的归一化层,在接下来的文章中就提出归一化层没有用,而且还浪费计算资源。

猜你喜欢

转载自blog.csdn.net/lhanchao/article/details/55506295
今日推荐