Visualizing and Understanding Convolutional Networks

作者:Matthew D. Zeiler{New York University}, Rob Fergus{New York University}

会议:European conference on computer vision ECCV

Zeiler, Matthew D., and Rob Fergus. “Visualizing and understanding convolutional networks.” In European conference on computer vision, pp. 818-833. Springer, Cham, 2014.

Abstract

大型卷积网络在ImageNet上已经有了很好的识别结果,但是对于其性能表现这么好没有一个清晰的解释,或者如何改进他们。在本文中,我们解决了这两个问题。我们引入了一种新颖的可视化技术,它可以让我们很好的了解中间特征层的功能和分类器的操作。我们的ImageNet模型可以很好地推广到其他数据集:当softmax分类器经过重新训练后,它在Caltech-101 和 Caltech-256数据集上超过了最先进的效果。

1. Introduction

AlexNet能取得成功的原因主要是:(I)更大的训练集,有数百万个标记的样本;(二)强大的GPU实现,使得非常大的模型训练变得实用,以及(三)更好的模型正则化策略,例如Dropout。

在本文中,我们介绍了一种可视化技术,该技术揭示了在模型的任何一层激发了单个特征映射的输入刺激。它还允许我们在训练期间观察特征的演变,并诊断模型的潜在问题。我们提出的可视化技术使用多层反卷积网络(a multi-layered Deconvolutional Network),将特征激活投影回输入像素空间。我们还通过遮挡输入图像的部分来观察分类器输出,揭示场景的哪些部分对于分类是重要的。

我们也探索了模型对其他数据集的泛化能力,只是通过在顶部重新训练softmax分类器来实现。

1.1. Related Work

2. Approach

我们在整篇论文中使用标准的有监督卷积网络模型。这些模型通过一系列层将2D彩色输入图像xix_ixi​映射到不同类上,获得相应的概率向量。每一层由(i)前一层输出(在第一层时是输入图像)的卷积与学习到的过滤器组成;(ii)通过一个整流线性函数(rectified linear function)来传递响应(relu(x)=max(x,0)relu(x) = max(x,0)relu(x)=max(x,0));(iii)[可选地]局部邻域上的最大池化,以及(iv)[可选地]局部对比操作,该操作将特征图上的响应进行标准化。网络的前几层是传统的全连接网络,最后一层是softmax分类器。图3显示了我们许多实验中使用的模型。

我们用一个很大的N个有标签数据集{x,y}来训练模型。用适合于图像分类的交叉熵损失函数(cross-entropy)来比较y^i\hat{y}_iy^​i​和yiy_iyi​。网络的参数(卷积层中的过滤器、全连接层中的权重矩阵weight matrices和偏差biases)是通过在整个网络中反向传播loss对参数的导数来训练的,并通过随机梯度下降更新参数。

2.1. Visualization with a Deconvnet

理解卷积层的操作需要解释中间层的特征活动。我们提出了一种将这些活动映射回输入像素空间的新方法,显示了最初是什么输入模式导致了特征映射中的给定激活。我们用反卷积网络来实现这种映射。可以将反卷积神经网络看作是一个convnet模型,它使用相同的组件(滤波、合并),但方向相反。在Zeiler等[29]中,反卷积网络作为进行无监督学习的一种方式而被提出。在这里,它们不会用于任何学习能力,仅作为对已经训练好的卷积网络的探索。

为了调查convnet,deconvnet被附加到convnet的每个层,如图1(顶部)所示,它提供了返回图像像素的连续路径。首先,向convnet输入图像,并计算各层的特征。为了调查给定convnet的激活值,我们将层中的所有其他激活值设置为零,并将特征图作为输入传递给附加的deconvnet层。(应该是图1中在进行unpooling时,只让记录过的拥有最大激活值的一块有值,其他的块都为0)然后我们连续地(i)unpool,(ii)rectify 和(iii)filter 以重建下面的层中的活动,从而产生所选择的激活。 然后重复这一过程,直到达到输入像素空间。

Unpooling: 在卷积网络中,最大池化操作是不可逆的,但是我们可以通过在一组切换变量(switch variables)中记录每个池化区域内的最大值的位置来获得近似逆。在反卷积网络中,反池化操作使用这些切换将来自上层的重建放置到适当的位置,从而保留激活的结构。有关步骤的插图,请参见图1(底部)。

