yolov9目标检测/分割预测报错AttributeError: ‘list‘ object has no attribute ‘device‘常见汇总

这篇文章主要是对yolov9目标检测和目标分割预测测试时的报错,进行解决方案。

在说明解决方案前,严重投诉、吐槽一些博主发的一些文章,压根没用的解决方法,也不知道他们从哪里抄的,误人子弟、浪费时间。

我在解决前,也搜索了很多相关的报错解决方案,他们纯属乱来,都没有亲自尝试。

报错一:目标检测AttributeError: 'list' object has no attribute 'device'

最近微智启软件工作室在运行yolov9目标检测的detect.py测试代码时,报错:
File "G:\down\yolov9-main\yolov9-main\detect.py", line 102, in run
ValueError: only one element tensors can be converted to Python scalars
    pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det)
  File "G:\down\yolov9-main\yolov9-main\utils\general.py", line 905, in non_max_suppression
    device = prediction.device
AttributeError: 'list' object has no attribute 'device'

这是因为general.py代码中,900行左右的代码错误了,可以看到里面是一个包含两个数据的,假如直接设置是会报错的

general.py的位置可以直接点击报错的这个链接跳转,当然也可以在根目录下的yolov9-main\utils\general.py手动打开

下面的yolov5的,可以看到只有一个数据,所以不会报错,照抄代码是不对的哟,官方大大!

所以需要对代码进行遍历,设置它改写后的代码如下,替换之前的代码即可。

  if isinstance(prediction, (list, tuple)):
        processed_predictions = []  # 用于存储处理后的张量列表
        for pred_tensor in prediction:
            # 对每个张量进行处理
            processed_tensor = pred_tensor[0]  # 假设你只关心张量中的第一个结果
            processed_predictions.append(processed_tensor)  # 将处理后的张量添加到列表中

        # 使用处理后的张量列表中的第一个张量作为预测结果
        prediction = processed_predictions[0]

    # 在此之后可以继续使用 prediction 变量
    device = prediction.device



替换后的代码格式如下

之后再运行,即可完美解决!
现在是2024年2月23日,后期官方可能会修改这个bug,根据具体情况来修改。

报错二:目标检测AttributeError: 'list' object has no attribute 'view'

```
Traceback (most recent call last):
  File "G:\down\yolov9-main\yolov9-main\train.py", line 635, in <module>
    main(opt)
  File "G:\down\yolov9-main\yolov9-main\train.py", line 529, in main
    train(opt.hyp, opt, device, callbacks)
  File "G:\down\yolov9-main\yolov9-main\train.py", line 305, in train
    loss, loss_items = compute_loss(pred, targets.to(device))  # loss scaled by batch_size
  File "G:\down\yolov9-main\yolov9-main\utils\loss_tal.py", line 168, in __call__
    pred_distri, pred_scores = torch.cat([xi.view(feats[0].shape[0], self.no, -1) for xi in feats], 2).split(
  File "G:\down\yolov9-main\yolov9-main\utils\loss_tal.py", line 168, in <listcomp>
    pred_distri, pred_scores = torch.cat([xi.view(feats[0].shape[0], self.no, -1) for xi in feats], 2).split(
AttributeError: 'list' object has no attribute 'view'
```

解决方案:在v8之前,我们都是习惯配置train.py进行训练的,但是根据v9作者在GitHub上的回复来看,我们应该用train_dual.py这个来训练,而不是train.py。

train.py至于有啥用,暂时没见回复,不过我觉得更多的像是一种备份没有删除。

三:

	# Update model
    model.eval()
    for k, m in model.named_modules():
        # if isinstance(m, (Detect, V6Detect)):
        if isinstance(m, Detect):
            m.inplace = inplace
            m.dynamic = dynamic
            m.export = True

    for _ in range(2):
        y = model(im)  # dry runs
    if half and not coreml:
        im, model = im.half(), model.half()  # to FP16    
    # shape = tuple((y[0] if isinstance(y, tuple) else y).shape)  # model output shape
    shape = tuple((y[0][0] if isinstance(y, tuple) else y).shape)  # model output shape
    metadata = {'stride': int(max(model.stride)), 'names': model.names}  # model metadata
    LOGGER.info(f"\n{colorstr('PyTorch:')} starting from {file} with output shape {shape} ({file_size(file):.1f} MB)")

