返回

揭秘类激活图(CAM):深入了解神经网络的可解释性

人工智能

类激活图概述

类激活图(CAM)是一种用于可视化神经网络决策过程的技术。它可以生成热力图,以显示神经网络在做出决策时关注图像的哪些区域。这对于理解神经网络的行为非常有用,特别是当网络的决策过程复杂且难以理解时。

获取类激活图的步骤

获取类激活图的一般步骤如下:

  1. 将图像输入神经网络并获得输出。
  2. 从神经网络中提取最后一个卷积层的特征图。
  3. 对特征图进行全局平均池化,得到一个向量。
  4. 将向量与神经网络的权重矩阵相乘,得到一个分数向量。
  5. 将分数向量中的元素按大小排序,得到一个类激活图。

代码实现

以下是一个使用PyTorch实现CAM的代码示例:

import torch
import cv2

def get_cam(model, image):
  # 将图像输入神经网络并获得输出
  output = model(image)

  # 从神经网络中提取最后一个卷积层的特征图
  features = model.features(image)

  # 对特征图进行全局平均池化,得到一个向量
  features = torch.mean(features, (2, 3))

  # 将向量与神经网络的权重矩阵相乘,得到一个分数向量
  scores = torch.matmul(features, model.classifier.weight.t())

  # 将分数向量中的元素按大小排序,得到一个类激活图
  cam = torch.argmax(scores, dim=1)

  # 将类激活图转换为numpy数组并归一化
  cam = cam.numpy()
  cam = cam / np.max(cam)

  # 将类激活图与原图像叠加,并保存为文件
  cam = cv2.resize(cam, (image.shape[2], image.shape[3]))
  cam = cv2.applyColorMap(cam, cv2.COLORMAP_JET)
  cam = cv2.addWeighted(image.numpy(), 0.5, cam, 0.5, 0)
  cv2.imwrite('cam.jpg', cam)

# 加载图像
image = cv2.imread('image.jpg')

# 加载训练好的神经网络模型
model = torch.load('model.pt')

# 获取类激活图
cam = get_cam(model, image)

效果展示

以下是一些CAM的效果展示:

[图片1:CAM可视化卷积神经网络在ImageNet数据集上对图像的分类结果]

[图片2:CAM可视化生成对抗网络在MNIST数据集上对图像的生成结果]

结论

类激活图是一种用于可视化神经网络决策过程的技术。它可以生成热力图,以显示神经网络在做出决策时关注图像的哪些区域。这对于理解神经网络的行为非常有用,特别是当网络的决策过程复杂且难以理解时。