最近微智启软件工作室在运行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行左右的代码错误了,可以看到里面是一个包含两个数据的,假如直接设置是会报错的
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,根据具体情况来修改。
文章由微智启原创,转载请标明出处,谢谢。
如果还有其他问题,可以联系技术客服:3447362049