算法原理
这里以猫狗分类为例。
- 计算最后一层的Softmax输出中猫类概率
y
c
\ y^c
yc对最后一层特征图所有像素
A
i
j
\ A_{ij}
Aij的偏导数,即
其中,y是Softmax输出的概率向量,c是猫那一类的序号,A是最后一层卷积层输出的特征图,k是特征图的通道维度的序号,i和j分别是宽高维度的序号。 - 然后把
y
c
\ y_c
yc对特征图每个像素的偏导数求出来之后,取一次矿都维度上全局平均。
这一步得到的 a k c \ a_k^c akc就是C类相对于最后一层卷积层输出的特征图的第k个通道的敏感程度。 - 把 a k c \ a_k^c akc当作权重将最后一层特征加权,线性组合起来。
- 把这个组合起来的值(其实是个二维map),送入ReLU激活函数处理一下输出。第三步和第四步写在一起就是。
这里的L是一个维度Map,它就是我们需要的类别激活热力图。
参考链接
[Grad-CAM:Visual Explanations from Deep Networks via Gradient-based Localization]
[Grad-CAM++: Generalized Gradient-based Visual Explanations for Deep Convolutional Networks]
《Python深度学习》
keras-grad-cam
pytorch-grad-cam