问题
File "YOLOV8\ultralytics\utils\tal.py", line 162, in get_box_metrics overlaps[mask_gt] = bbox_iou(gt_boxes, pd_boxes, xywh=False, WIoU=True).squeeze(-1).clamp_(0) AttributeError: 'tuple' object has no attribute 'squeeze。
问题解析
这是因为当你在 bbox_iou
函数中使用 WIoU=True
参数时,该函数返回的是一个元组(tuple),而不是单个张量。但在 tal.py
中的代码仍然按照返回单个张量的方式来处理。
修改方案
1.选择一个张量,代码对应为:
overlaps【mask_gt】 = bbox_iou(gt_boxes, pd_boxes, xywh=False, WIoU=True)[0].squeeze(-1).clamp_(0)。
2.
iou_result = bbox_iou(gt_boxes, pd_boxes, xywh=False, WIoU=True)
overlaps[mask_gt] = (iou_result[0] if isinstance(iou_result, tuple) else iou_result).squeeze(-1).clamp_(0)
注意对齐。