[重读经典论文] RetinaNet——Focal Loss for Dense Object Detection

1. 前言

这篇论文也是何凯明的团队在2017年的论文《Focal Loss for Dense Object Detection》中提出的,网络架构魔改了FPN,因此这篇论文的重点是提出了新的分类Loss——Focal Loss,用一个合适的函数,去度量难分类和易分类样本对总的损失函数的贡献。解决了传统交叉熵损失函数因为类别不平衡导致性能下降的问题。RetinaNet是历史上one stage网络性能第一次超过two stage网络。

但是它也存在一些缺点,首先Focal Loss引入了另外两个超参数,针对这两个参数需要谨慎调整,不然反而导致最后的训练结果更不好;然后是容易受噪音影响,由于模型会更偏向于学习难分样本,一旦这些样本标错,将会成指数倍放大误差,导致模型难以拟合。

2. 网络架构

2.1. 主体结构

下载

如上图所示,跟FPN区别的点主要是没有用到C2进行特征融合,然后P6、7是在P5的基础上进行卷积操作得到的。Anchor方面,每个特征层选了3个Scale和3个Ratios,也就是9个Anchor,如图右下所示。

2.2. 预测头

下载 (1)

跟Faster-Rcnn有点类似,不同的是每个最后的特征层的预测头的权值是共享的,如图右上所示,上面的分支预测分类,输出W*H*KA的结果,K代表检测目标类别个数(不包括背景),下面的分支预测坐标,输出W*H*4A,4代表预测的(xywh),A表示Anchor个数。

2.3. Loss

正负样本匹配:

  • IoU >=0.5,正样本。
  • IoU < 0.4,负样本。
  • IoU ∈[0.4,0.5),舍弃。

其中IOU指ground truth与anchor box之间的IoU。

总体Loss:

下载 (2)

分类误差采用Focal Loss,算正负样本的损失,回归损失只计算所有正样本的损失。

3. Focal Loss

3.1. one stage检测算法中的样本不平衡问题

下载 (3)

如上图所示,是在图片上画完anchor后,通过正负样本匹配得到的结果,其中黄色的是正样本,红色的是负样本,可以看到负样本远比正样本要多。实际上,在现实中比例更夸张,一般一张图的正样本个数只有十几到几十个,但是负样本则大概在10^4到10^5,这些负样本基本都是简单易分的,对训练网络起不到什么作用,但是会淹没少量但是有助于训练的样本。

3.2. 普通CE损失

对于二分类的交叉熵损失公式为:

微信截图_20230605173513

其中y是标签{-1,+1},p是预测为正样本的概率。

统一一下p:

微信截图_20230605173520

则CE可以重写为下式:

image

 

3.3. Balanced BE

为了平衡样本不均衡,一个做法是引入权重因子α∈ [0, 1] ,当样本为f正的时候是α,样本为负的时候是1 − α,如下面的式子所示:

微信截图_20230605174410

这里的α并不是正负样本的比例,而仅仅是一个超参数。作者用这个Loss进行了消融实验,结果如下图:

α42

3.4. Focal Loss 定义

上面提到加权重后的CE Loss,但是α仅仅只能平衡正负样本,并不能够区分容易和难分的样本。论文的目标是降低易分样本的重要性,集中训练难分样本。因此,作者引入了另外一个调节因子,即image。得到Focal Loss的公式如下:

fc8

如下图所示,通过调节γ,可以得到不同的曲线,γ越大,pt ∈ [0.6,1]这个区间的loss越小,让好分类的样本得到的loss更小。当然γ并不是越大越好,如γ=5,可以看到pt=0.4之后的loss都已经接近0了,因此需要实验选取合适的参数,文中选的是γ=2。

 

损失图

最终版Focal Loss,作者又把平衡因子α加了进去:

调节5180559

最后,作者通过消融实验确定α,γ最好的组合,入如下表所示:

消融3

可以看到这两个超参也是需要谨慎调节的,不然可能不会得到期望的提升,而当时Focal Loss也存在争议,如在YOLOv3 SPP 中,使用了Focal Loss之后,性能反而下降了。

 

4. 参考

[1] 2.1.2 RetinaNet网络结构详解

[2] 3.1 YOLO系列理论合集(YOLOv1~v3)

(完)

posted @ 2023-06-05 18:16  大师兄啊哈  阅读(73)  评论(0编辑  收藏  举报