报错三:分割预测报错AttributeError: 'list' object has no attribute 'shape'

Traceback (most recent call last):
  File "predict.py", line 246, in <module>
    main(opt)
  File "predict.py", line 241, in main
    run(**vars(opt))
  File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context
    return func(*args, **kwargs)
  File "predict.py", line 126, in run
    masks = process_mask(proto[i], det[:, 6:], det[:, :4], im.shape[2:], upsample=True)  # HWC
  File "/root/autodl-tmp/yolov9-main/utils/segment/general.py", line 54, in process_mask
    c, mh, mw = protos.shape  # CHW
AttributeError: 'list' object has no attribute 'shape'

解决方案:

根据报错的位置,找到segment文件夹下面的predict.py。在126行附近,把原本masks的这整行,替换成新的(如下代码)

masks = process_mask(proto[2].squeeze(0), det[:, 6:], det[:, :4], im.shape[2:], upsample=True)   # HWC

最后也吐槽一下官方,那么久了,这么基础的功能还总是报错,能不能用点心啊。

文章由微智启原创,转载请标明出处,谢谢。
如果还有其他问题,可以联系技术客服:3447362049
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM 实战篇(一万字)

此笔记来至于 黑马程序员 内存调优 内存溢出和内存泄漏 内存泄漏&#xff08;memory leak&#xff09;&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在 GC ROOT 的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情况就称之为内…

Rust usize类型(用来表示地址的类型)Rust地址与指针的区别(Rust指针)

文章目录 Rust usize类型Rust地址与指针的区别&#xff08;指针有数据类型&#xff0c;而地址只是一个数字&#xff09;指针地址使用场景示例 Rust usize类型 在Rust中&#xff0c;地址通常表示为usize类型&#xff0c;这是因为usize是专门设计用来存储指针大小的无符号整型&a…

vue综合指南(五)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:vue综合指南 目录 81 简述每个周期具体适合哪些场景 82、Vue $forceUpdate的原理 83、vue获取数…

MySQL—关于数据库的CRUD—(增删改查)

文章目录 关于数据库的使用&#xff1a;1. 数据库的背景知识&#xff1a;2. MYSQL数据库软件的使用&#xff08;MYSQL安装的问题在另一篇博客中讲解&#xff09;。&#xff08;1&#xff09;启动MYSQL数据库软件&#xff08;2&#xff09;开始使用数据库程序&#xff1a;1&…

leetcode动态规划(一)-理论基础

本节主要参考&#xff1a;代码随想录 题目分类 动态规划释义 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 动态规划中每一个状态一定是由上一个状态推导出来…

车辆管理的SpringBoot技术革新

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了车辆管理系统的开发全过程。通过分析车辆管理系统管理的不足&#xff0c;创建了一个计算机管理车辆管理系统的方案。文章介绍了车辆管理系统的系统分析部分&…

使用 OpenWebUI 一键部署 Mistral-Large-Instruct-2407-AWQ

教程及模型简介 该教程是使用 OpenWebUI 一键部署 Mistral-Large-Instruct-2407-AWQ&#xff0c;相关环境和配置已经搭建完成&#xff0c;只需克隆启动容器即可进行推理体验。 Mistral-Large-Instruct-2407-AWQ 是法国人工智能公司 Mistral AI 发布的新一代旗舰 AI 模型&…

操作系统简介:作业管理

作业管理 一、作业管理1.1 作业控制1.2 作业的状态及其转换1.3 作业控制块和作业后备队列 二、作业调度2.1 调度算法的选择2.2 作业调度算法2.3 作业调度算法性能的衡量指标 三、人机界面 作业&#xff1a;系统为完成一个用户的计算任务&#xff08;或一次事务处理&#xff09;…

RabbitMQ 核心功能详解

引言 在现代分布式系统中&#xff0c;消息队列已经成为一种不可或缺的组件。它不仅能够实现应用之间的解耦&#xff0c;还能提高系统的灵活性和可扩展性。RabbitMQ 是一款基于 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;协议的消息中间件&#xff0c;以其…

【人工智能】人工智能的10大算法详解(优缺点+实际案例)

