可解释机器学习-Task03-CAM类激活热力图

0x00 Abstract

  • CAM 类激活热力图:深度学习可解释性分析、显著性分析的经典之作
  • 论文:Learning Deep Features for Discriminative Localization, CVPR 2016,作者:周博磊
  • 主要贡献:奠定了可解释性分析、显著性分析的基石,在此基础上衍生出了一系列的 CAM 方法。帮助我们打开了深度学习的黑箱子。

CAM 是一篇让人拍案叫绝的论文。

衍生出的一系列基于 CAM 的方法「image from woopets(activation maps created with a pretrained Resnet-18)」:

不同类别下,模型关注的不同区域:

CAM 算法的精妙之处: 1. 对深度学习实现可解释性分析、显著性分析 2. 可扩展性强,后续衍生出各种基于 CAM 的算法 3. 每张图片、每个类别,都能生成 CAM 热力图 4. 弱监督定位:图像分类模型解决定位问题 5. 潜在的 "注意力机制" 6. 使得 Machine Teaching 成为可能

0x01 CAM 网络结构

1. 图像分类网络结构

使用全卷积神经网络,不添加池化,最后使用 GAP 取代 FC。

  • 输入一张图片,经过若干个卷积层(无池化层),最后一个卷积层输出若干个 feature map
  • 假设以 512 个 feature map 为例,每一个 feature map 称之为一个 channel(矩阵),每一个 channel 为 14*14 的尺寸。这意味着图片经过网络,输出了 512 个特征,每一个 channel 就对应着一个特征。
  • 以蓝色的 channel 为例,对其取一个平均值(全局平均池化 GAP 操作),对应到蓝色的圆圈。那么 512 个 channel(矩阵)得到了 512 个平均值(标量)。「GAP 在这里取代了 FC 的作用」。
  • 最后接一个线性分类层。如果是一个 1000 分类问题,那么就得到了 1000 组权重。对于示图中的 Australian terrier 类别来说,是由加权求和获得线性分类分数 绿获得。
  • 最后将 1000 个(类别)的 logit 通过 softmax,获得 1000 个预测概率值。

2. CAM 类激活热力图计算

> 如何计算并获得热力图呢?=》线性分类权重

计算 CAM 热力图的奥妙在于线性分类层的权重,每一个 feature map (channel or 矩阵)对应到一个 GAP 之后的标量(均值),那么每一个权重就代表了线性分类器对于每一个均值(代表着一个 feature map)的关注程度

以蓝色均值举例,那么 就反映了模型对于蓝色 channel(feature map)的关注程度,也就是对于该特征的关注程度。由于模型使用的是全卷积网络,所以位置信息会被保留到最后的 feature map。可以注意到图片的右下角是狗,那么在 feature map 中的右下角位置的激活值也会是很大的。因此,蓝色矩阵既保留了语义信息,又保留了位置信息,而 权重就体现了这个 Australian terrier 类别对于该蓝色矩阵的关注程度

=》那么将所有的 权重✖️对应的矩阵,就得到了该类别下的 CAM 热力图。可以看到右下角的高亮部分对应着狗的脸部。

那么至此,为什么叫 CAM 类激活热力图也很明显了。因为是对于每一个类别的 feature map(激活而来),根据其线性分类权重,叠加计算得来。

那么从原图获得一个 7✖️7 或者 14✖️14 的激活热力图,可以通过双线性插值的方法把它缩放回原图大小,变成一个高分辨率的热力图。

0x02 讨论:为什么使用全卷积神经网络?

CAM 中没有使用池化层,而是全部使用卷积层。

  • 池化的作用:
    1. 减少计算量。
    2. 防止过拟合。
    3. 平移不变形(使得卷积网络对位置不敏感)

(同时也意味着丢失了空间信息)

将大尺寸的图变为一个小尺度的图,同时又保留了关键信息。图示为最大池化。

