导读
随着深度学习技术的发展,在视觉目标检测领域出现了越来越多优秀的算法模型,比较典型的有以Fast-RCNN系列为代表的二阶段目标检测算法和以YOLO系列为代表的一阶段目标检测算法。通常,一个目标检测任务需要完成两个子任务:目标定位和目标分类。目标定位是要在图像中确定目标的位置,输出其在图像中的坐标信息;目标分类就是要对该目标进行分类以确定该目标属于什么类别以及其属于该类别的置信度。
目标定位依赖一个边界框回归模块去定位目标。边界框回归是目标检测中的一种主流技术方法,该方法使用矩形边界框去预测目标对象在图像中的位置,旨在细化预测边界框的位置。边界框回归使用预测边界框和真实边界框(Ground-Truth)之间的重叠区域作为损失函数,称为基于交并比(Intersection over Union,IoU)的损失函数。
IoU损失函数
IoU指的是预测边界框与真实边界框的交集与并集之比:
IoU的公式和IoU损失函数的公式如下图所示,其中B为预测边界框,Bgt为真实边界框。
很容易地知道,当预测边界框与真实边界框没有交集时计算出的损失值为0,此时相当于IoU损失函数不起作用,那么在神经网络训练过程中贡献的梯度为0。所以,使用IoU损失函数训练神经网络的收敛速度会很慢。
GIoU损失函数
GIoU(Generalized IoU)损失函数的公式如下:
在上式中,C表示覆盖预测边界框与真实边界框之间的最小框,它的作用是作为一个惩罚项将预测框向真实框靠拢。对于预测框与真实框不重叠的情况,GIoU通过向目标框缓慢移动来增加二者的重叠区域以达到最大化预测框与真实框之间重叠区域的目的,这是一个不断迭代的过程。
使用GIoU可以解决预测框与真实框无重叠区域造成的梯度消失问题,可以得到比MSE和IoU损失函数更高精度的预测框,但是存在迭代速度慢和边界框回归错误的问题。
DIoU损失函数
DIoU(Distance IoU)损失函数的公式如下:
其中d表示预测框与真实框中心点的欧式距离,c表示覆盖预测框与真实框的最小闭合框的对角线长度。
DIoU损失使用了预测框与真实框中心点之间的归一化距离,对于回归问题是尺度不变的。与GIoU损失一样,DIoU 损失也为非重叠情况下的预测框提供了移动方向;与GIoU损失不一样的是,DIoU损失直接最小化了预测框和真实框之间的距离,即使在真实框具有水平和垂直方向时,其收敛速度也比GIoU要快得多。
DIoU损失可以加快神经网络的训练过程并且得到更准确的边界框回归结果,将其用于非极大值抑制(NMS)过程中的指标时,可以在有遮挡的情况下提供更为鲁棒的结果。
CIoU损失
CIoU(Complete IoU)损失函数的公式如下:
其中,S=1-IoU是预测框与真实框重叠区域的面积;D是预测框与真实框中心点之间归一化的距离IoU损失;V用来度量长宽比的相似性。S、V和D都对回归保持尺度不变,并被归一化为0到1之间的值。可以知道,CIoU损失包含了以下3个几何因子:
-
预测框与真实框重叠区域面积的IoU损失;
-
预测框与真实框中心点之间归一化的距离IoU损失;
-
预测框与真实框纵横比损失。
与GIoU和DIoU一样,CIoU也是通过迭代将预测框向真实框移动,但是CIoU所需要的迭代次数更少,并且得到的预测框与真实框的纵横比更为接近。
由于CIoU损失包含了完整的几何因子,因此它比GIoU和DIoU收敛得更快,可以有效提高目标检测任务的平均精度(AP)和平均召回率(AR)指标。CIoU可以被应用到YOLOv3、Yolov4、SSD、Faster-RCNN等主流的Anchor-Based目标检测算法中。
几种IoU损失函数的对比
下图展示了几种IoU损失函数在不同迭代次数情况下的回归误差曲线:
-
由于IoU损失只有在预测框与真实框有重叠的情况下才有效,因此收敛得很慢,得到的预测框与真实框之间的误差也很大;
-
GIoU损失通过增加预测框的大小慢慢移动到与真实框重叠的区域来帮助处理非重叠的情况,其迭代过程收敛得比较缓慢,尤其是预测框与真实框的纵横比相差很大的时候,这种情况下GIoU回归得到的预测框与真实框之间的误差也比较大。
-
DIoU和CIoU损失可以收敛得比IoU和GIoU更快,特别是CIoU,由于其考虑了完备的几何因子,因此收敛速度和回归的精度都比使用其他损失函数得到的结果更好。
参考资料
[1] Different IoU Losses for Faster and Accurate Object Detection. https://medium.com/analytics-vidhya/different-iou-losses-for-faster-and-accurate-object-detection-3345781e0bf