博客地址:https://1nnoh.top/2EQN5PQ/
版权: 本文由【1nnoh】原创 各位大佬敬请查阅
声明: 本博文禁止转载 感谢尊重和理解
❤️ 如果文章对你有帮助 欢迎一键三连
网络结构:在 AlexNet 的基础上,对卷积核、步长等做了一些调整
后文会提到为什么要对 AlexNet 做以上修改,以及修改的根据是什么。
如图,对于想要可视化的中间层(由卷积、激活、池化获得的),执行反池化、反激活、反卷积操作,重构回原始输入的特征空间,获得人类可以理解的特征(图片)。
池化操作是用的 MaxPooling,将最大值保留。
那么如何反池化呢?
仍然使用 ReLU 激活函数。
使用原来正向卷积的卷积核的转置(行列互换)。
转置卷积没有需要学习的参数,是一个完全无监督的过程。
什么叫卷积核激活最大?
Feature Map:
Feature Map(特征图)是输入图像经过神经网络卷积产生的结果,表征的是神经空间内一种特征;其分辨率大小取决于先前卷积核的步长。层与层之间会有若干个卷积核(Kernel),上一层中的每个 Feature Map 跟每个卷积核做卷积,对应产生下一层的一个 Feature Map。
Feature Map 的含义在计算机视觉领域基本一致,可以简单译成特征图,例如 RGB 图像,所有像素点的 R 可以认为一个 Feature Map(这个概念与在 CNN 里面概念是一致的)。
彩色图:从原始数据集找出的,能使特定层的某些卷积核激活最大的九张图片(九张为一组)。
灰色图:将九张图片 feed 到网络中,随后从特定层找到其 Feature Map,然后使用反卷积的技巧重构回原始输入像素空间得到的可视化图片。
图中上面的 3*3 的图是第一层卷积核,(1, 1) 对应着下图左上角的 9 个 Patch,其他的以此类推。可见 (1, 1) 卷积核主要提取左上角到右下角的边缘特征,(3,2) 卷积核主要提取绿色的特征,可见第一层卷积层主要提取边缘、颜色这种底层特征。
可以看到卷积核开始提取晚霞色、圆环、垂直的线等等的形状特征。
左侧灰色图与右侧的彩色图一一对应,灰色图有颜色的位置即代表像素被还原回去的位置,可以发现是可以与彩色图里的特征形成对应,也可视化了该层的 Feature Map 到底是提取到了怎样的特征。与第一层的特征相比好像高级了一些。
可以发现,到了更深的层时,提取到的特征更加复杂、高级,或者说更富有语义信息。
该层提取到了车轮、人体形状、文字等等的一些特征。
第四层提取到了比如狗脸、鸟腿、其他动物的腿的一些特征。
第五层甚至提取到了草地的背景特征(而非前景特征),以及眼睛的特征。
而且相比于其他卷积核,他们的彩色图片基本有一定的相似性,但如下提取草地背景的卷积核的彩色图片可以说是有较大差异的。
可见随着卷积层的变深,所提取到的特征更加高级,更加富有语义性。
灰色图依然从数据集中挑选出来激活最大的 Feature Map,然后使用反卷积重建出在原始像素图片中可视化的结果。图中每一层(Layer 1,Layer 2…)的一列是挑选出的数个卷积核,一行是该卷积核随着训练迭代的变化。可以看到低层的卷积核很快收敛,高层的卷积核在刚开始的训练过程中提取不到特征,要训练多轮才可以收敛并提取到特征。
对原图做平移、缩放、旋转,对某一层的 Feature Vector(由 Feature Map 拉直获得)的变化,使用变化前与变化后的 Vector 的欧氏距离来度量。
做平移时,第一层的卷积核比较敏感,Feature Vector 变化较为剧烈,而第七层的卷积核呈现出较为缓慢的类似于线性的变化,说明该层已经不是那么注重于表面的特征变化,而是更加关注高级的语义信息。
做旋转时,图像每旋转 90 度,准确率会出现一个峰值,说明了对称性,当某些特征(比如电视机)是对称,或者翻转过去,依然呈现为正的一个长方形时,网络是可以捕获到这种信息的。
通过对 AlexNet 的第一层与第二层的卷积核做可视化,发现存在一些卷积核失效,或者是由于步长过大,出现混淆网格样式的卷积核,基于此,本文对卷积核大小以及步长做了一定调整,并改善了以上发现的问题。
对步长以及卷积核大小做了修改之后,第一层卷积层中失效的卷积核变少了。
对步长以及卷积核大小做了修改之后,第二层中混乱网格的卷积核去除了。
用一个小灰方块在图像上进行遮挡,并分析该遮挡对 Feature Map 与预测结果造成的影响,探究了网络对遮挡的敏感性。
第三列黑框中的是未经遮挡时的第五层 Feature Map 重构的可视化,黑框之外的三个是同样可以使得激活最大的其他三个无关的图片。
第二列是灰色挡板在不同位置时,对各自获得的 Feature Map 叠加起来获得的热力图。当遮挡住重要信息(当前层主要提取的特征,如狗脸、文字、人脸)时,Feature Map 中相应的值自然会降低,在热力图中呈现为蓝色。从而验证了神经网络对遮挡的敏感性。
如果对不同的图片(狗)遮挡住同一位置(左眼、右眼、鼻子等),对网络的影响是一样的,那么说明网络对于各种狗脸图像中的左眼、右眼、鼻子的部位定义了一种隐式相关性。
如何验证呢?
我们将遮挡前与遮挡后不同层的 Feature Vector 做一个差值 ϵ \epsilon ϵ,探究遮住同一部位,与随机遮住某一部位时,该差值 ϵ \epsilon ϵ 所反映的不同变化。若五张图(狗脸)都遮住左眼,他们的 FV 差值(对网络造成的影响)是接近的,那么说明遮住左眼对于这些图的影响是近乎一样的(虽然图中的狗脸不一样)。表中数据是用 △ l \bigtriangleup_l △l 作为衡量标准,这个指标反映了在不同图像中遮挡同一部位对第 l l l 层网络提取得到的 Feature Map 的影响程度,越小说明影响是相同的。这里会难理解一些,配合论文里的公式、计算方法与解释会更好理解。
还有一点要注意的是,随机遮挡时,第五层的影响是较大的,但到第七层时,影响变小了一些,说明更加深层的网络更加关注高级的语义信息,而不仅仅是表面的一些变化。
与 AlexNet 相比,改进后的模型获得了较大的提升。
上面一栏是对 AlexNet 做的一些实验:
前五行:去掉少量卷积层或者全连接层对于错误率的影响是不大的,但如果同时去掉(3,4,6,7)层的卷积与全连接,会有较大的影响。说明网络的深度对于预测准确性的影响还是较为关键的。
七行:如果将 Layer 6, 7 的神经元个数设置的非常大会造成过拟合,可以看到 Train Top-1 的错误率为 26.8,但 Val Top-1 的错误率却达到了 40.0。
下面一栏有关本文的一些实验,可以看到在验证集达到了一个最低的错误率。
探究在 ImageNet 上训练的 ZFNet 能否泛化到其他数据集,即进行迁移学习与微调。
在 ImageNet 上训练的 ZFNet 拿到 Caltech-101 数据集上,保留前面的层,只对 Softmax 分类层做重新训练,可以看到取得了比原作要好的效果。但如果只保留 ZFNet 模型结构,清除模型参数,在 Caltech-101 上重新训练网络,可以看到效果并不好。
在 Caltech 256 上也取得了远高于原作的效果。
有意思的是,每个类别只需要 6 张图片训练,就可以达到原作(每个类别 60 张)最好的效果。也就是说使用迁移学习,可以用很少的数据,就达到较好的性能,如果拥有更多的数据,就可以达到更好的性能。
但如果以同样的方式照搬到 PASCAL 数据集,其实效果没那么好,因为这个数据集中每张图片有多个物体,而 ImageNet 与前两个数据集都只有一个物体(是相似的)。因此在不同情况的数据集上,对损失函数等做一些调整,才会达到不错的效果。
全连接层起到线性分类器的作用,SVM 或者 Softmax 同样可以起到分类的作用。在实验中可以看到,越深的层对分类结果起到越发有效的作用。
ZFNet 提供了可视化卷积模型中间层的技巧,使用反卷积、反池化、反激活将中间层的 Feature Map 重构到原始输入图像的像素空间,变成人类可以理解的图像。并且提供了很多有趣的实验方法,比如分析局部遮挡的敏感性与相关性,基于可视化结果优化模型结构,做迁移学习的实验方法等等。是很有启发性的一篇优秀论文。也感谢子豪兄的讲解。