用反卷积(Deconvnet)可视化理解卷积神经网络还有使用tensorboard

『cs231n』卷积神经网络的可视化与进一步理解

深度学习小白——卷积神经网络可视化(二)

TensorBoard--TensorFlow可视化

原文地址:http://blog.csdn.net/hjimce/article/details/50544370

做者:hjimcehtml

1、相关理论算法

本篇博文主要讲解2014年ECCV上的一篇经典文献:《Visualizing and Understanding Convolutional Networks》,能够说是CNN领域可视化理解的开山之做,这篇文献告诉咱们CNN的每一层到底学习到了什么特征,而后做者经过可视化进行调整网络,提升了精度。最近两年深层的卷积神经网络,进展很是惊人,在计算机视觉方面,识别精度不断的突破,CVPR上的关于CNN的文献一大堆。然而不少学者都不明白,为何经过某种调参、改动网络结构等,精度会提升。可能某一天,咱们搞CNN某个项目任务的时候,你调整了某个参数,结果精度飙升,但若是别人问你,为何这样调参精度会飙升呢,你所设计的CNN到底学习到了什么牛逼的特征?(PS:以前领导一直鄙视我,要我解释CNN的每一层到底学习到了什么特征,解答不上来,被鄙视了一番,最后才去学了这篇文献)。网络

这篇文献的目的,就是要经过特征可视化,告诉咱们如何经过可视化的角度,查看你的精度确实提升了,你设计CNN学习到的特征确实比较牛逼。这篇文献是经典必读文献,才发表了一年多,引用次数就已经达到了好几百,学习这篇文献,对于咱们从此深刻理解CNN,具备很是重要的意义。总之这篇文章,牛逼哄哄。数据结构

2、利用反卷积实现特征可视化函数

为了解释卷积神经网络为何work,咱们就须要解释CNN的每一层学习到了什么东西。为了理解网络中间的每一层,提取到特征,paper经过反卷积的方法,进行可视化。反卷积网络能够当作是卷积网络的逆过程。反卷积网络在文献《Adaptive deconvolutional networks for mid and high level feature learning》中被提出,是用于无监督学习的。然而本文的反卷积过程并不具有学习的能力,仅仅是用于可视化一个已经训练好的卷积网络模型,没有学习训练的过程。post

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

一、反池化过程spa

咱们知道,池化是不可逆的过程,然而咱们能够经过记录池化过程当中,最大激活值得坐标位置。而后在反池化的时候,只把池化过程当中最大激活值所在的位置坐标的值激活,其它的值置为0,固然这个过程只是一种近似,由于咱们在池化的过程当中,除了最大值所在的位置,其它的值也是不为0的。恰好最近几天看到文献:《Stacked What-Where Auto-encoders》,里面有个反卷积示意图画的比较好,全部就截下图,用这篇文献的示意图进行讲解:.net

以上面的图片为例,上面的图片中左边表示pooling过程,右边表示unpooling过程。假设咱们pooling块的大小是3*3,采用max pooling后,咱们能够获得一个输出神经元其激活值为9,pooling是一个下采样的过程,原本是3*3大小,通过pooling后,就变成了1*1大小的图片了。而upooling恰好与pooling过程相反,它是一个上采样的过程,是pooling的一个反向运算,当咱们由一个神经元要扩展到3*3个神经元的时候,咱们须要借助于pooling过程当中,记录下最大值所在的位置坐标(0,1),而后在unpooling过程的时候,就把(0,1)这个像素点的位置填上去,其它的神经元激活值所有为0。再来一个例子:设计

 

在max pooling的时候,咱们不只要获得最大值,同时还要记录下最大值得坐标(-1,-1),而后再unpooling的时候,就直接把(-1-1)这个点的值填上去,其它的激活值所有为0。

二、反激活

咱们在Alexnet中,relu函数是用于保证每层输出的激活值都是正数,所以对于反向过程,咱们一样须要保证每层的特征图为正值,也就是说这个反激活过程和激活过程没有什么差异,都是直接采用relu函数。

三、反卷积

对于反卷积过程,采用卷积过程转置后的滤波器(参数同样,只不过把参数矩阵水平和垂直方向翻转了一下),这一点我如今也不是很明白,估计要采用数学的相关理论进行证实。

最后可视化网络结构以下:

 

网络的整个过程,从右边开始:输入图片-》卷积-》Relu-》最大池化-》获得结果特征图-》反池化-》Relu-》反卷积。到了这边,能够说咱们的算法已经学习完毕了,其它部分是文献要解释理解CNN部分,可学可不学。

总的来讲算法主要有两个关键点:一、反池化  二、反卷积,这两个源码的实现方法,须要好好理解。

3、理解可视化

特征可视化:一旦咱们的网络训练完毕了,咱们就能够进行可视化,查看学习到了什么东西。可是要怎么看?怎么理解,又是一回事了。咱们利用上面的反卷积网络,对每一层的特征图进行查看。

一、特征可视化结果:

总的来讲,经过CNN学习后,咱们学习到的特征,是具备辨别性的特征,好比要咱们区分人脸和狗头,那么经过CNN学习后,背景部位的激活度基本不多,咱们经过可视化就能够看到咱们提取到的特征忽视了背景,而是把关键的信息给提取出来了。从layer 一、layer 2学习到的特征基本上是颜色、边缘等低层特征;layer 3则开始稍微变得复杂,学习到的是纹理特征,好比上面的一些网格纹理;layer 4学习到的则是比较有区别性的特征,好比狗头;layer 5学习到的则是完整的,具备辨别性关键特征。

二、特征学习的过程。做者给咱们显示了,在网络训练过程当中,每一层学习到的特征是怎么变化的,上面每一整张图片是网络的某一层特征图,而后每一行有8个小图片,分别表示网络epochs次数为:一、二、五、十、20、30、40、64的特征图:

结果:(1)仔细看每一层,在迭代的过程当中的变化,出现了sudden jumps;(2)从层与层之间作比较,咱们能够看到,低层在训练的过程当中基本没啥变化,比较容易收敛,高层的特征学习则变化很大。这解释了低层网络的从训练开始,基本上没有太大的变化,由于梯度弥散嘛。(3)从高层网络conv5的变化过程,咱们能够看到,刚开始几回的迭代,基本变化不是很大,可是到了40~50的迭代的时候,变化很大,所以咱们之后在训练网络的时候,不要着急看结果,看结果须要保证网络收敛。

三、图像变换。从文献中的图片5可视化结果,咱们能够看到对于一张通过缩放、平移等操做的图片来讲:对网络的第一层影响比较大,到了后面几层,基本上这些变换提取到的特征没什么比较大的变化。

我的总结:我我的感受学习这篇文献的算法,不在于可视化,而在于学习反卷积网络,若是懂得了反卷积网络,那么在之后的文献中,你会常常遇到这个算法。大部分CNN结构中,若是网络的输出是一整张图片的话,那么就须要使用到反卷积网络,好比图片语义分割、图片去模糊、可视化、图片无监督学习、图片深度估计,像这种网络的输出是一整张图片的任务,不少都有相关的文献,并且都是利用了反卷积网络,取得了牛逼哄哄的结果。因此我以为我学习这篇文献,更大的意义在于学习反卷积网络。

参考文献:

一、《Visualizing and Understanding Convolutional Networks》

二、《Adaptive deconvolutional networks for mid and high level feature learning》

三、《Stacked What-Where Auto-encoders》

相关文章
相关标签/搜索