当前位置: 首页 > article >正文

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
 


http://www.kler.cn/news/364918.html

相关文章:

  • 【电子元件】光通量和色温 (欧司朗LED灯珠 KW3 CGLNM1.TG命名规则)
  • 处理Hutool的Http工具上传大文件报OOM
  • OpenCV与AI深度学习 | 实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 + 代码)
  • 红帽Linux认证与其他认证相比优势在哪?
  • java动态代理介绍
  • vue2 自定义指令 列表元素上划 动画
  • HarmonyOS NEXT原生重榜发布-安利一款鸿蒙可视化代码生成器
  • 爬虫python=豆瓣Top250电影
  • 基于大型语言模型的智能网页抓取
  • 【spring】从spring是如何避免并发下获取不完整的bean引发的思考 什么是双重检查锁 什么是java内存模型
  • WeThinkIn | 从图像到视频:浅谈Video Diffusion Models背后的底层原理
  • Servlet实现博客系统
  • 谷歌新政来袭!涉及社交、通信、实用工具等类型应用
  • Linux网络安全
  • Markdown流程图的简单使用
  • Footprint Analytics 现已支持 TRON 链上数据分析
  • Markdown语法详解及常见的使用场景
  • 华企盾【运维利器】PowerShell自动磁盘清理脚本代码
  • 地理空间智能与人工智能:开启未来地图的智慧之门
  • 怎么选择独立站SEO效果好的wordpress模板
  • ​灵动微主流家电市场电机解决方案
  • 青少年编程能力等级测评CPA C++ 四级试卷(1)
  • ElasticSearch集群搭建
  • YOLOv11[基础]】热力图可视化实践② | 视频版 | 输入为视频文件
  • 数据结构6——树与二叉树
  • day9:自有服务与防火墙