**Rectification:**卷积网络使用非线性的relu,即纠正特征图,从而确保特征图始终为正值。为了在每一层获得有效的特征重建(也应该是正的),我们通过非线性的relu传递重建的信号。

Filtering: 卷积网络使用学习到的过滤器来卷积前一层的特征图。为了近似反转这一点,反卷积网络使用相同滤波器的转置版本,但应用于纠正的映射图,而不是上面层的输出。实际上,这意味着垂直和水平翻转每个过滤器。

从较高层向下投影使用在向上卷积过程中由convnet中的最大池化生成的切换设置。由于这些开关设置是给定输入图像所特有的,因此从单次激活获得的重建类似于原始输入图像的一小块,其结构根据它们对特征激活的贡献而加权。由于模型是有区分度地训练的,因此它们隐含地表明输入图像的哪些部分是有区分度的(应该是它们能隐含的表明图像中那一块是最有特征,即最有区分度的)。请注意,这些投影不是来自模型的样本,因为不涉及生成过程(意思是说不是模型自己生成的样本)。

3. Training Details

与AlexNet的一个区别是3,4,5层使用的稀疏连接(由于模型分为2个GPU)在我们的模型中被密集连接替换。另一个重要的不同是关于1,2层,其被用于图6中的可视化调查。

该模型在ImageNet 2012训练集上进行了训练(130万张图像,分布在1000多个不同的类别中)。每个RGB图像都经过预处理,方法是将最小尺寸调整为256,裁剪中心256×256区域,减去像素平均值(在所有图像上),然后得到10个不同的裁剪块,尺寸为224×224(原图像及水平翻转的四个角+中心)。使用具有128的batchsize大小的随机梯度下降来更新参数,学习率10−210^{-2}10−2开始,动量项为0.9。当验证错误达到平稳时,我们在整个训练过程中手动降低学习率。Dropout用于全连接的层(6,7层),dropout比率为0.5。所有权重都初始化为10−210^{-2}10−2,偏差设置为0。

在训练期间可视化第一层的过滤器,显示出其中只有一些过滤器占据了主导地位。为了解决这个问题,我们将卷积层中的每个滤波器的RMS值超过固定半径10−110^{-1}10−1的,重新归一化到该固定半径。这一点至关重要,特别是在模型的第一层,输入图像大致在[-128, 128]范围内。如在Krizhevsky等[18],我们生成了多种不同的裁剪块和每个训练样例的翻转,以扩充数据集。我们在70个epochs之后停止了训练,基于[18]的实现在一个GTX580 GPU上花了大约12天。

4. Convnet Visualization

使用第3节中描述的模型,我们现在使用deconvnet可视化ImageNet验证集上的特征激活。

**Feature Visualization:**图2显示了培训完成后我们模型的特征可视化。对于给定的特征映射,我们显示前9个激活,每个激活分别投影到像素空间,揭示了不同结构所激活的给定特征图,因此展示出了其对输入变形的不变性(就是说不同的结构,但确是同一个东西,网络可以将其判别出来是同一类的)。除了这些可视化外,我们还会显示相应图像块的可视化(意思应该是只输入图像的一部分)。它们比上面的可视化具有更大的变化,因为后者仅关注每个块内的判别结构。 例如,在第5层,第1行,第2列中,块之间似乎没有什么共同之处,可视化显示此特定特征图聚焦于背景中的草,而不是前景对象。

每层的投影显示了网络中特征的层次特性。 第2层响应角落和其他边缘/颜色连接。 第3层具有更复杂的不变性,捕获相似的纹理(例如网格图案(第1行,第1列);文本(R2,C4))。第4层显示出显著的变化,并更具有特定类别:狗脸(R1,C1); 鸟的腿(R4,C2)。 第5层显示具有显著姿势变化的整个对象,例如, 键盘(R1,C11)和狗(R4)。

**Feature Evolution during Training:**图4挑选了几个最强烈的激活值来进行了展示。 外观突然跳变是源自图像最强烈的激活变化所致。 可以看到模型的较低层在几个时期内收敛。 然而,高层要在相当多的时期(40-50)之后才能完全收敛。

