Grad CAM 模型可视化

2022-08-09 14:34:39 浏览数 (1)

模型可视化十分重要,前文我们介绍了 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} ,而且应该还有偏置项:

$$ b^c_k=Y^c-frac{partial Y^{c}}{partial F^{k}}F_0 $$

  • f(F) 函数为线性加权操作,即该层网络结构为全连接层时:

$$ frac{partial Y^{c}}{partial F^{k}}F_0=Y^c $$

  • 进而得到在 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

0 人点赞