目标检测中的各种IoU Loss(IoU、GIoU、DIoU、CIoU)

IoU Loss

对于检测框B和groundtruth G,二者的IoU如下:
目标检测中的各种IoU Loss(IoU、GIoU、DIoU、CIoU)

那么IoU Loss即为-log(1-IoU)。
显然IoU Loss具有非负性、尺度不变性、同一性、对称性、三角不等性等特点,所以可以用于bounding box的回归任务中。

但同时,IoU Loss也存在一个很致命的缺点:

当B与G的IoU为0时,Loss也为0,网络无法进行训练。因此IoU loss在回归任务中的表现并不好。

GIoU Loss

论文:https://arxiv.org/abs/1902.09630

GIoU Loss的目的就是解决IoU Loss中当B与G不相交时,Loss为0的问题。

GIoU的定义如下:
目标检测中的各种IoU Loss(IoU、GIoU、DIoU、CIoU)

其中,Ac表示B与G的最小外接矩形的面积,u表示B与G并集的面积。而GIoU Loss = -log(1-GIoU)。

GIoU具有一下特性:
1.与IoU一样,具有非负性、尺度不变性等特性
2.任意B、G都存在,GIoU<=IoU
3.-1< GIoU <=1, 当IoU等于1时,GIoU也等于1
由此可见,只有当B与G重合时,GIoU Loss才会为0,相比IoU Loss,GIoU Loss在任意情况下都可以进行训练。

DIoU Loss

论文:https://arxiv.org/abs/1911.08287?context=cs.CV

GIoU Loss虽然解决了IoU Loss中Loss为0的问题,但是依然存在一些不足。

首先,因为GIoU主要是在收敛Ac-U这个值,作者经过实验发现这么收敛会导致网络优先选择扩大bounding box的面积来覆盖ground truth,而不是去移动bounding box的位置去覆盖ground truth。

其次,如下图所示,当B覆盖G或者被G覆盖时,只要B与G的面积不变,不管B与G的位置在哪里,IoU Loss与GIoU Loss都是一个定值。

目标检测中的各种IoU Loss(IoU、GIoU、DIoU、CIoU)

因此,为了解决这些问题,作者提出了DIoU。

DIoU Loss的公式如下:
目标检测中的各种IoU Loss(IoU、GIoU、DIoU、CIoU)

其中,ρ()为B与G中心点之间的欧几里得距离,c为B与G最小外接矩的对角线的长度。

相比GIoU,DIoU限制的不是最小外接矩与B与G并集面积的差值,而是直接限制了最小外接矩的面积和B与G中心点的位置,这会使得网络更倾向于移动bounding box的位置来减少Loss。同时也加入了IoU元素来使bounding box与ground truth的覆盖面积更加接近。

同样的DIoU也有着与GIoU相同的一些特性和取值范围。

CIoU Loss

作者提出一个好的回归Loss应该考虑三点,分别是覆盖面积、中心点距离和长宽比。
而DIoU只考虑了覆盖面积和中心点距离,所以作者又在DIoU的基础上加入了长宽比的因素提出了CIoU Loss,公式如下:

目标检测中的各种IoU Loss(IoU、GIoU、DIoU、CIoU)

其中,v就是B与G长宽比的距离:

目标检测中的各种IoU Loss(IoU、GIoU、DIoU、CIoU)

α是一个权重系数:

目标检测中的各种IoU Loss(IoU、GIoU、DIoU、CIoU)

(不过我不是很懂这个权重这么设计的原因和意义,好像论文里也没有看到相关的描述)

结果比较

目标检测中的各种IoU Loss(IoU、GIoU、DIoU、CIoU)