假设有一个对象检测任务。
img中有很多汽车。我需要做的是画出箱子来检测这些汽车。
其他人正在执行相同的任务。
我的结果是[car1,car2,car5,car6],某人的结果是[car1,car3,car5,car5,car7]。(carx是此img中#x cat的坐标)
我们俩都只在img中检测到某些汽车。
现在,我想找到一种方法来评估我们的结果之间的相似性。
如果我们俩都只有一辆,那很容易,
def cal_iou(coordinate_x, coordinate_y):
polygon_x = geometry.Polygon(coordinate_x)
polygon_y = geometry.Polygon(coordinate_y)
intersection = polygon_x.intersection(polygon_y).area
total_area = polygon_x.area + polygon_y.area - intersection
if total_area > 0.0:
return float(intersection / total_area)
return 0.0
我可以计算两个boxex之间的IoU。
如果我们的结果中有多个框怎么办?
我不知道应该将其他结果中的哪个框与car1比较?
我认为的另一种方法是获取结果的所有区域,然后与其他人的结果进行比较。但是我还没有找到一种好的方法。
请给我一些建议
最佳答案
box1到box2之间的IoU与box2到box1相同。
我大部分时间要做的是计算所有IoU,然后选择最高的IoU。可以删除属于该IoU的2个框,并且可以重复该过程。直到所有框都已链接或最高IoU低于阈值