feature map可视化学习记录
一、简单可视化
任务背景:学姐让我做的。。。
任务内容:网络中间层feature map可视化。
初步思路:学学别人。
成果:找到了这篇文章。
https://blog.****.net/xz1308579340/article/details/85622579
之后应用他的代码在自己的二分类VGG16上运行。
上图为前三层(包括BN、ReLU等,不是卷积的前三层),随便拿的图。
简单示例,这部分不重要。因为基本就只是输出而已。
二、热力图版本
背景:学姐不满意。然后给我看了这个。
https://github.com/utkuozbulak/pytorch-cnn-visualizations
说她想让我做这个热力图的样子。
我就去代码里读。关于Grad-Cam细节可以搜其他文章。我主要记录我的经验。大体算法可以描述如下:
- 输入图片到网络,不直接使用网络的forward,而是上层输出作为下层输入的方式计算。计算过程中使用register_hook用于记录梯度。另外还需要一个数据结构计算中间conv_output。
2.利用ackward(gradient=output_it_should_have, retain_graph=True)得到梯度。这里output_it_should_have是一个理想状态下应有的输出结果。 - 对于第i层第j个feature map,将其对于的grad求平均。例如原本维度是55*55的grad,平均后为一个常数。这样一来。然后就得到了第i层每一个feature map的权重,对其加权求和,得到一个map代表该层结果,这个map就是CAM。
4.将CAM和原图结合起来,然后输出。
上图为某个模型某层可视化结果。深色区域表示网络关注的区域。以此可以判断模型好坏,作为调试依据。
三、其他方法
中间还尝试过这个。
https://blog.****.net/weixin_40500230/article/details/93845890
这个大体上是在第一部分那种的基础上,把黑白的feature map处理,变成heatmap。不过没有梯度加权,不如第二部分的Grad_CAM。