You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高亮图像中使神经网络将其分类为新冠肺炎的特征区域

类激活区域高亮相关技术说明

对应技术名称

你要找的是计算机视觉可解释AI领域的类激活映射(Class Activation Mapping,简称CAM) 系列技术,专门用于定位卷积神经网络在做出某一类别的分类决策时,重点参考的图像区域。

常用的适配Keras模型的变种有以下几种:

  • 基础CAM:仅支持最后一层连接全局平均池化(GAP)的分类模型,无需修改训练好的模型即可直接生成激活热力图
  • Grad-CAM:适用所有卷积分类模型,不需要模型包含GAP层,是目前使用最广泛的类激活区域生成方案,完全适配你的三分类场景
  • Grad-CAM++:优化了Grad-CAM在多目标、小目标场景下的定位精度,同样可以直接用于你的任务

Keras环境实现思路

你可以直接在tf.keras框架下调用Grad-CAM,核心实现逻辑如下:

  1. 从你训练好的模型中提取出最后一层卷积层的输出,以及新冠肺炎对应分类类别的输出值
  2. 计算新冠类别输出相对于最后一层卷积层特征图的梯度
  3. 对梯度做全局平均池化得到每个特征通道的权重
  4. 用权重加权求和所有特征通道,经过ReLU激活后缩放到原始图像尺寸,即可得到激活热力图
  5. 将热力图与原始图像叠加,就能得到高亮的模型响应区域

核心代码参考

import tensorflow as tf
from tensorflow import keras
import numpy as np

# 加载你训练好的三分类模型
model = keras.models.load_model("your_trained_model.h5")
# 替换为你的模型最后一层卷积层的名称,可通过model.summary()查询
last_conv_layer = model.get_layer("last_conv_layer_name")
# 替换为新冠类别对应的标签索引,和你训练时的标签顺序保持一致
COVID_CLASS_IDX = 2

# 构建梯度计算模型
grad_model = keras.Model(
    inputs=model.inputs,
    outputs=[last_conv_layer.output, model.output]
)

# 输入为预处理后的图像张量,shape为(1, img_height, img_width, 3)
with tf.GradientTape() as tape:
    conv_output, preds = grad_model(preprocessed_img_tensor)
    # 仅保留新冠类别的输出值
    target_class_output = preds[:, COVID_CLASS_IDX]

# 计算梯度
grads = tape.gradient(target_class_output, conv_output)
# 全局平均池化得到通道权重
pooled_grads = tf.reduce_mean(grads, axis=(0, 1, 2))

# 加权求和得到热力图
heatmap = conv_output[0] @ pooled_grads[..., tf.newaxis]
heatmap = tf.squeeze(heatmap)
# 归一化热力图到0-1区间
heatmap = tf.maximum(heatmap, 0) / tf.math.reduce_max(heatmap)
heatmap = heatmap.numpy()

内容的提问来源于stack exchange,提问作者Raul Rzayev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:51:03