feature map可视化学习记录

一、简单可视化

任务背景:学姐让我做的。。。
任务内容:网络中间层feature map可视化。
初步思路:学学别人。
成果:找到了这篇文章。
https://blog.csdn.net/xz1308579340/article/details/85622579
之后应用他的代码在自己的二分类VGG16上运行。
feature map可视化学习记录_第1张图片feature map可视化学习记录_第2张图片
feature map可视化学习记录_第3张图片feature map可视化学习记录_第4张图片
上图为前三层(包括BN、ReLU等,不是卷积的前三层),随便拿的图。
简单示例,这部分不重要。因为基本就只是输出而已。

二、热力图版本

背景:学姐不满意。然后给我看了这个。
https://github.com/utkuozbulak/pytorch-cnn-visualizations
说她想让我做这个热力图的样子。

feature map可视化学习记录_第5张图片
我就去代码里读。关于Grad-Cam细节可以搜其他文章。我主要记录我的经验。大体算法可以描述如下:

  1. 输入图片到网络,不直接使用网络的forward,而是上层输出作为下层输入的方式计算。计算过程中使用register_hook用于记录梯度。另外还需要一个数据结构计算中间conv_output。
    2.利用ackward(gradient=output_it_should_have, retain_graph=True)得到梯度。这里output_it_should_have是一个理想状态下应有的输出结果。
  2. 对于第i层第j个feature map,将其对于的grad求平均。例如原本维度是55*55的grad,平均后为一个常数。这样一来。然后就得到了第i层每一个feature map的权重,对其加权求和,得到一个map代表该层结果,这个map就是CAM。
    4.将CAM和原图结合起来,然后输出。
    feature map可视化学习记录_第6张图片
    feature map可视化学习记录_第7张图片
    上图为某个模型某层可视化结果。深色区域表示网络关注的区域。以此可以判断模型好坏,作为调试依据。

三、其他方法

中间还尝试过这个。
https://blog.csdn.net/weixin_40500230/article/details/93845890
这个大体上是在第一部分那种的基础上,把黑白的feature map处理,变成heatmap。不过没有梯度加权,不如第二部分的Grad_CAM。

四、进一步学习

这部分内容是在第二部分基础上的。主要补充如下:

1.用crop加overlay的方式切割,求激活图,再重新拼接。效果更好。

2.heat map中色调越冷,数值越高。

feature map可视化学习记录_第8张图片
最后附一张用了crop的图片。

你可能感兴趣的:(feature map可视化学习记录)