focal loss

focal loss

1. Introduction

目前最先进的object detectos是基于two-stage的机制,如faster R-CNN。one-stage detectors应用于对象位置、尺度和纵横比的规则,密集抽样。如YOLO,SSD,但one-stage精度比不上two-stage。我们认为训练过程中的class imbalance 是阻碍精度的主要障碍。所以我们提出了一种新的loss function。

在two-stage detector中,RPN等阶段迅速将候选物体位置缩小到少量,过滤了大多数背景样本,在第二个分类阶段,固定了前景和背景的比例进行随机抽样。

相反,one-stage detector 必须处理一组大得多的候选对象位置,虽然也可以采用类似的启发抽样法,但这样的效率非常低,

我们提出的loss function是动态缩放的交叉熵损失,当对正确类的置信度增加时,缩放因子衰减为0,该缩放因子可以自动降低训练过程中simple examples的贡献,让模型更加关注hard examples。

3. Focal Loss

我们从二元分类的交叉熵损失CE出发引出focal loss,
在这里插入图片描述
为了便于标注,我们定义了pt,并且重写了CE:
在这里插入图片描述
在这里插入图片描述
CE损失可以看作图1中的蓝色曲线,这种损失的一个显著特点是,基数是容易分类的例子,也会引起非平凡的损失,这一点在其绘图中可以看到。当对大量simple examples进行求和时,这些小的loss value会压过(大于)the rare class。
在这里插入图片描述
在这里插入图片描述
3.1. Balanced Cross Entropy

解决类别不平衡的一种常用方法是为给 class1 引入加权因子α∈[0,1],对class-1引入1-α, 在实际中,α可以用inverse class frequency 来设置,也可以作为一个超参数来设置,为了便于标注,我们用和pt同样的方法来定义αt,
我们把带有α的CE loss 写成下式:
在这里插入图片描述

3.2. Focal Loss Definition

在dense detector训练过程中,比较容易分类的背景占了损失函数的绝大部分,并主导了梯度,虽然α平衡了正负示例的重要性,但它并不能区分simple/hard的示例,所以我们要reshape loss function to down-weight 简单示例,从而集中在hard negative。我们在交叉熵损失中增加一个modulating factor:
在这里插入图片描述
具有可调focusing参数γ >= 0,我们将focal loss定义为:
在这里插入图片描述
图一显示了γ∈[0,5]的几个之的focal loss,它有两个性质:
(1)当一个例子被错误分类,并且pt很小时, modulating factor接近1,损失不受影响,若pt→1,factor为0,对于分类良好的示例,损失被down-weight
(2)focusing 参数 γ,平滑的调整了易处理样本的加权率,当 γ=0 时,FL等于CE,随着γ的增加,modulaing factor 的作用也随之增大,我们发现γ=2在我们的实验中效果最好。

直观来看,modulating factor从简单示例中减少损失贡献,并且在越低的loss示例上的权值越低。例如,当γ=2时,用pt=0.9分类的例子与CE相比会有低100×倍的loss,与pt≈0.968相比会有低1000×倍的loss。这反过来又增加了纠正错误分类示例的重要性。

在实际应用中,我们使用:
在这里插入图片描述
我么在实验中采用了这种形式,因为它比没有α的平衡形式的精度略有提高,最后,在loss层实现时,我们将sigmoid运算和损失计算结合起来,从而获得更好的数值稳定性。

3.3. Class Imbalance and Model Initialization

二值分类模型在默认情况下初始化为y = -1或1输出的概率相等,在这种初始化下,在类不平衡的情况下,频繁类的损失会在早期训练中占主导地位,造成不稳定。针对这种情况,我们引入先验的概念,用于训练开始时稀有类的模型估计的p值。我们设置模型对于稀有类的估计p时较低的,例如0.01。这是模型初始化的更改,而不是损失函数的更改,在严重类别不平衡的情况下,这可以提高交叉熵和focal loss的训练稳定性。

3.4. Class Imbalance and Two-stage Detectors

4. RetinaNet Detector

RetinaNet由一个骨干网络和两个特定任务的自网络组成。主干网络负责计算整个输入图像上的卷积feature map,并且时一个off-the-self 卷积网络。第一子网络对主干网络的输出执行卷积对象分类,第二个子网络,执行bounding box回归。

Feature Pyramid Network Backbone

我们采用FPN作为主干网络,我们构造了一个从p3到p7级别的金字塔,channel=256,

Classification Subnet:

分类子网络预测每个anchors(A个)和object classes(K个)在每个空间位置上存在对象的概率,即:空间位置个数 × A × K。此网络是附加到每个FPN级别的一个小FCN,该子网络的参数共享。它的结构很简单,从给定的金字塔level中提取feature map(C channels),应用四个3×3卷积层,每层C个filters,每层后接一个ReLU层,然后是带有K·A个filters的3×3卷积层,最后sigmoid函数被附加到最后一个卷积输出上,对每个空间位置对应的anchor和class进行预测。我们使用C=256,A=9。分类自网络不和回归子网络共享参数。在这个网络中,我们使用了focal loss。

Box Regression Subnet:

box回归子网络和分类自网络设计相同,只不过它在每个空间位置输出4A个线性输出。对于每个空间中位置的A anchor,这4个输出预测anchor与ground truth之间的相对偏移,我们使用了一个与类不管的bounding box 回归器,box回归子网络和费雷子网络使用不同的参数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值