本文最后更新于:2024年5月7日 下午
模型可视化十分重要,前文我们介绍了 CAM ,但是 CAM 本身存在一些限制,Grad CAM 作为 CAM 的扩展技术可以在限制更宽泛的条件下使用,本文介绍 Grad CAM。
简介
- CAM 系列工作要解决的问题是网络中的隐藏层特征的可视化,CAM 可以将模型中 $F -> GAP -> MLP$ 结构的部分可视化成热力图
- 但是 CAM 技术严格要求网络最后一层为 $MLP$ ,并且在实现时需要修改网络结构,这限制了可视化的需求应用场景
Grad CAM
实现方法
- 假设模型特征层 $A \in R^{W \times H \times C}$,经过 $GAP $ 层后的特征 $F^k,K \in {1,2,…,C }$,也就是有:
$$
F^{k}=\frac{1}{Z} \sum_{i} \sum_{j} A_{i j}^{k}
$$
- 设第 $ c $ 类的分类得分为 $ S_{c}, \mathrm{GAP} $ 的权重为 $ w_{i}^{c} $ ,特征图大小为 $ c_{1} * c_{2}, Z=c_{1} * c_{2} $ ,第 $ i $ 个特征图第 $ k $ 行第 $ j $ 列的像素值为 $ A_{k j}^{i} $ ,计算:
$$
\alpha_{i}^{c}=\frac{1}{Z} \sum_{k=1}^{c_{1}} \sum_{j=1}^{c_{2}} \frac{\partial S_{c}}{\partial A_{k j}^{i}}
$$
- Grad-CAM的Class Activation Mapping计算方式如下:
$$
L_{\text {Grad-CAM }}^{c}=\operatorname{ReLU}\left(\sum_{i} \alpha_{i}^{c} A^{i}\right)
$$
- 之所以使用ReLU激活函数,是因为我们只关注对于类别有关的区域,即特征图取值大于0的部分。
论文描述对 CAM 的扩展
论文中认为 Grad CAM 是对 CAM 的泛化扩展,讨论了Grad-CAM和类激活映射(CAM)之间的联系,并正式证明Grad-CAM可以将CAM推广到各种基于CNN的体系结构中。
- 具体地说,倒数第二层输出了 $ K $ 个特征图, $ A^{k} \in R^{u \times v} $ ,每个元素的下标为(i,j),比如 $ A_{i j}^{k} $ 。然后使用全局平均池化 (GAP) 在空间上对这些特征图进行池化,并对其进行线性变换以 生成每个类c的得分 $ Y^{c} $ 。
- 定义 $ F^{k} $ 为全局平均池化的输出:
$$
F^{k}=\frac{1}{Z} \sum_{i} \sum_{j} A_{i j}^{k}
$$
- CAM是计算最后的分数:
$$
Y^{c}=\sum_{k} w_{k}^{c} \cdot F^{k}
$$
- 其中 $ w_{k}^{c} $ 是将第 $ \mathrm{k} $ 个特征图与第c个类连接的权重。取c类 $ \left(Y^{c}\right) $ 的分数相对于特征图 $ F^{k} $ 的梯度,我们得到:
$$
\frac{\partial Y^{c}}{\partial F^{k}}=\frac{\frac{\partial Y^{c}}{\partial A_{i j}^{k}}}{\frac{\partial F^{k}}{\partial A_{i j}^{k}}}
$$
- 关于 $ A_{i j}^{k} $ 的梯度记为 $ \frac{\partial F^{k}}{\partial A_{i j}^{k}}=\frac{1}{z} $ ,得到:
$$
\frac{\partial Y^{c}}{\partial F^{k}}=\frac{\partial Y^{c}}{\partial A_{i j}^{k}} \cdot Z
$$
- 得到 $ \frac{\partial Y^{c}}{\partial F^{k}}=w_{k}^{c} $ ,推出:
$$
w_{k}^{c}=Z \cdot \frac{\partial Y^{c}}{\partial A_{i j}^{k}}
$$
- 因为Z和w权重和坐标无关,化简为:
$$
Z w_{k}^{c}=Z \sum_{i} \sum_{j} \frac{\partial Y^{c}}{\partial A_{i j}^{k}}
$$
- Z为像素点总数或者记为1,重写到:
$$
w_{k}^{c}=\sum_{i} \sum_{j} \frac{\partial Y^{c}}{\partial A_{i j}^{k}}
$$
- 在可视化过程中,比例常数 $ \frac{1}{Z} $ 被标准化, $ w_{k}^{c} $ 的表达式与Grad-CAM使用的 $ \alpha_{k}^{c} $ 相同
- 因此论文认为,Grad-CAM是CAM的一种概括
其他角度理解 Grad CAM
该方法作为 CAM 的扩展,为可用性场景和实现方式上都提供了更大的方便,但是我们(由
华哥
率先提出)认为结果的可靠性和有效性是建立在一些条件基础之上的,而且理论来源也没有十分明确
- 也就是说论文提出一种新的梯度求取 CAM 特征图的计算方法,该方法可以收纳 CAM 为一种特殊情况,因此 Grad CAM 是CAM的扩展,我们觉得并不十分符合逻辑,确实 CAM 是此种 Grad CAM 计算方法的特殊情况,但是这个 Grad CAM 方法本身的合理性或理论依据没有充分说明
- 至于使用 ReLu 激活更是神奇,CAM 貌似就没使用特定的激活函数,因为理论上没有问题
- 我们提出一种理解 Grad CAM 的方式,回到 CAM ,方法合理的核心是 GAP 层与 MLP 层都是线性操作,二者交换不影响结果,再加上 CNN 网络结构中特征位置与输入图像位置有较强的相关性,CAM 热力图才可以作为模型可视化的参考
- 延续线性操作可交换的思想考虑 Grad CAM,需要解决的问题是 GAP 层后面的特征处理不再局限为 MLP,需要面对的是更为一般的 $ y^c = f(F) $,而这个$f(F)$ 函数很可能不是线性操作,那么我们如果直接强行交换 GAP 和 $f(F)$ 的位置看到的结果不那么有说服力和参考价值
- 为了解决 $f(F)$ 非线性的问题,我们可以将 $f(F)$ 在 $F_0$ (当前图像计算得到的 $F$ 处的特征)处进行泰勒展开:
$$
f(F)=f(F_0)+(F-F_0)f’(F_0)+o((F-F_0)^2)
$$
其中 $o((F-F_0)^2)$ 为二阶无穷小量
- 如果略去无穷小量,将 $f(F)$ 用一阶泰勒展开近似的话,可以得到:
$$
f(F) \approx f(F_0)+(F-F_0)f’(F_0)
$$
-
而这种一阶近似后,$f’(F_0)$ 为确定的向量,$f(F) $ 在 $F_0$ 邻域小范围内可以近似为线性操作,因此泰勒一阶近似后的$f(F) $可以与 GAP 交换而不改变结果,才使得 Grad CAM 有可能成功地使模型可视化
-
那么按照这个思路推导下去 Grad CAM 会变成什么样呢
显然有 $f(F_0)=Y^c$
-
也就是说此种情形下的 Grad CAM 不但有 $ \frac{\partial Y^{c}}{\partial F^{k}}=w_{k}^{c} $ ,而且应该还有偏置项:
- 当$f(F)$ 函数为线性加权操作,即该层网络结构为全连接层时:
- 进而得到在 CAM 的条件下偏置项正好为 0,我们因此才认为 Grad CAM 是 CAM 的扩展
- 一般的 Grad CAM 计算特征$X \in R^{1 \times 1 \times C}$的热力图时需要计算:
此处和论文中的计算方法有些出入,供大家参考,如有错误烦请指正
Grad CAM 的限制
Grad CAM 带来了使用范围的拓展,相应的会承受相关的代价
- 首先 Grad CAM 有着和 CAM 类似的使用条件限制:
- 天然使用于 CNN 结构,特征图与原始图像位置具有较强的相关性(Transformer 结构无法直接使用 CAM)
- 依赖 GAP 层,一个尺寸方向的线性 Pooling 操作
- 扩展的限制条件为不再强求最后的层为 MLP
- 而代价也是存在的,沿用我们的梯度线性操作近似理论,只有 $F_0$ 周围的小邻域空间近似线性,误差较小
- 那么用于计算热力图的特征 $X$ 距离 $F_0$ 越远那么结果可能越不可靠,因此 GAP 层前的特征越趋于平稳 Grad CAM 越可信
原始论文
- arxiv 链接:https://arxiv.org/abs/1610.02391
参考资料
- https://blog.csdn.net/dhaiuda/article/details/102937760
- https://zhuanlan.zhihu.com/p/269589676?utm_source=wechat_session
文章链接:
https://www.zywvvd.com/notes/study/deep-learning/visualization/grad-cam/grad-cam/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付