前言
上一篇博文我们介绍了Focal Loss
,原理也比较简单,有不了解的小伙伴可以先跳转到之前的博文了解一下。Focal Loss介绍。这篇博文我们来看下Focal Loss
的出处:Focal Loss for Dense Object Detection,这篇论文提出了RetainNet
之后one-stage
网络的受此超越了two-stage
的网络。
一. RetainNet网路
先来看下RetainNet
的性能,可以看到远超Faster R-CNN
网络。
我们再来看下RetainNet
的网络结构:
可以看到RetainNet
也采用了类似FPN
的结构,主要有三个不同之处,关于FPN
不了解的小伙伴可以跳转到我之前的博文(FPN网络介绍):
FPN
会使用C2
生成P2
,RetainNet
并没有使用C2
生成P2
。论文给的理由是C2
会计算更多的计算资源。因为C2
四低层特征,分辨率比较大。FPN
中的P6
是通过一个最大尺化下采样层进行一个下采样的,RetainNe
t是通过一个卷积层进行下采样的。FPN
是从P2-P6
,RetainNet是从P3-P7
,P7
是在P6
的基础上通过一个激活函数ReL
U,然后在通过一个卷积得到。
在FPN
中,每个预测特征层都只是用了一个scale
和三个ratios
,RetainNe
t中每个预测特征层都是用了三个scale
和三个ratios
。RetainNet
中的scale
和ratios如
下表:
层数 | stride | anchor_sizes | anchor_aspect_ratios | 生成的anchor个数,(乘以3是表示3种比例) |
---|---|---|---|---|
P2 | 4(2(^)2) | 32 | 0.5,1,2 | (1024//4)(^)2xx3=196608 |
P3 | 8(2(^)3) | 64 | 0.5,1,2 | (1024//8)(^)2xx3=49152 |
P4 | 16(2(^)4) | 128 | 0.5,1,2 | (1024//16)^^2xx3=12288 |
P5 | 32(2(^)5) | 256 | 0.5,1,2 | (1024//32)(^)2xx3=3072 |
P6 | 64(2(^)6) | 512 | 0.5,1,2 | (1024//64)(^)2xx3=768 |
再来看下RetainNet的预测器部分:
预测器分为两个分支,一个预测类别,一个是目标边界框回归参数。最后输出的K表示检测目标的类别个数(不含背景),A表示每个预测特征层上的anchor
的个数。在FasterRCNN
中是对于预测特在层上每一个anchor
都会针对每个类别去生成 一组边界框回归参数,跟这里预测稍微有所不同,这里跟SSD
是一样的,现在采样的基本上都是这种类别不可知的预测方式,能够减少网络训练参数。
二. 损失计算
首先我们会针对我们每一个anchor
与我们事先标注好的gt进行一个匹配, 即计算iou
,规则如下:
- 如果 i o u > = 0.5 iou>=0.5 iou>=0.5,标记为正样本
- i o u < = 0.4 iou<=0.4 iou<=0.4,标记为负样本
- i o u ∈ [ 0.4 , 0.5 ) iou \in[0.4, 0.5) iou∈[0.4,0.5),舍弃
总损失使用的还是分类损失和回归损失,如下所示:
Loss
=
1
N
P
O
S
∑
i
L
c
l
s
i
+
1
N
P
O
S
∑
j
L
r
e
g
j
\text { Loss } =\frac{1}{N_{P O S}} \sum_i L_{c l s}^i+\frac{1}{N_{P O S}} \sum_j L_{r e g}^j
Loss =NPOS1i∑Lclsi+NPOS1j∑Lregj
- L c l s L_{cls} Lcls:Sigmoid Focal Loss,上一篇博文我们介绍过了,不懂的小伙伴可以回到前面看看:Focal Loss介绍。
- L r e g L_{reg} Lreg:L1 Loss
- i i i:所有的正负样本
- j j j:所有的正样本
- N p o s N_{pos} Npos:正样本的个数
以上就是关于RetainNet
网络的介绍,如有错误,敬请指正!