【Focal Loss】 Focal Loss for Dense Object Detection 论文解读

 

Focal Loss通过在Cross Entropy的基础上引入一个  (1-p_{t})^{\gamma }项,此项可以减小 well-classified 目标 (p_{t} > 0.5)(p_{t}>0.5) 的在总loss中占的比例,使得模型更加关注那些难分类的目标。

Abstract

目前为止,精度最高的目标检测模型仍然是RNN那一套two-stage的方法,One-stage的方法虽然简单、速度快但是精度上与two-stage的方法差不少。作者认为前景和背景类别的极端不平衡是主要原因。为了验证Focal Loss的有效性还专门设计了一个RetinaNet,其实这里我是不理解的,既然Focal Loss好使,那么在其他模型上应该表现也不错,何必重新设计一个网络?源码地址:

https://github.com/facebookresearch/Detectron.


1. Introduction

首先介绍了two-stage方法的流程,第一步生成候选框,第二步确定候选物体在图像中的位置和具体的分类。那么为什么one-stage的模型不行呢,如何改进能达到two-stage的精度?作者认为就是class imbalance,所以作者也是从这里下手的。

class imbalance的问题在RCNN那套模型中是不存在的,经过RPN后会选出候选框过滤掉了大部分背景;在第二个stage,sampling heuristics比如固定比例的前景和背景(1:3)或者OHEM都可以起到平衡前景和背景的作用。

相反的,one-stage检测器必须处理整张图片范围内的所有候选位置,这比two-stage的范围大了很多。相应的作者提出了Focal Loss,使用一个权重调整易分类和难分类目标在Loss中所占的权重。但是Focal Loss的形式并不是统一的,作者接下来会为我们展示几种不同的示例,他们都可以达到相似的效果。

2. Related Work

Classic Object Detectors: 介绍了目标检测的发展历史。

Two-stage Detectors: 介绍了RCNN系列的发展历史。

One-stage Detectors: 介绍了One-stage目标检测器的发展历史。

Class Imbalance: 所有经典的one-stage目标检测模型都会遇到class imbalance的问题。这些Detector在每张图片中列举出10^{4} - 10^{5} 个候选区域,但是只有非常少的一部分包含了目标,这种不平衡造成了两个问题:

(1)大部分训练时无效的,因为易识别的背景占据了大部分,它们并不能提供有效的训练信号;

(2)大量的易识别的反例会主导训练,使得模型偏向反例,造成模型退化。

目前常见的解决方式是采用hard negative mining(以后会专门写一篇相关博客)。但是使用Focal Loss就可以避免那么麻烦。

Robust Estimation:设计更加健壮的loss function目前受到的研究人员的注意,比如Huber Loss,可以减弱离群点(outliers)的影响。Focal Loss专注于训练难识别的目标。

3. Focal Loss

3.1 Balanced Cross Entropy

常用的解决class imbalance的方法是引入权重 \alpha \in [0,1],对于正样本我们使用 \alpha ,对于负样本我们使用 1-\alpha。所以 \alpha-balanced CE写为:

CE(p_{t})=-\alpha _{t}log(p_{t})

3.2 Focal Loss Definition

虽然上面介绍的平衡CE的方法可以解决类别不平衡的问题,但是并不能区分易分类和难分类目标,即不能使模型更加关注难分类的目标。作者的目标是,重新调整Loss的结构,使得难分类的目标在Loss中占得更大的比例。Focal Loss的形式如下:

FL(p_{t})=-(1-p_{t})^{\gamma } log(p_{t})

在上图中,\gamma \in [0,5],Focal Loss特性:

(1)当把正样本错分成背景时,p_{t}很小,这样权重(1-p_{t})^{\gamma }就会接近1,其所占的loss并不会受到影响;

当把正样本正确识别出来时,p_{t}很大,这样权重(1-p_{t})^{\gamma }就会接近0,其所占的loss会缩小。

(2)\gamma  负责调整易分类目标在 Loss中占的权重,作者通过实验得知\gamma = 2时效果最好。

经验上来说,作者仍然采用了 \alpha 参数平衡各个类别,完整的Focal Loss如下:

FL(p_{t}) = -\alpha (1-p_{t})^{\gamma } log(p_{t})

不过Focal Loss的形式并不只是这样,在附录中还有介绍了其他类型的。

3.3 Class Imbalance and Model Initialization

一般的分类模型默认初始化为 y=-1 or 1,这两种时等概率的。在类别不平衡的情况下,出现次数多的类别会占据主要部分,这会造成训练前期的不稳定。为了克服这个缺点,作者引入了‘prior’这个概念,用它去寻找模型中少见的类别。使用这种方法可以提高类别严重不平衡时模型训练的稳定性。

3.4 Class Imbalance and Two-stage Detectors

