loss上的改进,大部分的思路,是找出那些原本的loss(包括regression和classification)可能会不合理的情况,修正这些不合理。总的来说,有用ranking来解决正负样本不平衡的问题(如DR loss、AP-loss,一个从分布角度,一个从AP角度);有考虑当前的Smooth L1 Loss中偏移分布假设可能不太合理,重新考虑设计偏移分布的KL loss;也有考虑multi-scale的样本loss不平衡,而用IoU作为loss的IoU loss,以及后续的改进GIoU、DIoU;
首先,在Faster R-CNN中,使用的是smooth L1 loss。而smooth L1 loss,可以理解为,当|x|<1时,为L2损失(即假设样本服从标准高斯分布),当|x|>1时,为L1损失(即假设样本服从拉普拉斯分布),这样的好处在于训练时|x|>1时快速下降,|x|<1时精细调整。对于各种损失函数的介绍具体参看机器学习常用损失函数小结 - 王桂波的文章 - 知乎
另外的一个细节是,预测的偏移值为(tx,ty,tw,th),具体如下所示
通过除以边长,消除不同边长大小间量级差异,而tx,ty中用直接减,而tw,th用log之后减,是考虑tw,th的量级比tx,ty要大?
KL loss
cvpr2019:https://arxiv.org/pdf/1809.08545.pdf
这篇文章是为了解决边界不确定的box的regression问题(不被模糊样例造成大的loss干扰)。KL loss是regression的loss。文章预测坐标(x1,y1,x2,y2)的偏移值,对于每个偏移值,假设预测值服从高斯分布,标准值为狄拉克函数(即偏移一直为0),计算这两个分布的距离(这里用KL散度表示距离)作为损失函数。参考smooth L1 loss,也分为|xg-xe|<=1和>1的两段,>1部分用L1 loss接上(为保证=1部分两个阶段相等,故很容易得到>1部分的公式。
另,
这里
Focal loss
focal loss相对很有名气,主要是针对one-stage方法中样本不平衡的问题提出的,是classification loss,如下所示
实验表明
思路很清晰,大量的样本其实贡献的loss很有限(大部分都是易学习的负样本),导致少量的正样本的loss难以贡献。故增加这部分少量样本的loss的权重(即y=1),减少大量负样本的loss的权重。
DR loss
DR loss的研究背景和focal loss一样,one-stage方法中样本不平衡。顾名思义,Distributional Ranking,做分布的转换以及用ranking作为loss。
看不懂,具体参看
张凯:2019 DR loss(样本不平衡问题)目标检测论文阅读zhuanlan.zhihu.comAP loss
arxiv2019:Towards Accurate One-Stage Object Detection with AP-Loss
AP loss也是解决one-stage方法中样本不平衡问题。顾名思义,利用AP(与一般概念的AP不同)来作为loss,下图给出了AP比Acc(即1/0分类)要更适合作为loss的一个例子。
与 DR loss类似的,这里也使用了Ranking。将AP用x和y表示出来,并给出这个loss计算公式在训练过程中是否可以比较好收敛的推导分析。
Balanced L1 loss
这是一作在知乎的回答介绍。
如何看待 CVPR2019 论文 Libra R-CNN(一个全面平衡的目标检测器)?www.zhihu.comLibra R-CNN中提出了Balanced L1 Loss。作者观察发现,
上图虚线是Smooth L1 Loss的梯度函数,作者认为在[0,1]区间内
于是得到
这里作者取
不过没有找到Balanced L1 Loss的easy samples贡献的梯度的百分比。可以看到,Balanced L1 Loss确实在x较小的时候提升了loss的值,变相减小了x比较大的时候的loss,达到了降低那些noise label的loss的效果。
IoU系列——IoU loss、GIoU loss、DIoU loss
这篇里介绍了这些以IoU为基础的各种loss,IoU loss是16年的,而后的几个都是19年,有点奇怪的是,19年这几篇的最终衡量指标都是用AP提升的相对百分比而不是绝对百分比。
BBuf:目标检测算法之AAAI 2020 DIoU Loss 已开源(YOLOV3涨近3个点)
IoU loss
arxiv2016:UnitBox: An Advanced Object Detection Network
UnitBox这篇文章中,提出了IoU loss,但好像仅仅用在人脸识别的场景下。文中认为不同尺度的box对l2 loss有影响(但个人认为除以w,除以h之后这个问题就基本没有了~)。故文中提出了新的loss,如下图所示,计算-ln(IoU)作为loss,其实也就是交叉熵损失。把IoU看成是伯努利分布(即GT为IoU=1或0,然后训练中通过调整坐标来接近这个值)
有个疑问,文中说
GIoU loss
arxiv2019:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
在IoU loss中,有个很明显的缺点:如果两个框没有相交,根据定义,IoU=0,不能反映两者的距离大小(重合度),loss为1。
而GIOU的原理和想法很简单,就是在IoU的基础上添加了一项(如下所示),其中
从结果来看,GIoU在YOLO上提升(对比IoU loss)比较明显,而在Faster R-CNN等两阶段的算法上提升(对比IoU loss)很不明显。
DIoU loss
在DIoU中,作者比较深入的讨论了IoU作为loss时应该如何考虑其设计。首先,作者提出了GIoU存在的一个明显的问题,即一个框在另一个内的情况应该予以考虑。
于是作者针对这种情况,设计了新的一种loss,公式如下
直观的理解就是在IoU之外,增加了一项,即下图的(d/c)^2,这样即使一个框在另一个内,两个框的中心点还是会继续靠拢。同样的,在NMS时,也可以用DIoU替代IoU。
另,文中还设计了CIoU,加入了Anchor的长宽比和目标框之间的长宽比的一致性这个考虑,公式如下
这里的
小结
从以上的一些loss中从几个不同的维度,可以归纳出几个设计loss的步骤:
- 衡量目标是否合理,从regression来说是坐标点的偏移,还是IoU,classification中直接分类还是可以用rank中的AP?
- 从场景(目前的loss)存在的问题出发,找出设计loss时需要重点考虑的因素,如正负样本不平衡,存在一些标错的noise label,或是存在边界模拟两可的uncertainty label;
- 一些针对设计和问题转化,比如将分类问题转化为ranking问题,Smooth L1 Loss的设计细节(如L1及L2部分的设计分布假设)的一些不足的讨论及优化变形;
- 新的loss函数的推导,包括loss函数的推理设计过程,以及收敛性等对loss函数的一般要求的给出;
- 新的loss函数对其他部分的影响及联动修改。