Focal Loss for Dense Object Detection

ICCV17.

我们知道, 截至17年, 目标检测的方法主要分为两大阵营:two-stage 和one-stage, 前者的代表有RCNN家族, 后者的代表有YOLO和SSD。two-stage的精度在各大数据集上垄断, 而one-stage在精度降低的基础上, 大大提升了速度。

那么one-stage方法有没有可能在保持高效率的同时达到和two-stage相匹敌的精度呢?是什么原因导致目前的one-stage方法精度上不去呢?这是本文探究的问题。

作者认为, one-stage方法之所以精度落后的一个重要原因是:extreme foreground-background class imbalance。 以SSD为例, SSD baseline预测8000多个box, 一幅图的目标显然远远小于这个数目, 因此训练中, 大部分的框都是negtive, 只有少部分是positive的, 而这些negtive大部分又很容易学(完全是背景),属于easy negtive。 大量的easy negtive的loss在总的loss中占据主导地位, 淹没了那些hard samples的loss, 控制了整体梯度下降的方向。 因此网络一直训练已经训练很好的简单情况, 比较难的真正影响精度计算的目标没有得到充分训练。

那么two-stage模型试怎么克服这个问题的呢?以faster rcnn为例,首先 RPN过滤掉大部分easy negtive examples, 其次根据IOU大小调整进入第二个stage的negtive和positiive比例(3:1)。

当然之前也有人认识到这个问题, 并提出了一些解决方法, 比如OHEM。 简单来说就是minibatch是由那些loss很大的样本组成的, 这样网络会更加重视困难情况的训练。但是它的问题是完全忽略了easy example,导致 easy情况的精度无法继续提升。

本文提出的focal loss可以说是OHEM的相反方法, 它将重点放在降低easy examples的loss影响上。考虑到loss函数中classification 部分, 这里做简化,只考虑二分类,具体如下:

其中:

很容易理解, 简单说就是pt很大时, 代表网络对这个example已经学的很好了, 需要降低它的loss影响。

此时很小, 达到目的。 反之pt很小时, 接近1, loss几乎不受影响。

 

为了验证这个loss的有效性, 作者设计了一个新的one-stage模型, 叫RetinaNet。包括以FPN做基础的backbone, 和两个分别用来classification和regression。值得一提是, bbox regression部分作者用了无视类别的bbox regression, 这样参数更少,然后精度几乎不受影响。

最后效果也很好, 在coco test-dev上全面超越Faster R-CNN系列方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值