烟台市网站建设_网站建设公司_SEO优化_seo优化
2025/12/23 22:41:55 网站建设 项目流程

Day 46 Grad-CAM 与 Hook 机制@浙大疏锦行

1. Hook 机制 (钩子函数)

概念

Hook 本质上是一种回调函数 (Callback),允许我们在不修改模型原始代码结构的情况下,动态地“监听”或“修改”模型内部中间层的输入、输出或梯度。

作用

  • 调试与可视化:查看中间层特征图(Feature Maps)。
  • 特征提取:提取高层语义特征用于下游任务。
  • 梯度分析:监控或裁剪梯度。
  • 可解释性:如 Grad-CAM 的实现。

PyTorch 中的 Hook 类型

  1. Module Hooks (针对层/模块)
    • register_forward_hook(hook_func): 在前向传播结束后调用。
      • hook_func(module, input, output): 可以获取该层的输入和输出。
    • register_backward_hook(hook_func): 在反向传播结束后调用。
      • hook_func(module, grad_input, grad_output): 可以获取该层的输入梯度和输出梯度。
  2. Tensor Hooks (针对张量)
    • tensor.register_hook(hook_func): 在计算该张量的梯度时调用,常用于修改梯度。

Grad-CAM (Gradient-weighted Class Activation Mapping)

简介

Grad-CAM 是一种可视化技术,用于解释卷积神经网络(CNN)的决策依据。它能生成热力图 (Heatmap),高亮显示图像中对模型预测结果贡献最大的区域(即“模型在看哪里”)。

原理

Grad-CAM 利用梯度信息来衡量最后一个卷积层中每个通道(Feature Map)对目标类别的重要性。

主要步骤:

  1. 前向传播:获取目标卷积层(通常是最后一层卷积)的特征图 (Activations)
  2. 反向传播:计算目标类别分数相对于该层特征图的梯度 (Gradients)
  3. 计算权重:对梯度进行全局平均池化 (Global Average Pooling),得到每个通道的重要性权重α k \alpha_kαk
  4. 加权求和:将权重与对应的特征图相乘并求和。
  5. ReLU 激活:应用 ReLU 函数,只保留对类别有正向贡献的区域(去除负值)。
    L G r a d − C A M c = R e L U ( ∑ k α k c A k ) L_{Grad-CAM}^c = ReLU(\sum_k \alpha_k^c A^k)LGradCAMc=ReLU(kαkcAk)
  6. 可视化:将生成的热力图上采样到原图大小,并叠加显示。

代码实现关键点

  • Hook
    • 使用forward_hook捕获特征图activations
    • 使用backward_hook捕获梯度gradients
  • 反向传播触发
    • 手动构造一个one-hot向量(目标类别为 1,其余为 0)。
    • 执行output.backward(gradient=one_hot)来计算针对特定类别的梯度。

@浙大疏锦行

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询