分类任务使用Pytorch实现Grad-CAM绘制热力图

这篇具有很好参考价值的文章主要介绍了分类任务使用Pytorch实现Grad-CAM绘制热力图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

以下是本文的参考视频和代码链接,我主要看的是B站霹雳吧啦老师的视频和代码(感谢我导)

视频链接: 使用Pytorch实现Grad-CAM并绘制热力图_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1e3411j7x7/?spm_id_from=333.788.recommend_more_video.0&vd_source=e43c081338520d48e907ed94f3d8f6c8

代码:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing

首先打开这个代码链接,找到pytorch_classification -> grad_cam这个文件夹,下载之后打开如下图:

pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能

我是将上述的代码中main.cnn.py这个文件单独在自己的模型文件夹中创立一个using_grad_cam.py,作为单独绘制热力图的工具脚本,同时将utils.py复制上自己的模型文件夹中,如下图:

pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能

接下来就讲讲我在代码上修改的坑:

错误一:TypeError: 'module' object is not callable

原因:实例化模型错误,这个是根据你实例化的方法去对应的。一定要写到具体的模型型号。

比如我的模型脚本是models.py,并且我想绘制的热力图具体型号是resnetXX

那就是model = models.resnetXX(num_classes=你对应数据集的类别),比如我使用的数据集共有38类那就是38。

pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能

错误二:TypeError: Expected state_dict to be dict-like, got <class 'XX'>.

原因:这个问题是由于你保存权重的方式,和在绘制热力图脚本里的加载权重的方式不同,

将train脚本中的保存权重方式稍作修改即可,将模型权重以字典的形式保存即可。

pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能

注意:如果你修改完以上操作仍然告诉你权重加载的代码报错,并显示缺少键值,那么就在热力绘制图脚本中将加载权重的代码后面加上一个Strict=False即可。

pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能

错误三:AxisError: axis 3 is out of bounds for array of dimension 3

原因:本问题出在代码输出的要是列表,所以将utils.py中Grad-CAM里的函数稍作修改即可,将返回的对象强制转为列表,如下图:

pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能

错误四:AttributeError: ‘tuple‘ object has no attribute ‘cpu‘

原因:这个问题,主要是因为没有指定具体的某一层,而是将目标层直接设定为某个stage或是模块名,这样会导致target_layers是一个元组,就会一直报这个错。对于这个问题,首先你要清楚你的网络模型的结构,可以通过输出print(model)的方式来查看自己模型具体的层结构。给大家打个比方,下图是我输出模型结构的一小块,此时如果我设定target_layers=[model.patch_embed_a],那它就相当于被我设置成一个元组,但这样是无法应用在这个代码上的,我们需要继续细化到某一层,比如改成target_layers=[model.patch_embed_a.norm]这样就可以成功绘制热力图。

pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能

如下图所示:

pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能

以上就是我在将热力图代码融入自己模型和数据集所经历的坑,最后附带我根据自己数据集绘制的热力图,大家可以看到,经过训练之后的模型权重载入绘制的热力图能够让我们知道模型更加关注叶片的纹理。

原图:                                                            绘制的热力图:

pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能    pytorch 热力图,Grad-Cam,pytorch,深度学习,人工智能文章来源地址https://www.toymoban.com/news/detail-756403.html

到了这里,关于分类任务使用Pytorch实现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日
    浏览(33)
  • grad-CAM用于自己的语义分割网络【亲测】

    参考链接:https://github.com/jacobgil/pytorch-grad-cam  我遇到了 如下错误 解决方法: 将base_cam.py的第81行修改为:  就不报错了! 拿下!    

    2024年02月02日
    浏览(34)
  • [ 可视化 ] 经典网络模型 —— Grad-CAM 详解与复现

    🤵 Author :Horizon Max ✨ 编程技巧篇 :各种操作小结 🎇 机器视觉篇 :会变魔术 OpenCV 💥 深度学习篇 :简单入门 PyTorch 🏆 神经网络篇 :经典网络模型 💻 算法篇 :再忙也别忘了 LeetCode 随着神经网路模型的不断发展,深度模型通过使用 更抽象 (增加网络层数)和 更紧密

    2024年02月02日
    浏览(28)
  • yolov5热力图可视化grad-cam踩坑经验分享

    最近在做热力图的可视化,网上搜了很多的资料,但是大部分都是需要在原网络结构上进行修改,非常的不方便。最后在网上找到一位博主分享的即插即用的模块,觉得效果还可以,但是中间有些细节,需要注意。 原博文地址: https://blog.csdn.net/qq_37706472/article/details/12871460

    2024年02月04日
    浏览(31)
  • grad-cam用于3D分割网络的代码修改——以及特征层非常规输出的解决方法

    首先,我们看下chatgpt写的Gradcam框架。 为了个性化设计输出的cam,我们需要修改源码。也就是GradCAM()函数。 先解读一下原版 可以看到并没有太多函数方法,我们打开基类BaseCAM() 看一下ActivationsAndGradients 可以看到,ActivationsAndGradients类主要的功能是通过钩子函数获取正向传播

    2024年02月06日
    浏览(28)
  • 基于PyTorch使用LSTM实现新闻文本分类任务

    PyTorch深度学习项目实战100例 https://weibaohang.blog.csdn.net/article/details/127154284?spm=1001.2014.3001.5501 基于PyTorch使用LSTM实现新闻文本分类任务的概况如下: 任务描述:新闻文本分类是一种常见的自然语言处理任务,旨在将新闻文章分为不同的类别,如政治、体育、科技等。 方法:使

    2024年02月09日
    浏览(33)
  • 【机器学习合集】人脸表情分类任务Pytorch实现&TensorBoardX的使用 ->(个人学习记录笔记)

    注意:整个项目来自阿里云天池,下面是开发人员的联系方式,本人仅作为学习记录!!! 该文章原因,学习该项目,完善注释内容,针对新版本的Pytorch进行部分代码调整 本文章采用pytorch2.0.1版本,python3.10版本 源码链接 1. 网络结构 2. 训练函数 部分代码内容与作者不同

    2024年02月08日
    浏览(29)
  • 使用PyG(PyTorch Geometric)实现基于图卷积神经网络(GCN)的节点分类任务

    PyG(PyTorch Geometric)是一个基于PyTorch的库,可以轻松编写和训练图神经网络(GNN),用于与结构化数据相关的广泛应用。 它包括从各种已发表的论文中对图和其他不规则结构进行深度学习的各种方法,也称为几何深度学习。此外,它还包括易于使用的迷你批处理加载程序,用

    2023年04月20日
    浏览(33)
  • 卷积神经网络CNN原理+代码(pytorch实现MNIST集手写数字分类任务)

    前言 若将图像数据输入全连接层,可能会导致丧失一些位置信息 卷积神经网络将图像按照原有的空间结构保存,不会丧失位置信息。 卷积运算: 1.以单通道为例: 将将input中选中的部分与kernel进行数乘 : 以上图为例对应元素相乘结果为211,并将结果填入output矩阵的左上角

    2024年02月04日
    浏览(46)
  • CAM实现的流程--基于Pytorch实现

    可视化CNN的工具, CAM解释网络特征变化,CAM使得弱监督学习发展成为可能,可以慢慢减少对人工标注的依赖,能降低网络训练的成本。通过可视化,就像往黑箱子里打了一个手电筒,让人们可以尝试去理解网络。 在不同空间位置处存在这些视觉图案的加权线性和, 通过简单

    2024年02月11日
    浏览(23)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包