backbone 的第
i
i
i 层的特征图为
F
i
∈
R
H
×
W
×
C
F_i\in R^{H\times W\times C}
Fi∈RH×W×C
s
s
s 是在该层前所经历的 stride
bbox 的真值可以表示为
B
i
{B_i}
Bi,
B
i
=
(
x
0
i
,
y
0
i
,
x
1
i
,
y
1
i
,
c
i
)
∈
R
4
×
1
,
2
,
.
.
.
,
C
B_i = (x_0^i, y_0^i, x_1^i, y_1^i, c^i) \in R^4 \times{1, 2,..., C}
Bi=(x0i,y0i,x1i,y1i,ci)∈R4×1,2,...,C (分别表示左上和右下角点,和类别)
对于特征图
F
i
F_i
Fi 中的任意位置
(
x
,
y
)
(x, y)
(x,y),可以将其推回到该层特征图的输入特征图的位置
(
⌊
s
2
⌋
+
x
s
,
⌊
s
2
⌋
+
y
s
(\lfloor \frac{s}{2} \rfloor + xs, \lfloor \frac{s}{2} \rfloor + ys
(⌊2s⌋+xs,⌊2s⌋+ys。
和 FPN 一样,本文作者也在不同分辨率的特征图上来预测不同尺度的目标,使用了 5 个 level 的特征图
P
3
,
P
4
,
P
5
,
P
6
,
P
7
{P_3, P_4, P_5, P_6, P_7}
P3,P4,P5,P6,P7,其总 stride 分别为 8、16、32、64、128。
P
3
,
P
4
,
P
5
P_3, P_4, P_5
P3,P4,P5 是通过 backbone
C
3
,
C
4
,
C
5
C3, C_4, C_5
C3,C4,C5 经过 1x1 卷积来得到的(如图 2)
P
6
P_6
P6 是在
P
5
P_5
P5 后使用 stride=2 的卷积得到的,
P
7
P_7
P7 是在
P
6
P_6
P6 后使用 stride=2 的卷积得到的
Anchor-based 是怎么给不同分辨率的特征图分配 anchor 的呢?
Anchor-based 方法是给不同 level 的特征图分配不同大小的 anchor box
FCOS 是怎么分配 anchor 的呢?
FCOS 直接限制 bbox 回归的数值的范围
首先,在每个特征图的每个位置上计算回归目标值
t
∗
=
(
l
∗
,
t
∗
,
r
∗
,
b
∗
)
t^* = (l^* , t^* , r^* , b^* )
t∗=(l∗,t∗,r∗,b∗)
接着,如果某个位置的结果满足
m
a
x
(
l
∗
,
t
∗
,
r
∗
,
b
∗
)
>
m
i
max(l^* , t^* , r^* , b^*)>m_i
max(l∗,t∗,r∗,b∗)>mi 或
m
a
x
(
l
∗
,
t
∗
,
r
∗
,
b
∗
)
<
m
i
−
1
max(l^* , t^* , r^* , b^*)max(l∗,t∗,r∗,b∗)<mi−1,则认定该位置为负样本,也不用回归 bbox。
m
i
m_i
mi 是在 level
i
i
i 的特征图需要回归的最远距离。
m
2
,
m
3
,
m
4
,
m
5
,
m
6
m_2, m_3, m_4, m_5, m_6
m2,m3,m4,m5,m6 分别设置为 0, 64, 128, 256, 512 和
∞
\infty
∞。由于不同大小的目标被分配到了不同 level 的特征图上,而且有重叠的目标一般大小都不一样,可以被分配到不同尺度的特征图上去,所以,多尺度金字塔特征,能够很好的解决 FCOS 的前景模棱两可问题。
最后,作者对不同尺度特征共享 head,可以提高检测效果,并提升了效率。但是,由于不同 level 的特征图需要回归不同尺度的目标(如 P3 回归的尺度为 [0,64]),所以使用一个共享头是不太合理的。故此,作者没有使用标准的
e
x
p
(
x
)
exp(x)
exp(x),而是使用了
e
x
p
(
s
i
x
)
exp(s_ix)
exp(six),
s
i
s_i
si 也是一个可训练的参数,可以根据特征图的 level 自动调节尺度。
从 anchor-based 检测器的角度来看,anchor-based 方法使用两个 IoU 阈值(
T
l
o
w
T_{low}
Tlow 和
T
h
i
g
h
T_{high}
Thigh 来将 anchor 分为 negative、ignore、positive,centerness 可以被看做一个 soft threshold。