Introduction
对于合理的anchor设计有两个通用的规则:alignment(对齐)和consistency (一致性)。首先,要使用卷积特征作为锚点表示,锚点中心需要与特征图像素良好对齐。其次,特征图不同区域的感受野和语义视野要有连续性,所以也就是要求不同位置的anchor的尺度和形状是一致的。滑窗很简单且很符合上述规则,对于大多数检测规则,anchor是使用上述方法来设定的,其中特征图中的每个位置都有 k 个不同大小和不同纵横比的anchors。
anchor-based检测方法一般都没有一个最优的确定anchor的方法,这会导致两个困难:(1)要针对特定的问题来设置一系列固定纵横比的anchors,一旦设计不合理会导致检测速度和准确度都下降(2)为了保持足够高的提案召回率,需要大量anchors,而大多数anchors对应于与目标无关的错误候选框。
在这项工作中,我们提出了一种更有效的方法来准备锚点,以减轻手工挑选的先验问题。**本文灵感源于——图像中的目标物体并不是均匀分布的,而目标的尺度通常和目标物体的内容、位置和场景结构相关。**根据上述理论,本文的方法从两方面来产生稀疏anchor:首先确定可能包含目标的子区域,之后确定不同位置的尺度和纵横比。anchors 的尺度和纵横比都是可变的,但是这会打破前面所说的 consistency,所以不同特征图中的像素必须学习自适应的表达方式来适应于对应的anchor。
Guided Anchoring
一个目标的位置和形状可以用四维向量
(
x
,
y
,
w
,
h
)
(x,y,w,h)
(x,y,w,h) 来表示,其中
(
x
,
y
)
(x,y)
(x,y) 是空间坐标中心点,
w
w
w是宽度,
h
h
h是高度。假设我们从图像
I
I
I中抽取了一个目标,则其位置和形状符合如下分布:
该因式分解有两个重要的信息:(1)给定图像,对象可能仅存在于某些区域;(2)物体的形状(比例和长宽比),与其位置密切相关。
Anchor generation module由**“位置预测”和“形状预测”**两个分支构成。给定一个图像 I I I,首先获得一个特征图 F I F_I FI,在 F I F_I FI的顶端,位置预测分支产生一个概率映射,表明可能有目标的位置,形状预测分支预测与位置相关的形状。给定两个分支的输出,我们通过选择预测概率高于某个阈值和每个选择位置上最可能出现的形状的位置来生成一组锚。由于anchor的形状是可变的,不同位置的特征能够捕捉不同范围的视觉内容。本文引入特征自适应模型(Feature adaption),可以根据anchor的形状来适应特征。
Anchor Location Prediction
如图1所示,anchor位置预测分支产生了概率映射 p ( ∙ ∣ F I ) p(\bullet|F_I) p(∙∣FI)该映射和输入特征图 F I F_I FI大小相同, p ( i , j ∣ F I ) p(i,j|F_I) p(i,j∣FI)对应于图像 I I I中的坐标 ( ( i + 1 2 ) s , ( ( j + 1 2 ) s ) ((i+\frac{1}{2})s,((j+\frac{1}{2})s) ((i+21)s,((j+21)s)其中 s s s是特征图的步长,也就是相邻anchor的距离。该值表明在该位置可能存在目标物体中心的概率。上述公式中,概率映射 p ( i , j ∣ F I ) p(i,j|F_I) p(i,j∣FI)是使用子网络 N L N_L NL 来预测的,该网络给 F I F_I FI使用一个1×1的卷积来获得objectness scores的映射,之后利用sigmoid函数将其转化为概率值。基于该概率映射,我们之后可以通过选择这些概率值大于阈值 ϵ L \epsilon_L ϵL 的位置,来确定可能存在目标的激活区域。该过程可以滤掉90%的 anchors,同时保持同样的recall。
Anchor Shape Prediction
形状预测由anchor形状预测分支完成。该分支不同于传统b-box回归,它不改变anchor的位置,且不会导致anchor和anchor feature之间发生misalignment。具体来讲,给定一个特征图
F
I
F_I
FI,该分支对每个位置都会预测最佳的形状
(
w
,
h
)
(w,h)
(w,h),这些形状与最近的真实b-box会获得最高的IoU。尽管我们的目标是预测w和h的值,根据经验会发现直接预测这两个值是不稳定的,因为其可能的范围很大,所以,我们使用下面的变换:
形状预测分支会输出
d
w
dw
dw和
d
h
dh
dh,这两个值可以映射出
(
w
,
h
)
(w,h)
(w,h),其中 s是步长,δ是经验尺度因子(本文实验中取8)。该非线性变换映射可以将 [0,1000] 映射到 [-1,1],使得学习目标更简单更稳定。本文使用子网络
N
S
N_S
NS来预测形状,该网络包含一个 1×1大小的卷积层,可以产生两通道映射,
d
w
dw
dw和
d
h
dh
dh的值。请注意,此设计与传统的Anchoring方案本质上的不同之处在于,每个位置仅与动态预测形状的一个anchor相关联,而不是与一组预定形状的anchor相关联。本文的机制允许出现任意的纵横比,为检测很高或很宽的物体带来了可能。
Anchor-Guided Feature Adaptation
传统的RPN中或使用滑窗的单阶段检测中,anchors在整个特征图中都是一致的,即每个位置上的都是统一形状和尺度的,因此特征图可以学习连续的表达方式。本文方法中,anchor的形状是根据位置的不同而变化的。在此条件下,我们发现使用跟之前相同的方法可能不是最好的选择,之前的方法是在全部的特征图上都使用一致的全卷积分类器。理想情况下,较大anchor的特征应在较大区域上对内容进行编码,而对于较小anchor的特征应具有较小的范围。 基于此,我们进一步设计了anchor-guided feature adaptation 组件,该模块会利用特定位置上的anchor shape将特征转化:
其中,
f
i
f_i
fi是第
i
i
i个位置的特征,
(
w
i
,
h
i
)
(w_i,h_i)
(wi,hi)是对应的anchor形状。对于该依赖于位置的变换方式,我们使用 3×3的可变形卷积层( deformable convolutional layer)来实现
N
T
N_T
NT变换。
Training
Joint objective
Anchor location targets
为了训练anchor定位分支,对每幅图像都需要一个二值标签map,将有效的anchor位置编码为1,其余编码为0。 在这项工作中,我们采用了真实的边界框来指导二进制标签图的生成。另外,我们希望给目标邻域附近放置更多的anchor,离目标邻域远的地方放置很少的anchor。首先,将真实b-box
(
x
g
,
y
g
,
w
g
,
h
g
)
(x_g,y_g,w_g,h_g)
(xg,yg,wg,hg)映射到特征图尺度上,获得
(
x
g
′
,
y
g
′
,
w
g
′
,
h
g
′
)
(x'_g,y'_g,w'_g,h'_g)
(xg′,yg′,wg′,hg′)。
R
(
x
,
y
,
w
,
h
)
R(x,y,w,h)
R(x,y,w,h)是中心
(
x
,
y
)
(x,y)
(x,y),尺寸为
w
×
h
w\times h
w×h的方形区域。希望更多的anchor出现在真实目标的中心附近,来获得较大的 IoU,故我们对每个box都定义三个类型:
(1)中心区域
C
R
=
(
x
g
′
,
y
g
′
,
σ
1
w
g
′
,
σ
1
h
g
′
)
CR=(x'_g,y'_g,\sigma_1 w'_g,\sigma_1 h'_g)
CR=(xg′,yg′,σ1wg′,σ1hg′)定义了box的中心区域,
C
R
CR
CR中的像素被分配为正例。
(2)忽略区域
I
R
=
=
(
x
g
′
,
y
g
′
,
σ
2
w
g
′
,
σ
2
h
g
′
)
/
/
C
R
IR==(x'_g,y'_g,\sigma_2 w'_g,\sigma_2 h'_g)//CR
IR==(xg′,yg′,σ2wg′,σ2hg′)//CR是一个较大的区域,不包含 CR。IR 中的像素被标记为忽略像素,不参与训练。
(3)外部区域
O
R
OR
OR,该区域是整个特征图中除过
C
R
CR
CR和
I
R
IR
IR的地方,其中的像素被作为负例。
由于我们使用了FPN中的多个特征级别,因此我们还考虑了相邻特征图的影响。具体来说,特征图的每个级别都应仅针对特定比例范围的对象,因此,仅当特征图与目标对象的比例范围匹配时,才在特征图上分配CR。如图2所示,将相邻层级的相同区域则被设置为IR。当多个对象重叠时,CR可以抑制IR,IR可以抑制OR。 由于CR通常只占整个特征图的一小部分,因此我们使用Focal Loss 来训练位置分支
Anchor shape targets
有两个步骤来确定每个anchor的最佳形状目标。 首先,我们需要将anchor与groud-truth边界框匹配。 接下来,我们将预测anchor的宽度和高度,以最好地覆盖匹配的groud-truth。
先前的工作[27]将候选锚分配给groud-truth边界框,产生最大的IoU。这种方式不适合于本文的方式,因为本文的 w和 h不是预定义的,而是可变的。为了解决该问题,我们将可变anchor ,
a
w
h
=
{
(
x
0
,
y
0
,
w
,
h
)
∣
w
>
0
,
h
>
0
}
a_{wh}=\lbrace (x_0,y_0,w,h)|w>0,h>0\rbrace
awh={(x0,y0,w,h)∣w>0,h>0}和真实b-box ,
g
t
=
(
x
g
,
y
g
,
w
g
,
h
g
)
gt=(x_g,y_g,w_g,h_g)
gt=(xg,yg,wg,hg)之间的IoU定义为vIOU,公式如下: