IOU
介绍
交并比(Intersection over Union),表示两个bbox交集部分面积和并集部分面积的比值。
公式
I o U = A ∩ B A ∪ B IoU = \frac{A \cap B }{A \cup B} IoU=A∪BA∩B
优点
- 尺度不变性:不受bbox本身尺寸大小影响
缺点
- 无法反映两bbox的距离:如果IOU=0,看不出距离的远近
- 无法反映两bbox的交叠情况:同样的IOU取值,看不出是怎么重叠的
- 作为损失函数时,无交叠情况没有梯度回传( L o s s = 1 − I O U Loss=1-IOU Loss=1−IOU)
实现代码
def cal_IOU(bbox_a, bbox_b):
# bbox_a : x1,y1,x2,y2(ltrb)
# bbox_b : x3,y3,x4,y4(ltrb)
x1,y1,x2,y2 = bbox_a
x3,y3,x4,y4 = bbox_b
# 计算交集
intersection_h = min(x2, x4) - max(x1, x3)
intersection_w = min(y2, y4) - max(y1, y3)
# 考虑两个bbox不相交的情况
intersection_h = max(intersection_h, 0)
intersection_w = max(intersection_w, 0)
intersection = intersection_h * intersection_w
# 计算并集
union = (x2-x1)*(y2-y1) + (x4-x3)*(y4-y3) - intersection
return intersection / union
GIOU
介绍
公式
G I O U = I O U − C − A ∪ B C GIOU = IOU - \frac{C-A \cup B}{C} GIOU=IOU−