文章目录
- CAM( https://arxiv.org/abs/1512.04150)
- 算法原理
- Grad-CAM(梯度加权类激活映射)
- 算法原理
- Grad-CAM++
- ScoreCAM
- LayerCAM
目前深度学习网络的可视化可以分为:
- 可视化卷积核。
- 可视化特征图。
- 可视化激活热力图,也就是不同位置像素点对得出结果的影响程度。
网络的可视化——热力图
CAM( https://arxiv.org/abs/1512.04150)
奠定了深度学习网络可解释性的基石。
算法原理
如下图所示:下图上面是关于一个分类网络的一个训练过程,即输入一个原始图像,经过全卷积神经网络的训练,得到最后一个卷积层的卷积结果,这里为一个512通道14*14的卷积结果,经过全局平均池化GAP,对每一个通道求一个平均数(即得到512个平均数),这些平均数作为线性分类的权重进行加权求和,得到每一个类别的logit,经过softmax得到一个后验置信度,从而得到该特征中属于每一个类别的概率。视频讲解的时候,是假设有1000个类别。
其类激活热力图的计算是用平均数所对应的权重乘所对应的卷积层,描述了一种每一个卷积层对最后分类结果的重要程度,最后累加得到最后的结果为某一个类别所对应的热力图。
算法的缺点是必须要用GAP层替代全连接层进行重新训练,其相关改进为Grad-CAM。
- 在GAM的算法中,其卷积网络使用的都是全卷积,并没有进行池化,这是因为池化有一个重要的特点就是平移不变性(无论特征在图片什么位置都可以识别到),因此会丢失图像的位置信息,因此在CAM热力图中,不使用带池化的卷积神经网络。
- 全局平均池化:取代全连接层,减少参数量,防止过拟合。而且每个的GPA平均值间接代表了卷积层最后一层输出的每个channel,即每一个通道变成一个平均值。
- 缺点:①必须得有GPA层,否则得修改模型结构后重新训练;②只能分析最后一层卷积层输出,无法分析中间层;③仅限于图像分类任务。
machine learning ——> machine teaching
参考视频:点这里
Grad-CAM(梯度加权类激活映射)
Grad-CAM是一种深度学习的技术,用于了解输入图像的哪一些区域对于网络对特定类别的预测的重要性。Grad-CAM在保留深度模型架构的情况下提供了可解释性。
算法原理
在Grad-CAM中,正常的使用网络进行训练,假设预测的分类结果logit为
y
c
y^c
yc 则利用logit求梯度,如
∂
y
c
∂
A
i
j
k
\frac{\partial y^c}{\partial A^k_{ij}}
∂Aijk∂yc。对梯度的结果做GAP得到各自的权重,然后对权重与卷积神经网络最后一层做加权求和,通过Relu得到热力图。
Grad-CAM可以进行扩展:
其中Guied Grad-CAM=Guided Backprop(GBP)+Grad CAM,实现高分辨率+低分辨率,可以对特征区域进行像素的描绘。实现一个既有高分辨率、又具有类别判别性的可解释算法。
优点:
- 无需GAP层,无需修改模型结构,无需重新训练。
- 可以分析任意中间层。
- 数学上是原生CAM的推广。
- 细粒度图像分类、Machine Teaching。
Grad-CAM++
针对Grad-CAM图像中有多个同类别的区域只能画出一个区域问题以及不同位置的梯度值,GAP平均之后的影响是相同的问题。
使用二阶和三阶偏导数得到每一个位置的权重,每一个位置的权重不同,则不同位置对最后的权重w的影响也就不同。
ScoreCAM
针对Grad-CAM梯度饱和、梯度消失、梯度噪声;权重大的channel不一定对类别预测分数贡献大;只考虑从后往前的方向传播梯度,没有考虑到前向预测的影响的问题。
使用两个神经网络:对于一张原图,首先输入到第一个神经网络Phase 1 中,通过上采样得到多个原图大小的特征图(高分辨率);把这些特征图与原图做乘法得到对应特诊图的区域,把这些区域输入到CNN网络中,得到每一个特征区域的权重,把这些权重与前面高分辨率的特征图做线性组合,就可以得到高分辨的整个类别区域。
LayerCAM
针对深层生成的粗粒度热力图与浅层生成的细粒度热力图都不够精确的问题。
参考视频:点这里
pytorch-grad-cam:可以实现对分类、swim transformer、Faster-RCNN、YOLO5、语义分割的可视化等。