目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)

目录

        • 1. 早期loss计算(L1/L2/SMOOTH loss)
        • 2. IOU(Intersection over Union)
        • 3.GIOU(Generalized Intersection over Union)
        • 4. DIOU(Distance-IoU Loss)
        • 5.CIoU Loss (Complete-IoU Loss)

1. 早期loss计算(L1/L2/SMOOTH loss)

早期计算BBOX的loss, 一般是计算4个点(测量值(x1,x2,w,h)VS ground truth (x1’, x2’, w’, h’))的L1 loss, or L2 loss, or SMOOTH Loss。

  • 假设x为预测框和真实框之间的数值差异,常用的L1/L2/SMOOTH loss定义为
    目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第1张图片

上面的三种Loss用于计算目标检测的Bounding Box Loss时,独立的求出4个点的Loss,然后进行相加得到最终的Bounding Box Loss,这种做法的假设是4个点是相互独立的,实际是有一定相关性的

实际评价框检测的指标是使用IOU,这两者是不等价的,多个检测框可能有相同大小的smoothL1 Loss,但IOU可能差异很大,为了解决这个问题就引入了IOU LOSS
通过4个坐标点独立回归Building boxes的缺点

  • 检测评价的方式是使用IoU,而实际回归坐标框的时候是使用4个坐标点,如下图所示,是不等价的;
  • L1或者L2 Loss相同的框,其IoU 不是唯一的。通过4个点回归坐标框的方式是假设4个坐标点是相互独立的,没有考虑其相关性,实际4个坐标点具有一定的相关性。基于L1和L2的距离的loss对于尺度不具有不变性
    目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第2张图片
    图(a)中的三组框具有相同的L2 Loss,但其IoU差异很大;图(b)中的三组框具有相同的L1 Loss,但IoU 同样差异很大,说明L1,L2这些Loss用于回归任务时,不能等价于最后用于评测检测的IoU.

2. IOU(Intersection over Union)

IoU就是我们所说的交并比,是目标检测中最常用的指标,在anchor-based的方法中,他的作用不仅用来确定正样本和负样本,还可以用来评价输出框(predict box)和ground-truth的距离。

I O U = ( A ⋂ B ) / ( A ⋃ B )

可以说它可以反映预测检测框与真实检测框的检测效果。

还有一个很好的特性就是尺度不变性,也就是对尺度不敏感(scale invariant), 在regression任务中,判断predict box和gt的距离最直接的指标就是IoU。(满足非负性;同一性;对称性;三角不等性)

IoU Loss,其将4个点构成的box看成一个整体进行回归:
目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第3张图片
上图中的红色点表示目标检测网络结构中Head部分上的点(i,j),绿色的框表示Ground truth框, 蓝色的框表示Prediction的框,IoU loss的定义如上,先求出2个框的IoU,然后再求个-ln(IoU),实际很多是直接定义为IoU Loss = 1-IoU

IoU Loss 前项推理时的算法实现方式
目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第4张图片

3.GIOU(Generalized Intersection over Union)

IoU Loss 有2个缺点:

  • 当预测框和目标框不相交时,IoU(A,B)=0时,不能反映A,B距离的远近,此时损失函数不可导,IoU Loss 无法优化两个框不相交的情况。
  • 假设预测框和目标框的大小都确定,只要两个框的相交值是确定的,其IoU值是相同时,IoU值不能反映两个框是如何相交的

目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第5张图片
如上图所示,三种不同相对位置的框拥有相同的IoU=0.33值,但是拥有不同的GIoU=0.33,0.24,-0.1。当框的对齐方向更好一些时GIoU的值会更高一些

GIoU的实现方式
目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第6张图片
其中C为A和B的外接矩形。用C减去A和B的并集除以C得到一个数值,然后再用框A和B的IoU减去这个数值即可得到GIoU的值

4. DIOU(Distance-IoU Loss)

GIOU不足:
目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第7张图片
基于IoU和GIoU存在的问题,作者提出了两个问题:
第一:直接最小化预测框与目标框之间的归一化距离是否可行,以达到更快的收敛速度。

第二:如何使回归在与目标框有重叠甚至包含时更准确、更快。

好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比。基于问题一,作者提出了DIoU Loss,相对于GIoU
Loss收敛速度更快,该Loss考虑了重叠面积和中心点距离,但没有考虑到长宽比;针对问题二,作者提出了CIoU Loss,其收敛的精度更高,以上三个因素都考虑到了。

通常基于IoU-based的loss可以定义为

其中在这里插入图片描述
定义为预测框B 和目标框 B^gt的惩罚项
DIOU的惩罚项表示为
在这里插入图片描述
其中b和b^{gt} 分别表示B 和B^{gt} 的中心点,ρ(∙)表示欧式距离,c 表示B和 B^{gt}的最小外界矩形的对角线距离,如下图所示。
目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第8张图片
可以将DIoU替换IoU用于NMS算法当中,也即论文提出的DIoU-NMS,实验结果表明有一定的提升。
DIoU Loss function定义为:

在这里插入图片描述
目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第9张图片

5.CIoU Loss (Complete-IoU Loss)

目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第10张图片

效果提升对比
目标检测回归损失函数归纳(Smooth -> IOU -> GIOU -> DIOU -> CIOU)_第11张图片
上表中左边是用5种不同Boudning Box Regression Loss Function的对比,右边是以IoU和GIoU来计算的2种Evaluation的结果;GIoU相对IoU会有2.49点提升,DIoU相对IoU会有3.29点提升,CIoU会有大概5.67点提升,CIoU结合DIoU-NMS使用效果最好,大概会有5.91点提升。

ref: https://zhuanlan.zhihu.com/p/104236411
相关代码实现

你可能感兴趣的:(深度学习,知识点,小技巧汇总,算法,机器学习,深度学习,人工智能,python)