文章目录[隐藏]
1. 引言
由于在当前的目标检测上 one-stage的准确度始终落后于Two-Stage检测器, Fackbook AI Research在2017年提出了Focal Loss,该论文研究发现one-stage准确度之所以较差的主要原因是在于前景与背景类别不平衡的关系,为了验证Focal Loss的有效性便设计了一种one-stage的检测器RetinaNet.
闲话少说,我们直接开始吧… 😃
2. 类别不均衡
一般来说一张图像中的物体较少,大多数是背景,而One-stage检测器在每一次检测时会发生非常多的候选框,导致训练时正负样本不均衡(正样本为前景,负样本为背景).这样的情况下,模型学习更多的背景而使得最终的分类器效果不佳.
但对于Two-Stage的检测器来说,在第一阶段的RPN就可以过滤掉很大一部分的负样本,第二阶段则采用固定正负样本比例或OHEM方法,如此依赖减轻了类别不均衡对检测精度造成的影响.
为了解决One-Stage类别不均衡的问题,因此有了Focal Loss.
3. Focal Loss
3.1 Cross Entropy
Focal Loss是从二分类的交叉熵CE演变而来的,以下为CE的定义:
其中,y取值为1或着为-1.y为1表示正样本,y为-1表示为负样本. p取值为[0,1],则表示预测为正样本时的概率值,以下为p的定义:
接着,我们就可以将CE简写为:
3.2 Balanced Cross Entropy
为了解决类别不均衡的问题,比较直观的想法就是为正样本引入权重系数:
α
\alpha
α,同时负样本的权重系数为
1
−
α
1-\alpha
1−α. 此时的CE 损失函数就会转化为
α
\alpha
α
−
-
−
b
a
l
a
n
c
e
d
balanced
balanced
l
o
s
s
loss
loss
3.3 Focal Loss
但是
α
\alpha
α
−
-
−
b
a
l
a
n
c
e
d
balanced
balanced CE
l
o
s
s
loss
loss 仅根据正负样本进行平衡,并没有考虑样本的难易度,虽然降低了容易分类的负样本的损失,同时也让模型更难分类较难的负样本.
因此,Focal Loss以CE为基础,加上了调节因子
−
(
1
−
p
t
)
r
-(1-p_t)^r
−(1−pt)r,以下为Focal Loss的定义,其中
r
>
=
0
r>=0
r>=0.
观察上述公式,可以看到当样本被误分且
p
t
p_t
pt很小时,调节因子接近1,对loss不会产生影响;而对于被分类正确且
p
t
p_t
pt接近1时,调节因子接近0,可以有效降低对正确分类的loss,让模型更关注较难分类的样本.
下图为
γ
\gamma
γ属于[0,5]之间的loss曲线,当
γ
=
0
\gamma=0
γ=0时,Focal Loss退化为CE;当
γ
\gamma
γ增加时,调节因子也会跟着增加.经过实验结果可知,
γ
=
2
\gamma=2
γ=2时,效果最好.
在最终的Focal Loss中引入了权重系数
α
\alpha
α,经实验结果证明,效果比原始的更好,其中
γ
=
2
α
=
0.25
\gamma=2 \alpha=0.25
γ=2α=0.25时的组合效果最佳.
4. RetinaNet
RetinaNet主要是由ResNet,FPN为主要架构,detection部分则是由两个FCN子网组成,分别用于预测分类以及bndbox.
4.1 BackBone
RetinaNet backbone是基于Resnet的FPN,分别尝试了ResNet50以及ResNet101,于第3-7层搭建FPN,且每层的通道数为256.
FPN是一种自下而上,自上而下并横向连接的网络结构,通过横向连接可以融合不同层次的特征,从而增加网络的特征提取能力,网络结构可以参考下图d:
上图为四种生成多尺度特征的网络结构:
- 图a为图像金字塔,对于不同维度的图像各自作为模型的输入,生成不同尺度的特征,再将其concat得到最后的输出,需要花费较多的计算时间成本
- 图b由单一维度的图像作为模型的输入并且仅拿出最后一层的特征图作预测,对于小目标的检测性能差,因此使用此方法的有R-CNN,Fast-RCNN,Faster-RCNN
- 图c也由单一维度的图像作为模型输入,但是每一层都生成不同尺度的特征图,采用多尺度特征融合的方式,最后在将其concat起来,这种方式不会增加额外的计算量,使用此方法的为SSD
- 图d为FPN的横向连接,特征会从下网上进行2倍下采样,另一边特征会由上而下进行2倍的上采样.接着使用1X1卷积层降低channel维度,使得两边维度一致后在做相加.
4.2 Anchors设置
RetianNet的anchor设置和FPN类似,在FPN中每层(第3-7层)的anchor的尺寸分别为32X32,64X64,128X128,256X256,512X512,以及每一个anchor的长宽比设置为1:1,1:2以及2:1,并且再增加三种不同尺寸
2
0
,
2
1
/
3
,
2
2
/
3
{2^0 , 2^{1/3} , 2^{2/3} }
20,21/3,22/3,因此每层共有9个anchor.由这些数值可以算出所有层的anchor size最小值为32,最大值为813.
对于每个anchor会对应一个长度为k维的one-hot向量以及4维的bndBox向量,其中k为类别数目.
Anchor的匹配策略与RPN也类似,也是使用双阈值IOU,RetinaNet设定的阈值为0.4与0.5.
- 当
I
O
U
>
0.5
IOU>0.5
- 当
I
O
U
<
0.4
IOU<0.4
- 当
0.4
<
I
O
U
<
0.5
0.4<IOU<0.5
4.3 分类子网
从网络构架图中可以知道FPN每一层都会连接分类子网络,这些分类子网络权值是共享的。
分类子网络用于预测每个anchor的K个类别预测概率,网络模型总共使用五层,其中四层为3x3x256的FCN网络(激活函数使用ReLU)以及最后一层FCN的维度则是使用3x3xKA(使用Sigmoid),是因为对于A个anchor都有K维的one-hot向量,表示每一个类别的预测机率。
4.4 回归子网
Box回归子网络构架与分类子网络一样,差别在于最后一层FCN的维度则是使用3x3x4A,这是因为Box回归子网络用于预测与ground truth位置的偏移量offset(x,y,w,h)
需要注意的是虽然两个子网络构架类似,但彼此之间的参数不共享。
4.5 效果评估
接着来看模型在COCO数据集上的检测效果比较,由下表可以看到RetinaNet比其他One-stage方法有5.9 AP的提升,以及比Faster R-CNN model based on Inception-ResNet-v2-TDM提升了大约2.3 AP
下图是模型检测性能与速度的对比,可以看出RetinaNet-101的检测性能比其他模型要来的好,速度也更快.
5. 总结
本文重点介绍了Focal Loss的原理以及RetinaNet的网络结构,该网络最终在精度和速度上达到了不错的平衡,值得一读.
关注公众号《AI算法之道》,获取更多AI算法资讯。
版权声明:本文为CSDN博主「赵卓不凡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sgzqc/article/details/122716873
暂无评论