论文题目: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,这样可以得到更高的精度。