Feature Invariance: 图5展示了5张图片进行了平移、缩放和旋转后网络中顶层和底层特征向量的差异。底层会对变化十分敏感,而对顶层则会有较小的影响。最后的输出对于平移和缩放是稳定的,但对于图像的旋转不稳定。

4.1. Architecture Selection

**这种可视化的功能可以帮助我们选择更好的架构。**图6中的(b)&(d)是Krizhevsky使用网络的第一、二层,可以看到其第一层只有较高和较低频率信息的过滤器,中频的过滤器没有显示出来;第二层则由于较大的stride 4导致了混叠伪影。为了解决这些问题,我们(i)将第一层滤波器尺寸从11x11缩小到7x7,并且(ii)使卷积的步幅由4改为2。如图6©&和(e)所示,这种新架构在第1层和第2层特征中保留了更多信息。更重要的是,如第5.1节所示,它还提高了分类性能。

4.2. Occlusion Sensitivity

**对于分类任务有一个很自然的问题——模型是否真的判别出了图像中对象的位置,还是只是根据周遭的上下文来判断的?**图7试图通过用灰色方块系统地遮挡输入图像的不同部分并观察分类器的输出,以此尝试解决这个问题。图7清楚的展示出了网络就是定位了到了object,所以当object的部分被遮挡住时,分类准确率会显著下降。

4.3. Correspondence Analysis

深度模型没有对 不同图像中object的各个部分 显性建立关联的机制(例如不同的脸上都有特定空间性的眼睛和鼻子)。然而有一种有趣的可能性就是,深度模型也许在隐式的计算它们。我们用了五个随机的狗狗图,对其眼睛或鼻子进行遮挡,还有随机部分的遮挡,以探索以上疑问。对于图像iii,我们计算了ϵil=xil−x~il\epsilon^l_i=x^l_i-\widetilde{x}_i^lϵil​=xil​−xil​,其中xilx^l_ixil​和x~il\widetilde{x}_i^lxil​是在lll层上原始和被遮挡图像的特征向量。然后我们计算 所有相关图像pairs(i,j)(i,j)(i,j)中不同的向量ϵ\epsilonϵ 来度量一致性:Δl=∑i,j=1,i≠j5H(sign(ϵil),sign(ϵjl))\Delta_l=\sum^5_{i,j=1,i \neq j}H(sign(\epsilon^l_i), sign(\epsilon^l_j))Δl​=∑i,j=1,i​=j5​H(sign(ϵil​),sign(ϵjl​)),其中HHH是Hamming distance。值越低,代表着由遮挡带来改变的一致性越高,因此不同图像中相同object部分之间的对应关系更紧密(即,遮挡左眼会以一致的方式更改特征表示)。在表1中,我们使用l=5l = 5l=5层和l=7l = 7l=7层的特征,将脸部三个部分(左眼,右眼和鼻子)与对象的随机部分的Δ得分进行了比较。相对于随机遮挡对象区域,第5层特征显示模型确实建立了一定程度的对应性。

也就是说,网络中确实对object的各个部分进行了隐式计算,当不同图像的相同部分改变时,对应的特征表示改变也有一定的一致性,在l=5l=5l=5时比较明显,在l=7l=7l=7时不太明显可能是高层为了区分不同品种的狗

5. Experiments

5.1. ImageNet 2012


**Varying ImageNet Model Sizes:**在表3中,我们首先通过调整层的大小,或完全删除的方式探索了Krizhevsky等[18]的架构。在每种情况下,修改架构后的模型都是从头开始训练。删除全连接层(6,7层)只会略微增加错误率(在下文中,指的是top-5验证错误率)。令人惊讶,因为这两层包含大多数的模型参数。移除两个中间卷积层也会对错误率产生相对较小的差异。然而,同时去除中间卷积层和全连接层而产生仅具有4层的模型,其性能显著变差。这表明模型的整体深度对于获得良好的性能至关重要。之后,如图3所示来修改我们的模型。改变全连接层的大小对性能几乎没有影响(Krizhevsky等[18]模型也是如此)。但是,增加中间卷积层的大小可以提高性能。但是增加卷积层大小同时又扩大全连接层会导致过拟合。

5.2. Feature Generalization

