深度学习目标检测回归损失函数合集:SmoothL1/IoU/GIoU/DIoU/CIoU Loss
Posted 超级无敌陈大佬的跟班
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习目标检测回归损失函数合集:SmoothL1/IoU/GIoU/DIoU/CIoU Loss相关的知识,希望对你有一定的参考价值。
目标检测任务的损失函数由Classificition Loss和Bounding Box Regeression Loss两部分构成。本文介绍目标检测任务中近几年来Bounding Box Regression Loss Function的演进过程,其演进路线是Smooth L1 Loss —> IoU Loss —> GIoU Loss —> DIoU Loss —> CIoU Loss,本文按照此路线进行讲解。
1. Smooth L1 Loss
- 本方法由微软rgb大神提出,Fast RCNN论文提出该方法
1.1 假设x为预测框和真实框之间的数值差异,常用的L1和L2 Loss定义为:
1.2 上述的3个损失函数对x的导数分别为:
从损失函数对x的导数可知:
- L1损失函数对x的导数为常数1,在训练后期,x很小时,如果learning rate 不变,损失函数会在稳定值附近波动,很难收敛到更高的精度(正常逻辑是,误差接近0时,导数也接近0)。
- L2损失函数对x的导数在x值很大时,其导数也非常大,在训练初期不稳定。
- smoothL1完美的避开了L1和L2损失的缺点,可谓是取二者精华去其糟粕。
1.3 实际目标检测框回归任务中的损失loss为
其中表示GT 的框坐标, 表示预测的框坐标,即分别求4个值的loss,然后相加作为Bounding Box Regression Loss。
三种loss的曲线图如图所示,可以看到Smooth L1相比L1的曲线更加的Smooth
L1和L2和smoothL1的图像
缺点:
- 上面的三种Loss用于计算目标检测的Bounding Box Loss时,独立的求出4个点的Loss,然后进行相加得到最终的Bounding Box Loss,这种做法的假设是4个点是相互独立的,实际是有一定相关性的
- 实际评价框检测的指标是使用IOU,这两者是不等价的,多个检测框可能有相同大小的 Loss,但IOU可能差异很大,为了解决这个问题就引入了IOU LOSS。
2. IoU Loss
- 本文由旷视提出,发表于2016 ACM
2.1 通过4个坐标点独立回归Building boxes的缺点:
- 检测评价的方式是使用IoU,而实际回归坐标框的时候是使用4个坐标点,如下图所示,是不等价的;L1或者L2 Loss相同的框,它们的IoU并不一定相同。
- 通过4个点回归坐标框的方式是假设4个坐标点是相互独立的,没有考虑其相关性,实际4个坐标点具有一定的相关性
- 基于L1和L2的距离的loss对于尺度不具有不变性
图(a)中的三组框具有相同的L2 Loss,但其IoU差异很大;图(b)中的三组框具有相同的L1 Loss,但IoU同样差异很大,说明:
- L1,L2这些Loss用于回归任务时,不能等价于最后用于评测检测的IoU.
- 基于L1和L2范数的度量下,距离相同的两个框框,实际IoU值可能相差很远。
2.2 基于此提出IoU Loss,其将4个点构成的box看成一个整体进行回归:
上图中的红色点表示目标检测网络结构中Head部分上的点(i,j),绿色的框表示Ground truth框, 蓝色的框表示Prediction的框。IoU loss的定义如上图中所示,
- 先求出2个框的IoU,然后再求个-ln(IoU),实际很多是直接定义为IoU Loss = 1 - IoU
- 其中IoU是真实框和预测框的交集和并集之比,当它们完全重合时,IoU就是1,那么对于Loss来说,Loss是越小越好,说明他们重合度高,所以IoU Loss就可以简单表示为 1 - IoU。
IoU Loss 前项推理时的算法实现方式:
- xt,xb,xl,xr分别是上下左右,具体参见上面的一幅图.
附录:论文链接:https://arxiv.org/pdf/1608.01471.pdf...
3 GIoU Loss(Generalized Intersection over Union)
发表于CVPR2019
3.1 IoU Loss 有2个缺点:
- 当预测框和目标框不相交时,IoU(A,B)=0时,不能反映A,B距离的远近,此时损失函数不可导,IoU Loss 无法优化两个框不相交的情况。
- 预测框和真实框IoU值相同时,IoU值不能反映两个框是如何相交的(角度、方向等)。
下图中,三种不同相对位置的框IOU值却是相同的,IoU=0.33值,但是它们的GIOU值不同,分别为GIoU=0.33,0.24,-0.1。当框的对齐方向更好一些时GIoU的值会更大。
3.2 GIOU的形式
图中A和B两个框相交,其中紫色框D是A和B的交集(A ∩ B),绿色的面积+紫色的面积+红色的面积 = ∣ A ⋃ B ∣,最外围的框C是包含框A和框B的最小的框,|C \\ (AUB)| 是最小外围框C的面积减去A和B并集之后的面积,也即是图中两块白色区域的面积,分母是最小外围框C的面积。
GIoU的实现方式如上,其中C为A和B的最小外接矩形。用C减去A和B的并集除以C得到一个数值,然后再用框A和B的IoU减去这个数值即可得到GIoU的值。
3.3 GIoU的性质
- GIoU和IoU一样,可以作为一种距离的衡量方式,loss的计算方式为:L = 1 - GIoU
- GIoU的值总是小于等于IoU(因为有减号操作),IoU的取值范围:0 <= IoU <= 1,GIoU的取值范围:-1 <= GIoU <= 1;
- 当两个框完全重合时,IoU = GIoU = 1,即|A U B| = |A ∩ B|;
- 当两个框不重合时,因为GIoU引入了外接矩形C,因此依然可以进行优化。(PS:IoU此时是无法优化的).
3.4 结论
GIoU Loss在单阶段检测器YOLO v1涨了2个点,两阶段检测器涨点相对较少(原因:RPN的box比较多,两个框未相交的数量相对较少)。
参考链接:https://zhuanlan.zhihu.com/p/104236411
4. DIoU Loss
- 本文发表在AAAI 2020
4.1 GIoU Loss不足
当目标框完全包裹预测框的时候,IoU和GIoU的值都一样,此时GIoU退化为IoU, 无法区分其相对位置关系;此时作者提出的DIoU因为加入了中心点归一化距离,所以可以更好地优化此类问题。
启发点:
基于IoU和GIoU存在的问题,作者提出了两个问题:
- 问题1:直接最小化预测框与目标框之间的归一化距离是否可行,以达到更快的收敛速度。
- 问题2:如何使回归在与目标框有重叠甚至包含时更准确、更快。
好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比。
- 基于问题1,作者提出了DIoU Loss:相对于GIoU Loss收敛速度更快,该Loss考虑了重叠面积和中心点距离,但没有考虑到长宽比;
- 针对问题2,作者提出了CIoU Loss:其收敛的精度更高,以上三个因素都考虑到了。
4.2 Distance-IoU Loss
- 通常基于IoU-based的loss可以定义为
其中定义为预测框 B 和目标框 的惩罚项。
- DIoU中的惩罚项表示为
其中 分别为的中心点,表示欧氏距离,c表示的最小外接矩形顶点的距离(即对角线长度)。
如下图所示。可以将DIoU替换IoU用于NMS算法当中,也即论文提出的DIoU-NMS,实验结果表明有一定的提升。
- DIoU Loss function定义为:
DIoU的性质:
- 尺度不变性
- 当两个框完全重合时,L(IoU) = L(GIoU) = L(DIoU) = 0;
- 当2个框不相交时,L(GIoU) = L(DIoU) —> 2
- DIoU Loss可以直接优化2个框直接的距离,比GIoU Loss收敛速度更快
- 对于目标框包裹预测框的这种情况,DIoU Loss可以收敛的很快,而GIoU Loss此时退化为IoU Loss收敛速度较慢。
转载自:https://zhuanlan.zhihu.com/p/104236411
5. CIoU Loss
5.1 Complete-IoU Loss
5.2 DIoU和CIoU的提升效果
上表中左边是用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点提升。
结论:
DIoU Loss和CIoU Loss优化了GIoU Loss的不足,实验证明效果有进一步提升,代码已开源,非常推荐工程上去尝试。
附录:
参考文献:
- [1]FastR-CNN (Smooth L1 Loss; 201509)
- [2]UnitBox: An Advanced Object Detection Network (IoU Loss;201608)
- [3]Generalized Intersection over Union: A Metric and ALoss for Bounding Box Regression (GIOU Loss;CVPR2019)
- [4]Distance-IoU Loss:Faster and Better Learning for Bounding Box Regression(DIOU Loss & CIoU Loss ; CVPR2019)
以上是关于深度学习目标检测回归损失函数合集:SmoothL1/IoU/GIoU/DIoU/CIoU Loss的主要内容,如果未能解决你的问题,请参考以下文章
深度学习和目标检测系列教程 4-300:目标检测入门之目标变量和损失函数
目标检测回归损失函数 IOUGIOUDIOUCIOUEIOUFocal EIOUalpha IOU损失函数分析