损失函数之 L1 loss, IOU loss, GIOU loss, DIOU loss, CIOU loss

目标检测任务的损失函数一般由分类损失函数和回归损失函数两部分构成
回归损失函数的发展过程主要包括:最原始的Smooth L1 Loss函数、2016年提出的IoU Loss、2019年提出的GIoU Loss、2020年提出的DIoU Loss和最新的CIoU Loss函数。

Smooth L1 Loss函数

  • 在早期的目标检测算法中它们一般使用MSE作为损失函数,之后Fast R-CNN提出了Smooth L1的损失函数,它们的共同点都是使用两个角点,四个坐标作为计算损失函数的变量,我们在这里统一称它们为L1-norm算法。之所以说L1-norm损失函数不和检测结果强相关,是因为它存在图1所示的若干个问题。在图1中,绿色框是ground truth,黑色框是预测bounding box。我们假设预测框的左下角是固定的,只要右上角在以ground truth为圆心的圆周上这些预测框都有相同的损失值,但是很明显它们的检测效果的差距是非常大的。与之对比的是IoU和GIoU则在这几个不同的检测框下拥有不同的值,比较真实的反应了检测效果的优劣。

IoU Loss (解决了例如在预测框与GT左下角位置固定时,右上角预测框在以GT右上角为圆心的圆上的所有位置,L1损失都是一样的问题,也就是多种解)

  • 所谓的IoU Loss,即预测框与GT框之间的交集/预测框与GT框之间的并集。这种损失会存在一些问题,具体的问题如下图所示,(1)如状态1所示,当预测框和GT框不相交时,即IOU=0,此时无法反映两个框之间的距离,此时该 损失函数不可导,即IOU_Loss无法优化两个框不相交的情况。(2)如状态2与状态3所示,当两个预测框大小相同时,那么这两个IOU也相同,IOU_Loss无法区分两者相交这种情况。

GIOU_Loss(解决了GT与预测框之间,即使预测框在不同位置,也有可能IOU相同的多解问题,此时GIOU退化为IOU LOSS

  • GIOU_Loss-为了解决以上的问题,GIOU损失应运而生。GIOU_Loss中增加了相交尺度的衡量方式,缓解了单纯IOU_Loss时存在的一些问题。

    但是这种方法并不能完全解决这种问题,仍然存在着其它的问题。具体的问题如下所示,状态1、2、3都是预测框在GT框内部且预测框大小一致的情况,这时预测框和GT框的差集都是相同的,因此这三种状态的GIOU值也都是相同的,这时GIOU退化成了IOU,无法区分相对位置关系。

DIOU_Loss (通过引入中心点距离惩罚,解决了在GT与预测框存在包含关系时,GIOU无法衡量位置的问题。包含时直接使用中心点距离作为损失)

  • DIOU_Loss-针对IOU和GIOU损失所存在的问题,DIOU为了解决如何最小化预测框和GT框之间的归一化距离这个问题,DIOU_Loss考虑了预测框与GT框的重叠面积和中心点距离,当GT框包裹预测框的时候,直接度量2个框的距离,因此DIOU_Loss的收敛速度更快一些。

    如下图所示,当GT框包裹预测框时,此时预测框的中心点的位置都是一样的,因此按照DIOU_Loss的计算公式,三者的值都是相同的。为了解决这个问题,CIOU_Loss应运而生。

CIOU_Loss (解决了即使距离中心位置相同。形状也可能不相同的问题,于是将预测框与GT的位置都考虑进来了)

  • CIOU_Loss-CIOU_Loss在DIOU_Loss的基础上增加了一个影响因子,将预测框和GT框的长宽比也考虑了进来。具体的计算方法如下式所示,即CIOU_Loss将GT框的重叠面积、中心点距离和长宽比全都考虑进来了。

总而言之,IOU_Loss主要考虑了检测框和GT框之间的重叠面积;GIOU_Loss在IOU的基础上,解决边界框不重合时出现的问题;DIOU_Loss在IOU和GIOU的基础上,同时考虑了边界框中心点距离信息;CIOU_Loss在DIOU的基础上,又考虑了边界框宽高比的尺度信息。

DIOU_NMS

  • DIOU_NMS-如下图所示,对于重叠的摩托车检测任务而言,传统的NMS操作会遗漏掉一些中间的摩托车;由于DIOU_NMS考虑到边界框中心点的位置信息,因而得到了更准确的检测结果,适合处理密集场景下的目标检测问题。
posted @ 2023-02-28 15:04  超级伍德  阅读(1099)  评论(0编辑  收藏  举报