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 modelmodel.eval()for k, m in model.named_modules():# if isinstance(m, (Detect, V6Detect)):if isinstance(m, Detect):m.inplace = inplacem.dynamic = dynamicm.export = Truefor _ in range(2):y = model(im)  # dry runsif 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 shapeshape = tuple((y[0][0] if isinstance(y, tuple) else y).shape)  # model output shapemetadata = {'stride': int(max(model.stride)), 'names': model.names}  # model metadataLOGGER.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 mainrun(**vars(opt))File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/_contextlib.py", line 115, in decorate_contextreturn func(*args, **kwargs)File "predict.py", line 126, in runmasks = process_mask(proto[i], det[:, 6:], det[:, :4], im.shape[2:], upsample=True)  # HWCFile "/root/autodl-tmp/yolov9-main/utils/segment/general.py", line 54, in process_maskc, 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
 

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

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

相关文章

Lampiao靶机入侵实战

07-Lampiao靶机入侵实战 一、扫描采集信息 1、获取IP地址 nmap -sn 192.168.81.0/24获得IP地址为&#xff1a;192.168.81.1282、获取端口信息 由于nmap默认情况下只扫描常用的1000个端口&#xff0c;覆盖面并不全&#xff0c;所以建议全端口扫描 nmap -p 1-65535 192.168.…

DiffusionDet: Diffusion Model for Object Detection—扩散模型检测论文解析

DiffusionDet: Diffusion Model for Object Detection—扩散模型检测论文解析 这是一篇发表在CVPR 2023的一篇论文&#xff0c;因为自己本身的研究方向是目标跟踪&#xff0c;之前看了一点使用扩散模型进行多跟踪的论文&#xff0c;里面提到了DiffusionDet因此学习一下。 论文…

读数据工程之道:设计和构建健壮的数据系统21数据获取

1. 数据获取 1.1. 数据获取是将数据从一个地方移动到另一个地方的过程 1.1.1. 数据获取与系统内部获取是不同的 1.2. 数据获取是数据工程生命周期中将数据从源系统移入存储的一个中间步骤 1.3. 数据集成则是将来自不同来源系统的数据组合到一个新的数据集 1.4. 数据获取的…

Java中如何实现对象的序列化与反序列化过程?

1、Java中如何实现对象的序列化与反序列化过程&#xff1f; 在Java中&#xff0c;对象序列化是一个过程&#xff0c;该过程可以将对象的状态&#xff08;属性&#xff09;转化为可以传输或者存储的形式&#xff0c;然后再将对象状态&#xff08;属性&#xff09;反序列化回对象…

数字后端零基础入门系列 | Innovus零基础LAB学习Day6

今天没有具体的数字IC后端lab实验。今天的重点是熟悉掌握静态时序分析STA中的几类timing path以及setup和hold检查机制&#xff08;包含setup和hold计算公式&#xff09;。 芯片流片失败的那些故事 数字后端零基础入门系列 | Innovus零基础LAB学习Day5 等大家把今天内容学习…

QT获取本机所有IP地址以及修改本机IP(注意区分Windows和Linux环境)

QT 获取本机所有 IP 地址 Chapter1 QT 获取本机所有 IP 地址获取本机所有 IP 地址&#xff0c;包括 IPV6的地址&#xff0c;需要引用 QNetworkInterface1.检索所有网络接口&#xff1a;2.获取接口的详细信息&#xff1a;3.获取接口的 IP 地址&#xff1a;4.用于网络诊断和监控&…

KEYSIGHT E4980A是德E4980AL 精密LCR表

Keysight E4980A 精密 LCR 表为各种元件测量提供了精度、速度和多功能性的最佳组合。 E4980A 在低阻抗和高阻抗范围内提供快速测量速度和出色的性能&#xff0c;是元件和材料的一般研发和制造测试的终极工具。 LAN、USB 和 GPIB PC 连接可提高您的设计和测试效率。 Keysight E4…

大语言模型的Scaling Law【Power Low】

NLP-大语言模型学习系列目录 一、注意力机制基础——RNN,Seq2Seq等基础知识 二、注意力机制【Self-Attention,自注意力模型】 三、Transformer图文详解【Attention is all you need】 四、大语言模型的Scaling Law【Power Low】 文章目录 NLP-大语言模型学习系列目录一、什么是…

华为HarmonyOS实现实时语音识别转文本

