论文题目:Fully-Convolutional Siamese Networks for Object Tracking
这是ECCV16的一篇经典论文,主要的task是做视频目标跟踪VOT的。在这之前的一些深度学习算法中都需要在新视频上进行微调(即online training),以学习到新视频中目标的特征,但是fine-tune会花费很多时间,无法做到real-time。而SiamFC这篇文章,采用了一种全新的matching方法,即利用第一帧的mask和后续帧匹配,计算像素级的score map,score值响应大的点就对应着目标区域。
模型的基本结构如下图所示:
如上图,SiamFC采取了一个Siamese的网络架构,有两个不同的输入
z
z
z 和
x
x
x,
z
z
z 表示视频第一帧的ground truth,其输入维度为
127
∗
127
∗
3
127*127*3
127∗127∗3;
x
x
x 表示search image,其尺寸被resize到
255
∗
255
∗
3
255*255*3
255∗255∗3;
ϕ
\phi
ϕ 这里表示Siamese Network,这里的孪生网络是全卷积网络,因此可以适应各种尺寸的输入,对于两个输入
z
z
z 和
x
x
x,分别得到两个对应的embedding,维度为别是
6
∗
6
∗
128
6*6*128
6∗6∗128 和
22
∗
22
∗
128
22*22*128
22∗22∗128。随后将
z
z
z 的embedding当作卷积核(可以看作一个特征滤波器),在
x
x
x 的embedding上进行卷积,最终得到一张
17
∗
17
∗
1
17*17*1
17∗17∗1 的score map,score map中值最大的点即可看作是物体的中心。
若要进行训练就要有损失函数,在得到score map以后,将图中的每一个点划分为正样本和负样本,划分依据如下:
其中
u
u
u表示score map中的某一个点,
c
c
c表示物体的中心点,k表示卷积的stride,R表示一个阈值半径。可见如果某个点离物体中心点小于某个阈值,那么就判定为正样本,否则将判定为负样本,分别给予+1和-1的权重。
有了正负样本的定义,我们接下来看score map中每个点的损失:
这里
y
y
y 的定义如上:
y
∈
{
−
1
,
+
1
}
y\in\{-1,+1\}
y∈{−1,+1},表示正负样本;
v
v
v 表示score map中每一个点的真实值。可以看到我们是希望
y
y
y 和
v
v
v 越接近越好,因此当两者接近时,loss最小。在给定score map每个点的预测值以后,就可以进一步计算整个score map的损失:
这里
D
D
D 表示整张score map;
d
∈
D
d\in D
d∈D表示score map中的每个点的位置,因此有了loss function以后就可以进行训练了,所以整个问题就变为如下所示的优化问题:
下面看一下SiamFC模型的具体架构:
注意,在得到
17
∗
17
17*17
17∗17的score map后,作者采用bicubic插值法,将该score map的尺寸放大到
272
∗
272
272*272
272∗272,这样可以得到更高的精度。
实验结果