解释一下平移不变形:对于人脸来说,眼睛会是比较关键的特征,激活值比较大,如果人脸向左偏移了一些,通过最大池化,获得的 4✖️4 的特征图的相对位置是不变的。所以池化的引入,使得神经网络对输入的位置不敏感。即使人脸位置有偏移,也不会对结果产生很大影响。这就是平移不变性。

当然平移不变性的引入有利有弊。池化(下采样)引入了平移不变性,也意味着丢失了长宽方向的位置信息。因此在 CAM 热力图中,不使用带池化的卷积神经网络。

0x03 讨论:全局平均池化 Global Average Pooling

为什么使用 GAP 代替 FC 呢?

首先从作用上来讲,GAP 可以取代全连接层。GAP 相当于每一个 channel 变成了一个平均值,去代表这个 channel 或者说特征。使用全连接层则相当于将每一个 channel 展平成一维向量,从而去代表这个 channel。 两者的区别: - FC:Fully Connected - 将 Feature Map 展平为长向量 - 消耗较大的计算量与参数量(512 个 Feature Map,512*14*14 个元素) - GAP:Global Average Pooling - 对每个 Feature Map(channel)取一个平均值(相当于只取出来一个数,那么总共只需要 512 个元素就可以了) - 大大减少参数量

小结: - 全局平均池化(GAP)取代全连接层可以: - 减少参数量、防止过拟合 - 而且每个 GAP 平均值,间接代表了卷积层最后一层输出的每个 channel

并且 CAM 算法中,必须有 GAP 层,否则无法计算每个 channel 的权重。如果没有 GAP 层,需把全连接层替换为 GAP 再重新训练模型。(CAM 的一个小缺陷)

CAM 算法的缺点: 1. 必须得有 GAP 层,否则得修改模型结构后重新训练 2. 只能分析最后一层卷积层输出,无法分析中间层

这两个缺点如何改进?请见下一个笔记——《Grad-CAM》。

0x04 CAM 类激活热力图的相关实验

下面有一些蛮有启发性的实验。 下面部分主要摘自 https://redamancy.blog.csdn.net/article/details/128337028

1. 同张图,不同类别

由于因为 CAM 是基于分类展示的,所以被激活的区域是根据分类决定的。不同的分类,对应了不同的线性分类权重,叠加回去就得到了不同的 CAM 类激活热力图。因此对于同一张输入图片,在不同的类别下,可以获得不同的 CAM。

可以看到预测为宫殿、穹顶、教堂、祭坛、修道院类别的对应的不同关注位置。

2. 不同图,同一个类别

我们还可以查看,不同图,同个类别的 CAM 可视化,从中我们会发现,抓取的信息为类别的主要特征,比如狗主要特征为狗头等。因此 CAM 可以打开黑箱子,解释神经网络到底在关注什么。

3. CAM 弱监督定位

所谓的弱监督定位,实际上是用图像分类任务训练定位、检测、分割等任务。

在早期的方法中,有一些比如可使用图像遮挡测试进行定位,可使用重叠图块进行预测,但是这些工作需要多次前向预测,并且是非端到端的;也可使用全局最大池化,导致只能获得边缘点,而非物体范围。

但是提出了 CAM 之后,这个方法可以使用 GAP 全局平均池化后绘制的 CAM 热力图,根据其重点关注的区域进行物体定位,只需要取连通图的 20%的区域画出框,就可以得到结果。

直观上来说,CAM 表示了神经网络较为关注的区域,并且确定了类别,所以我们就可以认为,神经网络关注的区域,应该是该类别物体的区域,在下图,可以看到该任务表现,具有比较好的性能,论文中认为 IOU 的阈值为 0.5,最后的准确率大概能达到 41%以上,比随机框的 0.5%好很多。

4. 基于 CAM 的有意思的应用

CAM 还可以利用在很多有意思的场景,下面列举几种。

4.1 发现场景中有意义的物体

我们可以用 CAM 可以看到场景中的一些物体,我们可以看到 CAM 关注的区域,实际上就是,对于场景有重要意义(或者说有辨识度)的区域。

4.2 弱监督文字检测

4.3 VQA任务

0x04 讨论:SqueezeNet

