0


[ 可视化 ] 经典网络模型 —— Grad-CAM 详解与复现

🤵 Author :Horizon Max

编程技巧篇:各种操作小结

🎇 机器视觉篇:会变魔术 OpenCV

💥 深度学习篇:简单入门 PyTorch

🏆 神经网络篇:经典网络模型

💻 算法篇:再忙也别忘了 LeetCode

[ 可视化 ] 经典网络模型 —— Grad-CAM 详解与复现

🚀 Grad-CAM

随着神经网路模型的不断发展,深度模型通过使用

  1. 更抽象

(增加网络层数)和

  1. 更紧密

(端到端训练)实现了更好的性能 ;

但随之带来的是对于神经网络的 可解释性:为什么会出现这样的结果?网络的关注点在哪?

基于此提出的

  1. Grad-CAM

利用热力图的方式实现网络预测过程的可视化,并帮助我们更好的理解神经网络 ;

Grad-CAM 是 CAM 的推广,不需要更改网络结构或重新训练就能实现更多 CNN 模型的可视化 ;

🔗 论文地址:Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization

🍳 GitHub:PyTorch-Grad-CAM

在这里插入图片描述

🚀 Grad-CAM 详解

🎨 论文贡献

  • 提出了一种类别区分的定位技术,可以为任何基于 CNN 的网络生成可视化解释,需要更改网络结构或重新训练 ;
  • 可以应用于图像分类、图像描述、视觉问答等模型,用于发现问题与解释不合理的地方 ;
  • 揭示了数据集中的偏差来帮助故障诊断 ;
  • 介绍了用于图像分类和视觉问答的 ResNets 可视化 ;
  • 使用来自 Grad-CAM 神经元的重要性并利用神经元名称用于文本解释 ;
  • 展示了 Guided Grad-CAM 的解释是有类别歧视的 ;

🎨 原理介绍

在这里插入图片描述

→ : 前向传播    
→ : 反向传播

🚩 Grad-CAM 可视化流程

  • 输入:给定的一个图像和一个感兴趣的类别( 例如:tiger cat);
  • 通过模型的 CNN 部分进行向前传播,得到特定任务的各类别分数 y( softmax 层之前 );
  • 将给定的类别(tiger cat)设置为 1,其他类别的梯度都设置为 0 ;
  • 将给定类别分数 yc 反向传播至卷积特征图,组合计算得到粗糙的梯度CAM定位(蓝色热力图);
  • 将热力图与反向传播的结果进行点乘,得到高分辨率的特定 Grad-CAM 可视化图 ;

🚩 Grad-CAM 计算

针对 类别为c、宽度u、高度为v 的类别定位图 Grad-CAM L

  1. G
  2. r
  3. a
  4. d
  5. C
  6. A
  7. M
  8. c
  9. ^c_{Grad-CAM}
  10. GradCAMc Ru×v

在这里插入图片描述

  • yc :前向传播得到的 类别 c 所对应的分数 (before the softmax) ;

  • A i j k ^k_{ij} ijk​ :特征层 A 的第 k 个通道上坐标 ( i, j ) 的数据 ;

    1. y c A k \frac {∂y^c} {∂A^k} Akyc :类别 c 在特征层 A 上反向传播得到的梯度信息
  • Z :宽度 i 和 高度 j 的乘积 ;

  • 将计算得到的梯度在 宽度 i 和 高度 j 的维度上进行全局平均池化,得到重要性权重 α k c ^c_k kc​ ;

  • 计算关于激活函数的权重矩阵和梯度的乘积 ;

  • 最后进行加权求和,并通过 ReLU 激活后输出 ;

在这里插入图片描述

  • c:选取的类别 c ;
  • k :第 k 个通道 ;
  • A:需要进行可视化的特征层,一般选取最后一个卷积层的输出 ;
  • α k c ^c_k kc​ :类别 c 在特征层 A 的第 k 个通道上的权重 ;
  • A k :特征层 A 的第 k 个通道上的权重矩阵 ;
  • ReLU :使最后的输出结果 >0 ,抑制不感兴趣的权重部分 ;

详细可以参考下图:

在这里插入图片描述

🚩 Guided Grad-CAM

虽然 Grad-CAM 具有分类区分和局部化相关图像区域的能力 ;

但仍缺乏类似于 Guided Backpropagation 像素空间梯度可视化的那种突出细粒度细节的能力 ;

基于此,作者通过元素级乘法融合了Guided Backpropagation 和 Grad-CAM 可视化 ;

首先使用双线性插值将 L

  1. G
  2. r
  3. a
  4. d
  5. C
  6. A
  7. M
  8. c
  9. ^c_{Grad-CAM}
  10. GradCAMc 上采样到输入图像分辨率

在这里插入图片描述

🎨 实例展示

🚩 评估 Grad-CAM 定位能力

在这里插入图片描述

🚩 Grad-CAM 图像分类

在这里插入图片描述

🚩 Grad-CAM 视觉解释和文本解释

在这里插入图片描述

🚩 Grad-CAM 图像描述

在这里插入图片描述

🚩 Grad-CAM 视觉问答

在这里插入图片描述

🚩 Grad-CAM

  • 不同层的可视化 :

在这里插入图片描述

  • 对比展示 :

在这里插入图片描述

🚀 Grad-CAM 复现

  1. # Here is the code :import os
  2. import numpy as np
  3. import torch
  4. from PIL import Image
  5. import matplotlib.pyplot as plt
  6. from torchvision import models
  7. from torchvision import transforms
  8. from pytorch_grad_cam import GradCAM
  9. from pytorch_grad_cam.utils.image import show_cam_on_image
  10. from pytorch_grad_cam.utils.model_targets import ClassifierOutputTarget
  11. defmain():
  12. model = models.resnet50(pretrained=True)
  13. target_layers =[model.layer4[-1]]
  14. data_transform = transforms.Compose([
  15. transforms.ToTensor(),
  16. transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])])# Prepare image
  17. img_path ="image.png"assert os.path.exists(img_path),"file: '{}' dose not exist.".format(img_path)
  18. img = Image.open(img_path).convert('RGB')
  19. img = np.array(img, dtype=np.uint8)
  20. img_tensor = data_transform(img)
  21. input_tensor = torch.unsqueeze(img_tensor, dim=0)# Grad CAM
  22. cam = GradCAM(model=model, target_layers=target_layers, use_cuda=True)# targets = [ClassifierOutputTarget(281)] # cat
  23. targets =[ClassifierOutputTarget(254)]# dog
  24. grayscale_cam = cam(input_tensor=input_tensor, targets=targets)
  25. grayscale_cam = grayscale_cam[0,:]
  26. visualization = show_cam_on_image(img.astype(dtype=np.float32)/255.,
  27. grayscale_cam, use_rgb=True)
  28. plt.imshow(visualization)
  29. plt.show()if __name__ =='__main__':
  30. main()

结果展示:

  1. targets =[ClassifierOutputTarget(281)] # cat

在这里插入图片描述

  1. targets =[ClassifierOutputTarget(254)] # dog

在这里插入图片描述

  1. targets = None # 默认显示得分最高的那个类别

本文转载自: https://blog.csdn.net/weixin_45084253/article/details/125675573
版权归原作者 Horizon Max 所有, 如有侵权,请联系我们删除。

“[ 可视化 ] 经典网络模型 —— Grad-CAM 详解与复现”的评论:

还没有评论