CAMs激活图可视化系列——GradCAM

文章介绍了GradCAM算法的原理,展示了如何使用Pytorch官方模块和自定义修改版代码进行CAM激活图的生成。GradCAM是一种用于理解深度学习模型视觉注意力的技术,它通过计算特征图的梯度来生成热力图,从而揭示模型在图像识别中的关注区域。文中提供了两个代码示例,分别基于官方模块和自定义修改版,可用于不同模型和类别编码。实验结果显示,GradCAM的效果受模型和类别选择影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理

原作者论文CAM原理原作者论文CAM原理图
特征图关于这个类别分数的梯度(维度为[C, H, W])。最后对特征图梯度的空间维度计算平均值,得到与类别信息有关且与特征图通道数一致的权重,再根据权重将原图与热力图(激活图)叠加即可。其中叠加的热力图要与原图大小一致(所以其中可能有加入一些如插值等的图像增强操作)

官方模块安装

pip install grad-cam

注意

在这里插入图片描述

GradCAM代码(本人修改:直接可用——官方版PLUS)

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


#####torch 模块项目(官方版+进阶使用)来源:https://github.com/jacobgil/pytorch-grad-cam####
####原理参考:https://blog.youkuaiyun.com/qq_37541097/article/details/123089851
######CAM 模块化代码(黑盒)


def Grad_CAM_perBox(model, target_layers, img_path, save_path, target_category):
    image = img_path

    # 此部分可抽取出来做成模块,然后列表使用
    data_transform = transforms.Compose([transforms.ToTensor(),
                                         transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
    # load image
    img_path = image
    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)

    # [N, C, H, W]
    img_tensor = data_transform(img)
    # expand batch dimension
    input_tensor = torch.unsqueeze(img_tensor, dim=0)

    cam = GradCAM(model=model, target_layers=target_layers, use_cuda=False)


    #####torch官方用法
    target_category = target_category
    ####target_category = None  ####默认获取最大概率类别获得CAM图

    grayscale_cam = cam(input_tensor=input_tensor, targets=target_category)


    # #####按自己输入的类别编码获取CAM图
    # targets = [ClassifierOutputTarget(target_category)]
    #
    # grayscale_cam = cam(input_tensor=inpu
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值