目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

RetinaNet: 高准确率的单段目标检测模型

论文:Focal Loss for Dense Object Detection

一、为什么单段模型与双段模型准确率相差甚远

1.什么是单段(one-stage)模型与双段(two-stage)模型

(1)双段模型:提取候选区+对候选区分类

例子:R-CNN系列

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

R-CNN:对输入图像使用Selective Search算法提取出大约2000个候选区,将候选区扭曲输入到之后的CNN中提取特征,最后通过SVM进行分类的判断。

(2)单段模型:将目标检测定义为一个回归问题

例子:YOLO系列

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

YOLOv1:将图片输入到CNN中,直接回归得到包含目标位置和分类概率的向量。

2.两种模型的准确率差距

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

YOLOv3论文中各模型的准确率比较:即使YOLOv3做了很多提高准确率的工作,与Faster R-CNN的准确率仍有距离,总体上除本论文的RetinaNet外,单段模型的准确率都低于双段模型。

3.造成准确率差距的原因:class imbalance 类数量不均衡

补充几个关键词:候选框的类型

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

easy positive 易分类的正例:目标框很好地框住了物体,由此可以该类预测出很高的概率。

hard positive 难分类的正例:可以被预测为该类目标(IoU超过阈值),但是预测的概率较低。

easy negative 易分类的反例:背景的概率很高,分类的概率很低,很容易被判断为背景。

hard negative 难分类的反例:与目标有一定重叠,但是IoU没有超过阈值。

注:这里指的概率都是指网络预测的结果,0-1之间的某个数,而不是实际意义的概率。

(1)什么是class Imbalance

class imbalance:在一个图像中,背景的面积要远大于目标的面积,由此产生的目标框中,绝大多数都是easy negative,这带来了两个问题:

​ A. 大量的easy negative使训练变的很低效(对参数的更新作用很小)

​ B. 虽然一个easy negative对loss的贡献很小,但是由于数量过多,掩盖了真正对预测有意义的目标框的损失。

​ 作者的观点是双段模型很好地解决/避免了这个问题,而单段模型没有,这是二者准确率差距的重要原因。

(2)单段模型为什么存在这个问题

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

用YOLOv3举例:YOLOv3在每个位置会预测3个anchor box,三个尺度上的预测数量相加一共有

10647个,里面的绝大多数都是背景框。

(3)双段模型怎么解决的

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

重点在第一段:提取候选框的目的就是找到最有可能含有目标的一些候选框,不可能含有目标的候选框会被直接舍弃,比如R-CNN最终提取出约2k个可能含有目标的候选框,我们从理想的角度说,它已经丢弃了easy negative,至少是hard negative了。

二、在单段模型中解决class imbalance: Focal Loss 焦点损失

1.从交叉熵损失到Focal Loss

C E ( p , y ) = { − l o g ( p ) if y=1 − l o g ( 1 − p ) otherwise CE(p,y)=\begin{cases}-log(p)& \text{if y=1}\\-log(1-p)& \text{otherwise} \end{cases} CE(p,y)={log(p)log(1p)if y=1otherwise

简化一下:

p t = { p if y=1 1 − p otherwise p_t=\begin{cases}p& \text{if y=1}\\1-p& \text{otherwise} \end{cases} pt={p1pif y=1otherwise

得到:

C E ( p t ) = − l o g ( p t ) CE(p_t)=-log(p_t) CE(pt)=log(pt)

作者希望引入一个因子 α t \alpha_t αt,当目标框是esay negative,即 y = 0 y=0 y=0(背景)并且概率 p p p很大时,对损失函数的影响更小一些。

C E ( p t ) = − α t l o g ( p t ) CE(p_t)=-\alpha_tlog(p_t) CE(pt)=αtlog(pt)

Focal Loss:

F L ( p t ) = − ( 1 − p t ) γ l o g ( p t ) FL(p_t)=-(1-p_t)^\gamma log(p_t) FL(pt)=(1pt)γlog(pt)

(当 γ = 0 \gamma =0 γ=0时就是 C E CE CE)

2. 为什么有效

对于easy 的正例与反例,它们的 p t p_t pt都很大,那么原损失乘上$(1-p_t)^\gamma $就会减小很多。

对于hard的正例与反例, p t p_t pt很小,这个系数的影响就很小。

由此产生的效果就是,easy的目标框的权重减小。

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

直观地可以看到,概率很大时图像变得扁平,loss减小。

多正例与多反例损失的概率密度图像:

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

分别采样了 1 0 7 10^7 107个反例与 1 0 5 10^5 105个正例,计算出FL,将正反例的损失分别归一化,然后按照损失从小到大的顺序进行累计,得到了这样的图像。

可以看出,FL对于正例的影响不大,而对于反例,当 γ = 2 \gamma =2 γ=2时反例的损失都集中在很小的一部分图像上了,我们可以推理出hard negative占了损失的绝大部分。

三、 RetinaNet模型

1.模型结构与技术

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

结构:ResNet-FPN,也就是ResNet加上多尺度检测。

技术:

​ anchor:3种不同比例$\times $3种不同大小=9种anchor

​ FPN的多尺度检测

​ Box Regression 边界框回归 通过一个网络将anchor的位置回归得到4个值

​ Focal Loss

输入: 600 × 600 600\times 600 600×600的图像

输出:每个尺度分别输出anchor结果与边界框回归的结果。

2. 准确率比较

目标检测 RetinaNet 高精确度单段检测模型 Focal Loss

四、参考

Focl Loss for Dense Object Detection
知乎:RetinaNet(Focal Loss)