【目标跟踪】SiameseFC & CFNet

好久没更新了,这一次做一下SiameseFC和CFNet的笔记,之前一直在研究这两篇文章。

相关文献链接:
1.SiameseFC:Fully-Convolutional Siamese Networks for Object Tracking
2. CFNet:End-to-end representation learning for Correlation Filter based tracking

这两篇都是牛津大学的作品,算法速度很快,能够满足跟踪的实时性要求。后一篇可以看成是第一篇的改进。


SiameseFC

【目标跟踪】SiameseFC & CFNet

上面是SiameseFC的算法流程图。算法分两支:
-上面一支可以看做是一个模板。其中z是第一帧所给出的目标框,φ 表示一种特征提取方法,文中提取的是深度特征,经过全卷积网络后得到一个6X6X128的feature map φ(z)
-下面一支x可以看为当前帧的搜索区域,同样提取了深度特征之后得到一个22X22X128的feature map φ(x)
两支的交汇 * 是一个互相关层,可以看成是φ(z)φ(x)上滑动搜索,最后得到一个响应图,图上最大值对应的点就是算法认为的目标中心所在位置。

训练training

上面讲的是tracking部分,接下来看看算法是怎么training的:
文中采用了一个对数损失:
【目标跟踪】SiameseFC & CFNet
其中v是置信分数,数值越大则认为是目标的概率越大,y是label,y在目标附近是1,在其他地方标为-1,这样,当v较大且y=1时,认为跟踪正确,得到的损失函数l很小;相反,当v较大且y=-1时,表示跟踪到了错误的位置,此时l很大。

然后,用随机梯度下降(SGD)最小化这个损失函数,训练出最优的网络参数θ
【目标跟踪】SiameseFC & CFNet
【目标跟踪】SiameseFC & CFNet

总的来讲,这篇文章的思路还是比较简单的,感兴趣的可以去找作者待代码跑一跑。


CFNet

这篇文章是在前一篇的基础上做的改进,主要做了以下几个工作:
1. 引入了相关滤波,之前相关滤波的方法大都采用人为设计或从其他任务训练得来的特征,作者引入了相关滤波学习解决了这一问题。
2. 第一次将相关滤波融入到深度神经网络的架构里,从而把跟踪变成了一个端到端的任务。

首先还是看看网络的基本架构:
【目标跟踪】SiameseFC & CFNet

可以看到,大部分和SiameseFC是一样的,只有红线圈出的部分不同,此处的相关滤波我认为是做一个进一步的特征提取工作(这样可以使前面提特征的神经网络深度变浅,具体在后面讲解),把training image(搜索区域)提出的49X49X32的feature map裁剪成17X17X32(目标)的feature map,然后再和test image做相关。

从实验结果中我们可以看出作者这么做的理由:
【目标跟踪】SiameseFC & CFNet

图中横轴是网络深度,纵轴是跟踪精确程度,可以看到,与Baseline相比,CFNet在网络深度只有1,2,3层的时候也能得到比较好的效果。这样一来,CFNet可以考虑使用更轻量级的神经网络,从而达到更快的跟踪速度。
但是,值得注意的是,在网络加深之后,CFNet的性能与Baseline相差无几。

关于训练相关滤波的部分,文章在3.4节有详细的推导,在这里就不赘述了。

总而言之,CFNet完成了一个端到端的跟踪任务,与SiameseFC相比,跟踪精度提升不多,但是网络更浅。