赞
踩
修改第 4 部分 YOLOv8-Seg 推理中后处理 iou 计算代码,原代码存在问题,原代码如下:
def iou(box1, box2):
def area_box(box):
return (box[2] - box[0]) * (box[3] - box[1])
left, top = max(box1[:2], box2[:2])
right, bottom = min(box1[2:4], box2[2:4])
...
其中,box1 和 box2 是表示边界框的列表,格式为 [left, top, right, bottom, …]。在 Python 中,当 max 函数用于两个列表时,它会比较列表中的元素,从左到右,直到找到某一个列表中的较大元素,然后返回那个较大元素的完整列表。比如现在比较 max([3,0],[2,1]),因为 3 大于 2,而不考虑后面的元素,返回的就是 [3,0]。这意味着在计算交集区域的左上角坐标时,仅比较了 left 坐标,而没有正确地处理 top 坐标,同理右下角坐标也存在类似的问题
因此,修改后的代码如下:
def iou(box1, box2):
def area_box(box):
return (box[2] - box[0]) * (box[3] - box[1])
# box -> [x1,y1,x2,y2,...]
left = max(box1[0], box2[0])
top = max(box1[1], box2[1])
right = min(box1[2], box2[2])
bottom = min(box1[3], box2[3])
...
感谢 @你的陈某某 的指正
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。