在 CV 相关的任务里,搞清楚模型是如何实现各种任务,对模型的中间过程进行可视化,对于理解以及解释模型来说是很重要的。
GradCAM及其他代码实现: https://github.com/jacobgil/pytorch-grad-cam
1. CAM (Class Activation Maps)
论文:Learning Deep Features for Discriminative Localization
类激活图(CAM)由在CNN 中使用全局平均池化(global average pooling, GAP)生成。
GAP 是在Network In Network中提出的,是一种池化操作,旨在替换经典 CNN 中的全连接层。GAP的想法是在最后一个 mlpconv 层中为分类任务的每个对应类别生成一个特征图,取每个特征图的平均值,并将结果向量直接馈送到 softmax 层。GAP 的一个优点是,它通过强制特征图和类别之间的对应关系,更适合卷积结构。因此,特征图可以很容易地解释为类别置信度图。另一个优点是在GAP 中没有要优化的参数,因此在这一层避免了过度拟合。此外,GAP 对空间信息进行求和,因此对输入的空间转换更加稳健。
在最后的输出层(比如分类的softmax)之前,对卷积特征图进行全局平均池化,并将这些特征用作产生所需输出(分类或其他)的全连接层的特征。有了这个简单的连接结构,作者通过将输出层的权值投影到卷积特征映射来确定图像区域的重要性,这种技术被称为 CAM,具体算法如下。
对于一张给定的图像,设表示最后一层卷积中第 层的特征图在空间位置(x, y), 对它做GAP得到 .
对于一个给定的类别 , 对于 softmax 的输入为 ,其中 代表的是 对于类别 的重要性。Softmax 的输出为 。
由此可得对于类别的 CAM,, 直接表明激活在空间网格上致图像分类为 类的重要性。
类激活映射只是视觉模式在不同空间位置存在的加权线性和。通过简单地将类激活映射上采样到输入图像的大小,我们可以识别出与特定类别最相关的图像区域。
CAM2. Grad CAM
论文: Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
CAM的一个缺点是它要求特征提取在softmax层之前,所以它只适用于在最后的输出层之前使用 GAP 的CNN架构,也就是Conv特征映射→全局平均池化→softmax层。
作者提出了一种利用梯度信号组合特征图的新方法,该方法不需要对网络结构进行任何修改对于完全卷积架构,CAM是Grad-CAM的一种特殊情况。
作者认为,卷积层自然地保留了在全连接层中丢失的空间信息,因此可以期望最后的卷积层在高级语义和详细的空间信息之间有最好的平衡。Grad-CAM 利用流向CNN最后一层卷积层的梯度信息,为每个神经元分配感兴趣的特定决策的重要性值。Grad-CAM 可以用来解释深度网络中任何一层的激活。
计算类别 的 Grad-CAM,首先要计算 softmax 前的分类分数对于某个卷积层的特征图 的梯度 。这些回流的梯度在宽度和高度维度(分别用i和j索引)上进行全局平均池化,以获得神经元的重要性权重。然后做一个加权和,再经过ReLU:
作者在论文里讨论了CAM 和 Grad-CAM的联系,通过公式推导得到 Grad-CAM 是 CAM 的严格推广。
3. 实现
https://github.com/jacobgil/pytorch-grad-cam
这是一个包含用于计算机视觉的可解释 AI 的各种方法的包,包括了 GradCAM在内的各种可视化方法。
参考:
https://zhuanlan.zhihu.com/p/27587399
https://zhuanlan.zhihu.com/p/269702192
https://zhuanlan.zhihu.com/p/105373864
网友评论