Yolov5的类激活图

news2024/11/24 4:33:10

在本教程中,我们将了解如何将 EigenCAM(无梯度方法之一)用于 YOLO5。

这是https://github.com/jacobgil/pytorch-grad-cam/blob/master/tutorials/Class Activation Maps for Object Detection With Faster RCNN.ipynb 中 适用于 YOLO5的教程的简单得多的版本。

如果您想使用其他方法,如 AblationCAM,您可以使用其他教程。

作为上面教程的提醒,我们将使用无梯度方法进行对象检测,因为大多数框架不支持计算梯度。

我们将使用 ultralytics 的 YOLO5 模型

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

您还记得,在使这个库适应新架构时,您需要考虑三件主要事情:

  • 重塑变换。这用于从模型中获取激活并处理它们,使它们成为二维格式。例如,有时这些层不会输出张量,而是张量的元组。所以我们需要一个知道深入输出并找到我们的 2D 激活的函数。
    在 YOLO5 的情况下,不需要这个,我们得到一个二维空间张量。

  • 指导我们的类激活图的目标函数。
    对于 EigenCAM,没有目标函数。我们将对 2D 激活进行 PCA。
    如果我们要使用另一种方法,如 AblationCAM,我们将需要它,然后您可以查看上面的 faster-rcnn 教程。

  • 从中提取 2D 激活的目标层。我们将使用倒数第二层。YOLO5 中的最后一层输出检测结果,因此我们将使用它之前的一层。打印模型并使用它之后,这是在

model.model.model.model[-2]

首先让我们编写一些样板代码来对图像进行前向传递并显示检测结果:

import warnings
warnings.filterwarnings('ignore')
warnings.simplefilter('ignore')
import torch    
import cv2
import numpy as np
import requests
import torchvision.transforms as transforms
from pytorch_grad_cam import EigenCAM
from pytorch_grad_cam.utils.image import show_cam_on_image, scale_cam_image
from PIL import Image

COLORS = np.random.uniform(0, 255, size=(80, 3))

def parse_detections(results):
    detections = results.pandas().xyxy[0]
    detections = detections.to_dict()
    boxes, colors, names = [], [], []

    for i in range(len(detections["xmin"])):
        confidence = detections["confidence"][i]
        if confidence < 0.2:
            continue
        xmin = int(detections["xmin"][i])
        ymin = int(detections["ymin"][i])
        xmax = int(detections["xmax"][i])
        ymax = int(detections["ymax"][i])
        name = detections["name"][i]
        category = int(detections["class"][i])
        color = COLORS[category]

        boxes.append((xmin, ymin, xmax, ymax))
        colors.append(color)
        names.append(name)
    return boxes, colors, names


def draw_detections(boxes, colors, names, img):
    for box, color, name in zip(boxes, colors, names):
        xmin, ymin, xmax, ymax = box
        cv2.rectangle(
            img,
            (xmin, ymin),
            (xmax, ymax),
            color, 
            2)

        cv2.putText(img, name, (xmin, ymin - 5),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2,
                    lineType=cv2.LINE_AA)
    return img


image_url = "https://upload.wikimedia.org/wikipedia/commons/f/f1/Puppies_%284984818141%29.jpg"
img = np.array(Image.open(requests.get(image_url, stream=True).raw))
img = cv2.resize(img, (640, 640))
rgb_img = img.copy()
img = np.float32(img) / 255
transform = transforms.ToTensor()
tensor = transform(img).unsqueeze(0)

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
model.eval()
model.cpu()
target_layers = [model.model.model.model[-2]]

results = model([rgb_img])
boxes, colors, names = parse_detections(results)
detections = draw_detections(boxes, colors, names, rgb_img.copy())
Image.fromarray(detections)

在这里插入图片描述
现在让我们创建我们的 CAM 模型并在图像上运行它:

cam = EigenCAM(model, target_layers, use_cuda=False)
grayscale_cam = cam(tensor)[0, :, :]
cam_image = show_cam_on_image(img, grayscale_cam, use_rgb=True)
Image.fromarray(cam_image)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

堆排序(算法实现)

