Abstract
通过将视觉跟踪任务分解为两个子问题(像素类别的分类和该像素处的边界框的回归),本文以逐像素的方式提出了全卷积Siamese网络来解决视觉跟踪问题。
该框架由两个简单的子网络组成:一个用于特征提取,另一个用于边界框预测。
Introduction
视觉目标跟踪的挑战:光照变化、尺度变化、背景杂波、严重遮挡、非刚性对象外观的显著变化…
Siamese网络将视觉追踪任务设定为了一个目标匹配问题,其目的是学习目标模版和搜索区域之间的一般相似性映射。
相关项目的发展流程为:
- Siamese网络的策略是搜索区域,进行匹配。这要在多个尺度上进行以应对尺度变化。缺点在于耗时;
- SiamRPN给SIamese连上了一个RPN,用于解决多尺度造成的时间浪费。缺点在于需要预先设定锚框,使得模型对锚框的参数比较敏感。
本文提出的SiamCAR则是anchor-free的。
分类分支旨在为每个空间位置预测一个标签,回归分支旨在将每个位置回归一个相对边界框。
Proposed Method
Feature Extraction
该子网络由两个分支组成,target branch的输入为template patch
Z
Z
Z;search branch的输入为search region
X
X
X。
这两个分支与其主干模型共享相同的CNN结构。两者输出的feature map分别为
φ
(
Z
)
,
φ
(
X
)
\varphi(Z),\varphi(X)
φ(Z),φ(X)。
R
R
R本来是两个输出做互相关之后的结果。但是这一操作只能生成一个单通道的压缩响应图,缺乏有用的特征和用于跟踪的信息。
本文为了获得更多的信息,所以我们使用深度相关层来生成多个语义相似图:
R
=
φ
(
X
)
?
φ
(
Y
)
R=\varphi(X)*\varphi(Y)
R=φ(X)?φ(Y)
其中
?
*
?表示的是通道与通道间的相关计算。也就是说R的通道数和两个分支的输出的通道数一致。
原文认为低层次特征对定位来说很有帮助,高层次特征对语义属性的识别很有帮助,所以融合高低层次特征是一种很好的选择。因此,本文结合了最后三个块提取的特征进行连接。
φ
(
X
)
=
C
a
t
(
F
3
(
X
)
,
F
4
(
X
)
,
F
5
(
X
)
)
\varphi(X)=Cat(F_3(X),F_4(X),F_5(X))
φ(X)=Cat(F3?(X),F4?(X),F5?(X)) 需要注意的是两个输出都是
3
×
256
3\times256
3×256维度的特征,最后得到R之后通过
1
×
1
1\times 1
1×1卷积进行降维,这样可以显著减少参数数量。
最后得到的feature map
R
?
R^*
R?作为分类回归子网络的输入。
Bounding Box Prediction
R
?
R*
R?上的每一个
(
i
,
j
)
(i,j)
(i,j)可以和search region
(
x
,
y
)
(x,y)
(x,y)构建起对应关系。可以认为每一个
(
i
,
j
)
(i,j)
(i,j)是原图锚框的中点。
本文的模型能够直接分类回归每个位置的目标边界框。其中response map
R
ω
×
h
×
m
?
R^*_{\omega\times h\times m}
Rω×h×m??,通过两个分支后输出分类特征图
A
ω
×
h
×
2
c
l
s
A^{cls}_{\omega\times h\times2}
Aω×h×2cls?以及回归特征图
A
ω
×
h
×
4
r
e
g
A^{reg}_{\omega\times h\times 4}
Aω×h×4reg?。
对于分类特征图,二分类结果为前景和后景的分类。对于回归特征图,输出的为
(
l
,
t
,
r
,
b
)
(l,t,r,b)
(l,t,r,b),表示从相应位置到输入搜索区域中边界框四边的距离。
因为目标和背景的比例不是很大,所以样本不平衡不是一个问题。所以我们简单地采用交叉熵进行分类,IOU损失进行回归。
令
(
x
0
,
y
0
)
(x_0,y_0)
(x0?,y0?)和
(
x
1
,
y
1
)
(x_1,y_1)
(x1?,y1?)为左上角和右下角的点的坐标(GT)。然后让
(
x
,
y
)
(x,y)
(x,y)为
(
i
,
j
)
(i,j)
(i,j)在search region上的中心点。
于是,回归的目标就能被计算得到
t
~
(
i
,
j
)
0
=
l
~
=
x
?
x
0
,
t
~
(
i
,
j
)
1
=
t
~
=
y
?
y
0
\tilde{t}^0_{(i,j)}=\tilde{l}=x-x_0,\tilde{t}^1_{(i,j)}=\tilde{t}=y-y_0
t~(i,j)0?=l~=x?x0?,t~(i,j)1?=t~=y?y0?
t
~
(
i
,
j
)
2
=
r
~
=
x
1
?
x
,
t
~
(
i
,
j
)
3
=
b
~
=
y
1
?
y
\tilde{t}^2_{(i,j)}=\tilde{r}=x_1-x,\tilde{t}^3_{(i,j)}=\tilde{b}=y_1-y
t~(i,j)2?=r~=x1??x,t~(i,j)3?=b~=y1??y
回归损失函数为:
L
r
e
g
=
1
∑
I
(
t
~
(
i
,
j
)
)
∑
i
,
j
I
(
t
~
(
i
,
j
)
)
L
I
O
U
(
A
r
e
g
(
i
,
j
,
:
)
,
t
~
(
x
,
y
)
)
L_{reg}=\frac{1}{\sum\mathbb{I}(\tilde{t}_{(i,j)})}\sum_{i,j}\mathbb{I}(\tilde{t}_{(i,j)})L_{IOU}(A^{reg}(i,j,:),\tilde{t}_{(x,y)})
Lreg?=∑I(t~(i,j)?)1?i,j∑?I(t~(i,j)?)LIOU?(Areg(i,j,:),t~(x,y)?)
I
(
t
~
(
i
,
j
)
)
=
{
1
,
i
f
?
t
~
i
,
j
k
>
0
,
k
=
0
,
1
,
2
,
3
0
,
o
t
h
e
r
\mathbb{I}(\tilde{t}_{(i,j)})=\{\begin{aligned}&1,if~\tilde{t}^k_{i,j}\gt0,k=0,1,2,3\\&0,other\end{aligned}
I(t~(i,j)?)={?1,if?t~i,jk?>0,k=0,1,2,30,other?
保证算进损失函数的距离都是大于0的。
根据观察,远离目标中心的位置往往会产生低质量的预测边界框(单目标跟踪,离这个目标远的位置的边界预测效果不行),这会降低追踪系统的性能。因此,添加了一个与分类分支并行的centerness branch,以去除异常值。
它返回了一个
A
ω
×
h
×
1
c
e
n
A_{\omega\times h\times1}^{cen}
Aω×h×1cen?,给出了中心度分数。这个GT得分是这么定义的。
C
(
i
,
j
)
=
I
(
t
~
(
i
,
j
)
)
?
min
?
(
l
~
,
r
~
)
max
?
(
l
~
,
r
~
)
×
min
?
(
t
~
,
b
~
)
max
?
(
t
~
,
b
~
)
C(i,j)=\mathbb{I}(\tilde t_{(i,j)})*\sqrt{\frac{\min(\tilde l,\tilde r)}{\max(\tilde l,\tilde r)}\times\frac{\min(\tilde t,\tilde b)}{\max(\tilde t,\tilde b)}}
C(i,j)=I(t~(i,j)?)?max(l~,r~)min(l~,r~)?×max(t~,b~)min(t~,b~)?
?
理想情况下,这个
(
x
,
y
)
(x,y)
(x,y)是尽量在bbox中心的,如果说这个点不在中心,我们就认为它不是这个bbox的
(
x
,
y
)
(x,y)
(x,y),所以这个得分会比较低。
值得一提的是,如果这一点被判定为背景点,损失函数中是不需要考虑它的中心度得分的。于是,中心度得分的损失函数有:
整体损失函数为:
The Tracking Phase
跟踪的目的是预测当前帧中的目标的边界框。对于一个位置
(
i
,
j
)
(i,j)
(i,j)会产生一个6维的矢量
T
i
j
=
(
c
l
s
,
c
e
n
,
l
,
t
,
r
,
b
)
T_{ij}=(cls,cen,l,t,r,b)
Tij?=(cls,cen,l,t,r,b)。
在运动过程中,边界框应该是微小变化的,所以我们施加了一个惩罚
p
i
j
p_{ij}
pij?。
于是,跟踪项可以如下书写
q
=
arg?max
?
i
,
j
{
(
1
?
λ
d
)
c
l
s
i
j
×
p
i
j
+
λ
d
H
i
j
}
q=\argmax_{i,j}\{(1-\lambda_d)cls_{ij}\times p_{ij}+\lambda_dH_{ij}\}
q=i,jargmax?{(1?λd?)clsij?×pij?+λd?Hij?}
其中
H
H
H是cosine window,
λ
d
\lambda_d
λd?是平衡权重,
q
q
q是有最高得分的目标像素。
因为模型以逐像素的方式解决了目标跟踪问题,因此每个位置都是相对于一个预先设定的边界框的。在实际跟踪过程中,如果只使用一个边界框作为目标框,它将在相邻帧之间抖动。
本文观察到,q周围的像素最有可能是目标像素。所以说,它找了从n个邻居中找了得分最高的k个(根据
c
l
s
i
j
×
p
i
j
cls_{ij}\times p_{ij}
clsij?×pij?),最终的预测是这k个回归框的加权平均。
值得关注的几个问题
Q1:输入的图片大小不一?
代码中,会将其resize为255255大小的图像。同时模板大小为127127
Q2:在两者做相关性之前,如何得到特征图?
先后经历了backbone和neck两部分。
backbone通常选择为ResNet50,给出了后三层的feature map。
neck为AdjustAllLayer,通过
1
×
1
1\times1
1×1将这三层调整为256通道。
Q3:两者的相关性计算是如何实现的?
采用了xorr_depthwise函数,实际上为:target的每一个通道在x的每一个通道上做一个卷积。
然后用
1
×
1
1\times 1
1×1卷积降维。
Q4: R*送入的网络是什么样的?
就是Conv+GroupNorm+ReLU的结构,最后用Conv进行分类。其中centerness和cls共享模型
Q5:映射关系?
输入图像被resize为255*255,stride为8,输出shape为25*25。最后对应的坐标从
(
0
+
32
,
0
+
32
)
→
(
200
+
32
,
200
+
32
)
(0+32,0+32)\to(200+32,200+32)
(0+32,0+32)→(200+32,200+32)
Q6:惩罚项?
这个惩罚项是从另一篇论文中提出的,在那篇文章中,目的是为了使一次性检测框架适用于跟踪任务,所以需要提出一种策略来选择候选框。
使用余弦窗口和尺度变化惩罚对候选进行排序。
p
e
n
a
l
t
y
=
e
k
×
m
a
x
(
r
r
′
,
r
′
r
)
×
m
a
x
(
s
s
′
,
s
′
s
)
penalty=e^{k\times max(\frac{r}{r'},\frac{r'}{r})\times max(\frac{s}{s'},\frac{s'}{s})}
penalty=ek×max(r′r?,rr′?)×max(s′s?,ss′?) 其中
k
k
k是超参数,
r
r
r代表着候选框高度和宽度的比例,
r
′
r'
r′代表最后一帧的比例。
s
,
s
′
s,s'
s,s′分别代表着候选框和最后一帧的规模,此处的规模如下定义
(
w
+
p
)
×
(
h
+
p
)
=
s
2
(w+p)\times(h+p)=s^2
(w+p)×(h+p)=s2
p
=
w
+
h
2
p=\frac{w+h}{2}
p=2w+h?,是padding。
然后与分类结果相乘就能得到排序的依据。
|