深夜的警局会议室里,一组资深探员正在复盘一桩“猫脸谜案”。他们刚刚给出了结论——“照片里有一只猫,置信度 92%”,但当法官追问“你凭什么这么判断?能不能指出你们到底看了哪里?”时,整个小组鸦雀无声:谁也说不出自己刚才把目光停在了照片的哪个角落。 这正是深度学习模型的日常困境。一个训练良好的卷积神经网络(CNN)可以又快又准地识别图片,但它内部层层叠叠的数值像一摞密码本,没有人能直接读懂。Grad-CAM 就是那场“破案复盘”:它回溯 CNN 最后一层卷积留下的“探员侦察地图”(特征图),用梯度衡量每一份地图对最终结论贡献了多少“功勋”,再把这些地图按功勋加权叠成一张热力图,最后投回原图。于是我们恍然大悟——原来探员们真正盯住的,是照片里猫的耳朵和脸,而不是背景的沙发。 这篇文章将以“探案复盘”的视角,从黑盒困境讲起,一步步拆解 Grad-CAM 的梯度加权公式、热力图生成流程,再到医学影像、自动驾驶里的真实应用,以及它的局限与未来。读完你不仅能看懂热力图,还能亲手用 Python 让一个小模型“开口解释自己”。
掌握 Grad-CAM 是 AI 可信化的入场券:它让你能用一张热力图向客户、医生和驾驶员讲清“模型为什么这样判断”,是视觉 AI 在医疗、驾驶等高可信场景落地的必备技能。
可视化演示
展示Grad-CAM核心原理:最后卷积层梯度加权生成类激活热力图、特征图通道权重计算、医学影像与自动驾驶可解释性应用。切换模式查看不同环节。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Grad-CAM热力图生成原理 利用目标类别对最后卷积层特征图的梯度,计算每个通道的权重 权重加权特征图后经ReLU激活,生成高亮模型关注区域的热力图 L = ReLU(Σ αc·A) Grad-CAM为CNN提供直观的视觉解释
黑盒困境
探员小组经验越丰富,反而越说不清自己刚才看了哪儿——CNN 也是这样。一个训练良好的卷积网络动辄几十层:前几层像刚入职的实习生,只认得边缘和色块;中间层像摸到门路的老手,能拼出纹理和部件;最后一层卷积则像身经百战的主干探员,手里攥着“语义级别”的观察笔记。可是这些笔记全是一串串没有名字的数值张量,没有任何一行写着“这是猫耳朵”。
于是问题来了:模型能答,但讲不出理由。在医学影像、自动驾驶和司法取证这类高可信场景里,“不许问为什么”是绝对无法接受的——医生不会为一个说不清依据的诊断签字,车企也不愿为一个解释不了急刹原因的系统背责。这正是 AI 安全伦理与合规把“可解释性”列为刚需的原因:透明度是信任的地基。
为了让黑盒开口,研究者开辟了两条路:一是设计“自带说明”的白盒结构,二是对现成模型做“事后复盘”。Grad-CAM 属于后一路线——它不碰模型的任何参数,只像复盘官一样旁听结论、回溯证据,因此适用面极广。
回看那个深夜会议室:与其逼着探员们回忆,不如派一位复盘官去重放他们的侦察笔记。Grad-CAM 就是这位复盘官。
方法演进
最早的复盘方式很死板。2016 年提出的 CAM(类激活映射)要求探员们必须按固定模板写报告——也就是把网络最后的全连接层替换成全局平均池化(GAP)结构,重新训练一次,然后用池化层到输出层之间的权重来合成热力图。模板好用,代价却高:结构一改、模型一重训,之前辛辛苦苦训好的网络就全废了。就像为了复盘一场旧案,非要让探员们按新格式重写所有卷宗,成本不可接受。
2017 年,Selvaraju 等人提出了 Grad-CAM,核心思路是“旁听就能估功勋”:不再依赖训练好的 GAP 权重,而是让类别得分对最后一层卷积的输出做反向传播,把回传的梯度当作权重来源。梯度天然携带“这个通道对结论影响多大”的信息,于是任意一个现成的 CNN 都可以直接拿来解释,无需改结构、无需重训。
这一步改进让可视化从“实验室专用”变成了“生产环境随手可用”。今天的 Grad-CAM 已经成为 CNN 可解释性的事实标准工具,支持图像分类、目标检测、图像描述等各类任务。
如果说 CAM 是“必须重写卷宗才能复盘”,Grad-CAM 就是“旁听会议就能还原谁的发言最有力”——复盘成本断崖式下降,这才是它能普及的根本原因。
梯度加权
复盘官的第一项工作,是给每份探员地图评一个“功勋系数”。怎么评?做微扰实验:把某份地图上某个格子的值稍微改大一点,看结论(“是猫”的把握)变化多少。变化越大,说明这个格子越关键。把整张地图上所有格子的敏感度取平均,就得到了这份地图对“猫”这个结论的功勋系数。
把这一切翻译成数学语言,就是 Grad-CAM 的核心公式:
到这里,复盘官手里已经有了一叠“功勋系数表”:有的地图是整个案件的关键,有的则无足轻重。下一步,就是把它们叠成一张众人都能看懂的热力图。
- 类别得分 $y^c$模型对“输入属于类别 c”的原始打分(softmax 之前的 logits),数值越高代表越确信。“探案组对'是猫'的把握程度”。
- 特征图 $A^k_{ij}$最后一层卷积第 k 个通道在位置 $(i,j)$ 的激活值,即“探员地图”上的一个格子。整张地图尺寸为 $W \times H$。
- 梯度 $\partial y^c / \partial A^k_{ij}$把 $A^k_{ij}$ 微微调大一点,$y^c$ 会跟着变化多少。变化大 ⇒ 这个格子对“是猫”的结论很关键。这就是“微扰实验”的数学化表达。
- 全局平均池化 $\frac{1}{Z}\sum_i\sum_j$把整张地图上所有格子的敏感度求平均,$Z$ 是格子总数。每个通道由此得到一个统一的标量权重 $\alpha_k^c$,代表“第 k 份探员报告的平均功勋”。
- 权重集合 $\{\alpha_k^c\}$对全部 K 个通道重复上述过程,得到一列权重,供下一步“按功勋加权合并地图”使用。注意 α 带类别上标 c——换个类别,功勋排名就要重评。
热力图生成
有了功勋系数,合并地图就是顺理成章的事:把每张特征图乘上自己的 α,再逐像素相加,得到一张“综合贡献图”。但先别急着放大——综合图里既有支持结论的正贡献,也有拖后腿的负贡献。如果照单全收,热力图上会出现大量干扰噪点。所以 Grad-CAM 在叠加之后补了一道关卡:ReLU,把所有负值直接清零,只保留“支持结论”的证据。
完整公式如下:
回想动图中的那个瞬间:蓝色格点地图按权重融合成红色热力,猫脸被点亮。这就是“探员们的意见按功勋投票”之后,复盘官在案发现场照片上画出的重点区域——一条热力图,就是一场结论的可视化听证会。
- 加权特征图 $\alpha_k^c A^k$每张特征图乘以其功勋系数。功勋大的探员的观察被放大,功勋小的被压缩——这是“论功行赏”的具体实现。
- 逐点求和 $\sum_k$把 K 张缩放后的特征图逐像素相加,得到一张“综合贡献图”,凝聚了所有探员的共识。
- ReLU 裁剪 $\text{ReLU}(\cdot)=\max(\cdot,0)$把综合贡献图中的负值全部置零,滤除对结论起反作用的部分——复盘时只采纳支持结论的证据,避免噪声污染热力图。
- 上采样到原图最后一层特征图通常很小(如 $7 \times 7$),需要用双线性插值放大回输入尺寸 $W_0 \times H_0$,再以伪彩形式叠加到原图上,得到人眼可读的“注意力焦点”。
输出解读
拿到热力图之后,怎么读?首先明确:高亮的区域,是“对判定为该类别贡献最大的空间位置”。例如模型判“猫”时,耳朵和脸被点亮;判“狗”时,鼻子和嘴被点亮。这就是 Grad-CAM 的类别判别性——同一张图,换一个类别问“你为什么这么想”,热点位置会跟着变。
这背后是 α 依赖类别上标 c 的机制:梯度在反向传播时只关心目标类别的得分,因此热力图回答的是“为什么是猫”而不是“为什么不是狗”这样有的放矢的问题。正因如此,Grad-CAM 常被用来排查模型“是不是看了不该看的地方”,比如靠图片角落的水印而不是主体来分类。
读图时还要记住两点。第一,空间定位的粗细受制于最后一层特征图的分辨率:7×7 的网格放大到原图后必然边缘模糊,只能指出“大致街区”,指不出“门牌号”。第二,高亮不等于完整物体:模型可能只靠猫脸就完成了判断,身体部分贡献低、不亮,这并不代表模型没“见过”身体。
复盘报告的阅读法也和破案一样:高亮是“重点怀疑区域”,不是“全部现场”。重点之外仍可能存在支撑判断的上下文,读图时切忌把暗区直接等同于无关紧要。
应用场景
复盘官的价值,终究要在一线实战中体现。热力图最动人的地方在于:它把“模型为什么这么想”变成了一张可以贴在病历、驾驶日志、质检报告上的证据图。
在医学影像领域,Grad-CAM 已是模型辅助诊断的标配搭档。医生看完 AI 的“疑似肺炎”结论后,会习惯性调出热力图,对照胸片上的磨玻璃影逐一核对;热力图高亮的位置是否与病灶吻合,直接影响医生是否采纳机器的建议。这种“AI 出结论 + 医生看证据”的协作模式,正在缩短 AI 辅助诊断从实验到临床的距离。
在自动驾驶领域,Grad-CAM 承担着“事故复盘”和“误检排查”双重角色。车辆突然急刹时,工程师回放热力图,能立刻看出模型当时紧盯的是前方的行人还是路边的广告牌;对于“幽灵刹车”误检,热力图也能暴露模型是否错误聚焦于路面阴影。每一次急刹车都从“玄学”变成“可追溯的决策日志”。
工业质检则是弱监督惊喜的典型:传统缺陷定位需要像素级标注,成本极高;而 Grad-CAM 让工程师仅用“分类标签”训练模型,就能从热力图中定位裂纹、划痕的位置。探员们的侦察笔记,就这样变成了一线工人的探伤仪。
方法局限
复盘官并非全知全能。理解 Grad-CAM 的局限,才能正确使用它。
首先是梯度饱和问题。ReLU 系激活函数会把负梯度截断成零,导致反向传播的信号在某条路径上“断流”。结果是一个真正影响决策的区域,可能因为梯度被阻断而在热力图上显示为暗区——探员明明看了那里,复盘笔记却记不下来。这是“一阶近似”的通病:微扰实验只测量了微小变化下的敏感性,无法刻画复杂的非线性交互。
其次是定位粗糙。最后一层特征图分辨率通常只有输入的 1/16 甚至更小(如 7×7),上采样后再精细的细节也被抹平了。热力图能告诉你“病灶大体在右肺下叶”,却很难给出像素级边界。此外,Grad-CAM 只高亮最具判别性的部位而非完整物体——猫可能只有脸被点亮,身体完全缺席,这与“目标检测框”的预期相去甚远。
最后要提醒:Grad-CAM 解释的是“模型为何给出这个预测”,而不是“这个预测是否正确”。一个决策错误的模型照样能生成一张自信满满的热力图——探员看错了人,复盘依然准确记录了他看的方向。可视化解释对错,不担保对错。
评估展望
既然热力图是“解释”,那么解释本身也需要被考核。怎么知道一张热力图的好坏?学界给出了一套可操作的评估指标:Pointing Game(点选游戏)检查热力峰值是否落在人工标注点附近;Deletion(删除实验)把高亮区域逐步抹去,观察模型置信度是否骤降——降得越快,说明高亮区域越关键;Insertion(插入实验)则反向操作,从模糊图开始逐步加入高亮区域,置信度上升越快解释越好。
这些评估方法正在把“可解释性”从讲故事推向可量化。在更大的视野里,Grad-CAM 是“可信 AI”的第一公里:它让用户第一次看见模型的推理依据,为后续的公平性审计、安全合规打下信任地基。研究前沿也在不断演进——Score-CAM、Ablation-CAM 用更稳健的替代信号缓解梯度饱和;注意力机制与 Grad-CAM 的结合让 Transformer 也能拥有热力图;反事实与因果解释则试图回答“如果照片里没有这块区域,结论还会是猫吗”。
复盘机制日臻完善,AI 探员正在学会“敢复盘、能复盘、复得准”。而我们要做的,是带着批判的眼光使用它,让每一张热力图都成为人机信任的砖石,而不是盲目的装饰。
AI 应用场景
医学影像病灶辅助复核
阶段:模型推理后处理与解释汇报
解决的问题:传统 AI 辅助诊断只输出“阳性/阴性”结论,医生无法判断模型依据是否可靠,导致 AI 建议常被搁置。Grad-CAM 生成病灶热力图后,医生可将热力区域与影像读片结果对照,快速决定采纳或驳回 AI 结论,实现“人机互证”。
具体案例:某三甲医院部署肺炎筛查系统,模型对一张胸片判为“疑似肺炎”,同时输出 Grad-CAM 热力图,高亮集中在右肺下叶的磨玻璃影区域。放射科医生对照热力图复核后采纳建议,将原本 15 分钟的读片复核缩短到 3 分钟,并留下可视化依据用于病历归档。
自动驾驶决策归因排查
阶段:感知与决策环节的可视化监控
解决的问题:自动驾驶的急刹车、误检事故往往难以追责——传统方案只能查看日志里的数字特征,无法直观还原“模型当时在看什么”。Grad-CAM 把感知模型的注意力焦点可视化,让工程师快速定位“幽灵刹车”是否由路面阴影、广告牌残影等干扰物引发。
具体案例:某自动驾驶团队收到用户投诉“车辆在空旷路段无故急刹”。工程师调取事发片段,对前视感知模型运行 Grad-CAM,发现热力图聚焦于路边一张印有人形图案的广告牌而非真实行人,据此为感知模型补充对抗样本并修正决策策略。
工业质检弱监督缺陷定位
阶段:数据标注成本优化与缺陷定位
解决的问题:传统缺陷检测需要像素级标注来训练分割模型,标注成本高昂。Grad-CAM 让企业仅用“有无缺陷”的分类标签训练模型,即可从热力图中定位缺陷位置,实现弱监督缺陷定位。
具体案例:某电子元器件产线使用分类模型检测 PCB 板划痕,模型仅用“良品/不良品”标签训练。接入 Grad-CAM 后,热力图自动圈出划痕所在区域,系统据此驱动机械臂完成分拣,缺陷定位准确率达 92%,标注成本下降约 70%。
Python 演示
import numpy as npimport torchimport torch.nn as nn # 1) 小型 CNN:快速学会判别"左方块 vs 右方块"class TinyCNN(nn.Module): def __init__(self): super().__init__() self.features = nn.Sequential( nn.Conv2d(1, 8, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(8, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2), ) self.classifier = nn.Linear(16 * 8 * 8, 2) def forward(self, x): f = self.features(x) return self.classifier(f.view(f.size(0), -1)) # 2) 合成数据:左方块=类别0,右方块=类别1def make_data(n=96): rng = np.random.default_rng(42) xs, ys = [], [] for _ in range(n): img = np.zeros((32, 32), dtype=np.float32) if rng.random() < 0.5: img[10:22, 5:13] = 1.0 ys.append(0) else: img[10:22, 19:27] = 1.0 ys.append(1) img += rng.normal(0, 0.05, size=img.shape).astype(np.float32) np.clip(img, 0, 1, out=img) xs.append(img) return torch.tensor(np.stack(xs)[:, None]), torch.tensor(ys) # 3) Grad-CAM:复盘"最后卷积层"的功勋地图def grad_cam(model, img, cls): model.eval() fm, grads = None, None def fwd_hook(m, inp, out): nonlocal fm fm = out.detach() def bwd_hook(m, gin, gout): nonlocal grads grads = gout[0].detach() h1 = model.features[3].register_forward_hook(fwd_hook) h2 = model.features[3].register_full_backward_hook(bwd_hook) logits = model(img.unsqueeze(0)) model.zero_grad() logits[0, cls].backward() h1.remove() h2.remove() alpha = grads.mean(dim=(2, 3)) # 全局平均池化 -> 通道权重 cam = torch.relu((alpha[:, :, None, None] * fm).sum(dim=1)) cam = cam.squeeze().numpy() cam = np.kron(cam, np.ones((2, 2))) # 最近邻上采样 16x16 -> 32x32 return (cam - cam.min()) / (cam.max() - cam.min() + 1e-8) if __name__ == "__main__": torch.manual_seed(0) model = TinyCNN() x, y = make_data() opt = torch.optim.Adam(model.parameters(), lr=1e-2) lossf = nn.CrossEntropyLoss() for ep in range(120): opt.zero_grad() loss = lossf(model(x), y) loss.backward() opt.step() if ep % 40 == 0: print("epoch %d loss=%.4f" % (ep, loss.item())) idx = 1 img, label = x[idx], int(y[idx]) pred = int(model(img.unsqueeze(0))[0].argmax()) heat = grad_cam(model, img, label) print("真实类别=%d 预测类别=%d" % (label, pred)) small = heat.reshape(16, 2, 16, 2).max(axis=(1, 3)) for row in small: print("".join(" .:-=+*#%@"[min(int(v * 9), 9)] for v in row))
grad_cam 得到热力图,并以 ASCII 灰度图打印出来,直观展示模型判断时的目光焦点。h2 = model.features[3].register_full_backward_hook(bwd_hook)在最后卷积层挂上“反向复盘”钩子,采集梯度logits[0, cls].backward()让目标类别的得分反向传播,梯度沿网络流回特征图alpha = grads.mean(dim=(2, 3))对整张特征图的梯度做全局平均池化,得到该通道的功勋系数 αcam = torch.relu((alpha[:, :, None, None] * fm).sum(dim=1))加权求和后接 ReLU,只保留支持结论的正贡献cam = np.kron(cam, np.ones((2, 2)))用最简最近邻插值把 16×16 热力图放大回 32×32 原图尺寸h1.remove(); h2.remove()用完必须摘掉钩子,避免影响后续正常推理
常见误区
误区热力图高亮的地方,就是模型像人眼一样“在看”的地方;模型内部肯定有个神经元专门盯着猫脸。
正解Grad-CAM 是典型的事后归因方法,它回答的是“哪些像素对类别得分的贡献大”,而不是“视觉系统的扫描轨迹”。它像复盘官根据卷宗推演探员的注意力,而不是探员本人的眼球记录。热力图暗区仍可能参与上下文建模,只是“一阶贡献”较低。
为何常见:可视化给人强烈的“模型像人一样看”的错觉,叠加图又直观得近乎真实,初学者容易把它误读为生物视觉的忠实记录。
误区特征图激活值大的地方肯定重要,把所有通道直接加起来就是热力图,何必绕一大圈算梯度?
正解激活值只代表“这一层检测到了什么模式”,本身不带类别信息;同一张图可能同时激活“猫耳”和“狗鼻”两类模式。梯度是类别得分对特征图的敏感性,它给每个通道配上了“对目标类别而言”的权重 α,热力图才能回答“为什么是猫而不是狗”。这是类别判别性的来源,也是 Grad-CAM 相对朴素激活叠加的核心差异。
为何常见:激活值越大越重要的直觉简单直接,且 CAM 早期也依赖类似思路,初学者容易忽略梯度在“类别判别”上的关键作用。
误区热力图只点亮猫的脸没点亮身体,说明模型漏看了身体、不可信。
正解Grad-CAM 高亮的是对类别判别最有力的证据区域。分类一个物体时,脸、车轮、机翼等少数判别部位往往就足以定案,不要求覆盖全身。完整覆盖是弱监督定位任务的目标,并非归因可视化的默认承诺。它解释的是“证据”,不是“检测框”。
为何常见:人本能地把“注意力”理解为“整体关注”,与目标检测框的直觉相冲突,看到局部高亮就怀疑模型能力。
误区热力图里暗的地方就是模型完全忽略的地方,删掉这些区域也不影响预测。
正解梯度只是“一阶敏感性”,ReLU 把负梯度截断为零后,反向传播信号会中断(梯度饱和),导致真实重要但被非线性阻断的区域在热力图上显示为暗区。此外,强语义特征与弱语义特征的梯度经归一化后也可能互相掩盖。热力图是近似证据,应与 Deletion、Pointing Game 等评估手段交叉验证。
为何常见:人们容易把热力图当作“重要性得分”的精确测量,而忽略其背后“局部线性近似”的假设。
面试题
Q1. Grad-CAM 中的"Grad"指的是对什么求梯度?
- A.输入图像的像素梯度
- B.类别得分对特征图的梯度← 正确答案
- C.损失函数对网络权重的梯度
- D.卷积核权重自身的梯度
答案:B。Grad-CAM 让目标类别的得分反向传播,计算的是“类别得分对最后卷积层特征图”的梯度。它不修改网络权重,也不在乎输入像素的梯度,因此 B 正确。探员的“功勋”来自对侦察地图做微扰实验,而非调整侦探本身。
Q2. 计算通道权重 α 时,对梯度做的是什么操作?
- A.对梯度做全局最大池化
- B.对梯度做全局平均池化← 正确答案
- C.对梯度做ReLU裁剪压缩
- D.对梯度做Softmax归一化
答案:B。公式 α = 1/Z ΣΣ ∂y/∂A 是对整张特征图的梯度求平均,即全局平均池化。平均池化把“每个格子的敏感度”汇总成该通道统一的功勋系数;最大池化只保留单个最敏感格子,容易丢失整体信息。
Q3. 为什么 Grad-CAM 在加权求和后需要 ReLU 裁剪?
- A.提升热力图的整体亮度
- B.只保留对类别有正贡献的证据← 正确答案
- C.压缩特征图防止数值爆炸
- D.让特征图分辨率变得更高
答案:B。加权求和后的综合贡献图里既有支持结论的正值,也有干扰视线的负值。ReLU 把负值清零,只保留“支持结论”的证据,热力图才干净可读。这是复盘时“只采纳支持结论的证词”的数学实现。
Q4. 与 CAM 相比,Grad-CAM 的优势有哪些?
- A.无需把网络改成GAP结构← 正确答案
- B.无需重新训练就能可视化← 正确答案
- C.适用任意CNN分类网络← 正确答案
- D.定位精度一定优于CAM
答案:ABC。CAM 必须用 GAP 替换全连接层并重训,Grad-CAM 用梯度替代 GAP 权重,因此无需改结构、无需重训、适用于任意 CNN。但 D 错误:Grad-CAM 并不保证定位精度一定更高,只能说适用范围更广、成本更低。
Q5. Grad-CAM 通常取网络的哪一层特征图来计算热力图?
- A.网络的输入图像层
- B.第一个卷积层之后
- C.最后一个卷积层← 正确答案
- D.最终的分类全连接层
答案:C。最后一层卷积同时具备“高层语义”和“空间结构”两个优点,最适合生成类激活热力图。更浅的层语义太弱,全连接层则丢失了空间位置信息。探员的“主干笔记”总是在最高层——既懂含义,又记得位置。
Q6. 同一张图片,分别用“猫”和“狗”两个类别计算 Grad-CAM,两张热力图会怎样?
- A.热力图完全相同
- B.高亮区域随目标类别变化← 正确答案
- C.两图一定完全相反
- D.只有亮度略有不同
答案:B。α 带类别上标 c,反向传播的目标类别不同,梯度分布就不同,热力图高亮区域自然随之变化——这正是“类别判别性”的体现。模型判“猫”看耳朵,判“狗”看鼻子,同一现场不同探员的证词各有侧重。
Q7. 下列哪些是 Grad-CAM 的已知局限性?
- A.梯度饱和导致关键区域漏报← 正确答案
- B.特征图分辨率低定位较粗糙← 正确答案
- C.只高亮判别部位覆盖不全← 正确答案
- D.热力图与类别判别完全无关
答案:ABC。ReLU 截断造成梯度饱和、最后一层特征图分辨率低、只高亮判别性部位,这三条都是 Grad-CAM 公认的局限。D 恰好相反——Grad-CAM 的核心价值就是按类别判别,热力图与类别强相关。
Q8. Grad-CAM 中某区域梯度为零,以下哪种理解正确?
- A.该区域对判断肯定不重要
- B.无直接一阶影响并可能因饱和← 正确答案
- C.模型完全没有注视该区域
- D.该区域一定是纯背景区域
答案:B。梯度是局部一阶近似,梯度为零只代表“微小扰动下类别得分几乎不变”。ReLU 饱和会截断反向传播,让真实贡献不可见;该区域也可能是必要上下文。因此不能把暗区简单判为“不重要”,应结合 Deletion 等实验交叉验证。
Q9. Grad-CAM 上采样之前,热力图的分辨率大约是多少?
- A.与输入原图保持完全相同
- B.等于最后一层特征图尺寸← 正确答案
- C.等于全连接层的输出维度
- D.等于训练批次batch的大小
答案:B。Grad-CAM 在最后一层卷积的特征图上完成加权求和与 ReLU,因此上采样前的热力图分辨率等于该层特征图尺寸(如 7×7 或 16×16)。上采样只是“放大显示”,无法恢复已丢失的高频细节,这就是定位粗糙的根源。
Q10. 关于 Grad-CAM 的评估方法,下列说法正确的有哪些?
- A.点选检查热峰落在标注点附近← 正确答案
- B.删除实验抹除高亮后置信度骤降← 正确答案
- C.插入实验增强高亮后置信度快速上升← 正确答案
- D.热力图须与人工注视点完全一致
答案:ABC。Pointing Game 检查热力峰值是否命中标注点;Deletion 抹除高亮区域后置信度骤降说明定位准;Insertion 补强高亮区域后置信度快速上升同样说明解释质量高,A、B、C 均正确。D 错误:热力图是归因结果而非眼动记录,与人工注视点完全一致既不必要也不现实。