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


🤵 AuthorHorizon John

编程技巧篇各种操作小结

🎇 机器视觉篇会变魔术 OpenCV

💥 深度学习篇简单入门 PyTorch

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

💻 算法篇再忙也别忘了 LeetCode


🚀 Grad-CAM

随着神经网路模型的不断发展,深度模型通过使用更抽象(增加网络层数)和 更紧密(端到端训练)实现了更好的性能 ;

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

基于此提出的 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 G r a d − C A M c ^c_{Grad-CAM} GradCAMc ∈ Ru×v

在这里插入图片描述

  • yc :前向传播得到的 类别 c 所对应的分数 (before the softmax) ;
  • A i j k ^k_{ij} ijk :特征层 A 的第 k 个通道上坐标 ( i, j ) 的数据 ;
  • ∂ 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 G r a d − C A M c ^c_{Grad-CAM} GradCAMc 上采样到输入图像分辨率 ;

在这里插入图片描述


🎨 实例展示

🚩 评估 Grad-CAM 定位能力

在这里插入图片描述


🚩 Grad-CAM 图像分类

在这里插入图片描述


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

在这里插入图片描述


🚩 Grad-CAM 图像描述

在这里插入图片描述


🚩 Grad-CAM 视觉问答

在这里插入图片描述


🚩 Grad-CAM

  • 不同层的可视化 :

在这里插入图片描述

  • 对比展示 :

在这里插入图片描述


🚀 Grad-CAM 复现

# Here is the code :

import os
import numpy as np
import torch
from PIL import Image
import matplotlib.pyplot as plt
from torchvision import models
from torchvision import transforms
from pytorch_grad_cam import GradCAM
from pytorch_grad_cam.utils.image import show_cam_on_image
from pytorch_grad_cam.utils.model_targets import ClassifierOutputTarget


def main():
    model = models.resnet50(pretrained=True)
    target_layers = [model.layer4[-1]]

    data_transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])

    # Prepare image
    img_path = "image.png"
    assert os.path.exists(img_path), "file: '{}' dose not exist.".format(img_path)
    img = Image.open(img_path).convert('RGB')
    img = np.array(img, dtype=np.uint8)
    img_tensor = data_transform(img)
    input_tensor = torch.unsqueeze(img_tensor, dim=0)

    # Grad CAM
    cam = GradCAM(model=model, target_layers=target_layers, use_cuda=True)
    # targets = [ClassifierOutputTarget(281)]     # cat
    targets = [ClassifierOutputTarget(254)]  # dog

    grayscale_cam = cam(input_tensor=input_tensor, targets=targets)
    grayscale_cam = grayscale_cam[0, :]
    visualization = show_cam_on_image(img.astype(dtype=np.float32)/255.,
                                      grayscale_cam, use_rgb=True)

    plt.imshow(visualization)
    plt.show()


if __name__ == '__main__':
    main()

结果展示:

targets = [ClassifierOutputTarget(281)]      # cat

在这里插入图片描述


targets = [ClassifierOutputTarget(254)]    # dog

在这里插入图片描述


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


### 回答1: 如果您想卸载Office 16 Click-to-Run,请按照以下步骤操作: 1. 打开控制面板。 2. 点击“程序和功能”。 3. 找到“Microsoft Office 16 Click-to-Run”并右键单击。 4. 选择“卸载”。 5. 按照提示完成卸载过程。 请注意,卸载过程可能需要一些时间,具体时间取决于您的计算机性能和安装的Office程序的数量。卸载完成后,您可以选择安装其他版本的Office程序或使用其他办公软件。 ### 回答2: Office16 Click-to-Run是微软公司推出的一款办公软件,被广泛应用于各类机构、企业和个人用户的办公场景中。但是,有时候我们需要卸载Office16 Click-to-Run,比如说,为了更换新系统或更换其他版本的Office。 下面是Office16 Click-to-Run卸载的操作步骤: 1.打开电脑控制面板,选择“程序和功能”选项。 2.在“程序和功能”界面中,找到“Microsoft Office 13/16/19”或“Microsoft 365”等相关条目,右键点击,选择“卸载”。 3.在弹出的卸载窗口中,选择“快速修复”或“在线修复”选项,等待卸载程序的自动识别。 4.在识别完成后,跟随卸载程序的提示进行操作,点击“下一步”即可。 5.等待程序的自动卸载完成,卸载完成后,再次检查电脑上是否还存在相关的Office16 Click-to-Run文件,如果还存在则需要手动删除。 通过以上操作,就可以实现对Office16 Click-to-Run的卸载。需要注意的是,在卸载过程中一定要谨慎,避免误操作导致电脑出现问题。同时,在卸载完成后,建议进行电脑的重启,以确保所有的更改都能够生效。 ### 回答3: Office 16 Click-to-Run是一种Office 产品,是通过在线服务安装并更新Office的方式。对于使用Office 16 Click-to-Run的用户,如果需要卸载该软件,可以按照以下步骤进行: 1. 打开控制面板:点击开始菜单,并在搜索框中键入“控制面板”。在搜索结果中,找到“控制面板”并点击它。 2. 卸载Office 16 Click-to-Run:在控制面板中,找到并点击“程序和功能”选项。在程序和功能列表中,找到安装的Office 16 Click-to-Run,并右键选择“卸载”。 3. 确认卸载:在卸载程序的窗口中,进行下一步操作,直到出现确认卸载Office 16 Click-to-Run的提示。在这个提示窗口中,点击“是”并等待卸载完成。 4. 清理残余文件:卸载完成后,需要手动删除Office 16 Click-to-Run的残余文件。 以上是卸载Office 16 Click-to-Run的常规步骤。需要注意的是,在卸载Office 16 Click-to-Run之前,最好备份所有该软件相关的数据,以免数据丢失。另外,在卸载完成后,请不要随便删除系统文件,以免引起其他问题。如果还是有问题,可以咨询相关技术人员进行处理。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Horizon John

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值