Saliency Maps
显著性图是用于评估每个像素对模型预测影响程度的热力图。涵盖梯度、CAM 和扰动方法、这些方法的局限及用途。
显著性图是一种热力图,用于评估输入图像中的每个像素对神经网络输出的影响程度,通常关注某个预测类别的分数。它是可解释 AI(XAI)在计算机视觉中最常用的工具之一:如果热力图在物体上高亮,说明预测有依据;如果在水印、背景或图像边框上高亮,则暴露了模型使用的捷径。显著性图将输出与输入像素关联起来,因此不同于网络的内部特征图,也不同于视觉 Transformer的注意力权重;后者展示的是某一层从何处收集信息。感知研究也用这个术语指代相关概念,即人眼在场景中的注视位置图,例如视觉注意力的Itti-Koch 模型。
梯度显著性如何工作#
Simonyan、Vedaldi 和 Zisserman(2013 年)提出的梯度显著性图使用反向传播计算某个类别分数相对于输入图像的梯度,而不是相对于模型权重的梯度。像素处梯度的幅值表示该处的微小变化会对分数产生多大影响;取三个颜色通道中最大的绝对值,就能为每个像素得到一个数值。对于 ImageNet分类器,在 PyTorch中只需一次前向传播和一次反向传播:
import urllib.request
from PIL import Image
from torchvision.models import ResNet50_Weights, resnet50
from torchvision.utils import save_image
# Load an ImageNet classifier and track gradients on the input pixels
weights = ResNet50_Weights.DEFAULT
model = resnet50(weights=weights).eval()
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg"))
x = weights.transforms()(image).unsqueeze(0).requires_grad_()
# Backpropagate the top class score to the pixels
scores = model(x)
top = scores.argmax().item()
scores[0, top].backward()
# Saliency: largest absolute gradient across the color channels, scaled for display
saliency = x.grad.abs().amax(dim=1)
save_image((saliency / saliency.quantile(0.99)).clamp(max=1), "saliency.png")
print(f"Explained class: {weights.meta['categories'][top]}")它会打印 Explained class: minibus,并保存分类器看到的中心裁剪区域所对应的颗粒感 224 × 224 显著性图:原始梯度在相邻像素间会有噪声,后续方法则通过求平均或处理特征图来减少噪声。
显著性方法#
- SmoothGrad:对添加噪声的多份图像副本分别计算梯度图并求平均,可消除大部分斑点噪声。
- 积分梯度:沿着从基线(例如黑色图像)到输入图像的路径累积梯度,使像素分数之和等于两者类别分数的差值。
- Grad-CAM:用最后一个卷积层的平均梯度为其特征图加权,再对结果进行上采样,即可得到较粗略但与类别相关的区域。LayerCAM(2021 年)会对每个位置分别加权,因此更早、分辨率更高的层也能生成可用的显著性图。
- 遮挡法及其他扰动方法:遮住图像的一些局部区域并测量分数下降幅度,无需计算梯度,但每个局部区域都需要执行一次前向传播。
Ultralytics YOLO 可为目标检测及其他任务计算 LayerCAM 图:在预测模式下使用 visualize=True 时,它会根据每个高置信度预测的类别分数正梯度,为进入检测头的特征图中每个位置加权,并为每张图像保存一张合并后的热力图。
from ultralytics import YOLO
# 保存 LayerCAM 热力图,展示 YOLO26 检测结果背后的依据
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg", visualize=True)它会将 bus_cam.jpg 写入运行的保存目录,展示 NMS 移除重复框之前,超过置信度阈值的最多 16 个最强原始 YOLO26预测结果;添加 classes=[0] 后,则只会生成行人的热力图。
显著性图的局限#
显著性图展示输出对哪些位置敏感,却不说明模型如何推理;解释模型内部机制是机制可解释性的目标。Adebayo 及其同事在 2018 年进行的健全性检查发现,一些常用方法(例如引导式反向传播)在模型权重随机化后仍会生成几乎相同的图,因此这些图更多反映图像边缘,而非训练后的模型。即使预测结果不变,微小的输入扰动也可能导致显著性图发生剧烈变化。










