【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

第二篇论文记录,对于第一次搜索文献的本小白和为图偷懒第一篇论文直接看的翻译的本童鞋来说,真的是。。。。做科研不能偷懒,不然后面是真有点麻烦,在经过了三天的谷歌加百度加****下载了10多篇文章不知道先看那一篇之后,我终于确定了要看的第二篇和第三篇论文。。。。也是无语了

这篇论文这是我继Learning Deep Features for Discriminative Localization之后看的有关可视化的第二篇论文,来自ECCV 2014的论文。

Visualizing and Understanding Convolutional Networks           ECCV 2014

论文翻译稍后会新写一篇放上来,翻译翻译

网上有很多的阅读笔记,对我理解论文起了很大帮助。阅读笔记1阅读笔记2阅读笔记3阅读笔记4

一、介绍

这篇论文算是可视化CNN的开篇之作,形成了很多对卷积神经网络的普遍认识。文章主要讲了两个问题:1)为什么卷积网络表现这么好;2)如何提升网络的表现

文章介绍了利用反卷积可视化技术可以深入观察中间特征层函数的作用以及分类器的行为。并在Imagenet分类数据集上做了更进一步的研究,发现了不同层对结果的影响。当softmax分类器重训练后,AlexNet在Imagenet数据集上的结果可以很好地泛化到其他数据集。

论文使用是有监督的预训练方式,对AlexNet模型进行可视化,并逐步探索了其他不同模型的体系结构,发现他们的性能优于Imagenet上的结果。文章还探索了不同数据集上模型的泛化能力,仅依靠重训练softmax层。使用的可视化方法是Zeiler在2011年提出的多层的反卷积网络,把特征**映射回输入像素的空间。作者还进行了一项研究,通过遮挡输入图像的一部分,来说明哪一部分是对分类最有影响的。

2、方法

训练过程:

论文使用AlexNet模型,模型结构为:对前层的输入进行卷积-> relu -> max pooling(可选) ->  局部对比操作(可选) -> 全连接层 -> softmax分类器。

我们使用大量个标记图像来训练这些模型,其中标签是指示真实类别的离散变量。交叉熵损失函数适用于图像分类,比较和。通过随机梯度下降算法更新参数(卷积层中的滤波器,完全连接层中的权重矩阵和偏差)来训练模型。

2.1、反卷积可视化:

一个反卷积被认为是一个使用相同组件(过滤,池化)但相反的卷积模型,所以不是将像素映射到要素而是相反。输入是feature map,输出是图像像素。

首先,将输入图像呈现给卷积,并在整个图层中计算特征。为了检查给定的卷积**,我们将图层中的所有其他**设置为零,并将该功能图作为输入传递给附加的反卷积层。然后通过(i)反池化,(ii)Relu非线性纠正和(iii)卷积滤波三步,重新构建所选**下的图层中的活动。然后重复此操作直至达到输入像素空间。

反池化:严格意义上的反池化是无法实现的,但是我们可以通过在一组开关变量中记录每个池区中最大值的位置来获得近似的实现。在训练过程中记录每一个池化操作输入最大值的位置,这样在反池化的时候,就将最大值返回到其应该在的位置,其他位置的值补0。

Relu非线性纠正:卷积神经网络使用relu非线性函数来保证输出的feature map总是为正数。在反卷积的时候,也需要保证每一层的feature map都是正值,所以这里还是使用relu作为非线性**函数。

卷积滤波:网络使用学习过的滤波器来卷积上一层的特征映射。反卷积使用相同过滤器的转置版本,与矫正之后的特征进行卷积,从而实现反卷积。

具体实现过程如下图所示:

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

顶部:一个反卷积层(左侧)连接一个卷积层(右侧)。反卷积层将从下面的图层中重建一个大致的卷积特征版本。底部:在反卷积中使用交换机进行反池化操作的示意图,该交换机记录了在卷积中进行池化期间每个池区中的本地max(彩色区域)的位置。

3、训练细节

网络结构类似于AlexNet,有两点不同,一是将3,4,5层的稀疏连接变成了紧密连接,二是第一层卷积核的大小11*11->7*7。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

模型的数据集是ImageNet 2012训练集。对图像进行了一些预处理。

数据集。模型使用的数据集是ImageNet 2012 training set (130万张照片, 1000个种类),将最小尺寸调整为256,裁剪中心256x256区域,减去每像素平均值(横跨所有图像),然后使用10个不同尺寸为224x224的子图像(角落+中心与水平(外))预处理每个RGB图像FL IPS)。通过使用随机梯度下降,最小批量为128,用于更新参数。

训练。初始学习率0.01,使用SGD随机梯度下降法,最小样本数为128,结合动量项为0.9,当验证错误平稳时对学习速率进行调节,在全连接层(6和7)我们使用dropout(速度为0.5)。所有权重初始化为0.01,偏差设置为0。