有卷积层的存在我们的模型才能达到最佳的效果,因此我们尝试将特征提取层泛化到其他的数据集。为此,我们保持ImageNet训练的模型1-7层固定,并且在模型顶端使用新数据集的训练数据训练一个新的softmax分类器(为了合适的类别数量)。由于softmax包含相对较少的参数,因此可以从相对少量的样例中快速训练。

我们使用的分类器(softmax)和其他方法(典型的有线性SVM)是近似复杂度的,所以实验仅将我们从ImageNet获得的特征表示与其他方法使用的手工制作的特征表示进行了比较。值得注意的是,两种表示都是使用Caltech和PASCAL训练集之外的图像构建的。例如,HOG模型中的超参数是通过对行人数据集的系统实验来确定的。我们也尝试了第二个策略,即从头开始训练整个网络,不单单训练softmax。

一个复杂的问题是,一些Caltech数据集中的图像也存在于ImageNet训练数据中。使用归一化相关性,我们识别出这些“重复”图像,并将它们从我们的Imagenet训练集中移除,然后重新训练我们的Imagenet模型,从而避免了训练/测试污染的可能性。

**Caltech-101:**我们使用5folds的训练/测试拆分,每个类别随机选择15或30张图像进行训练,并且每个类别测试最多50张图像,表4报告了每类准确度平均值。30张图像/类别的训练需要17分钟。预训练模型通过2.2%的结果击败了来自(Bo et al., 2013)的30图像/类别的最佳报告结果。然而,从头开始训练的卷积网模型确实非常糟糕,只达到了46.5%,表明在如此小的数据集上训练大型卷积网络比较不可行。

**Caltech-256:**我们每个类别选择15,30,45或60张训练图像,表5报告了中每个类别准确度平均值。我们的ImageNet预训练模型远远胜过Bo等取得的目前最好的结果:60训练图像/类别准确率相比为74.2% vs 55.2%。然而,与Caltech-101一样,从头开始训练的模型也很差。在图7中,我们探索了“ont-shot learning”方式。使用我们的预训练的模型,只需要6张Caltech-256训练图像就可以击败使用10倍之多图像的方法。这显示了ImageNet特征提取器的强大功能。

**PASCAL 2012:**我们使用标准的训练和验证图像在ImageNet预训练的卷积网络上训练20个类别的softmax。这并不理想,因为PASCAL图像可能包含多个对象,而我们的模型为每个图像只提供单个对象的预测结果。表6显示了测试集上的结果。PASCAL和ImageNet图像在本质上是完全不同的,前者是完整的场景,而后者不是。这可以解释我们的平均性能比最好的结果低27%,但是我们确实在5分类的任务上击败它们,有时候是完胜。

5.3. Feature Analysis

我们探讨了Imagenet预训练模型的每一层是如何区别特征的。我们通过改变从ImageNet模型重新训练的网络层数(应该是从哪层开始,往后都会重新训练参数),并在顶部放置线性SVM或softmax分类器来实现此目的。表7显示了在Caltech-101和Caltech-256数据集上的结果。对于这两个数据集,当我们上升模型修改的开始层数时可以看到效果稳定的改进,通过使用所有层获得最佳结果。这支持了这样一个前提:当特征层次结构变得更深时,它们会学习到越来越强大的特征。

6. Discussion

我们以多种方式探索了针对图像分类而训练的大型卷积神经网络模型。首先,我们提出了一种可视化模型中激活值的新方法。这表明这些特征并非是随机、无法解释的模式。相反,当我们提升层次时,它们显示出许多直观上令人满意的属性,例如组合性,增加了不变性和类别区分度。我们还展示了如何使用这些可视化来debug模型的问题,从而获得更好的结果,例如改进Krizhevsky等的令人印象深刻的ImageNet 2012结果。然后,我们通过一系列遮挡实验证明,该模型虽然只是分类训练,但对图像中的局部结构也非常敏感,并且也对相应图像块做了实验。对模型的消融研究表明,网络(而不是任何单个部分)的最小深度对于模型的性能至关重要。最后,我们展示了ImageNet训练模型如何能够很好地泛化到其他数据集。如果使用允许每个图像有多个对象的不同损失函数,我们的性能可能会提高。这自然会使网络也能够解决对象检测问题。

参考:

https://github.com/bigcindy/ZFNet

