09 《Focal Loss for Dense Object Detection》学习笔记

参考网址:

  1. RetinaNet——《Focal Loss for Dense Object Detection》论文翻译(这篇文章基本上完全翻译了论文内容,还是比较详细的,我再阅读时主要参考了这篇)

  2. 论文网址:Focal Loss for Dense Object Detection

  3. RetinaNet翻译+解析(主要是介绍了论文中的损失函数:CE、FL,其实这些在原作中都有提到)

  4. 目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作(这篇有助于整体理解这篇论文,且Focal Loss部分介绍的很详细)

作者首次注意到one stage模型精度低的原因是类别不均衡的问题,所以提出FL解决正负样本不均衡问题 ,由此构建了RetinaNet.。

1、FL相对于CE(cross entropy)的优势

在候选区域生成的候选框中,大类的不平衡会主导交叉熵损失,所以大量的负样本会主导损失并主导梯度。FL的计算公式如下,其中\alpha_t为平衡因子,\gamma为调节因子,\gamma的取值范围为[0,5]。作者在文中做实验分析了\alpha_t\gamma取不同值的效果,发现\gamma越大时,\alpha_t应该越小,效果最好的组合为\alpha_t=0.25, \gamma =2

FL(p_t)=-\alpha_t(1-p_t)^\gamma ln(p_t),其中p_t=\left\{\begin{matrix} p & if(y=1)\\ 1-p & ortherwise \end{matrix}\right.注意p=\hat{y},只是符号不一样。

那为啥这样的形式就比平衡交叉熵好呢?我们假设\gamma为1,系数就变成了1-p_t,在这个基础上,我们按照上面的方式展开FL(p_t)其实就是这样子:

FL(p,y)=\left\{\begin{matrix} -(1-p)ln(p) & if(y=1)\\ -pln(1-p) & otherwise \end{matrix}\right.

如果按照二分类的交叉熵损失展开,公式如下:

FL = -[y_i ln\widehat{y}_i \times (1-\widehat{y}_i)^\gamma \alpha + (1-y_i)ln(1-\widehat{y}_i) \times \widehat{y}_i^\gamma (1-\alpha)] 

由于交叉熵前做了softmax,所以p一定是个正数,这个因子加上不会改变原有损失的符号,然后我们举例说明它怎么区分难易样本,p是正样本的预测值:

  • 对于一个正例,模型认为它简单,那么p会趋近于1,1−p会趋近于0,损失就会变小,相反的就会变大。
  • 对于一个负例,模型认为它简单,那么p会趋近于0,损失就会变小,相反的就会变大。

举个例子:

同样是拿预测概率为0.1和0.9进行比较:

 y_i=1(真实有目标)y_i=0(真实无目标)
\hat{y}_i=0.9-ln0.9=0.1053-ln(1-0.9)=2.3025
 -ln0.9\times (1-0.9)^2 \times 1=0.0010536-ln(1-0.9)\times 0.9^2 \times 1=1.86509
\hat{y}_i=0.1-ln0.1=2.3025-ln(1-0.1)=0.10536
 -ln0.1 \times (1-0.1)^2 \times 1=1.86509-ln(1-0.1)\times0.1^2\times1=0.001053

其中假设\gamma=2,\alpha =1,从表中可以看出,使用FL后正负样本损失的倍数差距被放大了,原来使用二分类的交叉熵损失倍数为20倍左右,使用了Focal Loss后,倍数被放大到上千(2000)倍,所以这样当出现预测错误时,会给予更大的关注,从而来缓解正负样本不均衡的问题。

这就对模型的难易做出了不同的loss值,此外Focal loss还有一个超参数\gamma,它起到了对因子成幂次,由于底数一定是一个小于1的数,幂次会拉大1-p_t原有的线性倍率。比如1-p_t原本是0.1和0.9,\gamma =2时,会变成0.01和0.81,9倍变成了81倍。这种抑制简单样本,促进难样本的方式,其实和IOU>0.7和IOU<0.3有异曲同工之妙。
加了这东西之后,难易样本区分开了,但是负样本多的问题好像并没有解决掉,所以Focal loss最后又把平衡交叉熵中的平衡因子\alpha_t加了回来。

参考文章:目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作,这篇文章的Focal Loss部分介绍的很详细

2、RetinaNet的网络结构

RetinaNet是一个统一的网络,由骨干网(backbone)和两个特定于任务的子网组成。骨干负责计算整个输入图像上的卷积特征图,并且是一种自卷积网络。第一个子网在主干的输出上执行卷积对象分类;第二个子网执行卷积边界框回归。这两个子网具是一个简单的设计,我们专门为one-stage、dense detection提供这种设计,网络结构如下所示。通过FPN可以提取出多尺度的候选框,每一个金字塔层的输出通道都是256,

Anchor Box
RetinaNet选取Anchor Box的策略和FPN相似,一共有5个不同尺度的特征图,分别是32^2-512^2,每一层会有三种比例:1:1、1:2、2:1,所以FPN有15种Anchor,但是RetinaNet在这个基础上又加了一个因素,就是每一层特征图上有三种尺度,它分别是该层特征图尺度的2^0,2^{\frac1 3},2^{\frac2 3},而比例不变仍为1:1、1:2、2:1,于是RetinaNet的Anchor变成了45个。因为Focal loss的引入,让Anchor的选取变得为所欲为,就是不怕多。

参考文章:【论文解读】[目标检测]retinanet

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值