SqueezeNet 是一个轻量化的卷积神经网络,作者是韩松老师。

最后一个卷积层输出 1000 个 channel,对应着 1000 个类别的 CAM 图(不再是比如 512 个 channel 对应 512 个特征,而是直接对应 1000 个类别)。因此通过 GAP 之后,可以直接得到这 1000 个类别的 logit 分数,再接一个 softmax,就可以获得最终的输出概率。

感觉好暴力的操作,定义的时候怎么定义?随机将 1000 个 channel 直接对应去预测各自的类别?

因此只需要一次前向计算,取出最后一层卷积层对应的每一个类别的 channel,就直接获得了每一个类别的 CAM 热力图。

0x05 讨论:显著性分析的意义

从 Machine Learning 到 Machine Teaching

正如 《Task-01-导论》中提到的,当 Al 可以达到甚至超越人类专家水平时,通过 CAM 等可视化手段,就可以反过来指导人类应该去关注图片的哪些部位,从而实现工艺的提升;或者应该关注鸟的哪些位置,从而实现分类。这也就是所谓的 Machine Teaching,去教、帮助人类去学习。

0x06 扩展阅读

  • CAM 论文主页
    • 论文主页:https://openaccess.thecvf.com/content_cvpr_2016/html/Zhou_Learning_Deep_Features_CVPR_2016_paper.html
    • 论文附录:http://cnnlocalization.csail.mit.edu/supp.pdf
    • 论文官网:http://cnnlocalization.csail.mit.edu/
    • 论文官方代码:https://github.com/zhoubolei/CAM
  • 作者周博磊
    • 个人主页:https://boleizhou.github.io http://people.csail.mit.edu/bzhoul
    • B 站:https://space.bilibili.com/511221970
    • 知乎:https://www.zhihu.com/people/zhou-bo-lei
    • CVPR 2022 Tutorial: Human-Centered Al for Computer Vsion: https://human-centeredai.github.io
    • Network Dissection: http://netdissect.csail.mit.edu
    • GAN Dissection: https://gandissect.csail.mit.edu
  • 扩展阅读
  • OpenMMLab 公众号,类别激活热力图可视化工具介绍:公众号 OpenMMLab 回复 CAM
  • 可解释机器学习专题精读论文清单:https://readpaper.com/user/collect/638623946528292864

Conclusion

  • 为什么要对深度学习模型做可解释性分析和显著性分析?
  • CAM 有哪些应用场景?
    • Machine Teaching
    • 弱监督定位
    • 可解释性分析等等
  • CAM 方法,与基于梯度和反向传播的显著性分析方法,有什么区别?
  • 原始的 CAM 方法有什么缺点? 后续有哪些算法做了什么样的改进?
    • 原始方法缺点:必须要有 GAP 层;只能分析最后一层卷积层输出,无法分析中间层。
    • Grad-CAM
  • 论文中,如何用 CAM 热力图实现物体的定位? 这种定位方法的巧妙之处是什么?
    • 根据 CAM 关注的重要区域,连通高亮图的 20%的区域画出框。
    • 在于标注的是分类任务,但实现了物体定位。
  • 如何理解 CAM 的“弱监督定位” ?
    • 标注的是分类任务,但实现了定位、分割等任务。
  • 哪些经典的图像分类网络中用到了 GAP 层?
    • NIN
  • GAP 层在普通卷积神经网络中的作用是什么?
    • 池化
  • GAP 层在 CAM 中的作用是什么?
    • 代替 FC 层
  • 原生 CAM 仅用于图像分类,针对目标检测、图像分割、关键点检测等涉及位置坐标的 Dense Prediction 任务,如何进行可解释性分析和显著性分析?
    • 弱监督定位
  • CAM 方法有哪些缺点? 如何改进?
    • 原始方法缺点:必须要有 GAP 层;只能分析最后一层卷积层输出,无法分析中间层。

References

类别激活热力图可视化工具合集:公众号 OpenMMLab 回复 CAM (CV、NLP、强化学习都支持可视化)