深度学习可视化解释的显著性map学习笔记
(1)CAM(Classification Activation Mapping,类激活图)。目的在于定位出图像上的哪些区域帮助CNN完成了图像的分类。 普通的CNN网络,一般分成特征提取和特征分类两大模块,CAM的实现为对输出的特征进行GAP(Global Average Pooling),得到数量等于输出channel数的一个向量。后面再接一个全连接层,输入神经元数量等于feature的channel数,输出神经元的数量等于数据集的类别数。这样的网络训练完成图像的分类任务后,全连接层的权重向量的含义就表示各个channel的feature对于目标分类的贡献度。那么就可以权重值乘以对应feature,全部相加之后上采样到输入图像的大小,叠加到输入图像上定位出图像的当前分类主要取决于哪一区域。
(2)GradCAM:特征图可视化为类激活图。Grad-CAM根据输出向量,进行backward,求取特征图的梯度,得到每个特征图上每个像素点对应的梯度,也就是特征图对应的梯度图,然后再对每个梯度图求平均,这个平均值就对应于每个特征图的权重,然后再将权重与特征图进行加权求和,最后经过relu激活函数就可以得到最终的类激活图。 可见GradCAM与CAM的区别在于获取权重的方式不同。
参考博客: https://blog.csdn.net/weixin_41735859/article/details/106260812; CAM实现的流程(pytorch)_景唯acr-CSDN博客_cam算法; Grad-Cam实现流程(pytorch)_景唯acr-CSDN博客_grad-cam; PyTorch的hook及其在Grad-CAM中的应用_TensorSense的博客-CSDN博客; PyTorch的hook及其在Grad-CAM中的应用
(3)Smooth Integrated Gradients:平滑积分梯度,解决梯度存在饱和的问题(可以参考pytorch的captum可视化工具)
github实现可视化的参考代码如下: https://github.com/utkuozbulak/pytorch-cnn-visualizations https://github.com/hs2k/pytorch-smoothgrad 参考博客: Integrated Gradients:打开深度模型的黑箱
(4)Guided-backprop:引导反向传播。反向传播和反卷积最大的区别在于,数据通过ReLU时的处理方式不同。反向传播中,输入大于0的位置的梯度得以保留;反卷积中,输出大于0的位置的信息得以保留。Guided-Backpropagation则是反向传播和反卷积的结合,只保留输入和输出都大于0的位置的梯度。 Guided-Backpropagation是在普通反向传播的基础上阻止了小于0的梯度的反传,输出相对于输入的梯度小于0,说明两者是负相关的,说明梯度小于0部分对应的输入阻止了得到正确的输出。那么反传的时候不传输这部分的信息,就有助于我们找到有助于得到正确输出的输入部分。
参考博客: 模型解释 – Guided-Backpropagation、CAM、Grad-CAM、Grad-CAM++ 及 pyTorch Hook
结果对比
|