卷积神经网络可视化理解

文章目录

  • 设计来源
  • 可视化第一层卷积核
  • 可视化第一层featuremap
  • 底层特征可视化
  • 隐层featuremap可视化
  • 遮挡、扰动实验
  • Gradient Ascent、feature inversion
  • DeepDream
  • 反卷积可视化

设计来源

看了CS231的课程,想自己尝试做下可视化,权当加深对卷积神经网络的理解吧。

可视化第一层卷积核

课程:
课程里提到第一层卷积一般做的是传统视觉的工作,主要提取一些有向边,可视化卷积核的原因是类似模板匹配的思想啥的,具体我也没有深究。我自己的看法是,可视化卷积核,权重大的位置说明该点对输出激活影响大,第一层卷积恰好对应图像的三个颜色通道,因此直接可视化卷积核可以反应该个卷积操作主要寻找的特征。
实践:
我用pytorch官方的Resnet50预训练模型、voc2007的一些图片做测试实验,可视化第一层64个7x7x3的卷积核,如下图所示。
卷积神经网络可视化理解_第1张图片
可以看到,跟课程里讲的类似,大部分卷积核都关注有向边,或者一些颜色通道(上图就有一些红色、绿色、蓝色,反应这些卷积核主要关注哪些通道)
课程也提到中间层的卷积核看不出什么信息(不是直接对原始图像操作),中间层的我也没去做。

可视化第一层featuremap

按照卷积核可视化理解,可视化第一层featuremap会发现一些有趣的现象(我这里实际可视化的是relu之后的层,查看激活部分)

右侧是原图,左边一共64个feturemap分别对应每个卷积操作的输出结果(截图没有全部显示64个),可以看到上面卷积核可视化中,第二个卷积核比较关注绿色通道的特征,从上图第二个featuremap里也能看出主要激活了原图绿草部分。
再比如下图,从卷积核可视化中,第四行第六列(第24个卷积核)主要关注棕红色,而对应的featuremap中,基本只激活了棕红的飞机头那部分。

也可以看到,大部分卷积核都在关注一些有向边,比如横线、竖线、斜线等等,下图看起来就比较明显。这个比较好理解,opencv的canny、sobel等轮廓提取算子也是特定卷积操作的结果嘛。

底层特征可视化

大概的观点就是说同类别的对象在模型底层特征向量是接近的,这个也比较好理解,最后一层接的是输出,模型已经训好的情况下,同类别图像类别输出基本都一致,最后一层特征肯定也是相近的。特征空间降维可视化还不想花时间去做。。

隐层featuremap可视化

课程:
课程里提到中间层featuremap可以提取对最终分类有用的特征,对某个featuremap,通过测试大量图像后对激活值进行排序后选取高激活的,映射回原图后(按感受野范围)可以发现该featuremap主要寻找的特征。
测试:
对Resnet50的较深层进行测试,该层输出维度是【N,1024,14,14】(对应下图源码处layer3),即1024个featuremap。记录voc2007的2000多张图各自的1024个featuremap,然后对每个featuremap,选取激活值最高的8张图片,作为每个featuremap学习的特征参考。(这里没有按课程的感受野大小,把高激活值映射到原图相应图像区域,因为我算了一下,这一层感受野已经超过原始输入大小了,所以直接使用原图)

卷积神经网络可视化理解_第2张图片
这里选几个特征明显的,效果如下。
卷积神经网络可视化理解_第3张图片
卷积神经网络可视化理解_第4张图片

卷积神经网络可视化理解_第5张图片

卷积神经网络可视化理解_第6张图片
一些可以基本分析出该个featuremap主要寻找的特征,不过在1024张图中,发现大部分结果都比较难以分析,也许本身深层特征本身就比较抽象了,或者毕竟pytorch resnet50预训练训的数据集并不是voc数据集,特征学习的目标不一样。

遮挡、扰动实验

Gradient Ascent、feature inversion

DeepDream

反卷积可视化

介绍链接

待更新。。

你可能感兴趣的:(深度学习)