Pytorch使用Grad-CAM绘制热力图

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

原理与代码学习自B站霹雳吧啦Wz老师
使用grad_cam对不同预测目标的图像做activate图。
效果见下图。
pytorch画热力图,python 图像处理,Python,pytorch,深度学习,人工智能,图像处理,opencv

pytorch画热力图,python 图像处理,Python,pytorch,深度学习,人工智能,图像处理,opencv
使用的是自己训练的MobileNetV2
需要模型feature的最后一层,模型训练权重。
代码如下:

import json
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 utils import GradCAM, show_cam_on_image, center_crop_img
from model_v2 import MobileNetV2

def main():
	#----载入自己的模型,按照自己训练集训练的
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    model = MobileNetV2(num_classes=5)#.to(device)
    # load model weights
    model_weight_path = "./MobileNetV2.pth"
    model.load_state_dict(torch.load(model_weight_path, map_location=device))#加载权重
    model.eval()
    target_layers = [model.features[-1]] # 拿到最后一个层结构
    
    #载入模型,模型权重---载入的模型是按照ImageNet训练的(不是自己的模型是从torchvision中导入的)
    #model = models.mobilenet_v3_large(pretrained=True) 
    #target_layers = [model.features[-1]] 

    # model = models.vgg16(pretrained=True)
    # target_layers = [model.features]

    # model = models.resnet34(pretrained=True)
    # target_layers = [model.layer4]

    # model = models.regnet_y_800mf(pretrained=True)
    # target_layers = [model.trunk_output]

    # model = models.efficientnet_b0(pretrained=True)
    # target_layers = [model.features]

    data_transform = transforms.Compose([transforms.ToTensor(),
                                         transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
    # load image
    img_path = "both.jpg"
    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 = center_crop_img(img, 224)

    # [C, H, W]
    img_tensor = data_transform(img)
    # expand batch dimension
    # [C, H, W] -> [N, C, H, W]
    input_tensor = torch.unsqueeze(img_tensor, dim=0)
    #实例化,输出模型,要计算的层
    cam = GradCAM(model=model, target_layers=target_layers, use_cuda=False)
    #感兴趣的label
    target_category = 0  # tabby, tabby cat
    # target_category = 254  # pug, pug-dog
    #计算cam图
    grayscale_cam = cam(input_tensor=input_tensor, target_category=target_category)#实例化
    # 将只传入的一张图的cam图提取出来
    grayscale_cam = grayscale_cam[0, :]
    #变成彩色热力图的形式
    visualization = show_cam_on_image(img.astype(dtype=np.float32) / 255., #将原图缩放到[0,1]之间
                                      grayscale_cam,
                                      use_rgb=True)
    #展示出来
    json_path = './class_indices.json'
    assert os.path.exists(json_path), "file: '{}' dose not exist.".format(json_path)
    with open(json_path, "r") as f:
        class_indict = json.load(f)
    plt.title(class_indict[str(target_category)])
    plt.imshow(visualization)
    plt.show()


if __name__ == '__main__':
    main()

还有别的图的效果。总之没有很精细,但也不错了。
大概就是在将本张图片分为感兴趣类(指定的类)时的它注意到的那部分,不是整张图全部有关的地方,只要有一部分就行。
pytorch画热力图,python 图像处理,Python,pytorch,深度学习,人工智能,图像处理,opencv
pytorch画热力图,python 图像处理,Python,pytorch,深度学习,人工智能,图像处理,opencv文章来源地址https://www.toymoban.com/news/detail-519716.html

到了这里,关于Pytorch使用Grad-CAM绘制热力图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 《python深度学习》笔记(二十):神经网络的解释方法之CAM、Grad-CAM、Grad-CAM++、LayerCAM

    原理 优点 缺点 GAP 将多维特征映射降维为一个固定长度的特征向量 ①减少了模型的参数量;②保留更多的空间位置信息;③可并行计算,计算效率高;④具有一定程度的不变性 ①可能导致信息的损失;②忽略不同尺度的空间信息 CAM 利用最后一个卷积层的特征图×权重(用

    2024年02月05日
    浏览(27)
  • 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)
  • grad-cam用于3D分割网络的代码修改——以及特征层非常规输出的解决方法

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

    2024年02月06日
    浏览(29)
  • pytorch 绘制一维热力图

    热力图(Heat Map)是指用 X 轴 和 Y 轴 表示的两个分类字段确定数值点的位置, 通过相应位置的矩形颜色去表现数值的大小 ,颜色深代表的数值大。 热力图是非常特殊的一种图,可以显示不可点击区域发生的事情。 热力图非常关注分布 ,可以不需要坐标轴,其背景通常是图

    2024年02月07日
    浏览(27)
  • pytorch 固定部分网络参数需要使用 with torch.no_grad()吗

    在 PyTorch 中,torch.no_grad() 是一个上下文管理器,用于设置一段代码的计算图不需要梯度。具体来说,当我们在 torch.no_grad() 的上下文中执行某些操作时,PyTorch 不会为这些操作自动计算梯度,以节省计算资源。 使用 torch.no_grad() 可以有如下几种情况: 测试模型:在测试模型或

    2024年02月11日
    浏览(26)
  • Pytorch autograd.grad与autograd.backward详解

    平时在写 Pytorch 训练脚本时,都是下面这种无脑按步骤走: 对用户屏蔽底层自动微分的细节,使得用户能够根据简单的几个 API 将模型训练起来。这对于初学者当然是极好的,也是 Pytorch 这几年一跃成为最流行的深度学习框架的主要原因:易用性。 但是,我们有时需要深究自

    2023年04月09日
    浏览(31)
  • 深入理解PyTorch中的train()、eval()和no_grad()

    ❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈 (封面图由文心一格生成) 在PyTorch中,train()、eval()和no_grad()是三个非常重

    2023年04月08日
    浏览(36)
  • CAM实现的流程--基于Pytorch实现

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

    2024年02月11日
    浏览(23)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包