grad-CAM用于自己的语义分割网络【亲测】

这篇具有很好参考价值的文章主要介绍了grad-CAM用于自己的语义分割网络【亲测】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、如果不出错的话

参考链接:https://github.com/jacobgil/pytorch-grad-cam 

1、 先将此github源码clone到本地

2、 参考pytorch-grad-cam/tutorials/Class Activation Maps for Semantic Segmentation.ipynb

3、 把包都导好。

4、注意推理做的归一化与标准化跟自己训练的时候弄成一样的
import warnings
warnings.filterwarnings('ignore')
warnings.simplefilter('ignore')
from torchvision.models.segmentation import deeplabv3_resnet50
import torch
import torch.functional as F
import numpy as np
import requests
import torchvision
from PIL import Image
from pytorch_grad_cam.utils.image import show_cam_on_image, preprocess_image
from models.model_stages_double import BiSeNet
from pytorch_grad_cam.grad_cam import GradCAM


# 读入自己的图像
image = np.array(Image.open('/media/wlj/soft_D/WLJ/WJJ/STDC-Seg/camera_4_crop/leftImg8bit/test/nok/NoK_4_leftImg8bit.png'))
rgb_img = np.float32(image) / 255
input_tensor = preprocess_image(rgb_img,
                                mean=[0.485, 0.456, 0.406],
                                std=[0.229, 0.224, 0.225])

# 读入自己的模型并且加载训练好的权重
model = BiSeNet(backbone='STDCNet813',n_classes=6)
model.cuda()
model = model.eval()
save_pth = '/media/wlj/soft_D/WLJ/WJJ/STDC-Seg/checkpoints/camera_4_crop/batch8_11.2_15000it_dublebaseline_left1xSGE2345_right0.5x_DFConv2_SGE3_RGB/model_maxmIOU100.pth'
model.load_state_dict(torch.load(save_pth))

if torch.cuda.is_available():
    model = model.cuda()
    input_tensor = input_tensor.cuda()

# 推理
output = model(input_tensor)[0]
normalized_masks = torch.softmax(output, dim=1).cpu()

# 自己的数据集的类别
sem_classes = [
    '__background__', 'round', 'nok', 'headbroken', 'headdeep', 'shoulderbroken'
]

sem_class_to_idx = {cls: idx for (idx, cls) in enumerate(sem_classes)}
round_category = sem_class_to_idx["nok"]
round_mask = torch.argmax(normalized_masks[0], dim=0).detach().cpu().numpy()
round_mask_uint8 = 255 * np.uint8(round_mask == round_category)
round_mask_float = np.float32(round_mask == round_category)

# 推理结果图与原图拼接
# both_images = np.hstack((image, np.repeat(round_mask_uint8[:, :, None], 3, axis=-1)))
# img = Image.fromarray(both_images)
# img.save("./hhhh.png")


class SemanticSegmentationTarget:
    def __init__(self, category, mask):
        self.category = category
        self.mask = torch.from_numpy(mask)
        if torch.cuda.is_available():
            self.mask = self.mask.cuda()

    def __call__(self, model_output):
        return (model_output[self.category, :, :] * self.mask).sum()

# 自己要放CAM的位置
target_layers = [model.conv_out]
targets = [SemanticSegmentationTarget(round_category, round_mask_float)]


with GradCAM(model=model, target_layers=target_layers,
             use_cuda=torch.cuda.is_available()) as cam:

    grayscale_cam = cam(input_tensor=input_tensor,
                        targets=targets)[0, :]
    cam_image = show_cam_on_image(rgb_img, grayscale_cam, use_rgb=True)

# 保存CAM的结果
img = Image.fromarray(cam_image)
img.show()
img.save('./result.png')

二、可能出错

我遇到了 如下错误from pytorch_grad_cam.grad_cam import gradcam,深度学习,人工智能

解决方法:

将base_cam.py的第81行修改为:

from pytorch_grad_cam.grad_cam import gradcam,深度学习,人工智能

 就不报错了!

拿下!

 from pytorch_grad_cam.grad_cam import gradcam,深度学习,人工智能

 文章来源地址https://www.toymoban.com/news/detail-785872.html

到了这里,关于grad-CAM用于自己的语义分割网络【亲测】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Pytorch使用Grad-CAM绘制热力图

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

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

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

    2023年04月19日
    浏览(24)
  • 类别激活热力图grad-cam(pytorch)实战跑图

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

    2024年02月07日
    浏览(29)
  • 分类任务使用Pytorch实现Grad-CAM绘制热力图

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

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

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

    2024年02月04日
    浏览(30)
  • 第九章:RefineNet——多路径细化网络用于高分辨率语义分割

    原文题目:《RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation》 原文引用:Lin G, Milan A, Shen C, et al. Refinenet: Multi-path refinement networks for high-resolution semantic segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 1925-1934. 原文链接: https://o

    2024年02月16日
    浏览(29)
  • BiSeNet:用于实时语义分割的双边分割网络——BiSeNet:Bilateral Segmentation Network for Real-time Semantic Segmentation

            语义分割需要丰富的空间信息和较大的感受野。然而,现代的方法通常为了实现实时推断速度而牺牲空间分辨率,导致性能下降。本文提出了一种新的双边分割网络(BiSeNet)来解决这个问题。我们首先设计了一个具有小步长的空间路径来保留空间信息并生成高分

    2024年04月28日
    浏览(28)
  • 用于弱监督语义分割的多类token transformer

    本文提出了一种新的基于Transformer的框架,将特定于类的对象定位映射学习为弱监督语义分割(WSSS)的伪标签。 标准视觉Transformer中一个类Token 的参与区域可以被利用来形成一个类不确定的定位映射 本文研究了Transformer模型是否也可以通过学习Transformer中的多个类Token 来有效地捕

    2023年04月09日
    浏览(40)
  • HGFormer:用于领域广义语义分割的层级式分组Transformer

    目前的语义分割模型在独立同分布条件下取得了巨大的成功。然而,在实际应用中,测试数据可能与训练数据来自不同的领域。因此,提高模型对领域差异的鲁棒性非常重要。 本文方法 这项工作研究了领域泛化设置下的语义分割,其中模型仅在源领域上训练,并在看不见的

    2024年02月08日
    浏览(32)
  • 【论文阅读】Swin Transformer Embedding UNet用于遥感图像语义分割

    Swin Transformer Embedding UNet for Remote Sensing Image Semantic Segmentation 全局上下文信息是遥感图像语义分割的关键 具有强大全局建模能力的Swin transformer 提出了一种新的RS图像语义分割框架ST-UNet型网络(UNet) 解决方案:将Swin transformer嵌入到经典的基于cnn的UNet中 ST-UNet由Swin变压器和CNN并联

    2024年02月08日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包