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

这篇具有很好参考价值的文章主要介绍了[ 可视化 ] 经典网络模型 —— Grad-CAM 详解与复现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


🤵 Author :Horizon Max

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

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

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

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

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


🚀 Grad-CAM

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

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

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

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


gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM

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

🍳 GitHub:PyTorch-Grad-CAM


gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM


🚀 Grad-CAM 详解

🎨 论文贡献

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

🎨 原理介绍

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,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

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM

  • 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 激活后输出 ;

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM

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

详细可以参考下图:

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM


🚩 Guided Grad-CAM

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

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

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

首先使用双线性插值将 L G r a d − C A M c ^c_{Grad-CAM} GradCAMc 上采样到输入图像分辨率 ;

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM


🎨 实例展示

🚩 评估 Grad-CAM 定位能力

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM


🚩 Grad-CAM 图像分类

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM


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

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM


🚩 Grad-CAM 图像描述

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM


🚩 Grad-CAM 视觉问答

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM


🚩 Grad-CAM

  • 不同层的可视化 :

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM

  • 对比展示 :

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,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

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM


targets = [ClassifierOutputTarget(254)]    # dog

gradcam,经典网络模型,人工智能,深度学习,可视化,Grad-CAM,CAM文章来源地址https://www.toymoban.com/news/detail-784097.html


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


到了这里,关于[ 可视化 ] 经典网络模型 —— Grad-CAM 详解与复现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Grad-CAM简介

    论文名称:Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization 论文下载地址:https://arxiv.org/abs/1610.02391 推荐代码(Pytorch):https://github.com/jacobgil/pytorch-grad-cam bilibili视频讲解:https://b23.tv/1kccjmb 对于常用的深度学习网络(例如CNN),普遍认为是个黑盒可解释性并不

    2024年02月02日
    浏览(40)
  • Pytorch使用Grad-CAM绘制热力图

    原理与代码学习自B站霹雳吧啦Wz老师 使用grad_cam对不同预测目标的图像做activate图。 效果见下图。 使用的是自己训练的MobileNetV2 需要模型feature的最后一层,模型训练权重。 代码如下: 还有别的图的效果。总之没有很精细,但也不错了。 大概就是在将本张图片分为感兴趣类

    2024年02月12日
    浏览(42)
  • Grad-CAM的详细介绍和Pytorch代码实现

    Grad-CAM (Gradient-weighted Class Activation Mapping) 是一种可视化深度神经网络中哪些部分对于预测结果贡献最大的技术。它能够定位到特定的图像区域,从而使得神经网络的决策过程更加可解释和可视化。 Grad-CAM 的基本思想是,在神经网络中,最后一个卷积层的输出特征图对于分类结

    2023年04月19日
    浏览(35)
  • 分类任务使用Pytorch实现Grad-CAM绘制热力图

    对于深度学习网络,在我们指定数据集类别的情况下,Grad-CAM能够绘制出相应的热力图,让我们能够非常直观的看出网络关注的主要区域与特征是什么。本文主要记录在绘制热力图过程中,自己碰到的一些实际问题,希望能对小伙伴们有所帮助。 以下是本文的参考视频和代码

    2024年02月04日
    浏览(48)
  • 类别激活热力图grad-cam(pytorch)实战跑图

    类激活热力图:用于检查图像哪一部分对模型的最终输出有更大的贡献。具体某个类别对应到图片的那个区域响应最大,也就是对该类别的识别贡献最大 pytorch-grad-cam库代码GitHub代码 如果只想跑个图的话不用下! 作用:一是清晰直观的看看到底影响检测结果的特征;而是cv论

    2024年02月07日
    浏览(37)
  • 特征可视化技术(CAM)

    https://zhuanlan.zhihu.com/p/269702192 CAM技术可以帮助我们理解CNN在图像中寻找目标对象的过程,并且可以用于可视化CNN的中间层特征,以及对图像分类结果的解释和可视化。CAM技术的实现比较简单,可以使用常用的深度学习框架如PyTorch和TensorFlow来实现。 CAM(Class Activation Map)是一

    2024年02月02日
    浏览(42)
  • 神经网络的可视化:使用3D可视化和交互式界面来展示模型

    作者:禅与计算机程序设计艺术 作为人工智能领域的从业者,我们常常需要与其他技术人员或者领域内的专家进行交流。在这个过程中,一个关键的问题是如何让复杂的神经网络模型变得易于理解和分析。今天,我们将探讨如何使用3D可视化和交互式界面来展示神经网络模型

    2024年02月14日
    浏览(48)
  • 在win10下,使用torchviz对深度学习网络模型进行可视化

    目录 1. 安装 graphviz 和 torchviz 2.安装 graphviz.exe 3.实例测试 4.如果你的电脑还是无法画图,并且出现了下面的报错: 5.参考文章: 首先打开 Anaconda prompt 进入自己的 pytorch 环境(图中 pt 是我自己的 pytorch 环境),运行如下代码安装依赖包。 下载地址:Index of /Packages/stable/windows

    2024年02月07日
    浏览(37)
  • Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化...

    生成对抗网络(GAN)是一种神经网络,可以生成类似于人类产生的材料,如图像、音乐、语音或文本 ( 点击文末“阅读原文”获取完整 代码数据 )。 相关视频 最近我们被客户要求撰写关于GAN生成对抗性神经网络的研究报告,包括一些图形和统计输出。 近年来,GAN一直是研

    2024年02月09日
    浏览(51)
  • 基于python开发实现数学中各种经典曲线的可视化

    今天正好有点时间就想着把之前零星时间里面做的一点小东西整合一下梳理出来,本文的核心目的就是想要基于python来开发实现各种有趣的数学曲线的可视化展示。 笛卡尔心形线是一种二维平面曲线,由法国数学家笛卡尔在17世纪提出。它得名于其形状类似于传统的心形符号

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包