triplet loss后面不收敛_目标检测中的loss

本文探讨了目标检测中不同损失函数的改进,包括KL loss、Focal loss、DR loss、AP loss等,着重分析了IoU系列损失,如IoU loss、GIoU loss和DIoU loss。这些损失函数旨在解决样本不平衡、定位精度和边界不确定性等问题,优化检测算法的性能。
摘要由CSDN通过智能技术生成

85d2d07bd307cc9ae1fd33da00153d4f.png

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部分的公式。

,当|xg-xe|<=1

,当|xg-xe|>1

另,

的梯度公式为

这里

,这里的
就是假设中
预测值的高斯分布的
。即可以认为,文章提出的KL loss与smooth L1 loss最大的不同点在于,新增了一个变量。而这个
信息可能对regression有帮助(smooth L1 loss是假设样本服从标准高斯分布的,故若样本服从的高斯分布可以学习,那么学习效果应该会更好。假设模型服从高斯分布,一开始应该是
会比较大,随着训练过程
会越来越小,如果说到最后,
说明这个偏移基本在0左右)。有几个疑问,
初始化为什么选择0.0001,以及这种没有ground true的参数作为预测输出的意义,无ground true的
会比固定的标准高斯分布要好?另,没有看明白,KL loss与不确定的box的regression问题之间的关系。

Focal loss

focal loss相对很有名气,主要是针对one-stage方法中样本不平衡的问题提出的,是classification loss,如下所示

实验表明

取2,
取0.25的时候效果最佳。

思路很清晰,大量的样本其实贡献的loss很有限(大部分都是易学习的负样本),导致少量的正样本的loss难以贡献。故增加这部分少量样本的loss的权重(即y=1),减少大量负样本的loss的权重。

DR loss

DR loss的研究背景和focal loss一样,one-stage方法中样本不平衡。顾名思义,Distributional Ranking,做分布的转换以及用ranking作为loss。

572d6c5909d82feea2b7040e3c203693.png

看不懂,具体参看

张凯:2019 DR loss(样本不平衡问题)目标检测论文阅读​zhuanlan.zhihu.com
e3cd87cd9c532eb7caeb2e475dba84f8.png

AP loss

arxiv2019:Towards Accurate One-Stage Object Detection with AP-Loss

AP loss也是解决one-stage方法中样本不平衡问题。顾名思义,利用AP(与一般概念的AP不同)来作为loss,下图给出了AP比Acc(即1/0分类)要更适合作为loss的一个例子。

c3dc457afed9a1dec409a860748ffb86.png

与 DR loss类似的,这里也使用了Ranking。将AP用x和y表示出来,并给出这个loss计算公式在训练过程中是否可以比较好收敛的推导分析。

Balanced L1 loss

这是一作在知乎的回答介绍。

如何看待 CVPR2019 论文 Libra R-CNN(一个全面平衡的目标检测器)?​www.zhihu.com

Libra R-CNN中提出了Balanced L1 Loss。作者观察发现,

中那些easy samples只能贡献30%的梯度(具体说明?),这样的梯度贡献分配是不合理的(作者发现数据集中有不少的noise label,故希望能降低这些noise label对loss的负面影响,而这些noise label大部分分布在x比较大的部分)。

490d883311922a9c9607e2092b673274.png

上图虚线是Smooth L1 Loss的梯度函数,作者认为在[0,1]区间内

的梯度应更大一些(特别是接近0的地方,即loss比较小的easy samples),因此增加这部分的梯度值,把原先的Smooth L1 Loss的梯度改写为

于是得到

的公式为

这里作者取

为默认值,具体的loss函数值如下图

bd9b1c58e1e563df174dbb83fb65cbc0.png

不过没有找到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,然后训练中通过调整坐标来接近这个值)

d477188181568f41f0acca5f016dbb62.png

有个疑问,文中说

,那预测框必包含红点,是否会有影响?

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存在的一个明显的问题,即一个框在另一个内的情况应该予以考虑。

168ccf3b4e6f1829dbad979717ec48ff.png
一个框在另一个框内时的不同情况间,各loss的差异

于是作者针对这种情况,设计了新的一种loss,公式如下

直观的理解就是在IoU之外,增加了一项,即下图的(d/c)^2,这样即使一个框在另一个内,两个框的中心点还是会继续靠拢。同样的,在NMS时,也可以用DIoU替代IoU。

2124806959a24424fc597da545743d50.png
DIou loss的直观理解

另,文中还设计了CIoU,加入了Anchor的长宽比和目标框之间的长宽比一致性这个考虑,公式如下

这里的

是一个系数,v表示了预测和实际框的长宽比之差,公式如下

小结

从以上的一些loss中从几个不同的维度,可以归纳出几个设计loss的步骤:

  1. 衡量目标是否合理,从regression来说是坐标点的偏移,还是IoU,classification中直接分类还是可以用rank中的AP
  2. 场景(目前的loss)存在的问题出发,找出设计loss时需要重点考虑的因素,如正负样本不平衡,存在一些标错的noise label,或是存在边界模拟两可的uncertainty label
  3. 一些针对设计和问题转化,比如将分类问题转化为ranking问题,Smooth L1 Loss的设计细节(如L1及L2部分的设计分布假设)的一些不足的讨论及优化变形;
  4. 新的loss函数的推导,包括loss函数的推理设计过程,以及收敛性等对loss函数的一般要求的给出;
  5. 新的loss函数对其他部分的影响及联动修改。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值