平衡 L1损失(Balanced L1 Loss)

目标检测(object detection)的损失函数可以看做是一个多任务的损失函数,分为分类损失和检测框回归损失:

L p , u , t u , v = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L_{p,u,t_u,v} = L_{cls}(p,u)+\lambda[u\ge1]L_{loc}(t^u,v) Lp,u,tu,v=Lcls(p,u)+λ[u1]Lloc(tu,v)

L c l s L_{cls} Lcls表示分类损失函数、 L l o c L_{loc} Lloc表示检测框回归损失函数。在分类损失函数中,p表示预测值,u表示真实值。 t u t_{u} tu表示类别u的位置回归结果,v是位置回归目标。λ用于调整多任务损失权重。定义损失大于等于1.0的样本为outliers(困难样本,hard samples),剩余样本为inliers(简单样本,easy sample)。

平衡上述损失的一个常用方法就是调整两个任务损失的权重,然而,回归目标是没有边界的,直接增加检测框回归损失的权重将使得模型对outliers更加敏感,这些hard samples产生过大的梯度,不利于训练。inliers相比outliers对整体的梯度贡献度较低,相比hard sample,平均每个easy sample对梯度的贡献为hard sample的30%,基于上述分析,提出了balanced L1 Loss(Lb)。

​ Balanced L1 Loss受Smooth L1损失的启发,Smooth L1损失通过设置一个拐点来分类inliers与outliers,并对outliers通过一个max(p,1.0)进行梯度截断。相比smooth l1 loss,Balanced l1 loss能显著提升inliers点的梯度,进而使这些准确的点能够在训练中扮演更重要的角色。设置一个拐点区分outliers和inliers,对于那些outliers,将梯度固定为1,如下图所示:
在这里插入图片描述

​ Balanced L1 Loss的核心思想是提升关键的回归梯度(来自inliers准确样本的梯度),进而平衡包含的样本及任务。从而可以在分类、整体定位及精确定位中实现更平衡的训练,Balanced L1 Loss的检测框回归损失如下:

L l o c = ∑ i ∈ x , y , w , h L b ( t i u − v i ) L_{loc} = \sum_{i\in{x,y,w,h}}L_{b}(t_{i}^{u} - v_{i}) Lloc=ix,y,w,hLb(tiuvi)

其相应的梯度公示如下:

∂ L l o c ∂ w ∝ ∂ L b ∂ t i u ∝ ∂ L b ∂ x \frac{\partial L_{loc}}{\partial w} \propto \frac{\partial L_{b}}{\partial t_{i}^{u}} \propto \frac{\partial L_{b}}{\partial x} wLloctiuLbxLb

基于上述公式,设计了一种推广的梯度公式为:

∂ L b ∂ x = { α l n ( b ∣ x ∣ + 1 ) , i f ∣ x ∣ < 1 γ , o t h e r w i s e \frac{\partial L_{b}}{\partial x} = \begin{cases}\alpha ln(b|x|+1), if |x|<1 \\ \gamma, otherwise\end{cases} xLb={αln(bx+1),ifx<1γ,otherwise

其中,α控制着inliers梯度的提升;一个较小的α会提升inliers的梯度同时不影响outliers的值。γ来调整回归误差的上界,能够使得不同任务间更加平衡。α,γ从样本和任务层面控制平衡,通过调整这两个参数,从而达到更加平衡的训练。Balanced L1 Loss公式如下:

L b ( x ) = { a b ( b ∣ x ∣ + 1 ) l n ( b ∣ x ∣ + 1 ) − α ∣ x ∣ , i f ∣ x ∣ < 1 γ ∣ x ∣ + C , o t h e r w i s e L_{b}(x) = \begin{cases} \frac{a}{b}(b|x|+1)ln(b|x|+1)-\alpha|x|, if |x|<1 \\ \gamma|x|+C, otherwise\end{cases} Lb(x)={ba(bx+1)ln(bx+1)αx,ifx<1γx+C,otherwise

其中参数满足下述条件:

α l n ( b ∣ x ∣ + 1 ) = γ \alpha ln(b|x|+1) = \gamma αln(bx+1)=γ

默认参数设置:α = 0.5,γ=1.5

参考:Libra R-CNN: Towards Balanced Learning for Object Detection
代码:github

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值