对Visualizing and Understanding Convolutional Networks的一些理解

本文通过引入CNN网络的可视化技术分析AlexNet网络结构,主要告诉我们CNN的每一层到底学习到了什么特征,让我们在调参、改进网络结构的时候提供一定的参考。

CNN网络性能的显著提高,得益于三个因素:(1)大量的带标注的训练数据。(2)GPU算力,使得训练大的模型可以实现。(3)更好的正则化方法来防止复杂模型的过拟合,使模型具有更好的泛化能力,比如Dropout。

一、利用反卷积实现特征可视化

以AlexNet为例,为了解释CNN的每一层都学习到了什么特征,论文通过反卷积的方法,进行可视化。(反卷积网络可以看成是卷积网络的逆过程。反卷积网络在文献《Adaptive deconvolutional networks for mid and high level feature learning》中被提出,是用于无监督学习的。)

反卷积可视化以各层得到的特征图作为输入,进行反卷积,得到反卷积结果,用以验证显示各层提取到的特征图。Eg:假如你想要查看Alexnet的conv5提取到了什么东西,我们就用conv5的特征图后面接一个反卷积网络,然后通过:反池化、反激活、反卷积,这样的一个过程,把本来一张13*13大小的特征图(conv5大小为13 * 13),放大回去,最后得到一张与原始输入图片一样大小的图片(227 * 227)。

在这里插入图片描述

网络的整个过程,从右边开始:输入图片->卷积->Relu->最大池化->得到结果特征图->反池化->Relu->反卷积。

二、CNN学到了什么?

在这里插入图片描述
网络特征的层级特性:从layer 1、layer 2学习到的特征基本上是颜色、边缘、轮廓等低层特征;layer 3则具有更多的不变性,捕获了一些纹理特征,比如一些网格纹理;layer 4学习到的则是比较有区别性的特征,显示了类别的重要差异;layer 5则开始关注目标整体。这形成了对于神经网络的认识,底层网络专注于识别低级特征,更高层网络通过对下层低级特征的组合抽象形成更高级的特征。也就是说层数越高,所提取的特征越抽象

特征学习的过程:在网络训练过程中,每一层学习到的特征是怎么变化的,经过一定次数的迭代之后,底层特征趋于稳定,但更高层特征要更多次迭代才能收敛。

三、对AlexNet的改进

通过可视化Alex-net网络的第1,2层,发现了两个问题:

问题1:第一层filter是非常高频和低频的信息,中间频率的filter很少覆盖

问题2:第二层的可视化出现混叠现象,由于第一层步长比较大,产生大的间隔。

为了解决这个问题:

  • 减小第一层的filter的尺寸从11 * 11到7 * 7
  • 缩小间隔,从4变为2。

这两个改动形成的新结构,获取了更多的信息,而且提升了分类准确率。

四、通过遮挡信息得出的一点结论

对于图像分类方法,一个自然的问题是,模型是真正地识别了图像中物体的位置,还是仅仅使用了周围的环境。研究图片内部哪个区域产生的作用最大,所以进行了遮挡实验。本文通过一个灰色方块,遮盖物体的不同位置,然后监控分类器的输出。最后结果证明模型识别了图像中物体的位置。

五、实验得出的一些结论

  1. 较小的stride(2 vs 4)和过滤器大小(7x7 vs 11x11)会产生更明显的特征和更少的死特征。
  2. 作者进行了网络结构尺寸调整实验。去除掉包含大部分网络参数最后两个全连接层之后,网络性能下降很少;去掉中间两层卷积层之后,网络性能下降也很少;但是当把上述的全连接层和卷积层都去掉之后,网络性能急剧下降,由此作者得出结论:模型深度对于模型性能很重要,存在一个最小深度,当小于此深度时,模型性能大幅下降。
  3. 改变全连接层的大小对结果影响不大。
  4. 增加中间卷积层的大小可以有效地提高性能。但是,在扩大全连通层的同时,增加这些值会导致过拟合。

六、特征的泛化能力

作者固定了原来网络的权值,只是使用新数据训练了softmax分类器,效果非常好。这就形成了目前的人们对于卷积神经网络的共识:卷积网络相当于一个特征提取器。特征提取器是通用的,因为ImageNet数据量,类别多,所以由ImageNet训练出来的特征提取器更具有普遍性。也正是因为此,目前的卷积神经网络的Backbone Network基本上都是Imagenet上训练出来的网络。

七、一些想法

  1. 在构建CNN模型时,模型深度十分重要,但是当模型很复杂时,会导致过拟合,所以不宜太深。
  2. CNN的卷积核大小和步长不应该过大,过大可能会造成提取到的特征混叠的现象。
  3. 使用预训练模型时,底层的特征更具有通用性,而上层的特征与任务和具体训练数据集更相关,所以我们使用预训练模型时,应该避免使用高层信息。
  4. 使用预训练模型时进行fine-turning很重要,因为上层的特征通过训练变化较大,所以需要根据具体任务进行fine-turning以适应自己的任务,而低层的特征更具通用性,训练的时候,会很快收敛。

参考资料

1.论文阅读笔记:Visualizing and Understanding Convolutional Networks
2.Visualizing and Understanding Convolutional Networks

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值