人工智能&#xff08;AI&#xff09;是现代科技的重要领域&#xff0c;其中的算法是实现智能的核心。本文将介绍10种常见的人工智能算法&#xff0c;包括它们的原理、训练方法、优缺点及适用场景。 1. 线性回归&#xff08;Linear Regression&#xff09; 模型原理 线性回归…

2021年10月自考《软件开发工具》03173试题

目录 一.选择题 二.填空题 三.简答题 五.综合题 一.选择题 1.下列各项属于集成化开发工具的是 &#xff08;书中&#xff09;P96页 A.WORDSTAR B.FLOW C.Dictionary/3000 D.Visual Studio 2.软件工程的思想主要服务于 &#xff08;书中&#xff09;P84页面 A.用户 B.项目…

虚拟现实辅助工程技术在现代汽车制造中的重要性

虚拟现实辅助工程&#xff08;VR Aided Engineering&#xff09;&#xff0c;简称VAE&#xff0c;作为数字化转型的重要手段&#xff0c;在各行各业被越来越广泛的应用。随着汽车变得越来越复杂&#xff0c;虚拟现实辅助工程技术逐渐成为汽车行业产品开发过程中不可或缺的一部分…

Redis --- 第四讲 --- 常用数据结构 --- string类型

一、认识数据类型和编码方式 有序集合&#xff0c;相当于除了存储member之外&#xff0c;还需要存储一个score&#xff08;权重&#xff0c;分数&#xff09; Redis底层在实现上述数据结构的时候&#xff0c;会在源码层面&#xff0c;针对上述实现进行特定的优化&#xff0c;来…

3 机器学习之假设空间

归纳(induction)与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程&#xff0c;即从具体的事实归结出一般性规律&#xff1b;后者则是从一般到特殊的“特化”(specialization)过程&#xff0c;即从基础原理推演出具体状况。例如&a…

学习JAVA中的Spring MVC常用注解及三层架构,这一篇就够了

Spring Web MVC 一&#xff1a;什么是 Spring Web MVC&#xff1f;什么是Servlet呢&#xff1f;什么是Servlet API1.1 MVC 定义1.2 什么是Spring MVC ?1.3SpringBoot和SpringMVC的区别 二&#xff1a;Spring MVC中常用注解的使用2.1 RequestMapping:地址映射2.2 RequestBody:请…

Golang | Leetcode Golang题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; func findComplement(num int) int {highBit : 0for i : 1; i < 30; i {if num < 1<<i {break}highBit i}mask : 1<<(highBit1) - 1return num ^ mask }

大模型缺的脑子,终于在智能体上长好了

智能体是一种通用问题解决器&#xff0c;从软件工程的角度看来&#xff0c;智能体是一种基于大语言模型的&#xff0c;具备规划思考能力、记忆能力、使用工具函数的能力&#xff0c;能自主完成给定任务的计算机程序。 大模型拥有接受输入&#xff0c;分析推理&#xff0c;继而…

k8s备份恢复(velero)

velero简介 velero官网&#xff1a; https://velero.io/ velero-github&#xff1a; https://github.com/vmware-tanzu/velero velero的特性 备份可以按集群资源的子集&#xff0c;按命名空间、资源类型标签选择器进行过滤&#xff0c;从而为备份和恢复的内容提供高度的灵活…

【Linux】【Jenkins】后端maven项目打包教程-Linux版

本次安装版本&#xff1a;2.4 jenkins详细安装教程1、安装git环境2、安装mavne环境2.1 下载依赖2.2、解压、赋权2.2、配置环境变量2.3、验证安装 3、jenkins-插件下载3.1、进入jenkins-->系统管理3.2、进入系统管理-->插件管理3.3、下载两个插件&#xff08;如果之前下载…

创建GitHub仓库和Git更换远程仓库

文章为个人笔记&#xff0c;详情请看reference 创建 GitHub 创建好账号点击自己头像&#xff0c;出现下拉菜单&#xff0c;点击Your profile 创建成功如下 下载Git 绑定用户 设置ssh-key ssh-keygen -t rsa -C “xxxxxx163.com 之后一直en回车 C:\Users\Y\ .ssh id_rsa…