场景介绍 将一段音频信息&#xff08;短语音模式不超过60s&#xff0c;长语音模式不超过8h&#xff09;转换为文本&#xff0c;音频信息可以为pcm音频文件或者实时语音。 开发步骤 在使用语音识别时&#xff0c;将实现语音识别相关的类添加至工程。 import { speechRecogni…

练习LabVIEW第十九题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第十九题&#xff1a; 创建一个程序把另外一个VI的前面板显示在Picture控件中 开始编写&#xff1a; 在前面板放置一个二…

第二十七节 图像的卷积操作

图像的卷积操作 图像的卷积操作可以看成是一个窗口区域在另一个大的图像上移动&#xff0c;对每个窗口覆盖的区域都进行点成得到的的值作为像素点的输出值&#xff0c;窗口的移动是从左到右&#xff0c;从上到下&#xff0c;窗口可以理解成一个指定大小的二维矩阵&#xff0c;…

iOS AVAudioSession 详解【音乐播放器的配置】

前言 在 iOS 音频开发中&#xff0c;AVAudioSession 是至关重要的工具&#xff0c;它控制着应用的音频行为&#xff0c;包括播放、录音、后台支持和音频中断处理等。对于音乐播放器等音频需求强烈的应用&#xff0c;设计一个合理的 AVAudioSession 管理体系不仅能保证音频播放…

MyBatis 配置详解

在项目中经常会用到 mybatis 相关的一些配置&#xff0c;而在启动类项目工程中&#xff0c;一般会把 mybatis 配置文件单独写到 mybatis,yml 中&#xff0c;如下简单介绍下常用的 mybatis 配置 mybatis:configuration:call-setters-on-nulls: truemap-underscore-to-camel-case…

一文详解高光谱数据python处理包spectral(SPy)

一、基本操作 读取高光谱数据文件 import spectral # 读取ENVI格式的高光谱图像 # image的后缀可以是.raw、.spe、.lan等 # 代码里img对象&#xff0c;类似于rasterio库的dataset对象&#xff0c;可以用它来读取高光谱数据 img spectral.envi.read_envi(filemy_data.hdr, im…

【LeetCode】修炼之路-0008- String to Integer (atoi)【python】

题目 基本思路 其实题目已经说了如何实现了&#xff0c;我们按照给定的思路实现即可 1. 问题四大要求详解 1.1 处理空格 (Whitespace) 忽略字符串开头的任何空格字符 (" ")例如: " 123" 应该被处理为 “123”Python实现: 可以使用 strip() 方法或循环处…

【Spring】控制反转 依赖注入(本文内容由大模型生成)

控制反转 & 依赖注入 1.依赖注入就是控制反转吗2.能通俗易懂地解释一下 IOC 吗示例&#xff1a;老板、秘书、员工 3.怎么理解反转这个概念的3.1 传统方式3.2 使用依赖注入&#xff08;DI&#xff09;3.3 示例&#xff1a;Spring 框架中的控制反转 4.什么是 Java 中的 Bean5…

Python浪漫之星星与文字构造的错位图

效果图&#xff1a; 完整代码&#xff1a; import tkinter as tk import random import math from tkinter.constants import *width 888 height 500 heartx width / 2 hearty height / 2 side 11class Star:def __init__(self, canvas, x, y, size):self.canvas canvas…

超简单!spring 微服务之远程服务调用实战

Spring微服务架构概览 微服务是一种将单一应用程序开发为一组小型服务的方法&#xff0c;每个服务运行在自己的进程中&#xff0c;并通过轻量级机制&#xff08;通常是HTTP资源API&#xff09;进行通信。Spring Cloud作为构建微服务应用的解决方案之一&#xff0c;提供了丰富的…

在Selenium中有哪些元素对象操作方法?( ̄﹃ ̄)

在Selenium中&#xff0c;driver.find_element() 方法用于定位页面上的单个元素。一旦你定位到了一个元素&#xff0c;你可以对这个元素执行多种操作。此外&#xff0c;driver.find_element() 只是定位元素的方法之一&#xff0c;它还有其他一些相关的方法和属性&#xff0c;但…

精准医疗沟通新体验:开源语音识别(ASR)如何提升医生与患者对话

需求背景&#xff1a;一家远程医疗公司在为偏远地区提供在线医疗服务的过程中&#xff0c;发现传统手动记录方式效率太低&#xff0c;无法满足需求&#xff0c;影响就诊的效率。 解决方案&#xff1a;使用思通数科的ASR平台&#xff0c;公司可以实现多话者对话转录和自动病历生…