训练过程中第一层过滤器的可视化表明他们中有一些占主导地位。为了解决这个问题,我们将RMS值超过固定半径的卷积层中的每个滤波器重新归一化到这个固定的半径。 这是至关重要的,特别是在模型的第一层,输入图像大致在范围内。正如AlexNet模型那样,我们在每个训练样例中生成多个的子图像来提高训练集的大小。

4、卷积网络可视化(Convnet Visualization)

特征可视化:通过对各层卷积核学习到的特征进行可视化发现神经网络学习到的特征存在层级结构。如下图。第二层是学习到边缘和角点检测器,第三层学习到了一些纹理特征,第四层学习到了对于指定类别图像的一些不变性的特征,例如狗脸、鸟腿,第五层得到了目标更显著的特征并且获取了位置变化信息。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

训练过程中的特征演化:低层特征经过较少epoch的训练过程之后就学习的比较稳定了,层数越高越需要更多的epoch进行训练。因此需要足够多的epoch过程来保证顺利的模型收敛。前面层变化更快,后面层收敛慢。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

特征不变性:探究特征不变性的实验。对图像进行平移、放大和旋转的操作,观察特征映射的变化。实验证明,第一层对于图像变化非常敏感,第七层就接近于线性变化了,最后的输出变化就相对较小了。CNN模型具有平移和缩放不变性,并且层数越高不变性越强。但是不具有旋转不变性。对图像的平移和缩放具有较强的鲁棒性,但旋转操作对CNN的特征映射影响较大。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

4.1特征结构选择:

作者通过可视化AlexNet第一层和第二层的特征,发现比较大的步长和卷积核提取的特征不理想,所以作者将第一层的卷积核从11*11减小到7*7,将步长从4减小到2,实验说明,这样有助于分类性能的提升。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

4.2遮挡实验:

遮挡实验对模型的部分区域进行遮挡,从而证明模型是真的定位出了图像中的对象,而不是依靠其周围环境进行分类。图像的关键区域被遮挡之后对分类性能有很大的影响。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

4.3一致性分析:

不同图像的指定目标局部块之间是否存在一致性的关联,作者认为深度模型可能隐含的学习到了这种关联关系。作者通过对五张不同的狗的图像进行局部遮挡,然后分析原图和遮挡后的图像的特征之间的汉明距离的和值,值越小说明一致性越大。实验表明,对不同的狗的图像遮挡左眼、右眼和鼻子之后的汉明距离小于随机遮挡,证明存在一定的关联性。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

5、实验

5.1ImageNet 2012

实验使用的数据集是ImageNet 2012训练集,验证集和测试集。作者首先实现AlexNet在ImageNet上的结果,然后使用4.1中改变后的模型进行实验,证明效果比原模型要好。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

调整模型大小:改变AlexNet模型的结构,测试对结果的影响。结果证明模型的深度会对分类准确度有很大影响。改变全连接层的大小或移除之对结果影响不大,增加中建卷积层的大小会提高性能,但卷积层过大又会导致过拟合。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

5.2.特征泛化(FeatureGeneralization)

这部分用了两种方法,第一种是1-7层不变,只改变softmax层的类别数。第二种方法是从头开始训练网络,所有参数都重新训练。

在Caltech-101数据集上,第一种方法性能很好(86.5%),第二种方法效果很不好(46.5%)。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

在Caltech-256数据集上,和101的结论一样。使用第一种方法的预训练模型,只使用6张图像的分类性能就超过了使用60张图像的当时最好的结果。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

使用PASCAL 2012数据集,结果有一些变化。在ImageNet预训练网络顶部训练20类softmax。结果并不理想,可能是因为PASCAL图像是一个完整的场景,图像中有很多不同类的对象,而我们的模型仅为每个图像提供一个单独的预测。我们的平均表现比领先的结果低3.2%,但是我们确实在5类的结果上击败了他们,有时甚至大幅度上涨。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

5.3.特征分析(Feature Analysis)

这部分研究Imagenet预训练模型在每一层是如何区分特征的。试验方法是改变ImageNet模型中的层数,并将线性SVM或softmax分类器置于顶层。下表显示了Caltech101和Caltech-256的结果。对于这两个数据集,随着我们提升模型,可以看到一个稳定的改进,使用所有层可以获得最佳结果。说明,随着特征层次越来越深,网络将学习越来越强大的特征。

【CV+DL学习路02】CNN可视化学习2——Visualizing and Understanding Convolutional Networks

6.讨论(Discussion)与结论

论文提出了一种新颖的方式(Deconvolution)来可视化模型中的活动。然后,通过一系列的实验,展示了如何使用这些可视化来调试模型的问题以获得更好的结果。对该模型的进一步研究表明,对网络而言,具有最小的深度而不是任何单独的部分对模型的性能至关重要。

这篇论文我最大的收获是反卷积,不过实验部分帮助读者更好的理解了深度神经网络。