two-stage的目标检测器通过两种机制解决类别不平衡的问题:

(1)两级串联

(2)biased minibatch sampling。

第一个stage实现的时目标推荐功能,可以把候选目标减少到1000个左右,更重要的时在选择候选区域时并不是随机选择的,而是根据可能性进行排序选择的前1000个。在第二个阶段,选择前景和后景的比例也是不同的,我们可以设定为1:3或者1:2,这个有点类似于Focal Loss的 α 参数的作用。

4 RetinaNet Detector

Feature Pyramid NetWork Backbone:

RetianNet 采用 FPN 作为 Backbone。FPN为什么有效呢?简单来说是因为它在原来的ResNet这种基本的卷积网络上增加了top-down通路和lateral通路,所以FPN可以在一张输入图片的基础上构造一个内容丰富、多尺度的特征金字塔。金字塔的每一层特征都会用来检测输入图像不同尺寸的目标。

但是作者所构造的FPN网络与原始的FPN网络有所不同,作者构造的FPN由P3-P7构成(P_{l} 层的分辨率是输入图像的 1/2^{l}),其中P3-P5是由ResNet的C3-C5计算得到的,P6是由C5使用stride=2的3X3卷积得到的,P7是由P6经过stride=2的3x3卷积得到的,特征金字塔的所有层的Channel=256。与原始的FPN不同之处在于:(1)FPN没有使用P2层;(2)P6是由stride=2的卷积得到的而不是降采样;(3)引入了P7层提升对大尺寸目标的检测效果。

Anchors:

RetianNet 采用了类似于RPN的anchor机制,level P3 到 P7曾anchor的面积从32^{2}-512^{2}不等,每个anchor有三个比例{1:2, 1:1, 2:1}不等,为了覆盖Dense目标,在每个level中增加了\begin{Bmatrix} 2^{0}, & 2^{1/3},& 2^{2/3} \end{Bmatrix}三种面积的的anchor,这种设置的确可以提高模型的精度。

每个Anchor都会有长度为K的one-hot分类目标和4-vector的box回归目标。这与RPN网络是类似的,但是作者做了一些小小的改动:(1)anchor内部包含目标的判断仍然是与GT的IOU,但是这个IOU的阈值设置为了0.5(RPN是0.7);(2)每个anchor被认为只能包含一种目标,如果它与GT的IOU大于了阈值0.5却没有包围任何类别的目标,那么这个Anchor将不会被用来进行训练。

Classification Subnet:

分类子网络预测每个位置上A个anchor中每个anchor对应的类别,每个位置供K*A个可能。这个子网络可以看做是一个小的FCN网络,这个网络连接到FPN金字塔的每一层。分类子网络的参数是被特征金字塔每一层所共享的。子网络由4层3x3的卷积层组成,每个卷积层都使用了Relu激活函数,最后的输出是K*A的one-hot结果。

Box Regression Subnet:

与分类网络并行,box regression子网络是类似的FCN结构,但是他们的权重并不是共享的,但是输出是回归得到相对gt的坐标偏置值(offset)。图像空间每个坐标上都会有A个anchor,每个anchor都会得到相应的偏置坐标。box回归网络和分类网络实现了坐标和类别的解耦。

4.1 Inference and Training

Inference:

为了提高速度,作者只对FPN每层部分predictions进行处理。在FPN的每个特征层上,首先使用0.05的阈值筛选出是前景的物体,最多选取前1k个predictions进行后续的处理。之后融合各层的predictions,再使用NMS(阈值0.5)去掉重叠box。

Focal Loss:

Focal Loss用在分类子网络中。\gamma = 2时效果最好,\gamma在[0.5,5]范围内相对稳定。作者在训练RetinaNet时,每张图大概100k个anchors都使用了focal loss。这是与heuristic sampling方法(比如RPN)和hard example mining(比如OHEM,SSD)每个mini batch中只选用部分anchor是不同的。一张图片的total focal loss是图片内约100k个anchor的总和,normalized by the number of anchors assigned to a ground-truth box。最后讲述的是如何设置α,α的作用是调节不常见类别的loss在整体loss中占的比例,作者的实验中α=0.25是最好用的。一般来说增大\gamma就要相应的减小α。

Initialization:

Optimization:

作者训练RetinaNet只使用了SGD方法,16张图每个minibatch,一共使用了8个GPU,每个GPU2张图。每个模型都是迭代了90k次,初始lr=0.01,在60k次时lr=0.001,在80k次时lr=0.0001。在数据曾广方法中,只使用了图像水平翻转。优化器参数weight decey=0.0001,momentum=0.9。训练的总loss是类别子网络的focal loss和定位子网络的standard smooth L1 loss之和。

5 Experiments

未完!


 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值