CNN笔记(CS231N)——网络可视化与理解(Visualizing and Understanding)

网络可视化与理解

神经网络对于我们来说就像一个黑盒子,我们有一对输入输出就能对网络进行训练,而不知道内部究竟发生了什么,于是一些研究者开始研究网络内部究竟学习到了什么特征。以下就是一些常用的网络在第一层的卷积核,代表在输入图像中寻找类似的特征,例如边、角、特定方向的线等等

由于网络第一层的卷积核深度是3维的,因此我们可以将其作为RGB图来看待,而对于深层的网络,卷积核深度不止是3维,那么我们只能将其作为灰度图处理,对于高维特征,我们可能就比较难看出它在原图中寻找什么东西了,因为它是许多低维特征的集合

对于网络的最后一层的特征往往就是一副图像整体的特征,如果我们对于一副测试的图片,寻找在特征空间最相近的图,那么我们一般能得到同一类的物体

为了更好地理解这些特征,我们可以利用降维将最后一层的特征图降维至二维特征图

如果我们把在图像按其在二维特征位置进行排布,那么我们可以得到以下结果,我们可以看出色调偏绿的图像都集中在了左下角,偏蓝的图像都集中在了右上角,这也意味着网络确实学习到了图像中的某些特征,并能利用特征进行分类

如果我们取网络中某一层某一个特征图的某一个特定神经元比较大的值,那么它会对应一个作用域,如果我们将这个作用域对应在原图的部分取出来,我们会发现这些部分是类似的,原因就是这个神经元是在图像中寻找某些特定的特征

除此以外我们还能做遮挡实验,将一副图像进行遮挡,然后观察最后分类值的变化

为了求得不同像素对图像分类的影响,我们可以求显著图,也就是改变一个像素点,看其对分类结果有多大的影响(实际的方法是求出分类输出值对每个像素的梯度),然后将这些点用二值化图标注出来

我们不仅可以求最终分类值对每个像素的梯度,还可以求某个神经元对作用域内所有像素的梯度,代表着像素对神经元输出值的影响程度

为了进一步观察CNN的特征,我们还可以人工生成一幅图像,然后求出当某个神经元输出值最大的时候,这幅图像长什么样。具体的方法是应用梯度上升:输出函数是某个神经元的输出值加上正则项,求出它对每个像素的梯度,然后按梯度上升的方向改变像素的值。正则化的作用是使得图像能更加像真实的图

以下是具体步骤

如果我们最大化最终的分类值,可以得到以下结果,我们可以看到图像确实具有一些该分类的形状


 

为了取得更好的可视效果,我们还可以通过高斯滤波器进行模糊处理

如果我们把中间层的神经元作为输出值也能得到类似的结果

如果我们不完全让机器自动生成图片,而是增加一些多实例的先验信息,能获得更好的效果

另外我们还可以求出一副图像的分类,然后改变像素值,最大化其他分类的值,我们期望的是图像能够由一个分类变为另外一个分类

但事实却并不如此,最终结果却是两幅图像看起来差不多,但被修改的图已经被分为另外一类,具体原因我们下一个博客再讲

另外我们不得不提的是谷歌的DeepDream计划,它不是从头人工合成一副图片,而是根据一副已有的图片进行修改,来使得某个神经元输出最大

最后得到如下的效果,我们可以看到有很多新的图案从原图中出来了,而这其中很多是狗的图案,原因就是这个网络是在ImageNet上进行训练的,而ImageNet有很大一部分训练集都是狗的图像,神经元记住了狗的很多特征,因此会有这样的效果

我们可以反复最大化不同的神经元,取得很酷炫的效果

为了介绍我们接下来要说的风格转换,我们先要介绍两种算法:特征反演与纹理生成。特征反演与上述方法不同,这种方法针对某个特定特征,会寻找一副图像,使得其特征向量与给定的特征向量距离最小

以下是这种方法的结果

纹理合成是计算机视觉中一个经典的算法,随着深度学习的发展,我们也有了更好的解决方案,我们取某一层网络中纵向的两个向量,每个向量代表同一个位置的不同特征,再将这两个向量相乘一个矩阵

我们两两遍历特征图中的向量,再取平均值,得到的矩阵叫做Gram矩阵,由于我们的矩阵是所有位置的向量相乘取平均的结果,因此我们消除了空间位置信息,保留了特征之间的相关关系(特征数为C)

人工纹理合成算法与特征反演不同的地方就在此。特征转换的目标是让两个图像的特定层特征最相似,而人工纹理合成是将特征转换为Gram矩阵,然后使得两张图像Gram矩阵最相似。在实际应用的过程中,我们往往会将多层网络的Gram矩阵相似性都考虑进最终结果

我们可以看到这两种方法结果的对比,如果说特征反演是保留图像的内容,那么纹理合成就是保留图像的风格。

结合了以上两点我们就能做风格转换了

我们的损失函数就是两种方法的损失函数加权相加

其中有很多参数供我们调整来取得不同的效果

但是这种方法的计算速度太慢,解决方案就是重新训练一个网络来进行风格转换

我们可以训练特定的网络来生成特定风格的图像,训练的损失函数与之前相同,这样当我们的网络训练好以后,每次生成图像只需要做一次前项传播即可,尽管这种方法训练时间长,但是大大加快了生成速度

以上的方法对于新的风格就要训练新的网络,最新的研究成果已经能只用一个网络就能生成多种风格的图像

以下是本讲总结

猜你喜欢

转载自blog.csdn.net/shanwenkang/article/details/87297221