ZF Net 阅读笔记(部分翻译)相关推荐

  1. 深度学习超分辨率综述阅读笔记(翻译)

    深度学习超分辨率综述阅读笔记(翻译) https://arxiv.org/abs/1902.06068 摘要:图像超分辨率(SR)是计算机视觉中增强图像和视频分辨率的一类重要图像处理技术.近几年来,图 ...

  2. 2020 AAAI-GMAN: A Graph Multi‐Attention Network for Traffic Prediction阅读笔记(翻译)

    注明:本文仅是翻译了论文,主要目的方便日后温故

  3. Lifelong Localization in Semi-Dynamic Environment阅读笔记(翻译)

    半动态环境下的终身定位 摘要 非静态环境中的映射和定位是机器人技术的基本问题.以前的大多数方法主要关注环境中的静态和高动态对象,在半动态场景中可能会出现定位失败,而不考虑动态性较低的对象,例如停放的汽 ...

  4. A Survey of Deep Learning-based Object Detection论文翻译 + 阅读笔记

    A Survey of Deep Learning-based Object Detection论文翻译 + 阅读笔记 //2022.1.7 日下午16:00开始阅读 双阶段检测器示意图 单阶段检测器 ...

  5. Object Detection in 20 Years A Survey-论文翻译(阅读笔记)

    Object Detection in 20 Years A Survey论文翻译(阅读笔记) 原文地址:[1905.05055] Object Detection in 20 Years: A Su ...

  6. 基于神经网络的知识图谱问答方法 阅读笔记+翻译

    2019-arXiv-Introduction to Neural Network based Approaches for Question Answering over Knowledge Gra ...

  7. 《A Survey on Deep Learning Technique for Video Segmentation》视频分割综述阅读笔记(翻译)

    <A Survey on Deep Learning Technique for Video Segmentation>视频分割综述阅读笔记(背景部分翻译) 作者:Wenguan Wang ...

  8. PyramidBox 中文翻译及阅读笔记

    PyramidBox:一个环境辅助的单步人脸检测器 原文:Xu Tang 等. 2018. 文章目录 PyramidBox:一个环境辅助的单步人脸检测器 摘要 1 简介 2 相关工作 3 Pyrami ...

  9. CS231n官方笔记授权翻译总集篇发布

    CS231n简介 CS231n的全称是CS231n: Convolutional Neural Networks for Visual Recognition,即面向视觉识别的卷积神经网络.该课程是斯 ...

最新文章

  1. 搜狗产品类的职位—HR直招
  2. 《 Python树莓派编程》——第1章 树莓派简介 第1.1 树莓派的历史
  3. oracle4.0,OracleTM Application Server 4.0简 介
  4. aixs1 生成java代码_通过axis1.4 来生成java客户端代码
  5. 1-微信小程序开发(安装软件和运行第一个微信小程序)
  6. 利用URL重写跟踪Session(多学一招)
  7. Cmd Markdown编辑器简明语法手册
  8. Windows Workflow HOL学习笔记(十二):创建状态基工作流
  9. 通过程序得到数据库表之间的关联关系
  10. 超漂亮的CSS3按钮制作教程分享
  11. Windows 10 64位系统中安装加密狗驱动出现the returncode is 3003错误的解决方法
  12. Docker 配置镜像加速器
  13. 软件写注册表设置开机自启动
  14. HCIP-三层网络架构实验
  15. 温度传感器MLX90614的STM32驱动实现
  16. 如何提高信号发生器(信号源)测量时的幅度精度
  17. Android-AhMyth Rat
  18. 第二篇数模论文——垂钓问题
  19. Java随笔记录第三章:数组
  20. python中多行语句可以用反斜杠来实现_Python中的多行语句可以使用反斜杠来实现...

热门文章

  1. 让这些电影治愈你(转)
  2. 【毕设记录】Stata稳健性检验~ Robustness
  3. vs2019配置opencv教程
  4. 计算机视觉与深度学习 学习笔记【二】分类器设计
  5. 现代化医院设计如何满足以人为本和不同人群不同层次的要求
  6. Java sdut acm 2562 相似三角形
  7. 总是留不住客户怎么办?这三点每多做一点,回头客翻一倍!
  8. 从零搭建自己的SpringBoot后台框架(一)
  9. flask程序部署到heroku平台的过程
  10. 什么是API?(看完你就理解了)