返回专辑
·Johan·4 分钟阅读

Grad-CAM 与 shortcut 排查

Grad-CAM 和 activation map 不严谨,但能暴露模型盯背景、水印等捷径——当 debug 线索,不当因果解释证据。

Grad-CAM 与 shortcut 排查

1. val acc 高,错分样本却在看背景

分类 val acc 95%,客户反馈某类在特定背景下系统性错分——打开错分样本的 Grad-CAM,热力图全在背景纹理、边框或水印上,目标物体区域反而冷。这是 shortcut learning:模型学的是 spurious correlation,不是目标语义。Grad-CAM 不严谨,不能当因果解释或安全论证证据,但作为 debug 线索 足够:找 background bias、label 泄漏、某类系统性盯错区域。

shortcut 常见来源:train/val 泄漏(某类总与固定背景共现)、增广不足(模型记住拍摄角度与背景组合)、label noise(背景被误标为目标)。feature viz 是数据与标注审计的入口,不是模型「理解力」的证明。工程上应把 CAM 审查纳入 release gate:新数据批次上线前,对每类抽样错分与高置信度样本出 CAM 图,人工扫一眼背景热点,比单纯盯 val acc 更早发现系统性风险。

2. Grad-CAM 机制与实现

对目标 conv 层注册 hook,backward 时用 gradient 加权 activation,ReLU 后上采样到 input 尺寸:

python
acts, grads = [], []
def fwd_hook(m, i, o): acts.append(o)
def bwd_hook(m, i, o): grads.append(o[0])
layer.register_forward_hook(fwd_hook)
layer.register_full_backward_hook(bwd_hook)
loss = F.cross_entropy(logits, y)
loss.backward()
cam = (grads[0] * acts[0]).mean(dim=1, keepdim=True).relu()

选最后一层 conv 或倒数第二层——太浅噪声大,太深 spatial 分辨率低。对多类别分别 backward 目标 class logit,而非 always 用 predicted class——错分时 predicted class 的 CAM 可能仍「自洽地」错。Integrated Gradients 沿输入路径积分,更贵、边界略好;排查 shortcut 时 Grad-CAM 够用。

Grad-CAM 权重 ,CAM ——用 gradient 加权 channel,突出对 class logit 正向贡献的空间位置。hook 须挂在 仍保留 spatial 维 的 conv 上;全局 pool 后无 spatial map 不可用 Grad-CAM。batch norm 在 eval 下 stats 固定,CAM 与 train 模式可能略不同,debug 时统一 model.eval()。目标检测可对 RoI 内 crop 再算 CAM,避免整图热力被大背景稀释。

3. 怎么用、怎么不滥用

优先看:错分 + 高 loss 样本的 CAM,比随机样本 informative。batch 里按 loss 排序取 top-k,批量出 CAM 图对比 GT 框。若 CAM 系统性盯 background texture,查数据 pipeline:GroupSplit 是否按 scene 划分、增广是否破坏背景多样性。

activation histogram 可 catch dead ReLU——某层 activation 恒 0,该层等价于 bypass,深网可能退化为浅网。别 over-interpret:heatmap 好看 ≠ 模型理解物体;论文级解释需 IG、SHAP 等更严格方法。工程用途是指导数据清洗和增广,不是写进功能安全论证。建议固定 CAM 层名、colormap、上采样方式 写入 debug 脚本,不同同事出图可对比;对视频模型可用 frame 聚合 CAM,但排查 shortcut 时单帧 Grad-CAM 通常足够。高 loss 样本若 CAM 与 GT 对齐仍错,转向 label 或 class definition,而非继续调 CAM 参数。

4. shortcut 修复路径

发现 background shortcut 后:RandomErasing 擦背景、Copy-Paste 换背景、收集 hard negative(纯背景图标负类)。re-label 或剔除泄漏样本。改完 re-train,验收看 acc CAM 是否同步改善——只涨 acc 但 CAM 仍盯背景,说明 fix 不彻底或新 shortcut 出现。

background-only ablation:mask 掉前景或背景,看预测是否 flip——flip 说明依赖 shortcut。per-class 聚合 CAM 中心点,某类 CAM 系统性偏离 GT 框中心则报警。Copy-Paste 把目标贴到多样背景,是分割/检测里打破 background correlation 的常用手段;分类任务可用 background swap augmentation(同类不同拍摄场景互替背景区域)。fix 后除 aggregate acc,须复测 OOD 背景 hold-out set——专门留一批从未见过的背景纹理,CAM 仍热点在物体上才算 shortcut 真正削弱。

5. 案例:水印导致某类 CAM 全在角落

某票据分类,类 A 训练图 80% 带厂方水印在右下角。Grad-CAM 显示类 A 高 activations 集中在右下角,与票据内容无关。剔除含水印训练图 + RandomErasing 后,类 A CAM 回到内容区,val acc 从 94% 到 96%——acc 涨幅小但 robustness 质变。

6. 验收

  • 错分样本 CAM 是否系统性盯 background——改数据后 CAM 与 metric 同步改善。
  • random vs top-loss 样本 CAM 分布对比。
  • background-only ablation 预测 flip 率。
  • per-class CAM 中心与 GT 框 IoU 或距离统计。
  • 固定 checkpoint 与 target layer,复现 CAM 图。

Grad-CAM 是排查 shortcut 的低成本工具;验收标准是改数据/增广后 CAM 与 metric 同步改善,不是 heatmap 是否「看起来合理」。

← 全部文章

johan's blog