最近微智启软件工作室在运行yolov9目标检测的detect.py测试代码时,报错: File "G:\down\yolov9-main\yolov9-main\detect.py", line 102, in run 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行左右的代码错误了,可以看到里面是一个包含两个数据的,假如直接设置是会报错的

yolov9目标检测报错AttributeError: ‘list‘ object has no attribute ‘device‘_数据

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

yolov9目标检测报错AttributeError: ‘list‘ object has no attribute ‘device‘_yolov9_02

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

yolov9目标检测报错AttributeError: ‘list‘ object has no attribute ‘device‘_v9_03

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

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

替换后的代码格式如下

yolov9目标检测报错AttributeError: ‘list‘ object has no attribute ‘device‘_v9_04

之后再运行,即可完美解决! 现在是2024年2月23日,后期官方可能会修改这个bug,根据具体情况来修改。 文章由微智启原创,转载请标明出处,谢谢。 如果还有其他问题,可以联系技术客服