【深度学习常见问题——IOU】

深度学习常见问题——IOU

  • IOU
  • 介绍
    • 公式
    • 优点
    • 缺点
    • 实现代码
  • GIOU
    • 介绍
    • 公式
    • 优点
    • 实现代码
  • DIOU
    • 介绍
    • 公式
    • 优点
    • 实现代码
  • CIOU
    • 介绍
    • 公式

IOU

介绍

交并比(Intersection over Union),表示两个bbox交集部分面积和并集部分面积的比值。
【深度学习常见问题——IOU】_第1张图片

公式

I o U = A ∩ B A ∪ B IoU = \frac{A \cap B }{A \cup B} IoU=ABAB

优点

  1. 尺度不变性:不受bbox本身尺寸大小影响

缺点

  1. 无法反映两bbox的距离:如果IOU=0,看不出距离的远近
  2. 无法反映两bbox的交叠情况:同样的IOU取值,看不出是怎么重叠的
  3. 作为损失函数时,无交叠情况没有梯度回传( L o s s = 1 − I O U Loss=1-IOU Loss=1IOU)

实现代码

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

介绍

【深度学习常见问题——IOU】_第2张图片

公式

G I O U = I O U − C − A ∪ B C GIOU = IOU - \frac{C-A \cup B}{C} GIOU=IOUCCAB,其中 C C C表示包含A,B的最小框面积

优点

  1. 尺度不变性
  2. G I O U ∈ [ − 1 , 1 ] GIOU \in [-1, 1] GIOU[1,1]:其为IOU的下界,即 G I O U < = I O U GIOU <= IOU GIOU<=IOU,两者不相交且相距极远的时候, G I O U = − 1 GIOU=-1 GIOU=1
  3. 能够更好地反映两bbox的交叠情况:两bbox不相交的情况下,依然能度量二者的距离,作为损失函数仍然能够让二者靠近
  4. 作为损失函数可以避免梯度为0的情况

实现代码

def cal_GIOU(bbox_a, bbox_b):
    # bbox_a : x1,y1,x2,y2 (ltbr)
    # bbox_b : x3,y3,x4,y4
    x1,y1,x2,y2 = bbox_a
    x3,y3,x4,y4 = bbox_b
    # intersection
    inter_h = min(y2,y4) - max(y1, y3)
    inter_w = min(x4,x2) - max(x1, x3)
    inter_h = max(0, inter_h)
    inter_w = max(0, inter_w)
    inter = inter_h * inter_w
    # union
    union = (y4-y3)*(x4-x3) + (y2-y1)*(x2-x1) - inter
    # smallest enclosing convex
    convex_h = max(y2,y4) - min(y1,y3)
    convex_w = max(x2,x4) - min(x1,x3)
    convex = convex_h * convex_w
    # GIOU 
    return inter/union - (convex-union)/convex

DIOU

介绍

当一个bbox包含另一个bbox的时候,GIOU退化为IOU,无法进一步梯度下降,为此DIOU引入了新的惩罚项
【深度学习常见问题——IOU】_第3张图片

公式

D I O U = I O U − ρ 2 ( b , b g t ) c 2 DIOU = IOU - \frac{\rho^2(b,b^{gt})}{c^2} DIOU=IOUc2ρ2(b,bgt),其中 ρ \rho ρ代表了二者中心点的欧式距离, c c c代表了包含两bbox的最小矩形的对角线的欧式距离
【深度学习常见问题——IOU】_第4张图片

优点

  1. 两目标不重叠时,仍然保证梯度下降
  2. DIOU目标直接针对两bbox的距离,相比针对面积优化的GIOU,收敛更快
  3. 一个bbox包含另一个的情况下,仍然可以收敛,而GIOU则无法收敛

实现代码

def cal_DIOU(bbox_a, bbox_b):
    # bbox_a : x1,y1,x2,y2 (ltbr)
    # bbox_b : x3,y3,x4,y4
    x1,y1,x2,y2 = bbox_a
    x3,y3,x4,y4 = bbox_b
    # intersection
    inter_h = min(y2,y4) - max(y1,y3)
    inter_w = min(x2,x4) - max(x1,x3)
    inter_h = max(0, inter_h)
    inter_w = max(0, inter_w)
    inter = inter_h * inter_w
    # union
    union = (y4-y3)*(x4-x3) + (y2-y1)*(x2-x1) - inter
    # center dist
    center_ax = (x1+x2) / 2
    center_ay = (y1+y2) / 2
    center_bx = (x3+x4) / 2
    center_by = (y3+y4) / 2
    dist_ab = (center_ax - center_bx)**2 + (center_ay-center_by)**2
    dist_c = (min(x1,x3)-max(x2,x4))**2 + (min(y1,y3) - max(y2,y4))**2
    #DIOU 
    return inter/union - dist_ab/dist_c

CIOU

介绍

在DIOU的基础上,添加了bbox长宽比的惩罚项,要求两bbox的形状也趋向一致

公式

D I O U = I O U − ρ 2 ( b , b g t ) c 2 − α υ DIOU = IOU - \frac{\rho^2(b,b^{gt})}{c^2}-\alpha\upsilon DIOU=IOUc2ρ2(b,bgt)αυ,其中
α = υ ( 1 − I O U ) + υ \alpha=\frac{\upsilon}{(1-IOU)+\upsilon} α=(1IOU)+υυ 表示比例系数
υ = 4 π 2 ( a r c t a n w g t h g t − a r c t a n w h ) 2 \upsilon=\frac{4}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w}{h})^2 υ=π24(arctanhgtwgtarctanhw)2表示两bbox之间的长宽比一致性

你可能感兴趣的:(深度学习基础知识,机器学习,人工智能,算法)