文章目录堆排序-算法实现1. 向上调整和向下调整比较2. 堆排序1. 升序2. 降序堆排序-算法实现 前面介绍了堆的基本功能实现(https://blog.csdn.net/m0_46343224/article/details/127986662)&#xff0c;了解了堆&#xff0c;这里用堆实现排序 1. 向上调整和向下调整比较 思考&a…

1. pip和conda的区别

Pip 或者 conda的时候经常被混合使用&#xff0c;这两者也通常被认为是几乎相同的&#xff0c;尽管他们的很多功能是重叠的&#xff0c;但它们的设计和使用目的不同。所以这次参考官方的解释&#xff0c;来进行如下总结和归纳&#xff1a;附上官方解释&#xff1a;conda和pip的…

关于Python的局部变量和全局变量使用介绍

局部变量&#xff1a;在函数中定义的变量&#xff0c;作用域是当前函数&#xff0c;只对当前函数起作用。 全局变量&#xff1a;在代码开头定义的变量&#xff0c;作用域是整段代码&#xff0c;对整段代码起作用。 先看下面的实例&#xff0c; 最后给结论。 name ‘PythonTa…

月薪9K和年薪30W的职位,有什么区别?

【浙江杭州】加速科技 测试开发工程师&#xff08;15-30W/年&#xff09; 岗位职责&#xff1a; 1、根据产品的需求编写测试用例&#xff0c;搭建软硬件联合测试环境&#xff1b; 2、对研发的模块/系统进行测试并输出测试报告&#xff1b; 3、整理并定期提交buglist&#…

我的PFC岩土颗粒流离散元分析攻略(附赠学习资料)

作者 | Lobby &#xff0c;仿真秀专栏作者 导读&#xff1a;lobby曾是国内“双一流“”院校本硕连读土木专业的大学生&#xff0c;现在从事土木相关的研发工作。目前在仿真秀官网发布过数十篇付费文章&#xff0c;含金量颇高&#xff0c;受到用户的好评。本期我们将带来lobby老…

差分 【一维差分和二维差分】

全文目录&#x1f914;一维差分&#x1f615;差分数组的构建&#x1f914;二维差分&#x1f615;差分矩阵的构建&#x1f914;一维差分 首先来了解一下差分的性质&#xff0c;差分是前缀和的逆运算&#xff0c;如果说前缀和是&#xff1a;S f(n) &#xff0c;那么差分就是 D …

轻松拿下——类的默认成员函数

六大默认成员函数&#xff1a; 1、初始化&#xff1a;构造函数主要完成初始化工作 2、清理&#xff1a;析构函数主要完成清理工作 3、拷贝复制&#xff1a;拷贝构造是使用同类对象初始化创建对象 4、拷贝复制&#xff1a;赋值重载主要是把一个对象赋值给另一个对象&#xff…

linux文件压缩、解压缩以及归档

一、文件压缩、解压缩 1.linux compress命令&#xff08;compress/uncompress&#xff09; &#xff08;1&#xff09;压缩文件&#xff1a; [rootserver ~]# du -sh passwd1---查看文件大小 [rootserver ~]# time compress passwd1---time&#xff1a;查看时间 compress&…

医学主题词表(Medical Subject Headings, MeSH)

Medical Subject Headings 简称MeSH&#xff0c;由美国国立医学图书馆&#xff08;NLM出版&#xff09;&#xff0c;是目前最权威最常用的标准医学主题词表。 MeSH由范畴表&#xff08;Categories and Subcategories&#xff09;、字顺表&#xff08;Alphabetic listing&#…

AI 边缘计算平台 - 爱芯元智 AX620A 爱芯派开箱

最近疫情有点猛&#xff0c;宅在家里&#xff0c;没事找点事干&#xff0c;撸撸板子吧。 拿出来趁着双 11 优惠&#xff0c;花了 520 RMB / 块&#xff0c;买的两块爱芯派&#xff08;套餐&#xff09;&#xff0c;来个开箱贴&#xff0c;顺便测试一下开发板的串口、网口、音频…

智慧井盖解决方案-最新全套文件

智慧井盖解决方案-最新全套文件一、建设背景行业痛点二、建设思路三、建设方案四、获取 - 智慧井盖全套最新解决方案合集一、建设背景 城市井盖是每个城市管理的难点&#xff0c;井盖数量多&#xff0c;容易发生井盖破损或丢失后出现人员与财产损失。给群众生命财产带来损害。…

基于Netty的高性能API网关设计

0. 本文目的 对于网关设计&#xff0c;业界已有很多成熟的解决方案&#xff0c;开箱即用或者稍作自定义都能满足需求。本文主要是通过网关需求了解底层netty的使用&#xff0c;所以重心在netty的实践使用上。 1. 什么是网关 网关(Gateway)又称网间连接器、协议转换器。网关在…

基于球向量的粒子群优化(SPSO)算法在无人机路径规划中的实现(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

PyTorch for Audio + Music Processing(2/3/4/5/6/7) :构建数据集和提取音频特征

基于Torchaudio构建数据集 文章目录基于Torchaudio构建数据集前言02 Training a feed forward network03 Making predictions04 Creating a custom dataset05 Extracting Mel spectrograms06 Padding audio files07 Preprocessing data on GPU一、下载数据集文件目录标注格式二…

19 【RTK Query】

19 【RTK Query】 1.目前前端常见的发起 ajax 请求的方式 1、使用原生的ajax请求2、使用jquery封装好的ajax请求3、使用fetch发起请求4、第三方的比如axios请求5、angular中自带的HttpClient 就目前前端框架开发中来说我们在开发vue、react的时候一般都是使用fetch或axios自…

web前端期末大作业【 大学生抗疫感动专题网页设计】HTML+CSS

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Prometheus 使用cadvisor采集docker容器监控数据

Prometheus采集主机监控参考部署下载&#xff0c;图形生成 系统安装Grafana downloadWindows参考图形生成参考win_exporterLinux参考node_exporterMysql参考Mysql_exporterSQL Server参考SQL exporterRedis 参考Redis_exportercadvisor参考cadvisor snmp_exporter 参考图形展示…

Redis详细教程

【尚硅谷】2021最新版Redis详细教程&#xff08;基于Redis 6.2.x版本&#xff09; 文章目录 一、前言二、NoSQL数据库简介 1.技术发展 1.1 Web1.0时代1.2 Web2.0时代1.3 解决CPU及内存压力1.4 解决IO压力 2.NoSQL数据库 2.1 NoSQL数据库概述2.2 NoSQL适用场景2.3 NoSQL不适用…

小啊呜产品读书笔记001:《邱岳的产品手记-09》第17讲 产品经理如何获得非权力性的影响力 第18讲 产品案例分析:WWFTogether的情怀设计

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-09》第17讲 产品经理如何获得非权力性的影响力 & 第18讲 产品案例分析&#xff1a;WWFTogether的情怀设计一、今日阅读计划二、泛读&知识摘录1、第17讲 产品经理如何获得非权力性的影响力&#xff1f;2、第18讲 产品…

Unity 打印安卓apk报错的日志

文章目录环境连接安卓手机附录环境 1.华为手机打开调试模式&#xff1a; 【设置】|【关于手机】|【版本号】点三次。 2.unity3d 环境设置&#xff1a; 【File】|【Building Settings】开启必备选项 &#xff08;其他非必选&#xff0c;最好勾上&#xff09;&#xff1a; D…