在深度学习中,损失函数扮演着很重要的角色。通过最小化损失函数,使得模型达到收敛状态,减少模型预测值的误差。因此,不同的损失函数,对模型的影响是重大的。下面总结一下常用的损失函数:
IOU Loss:考虑检测框和目标框重叠面积。
GIOU Loss:在IOU的基础上,解决边界框不重合时的问题。
DIOU Loss:在IOU的基础上,考虑边界框中心距离的信息。
CIOU Loss:在DIOU的基础上,考虑边界框宽高比的尺度信息。
IOU、GIOU没有考虑真值框与预测框中心的之间的距离信息,实际情况下,中心点的距离越小框预测的越准。DIOU可以很好的反应中心点距离的情况z
在图像分类中,经常使用softmax+交叉熵作为损失函数:
其中,p(x)表示真实概率分布,q(x)表示预测概率分布。交叉熵损失函数通过缩小两个概率分布的差异,来使预测概率分布尽可能达到真实概率分布。
后来,谷歌在交叉熵的基础上,提出了label smoothing(标签平滑),具体介绍,可以参考这篇博客。
在实际中,需要用预测概率去拟合真实概率,而拟合one-hot的真实概率函数会带来两个问题:
因此,为了减少这种过于自信,同时减缓人为标注的误差带来的影响,需要对p(x)进行变化:
其中,δ(k,y)为Dirac函数,u(k)为均匀分布。简单而言,降低标签y的置信度,提高其余类别的置信度。从而,交叉熵变成了:
一篇很好的博文,是介绍目标检测中的损失函数的,可以参考一下:
在目标检测中,损失函数一般由两部分组成,classification loss和bounding box regression loss。calssification loss的目的是使类别分类尽可能正确;bounding box regression loss的目的是使预测框尽可能与Ground truth框匹对上。
该Focal loss损失函数出自于论文《Focal Loss for Dense Object Detection》,主要是解决正负样本之间的不平衡问题。通过降低easy example中的损失值,间接提高了hard example中损失值的权重。Focal loss是基于交叉熵进行改进的:
可以看到,在交叉熵前增加了(1−pt)γ,当图片被错分时,pt会很小,(1−pt)接近于1,所以损失受到的影响不大;而增加参数γ是为了平滑降低esay example的权重。当γ=0时,Focal loss退化成交叉熵。对于不同的γ,其影响如下图所示。
利用L1,L2或者smooth L1损失函数,来对4个坐标值进行回归。smooth L1损失函数是在Fast R-CNN中提出的。三个损失函数,如下所示:
从损失函数对x的导数可知:L1损失函数对x的导数为常数,在训练后期,x很小时,如果learning rate 不变,损失函数会在稳定值附近波动,很难收敛到更高的精度。L2损失函数对x的导数在x值很大时,其导数也非常大,在训练初期不稳定。smooth L1完美的避开了L1和L2损失的缺点。
在一般的目标检测中,通常是计算4个坐标值与GT框之间的差异,然后将这4个loss进行相加,构成regression loss。
但使用上述的3个损失函数,会存在以下的不足:
该IOU Loss是旷视在2016年提出的《UnitBox: An Advanced Object Detection Network》。该论文的主要观点之一是:
所以,提出了IOU loss,直接使用IOU作为损失函数:
同时,也会有人使用的是:
该GIOU Loss损失函数是斯坦福于2019年提出的《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》。在上面的IOU Loss中
为了解决这个问题,作者提了GIOU。
其中,C表示两个框的最小外接矩阵面积。即先求出两个框的IOU,然后求出外接矩阵C的面积,减去A与B的面积。最终得到GIOU的值。
GIOU具有以下的性质:
总的来说,GIOU包含了IOU所有的优点,同时克服了IOU的不足。
DIOU和CIOU是天津大学于2019年提出的《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》。为了解决GIOU收敛慢和提高回归精度,提出DIOU来加速收敛。同时考虑到框回归的3个几何因素(重叠区域,中心点距离,宽高比),基于DIOU,再次提出CIOU,进一步提高收敛速度和回归精度。另外,可以将DIOU结合NMS组成DIOU-NMS,来对预测框进行后处理。
GIOU收敛慢的原因:
当出现下图的情况(GT框完全包含预测框)时,IOU与GIOU的值相同,此时GIOU会退化成IOU,无法区分其相对位置关系。同时由于严重依赖于IOU项,GIOU会致使收敛慢。
基于上述问题,作者提出两个问题:
好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比。
基于问题一,作者提出了DIoU Loss,相对于GIoU Loss收敛速度更快,该Loss考虑了重叠面积和中心点距离,但没有考虑到长宽比;
基于问题二,作者提出了CIoU Loss,其收敛的精度更高,以上三个因素都考虑到了。
首先,定义一下基于IOU Loss的损失函数:
R(B,Bgt) 表示预测框与GT框的惩罚项。
在IOU Loss中,R(B,Bgt)=0
在GIOU中:
而在DIOU中,该惩罚项
其中b和bgt表示预测框与GT框的中心点,ρ()表示欧式距离,c表示预测框B与GT框Bgt的最小外接矩阵的对角线距离,如下图所示。
因此,LossDIOU定义为:
所以,LossDIOU具有如下性质:
DIOU同时考虑了重叠面积和中心点之间的距离,但是没有考虑到宽高比。进一步提出了CIOU,同时考虑了这3个因素,在DIOU的惩罚项中加入了αυ:
其中,α表示trade-off参数,υ表示宽高比一致性参数。
这里的υ为什么会有4/π^2呢?这里arctan的范围是[0,π/2)。
所以,CIOU的损失函数为:
而在实际操作中,w^2+ h^2 是很小的数字,在后向传播时,容易造成梯度爆炸。通常用1来代替w^2+ h^2 。
另外,提醒一点的是,GIOU、CIOU、DIOU都是衡量方式,在使用时可以代替IOU。但是这里需要考虑的一个问题是,预测框与GT框的匹配规则问题。并不是说anchor一定会去匹配一个不重叠的GT框。类似于SSD中所说,anchor会选择一个重叠最大的GT框进行预测,而这个重叠最大可以使用IOU、GIOU、CIOU、DIOU来进行衡量。
参考文章: