众所周知,卷积神经网络在图像处理方面表现突出,但是在很多情况下,我们在调神经网络的参数时只是依靠运气,并不知道自己对参数和网络结构的调整会影响神经网络的哪一部分。因此这篇文献的目的就是让我们通过一种可视化的方法来了解卷积神经网络如何工作,以及每一层的特征。
首先,作者使用了传统的CNN模型,在此基础上对进行研究。 作者利用反卷积网络来了解中间层的特征作用,实现可视化。模型中的每一个卷积层都对应着一个反卷积层,反卷积层的过程可以看做卷积层的逆过程。我们把每层卷积得到的结果作为输入放到卷积层中,进行以下操作:
unpool (反池化) 池化操作是不可逆的,因此文章采用了一种近似的方法,在池化过程中记录了最大值的位置,并在反池化时利用,将最大值放在记录所在的位置,其他的值由于不可知则全部设为零。rectify(矫正) relu函数本身的作用就是保证输出大于等于0,因此逆过程中也可以使用relu函数,不用做修改。filter(反卷积) 用正向过程中的卷积核的转置(水平和垂直方向都翻转)作为卷积核来进行卷积。注:由于反池化的是一个近似的方法,重构的图片看起来会不连续,类似于原始图像的一小部分,其结构根据其对特征激活的贡献而加权。 下图即为可视化网络的结构:
训练模型上与传统的CNN很相似,比较不一样的是传统CNN在3、4、5层采用稀疏连接,但是本文采用了稠密连接,并且对1、2层进行了改进,将第一层的卷积核的大小从11×11调整为7×7,第二层的卷积跨度从4调整到2,原因在3.3解释。 训练集选用ImageNet2012,截取每张图片中心256×256的区域,并减去整张图颜色的均值,最后再用滑动窗口截取10个的224×224大小的图片。 更新参数采用最小批量为239的随机梯度下降,学习率0.01,动量系数0.9,当误趋于收敛时,逐渐调小学习率。在全连接层(第6、7层)使用dropout策略,系数选用0.5。所有权重初始化为0.01,偏差初始化为0.
有了可视化技术之后,我们就可以在网络训练完毕之后,利用反卷积网络查看各层的特征了。那么我们可以从中观察到什么呢
通过卷积网络可视化,我们对每层的特征进行了观察,结果如下图,其中右边为原图,左边为重构得到的图: 以上我们可以发现,第一二层提取到的特征都是外形、轮廓等特征,随着层数增加,提取到的特征渐渐具体,第四层定位到了具体物体,到了第五层,甚至能够单独捕捉够的鼻子。 因此我们可以地得出结论,层数越深,所提取的特征越关注局部。
下图展示了在训练过程中,每层的特征是如何随着一次次迭代进行变化的。 每张图片中的8张小图片分别代表迭代1、2、5、10、20、30、40、64次的特征图。 从上图我们可以看出,浅层的特征收敛的速度非常快,而深层的特征则需要更多的迭代次数才能收敛。这告诉我们需要训练足够多的次数,等到每层的特征都收敛,分类器才能够有较好的效果。
利用可视化技术观察传统的CNN模型,我们可以发现模型存在的一些缺陷。 a图为层1输出的特征(未经尺度约束操作),可以看到有一个特征巨大,b图为传统CNN第一层产生的特征,c图为本模型第一层产生的特征,d为传统CNN第二层产生的特征,e图为本模型第二层产生的特征。
发现的问题:
出现巨大特征第一层卷积核混杂大量高频和低频信息,中频信息很少第二层由于卷积跨度过大,产生混乱无用特征改进方法:
将均方根大于0.1的卷积核重新归一化将第一层的卷积核的大小从11×11调整为7×7第二层的卷积跨度从4调整到2改进后的模型的错误率下降了0.5%
起因:我们想要了解分类器究竟利用那些信息来进行分类? 是图像中对象具体的位置,还是根据图片的上下文信息? 图a为输入图片,并用一个灰色方块对图片进行了遮挡,图b为图片遮挡位置为第五层输出最强特征的影响,图c为最强特征投影成的像素图(黑框),图d为当前位置被遮挡后图片被分类正确的概率,图e为当前位置被遮挡后最后可能的分类。 以第一行举例,我们可以看到,当小狗的脸部被遮挡时,分类的正确率急剧下降,最后分类可能会变成网球。 当关键区域被遮挡,分类器性能急剧下降,这反映了输入什么样的刺激,会促使系统产生特定输出特征。 因此我们可以得出模型可以真正的识别图像中对象的位置,而不是靠图像中的上下文来判断。
实验先是按照传统CNN构造了模型,与其作者错误率的误差在0.1%以内,接着按本文内容对其进行了改动,使错误率降低了105%
如下图所示,本文通过改变模型结构来看结构会对结果有什么影响。
删除其中一两层:影响不大删除所有中间卷积层:分类能力急剧下降改变全连接层节点个数:影响不大扩大卷积层节点个数:分类能力有一定提高,但会导致过拟合为了测试模型的特征泛化能力,本文采用了一种方法:不改变1~7层的参数和结构,只对softmax进行训练。 结果都如同上图所示,重新训练的准确度都不高,但是经过ImageNet预训练的网络比历史最好成绩还要好。 这说明了预训练可以有效提高准确率。
实验方法:保留前n层网络,在后面接上SVM分类器,实验结果如下图: 可以看出svm同样适用于此模型,并且模型的层数越多,分类效果越好,这说明了模型层数对模型的重要性,层数越多,模型学习到的特征越多,分类器表现越好。