报错一: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手动打开
改成这个样子就可以了
代码如下:
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