SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep Networks 论文地址 代码地址
写在前面
这篇文章是之前SiamRPN和DaSiamRPN的团队做的,北航的李博,现在毕业了在商汤,大牛就是大牛,这个SiamRPN++在所有的benchmark上都做到了最好,并且提升还很大,最大的贡献就是改变了Siam tracker的网络结构吧,用更深的网络代替,里面还用到了模型压缩的方法,只能喊666了吧,果然还是要多读书,我连模型压缩都不懂呢,感觉人生无望了啊~
Motivation
- 虽然Siamese的tracker在VOT数据集上表现很好,但是在OTB上还是比不过一个state-of-the-arts的tracker,一个原因是VOT会每隔五帧更新,但是OTB没有,那些效果好的方法用的是比较深的网络。
Contribution
- 文章深度分析了Siamese网络不能太深的原因是因为网络太深会影响Siamese的变化不变性;
- 提出了一个简单但是有效的采样方式来打破深度网络的空间限制,这样成功得让Siamese网络在ResNet上运行;
- 提出了一个特征整合结构给互相关操作,这样使得相似性度量可以用到多层的特征;
- 提出了一个depth-wise的分组相关操作来得到不同语义特征的相似性图。
Algorithm
1、Spatial Aware sampling strategy
文章表明了严格的平移变换不变只发生在没有padding的网络中,但是目前已有的深网络都不可避免的需要padding,所以要想使用比较深的网络,就得解决这个问题,这里作者做了一个骚操作,如下图:
他们假设由于padding产生的空间限制是加了一个空间的偏差,并做了实验证明,实验过程如下:先是将原先在中间的物体做一定像素的平移,然后输入给网络,将其收敛后的heatmap可视化出来。如上图1,发现当平移为1时产生了强烈的中心偏差,然而当平移像素值为32时,这个heatmap就更加接近于ground truth。所以只要使用了这个空间采样机制,就可以消除padding对结果的影响,使得Siamese的结构可以使用ResNet-50来提取特征。
2、ResNet-driven Siamese Tracking
如上图,作者使用了SiameseRPN的结构来做,只不过把特征提取的过程使用ResNet代替,文章中对ResNet做了一些细微的调整,因为原始的ResNet总步长太大,不适用于密集的Siamese网络,所以修改了conv4和conv5层的步长,最后使用了一个1*1的卷积来将通道数归一化到256.
因为ResNet-50 的padding都保留了,所以最后的特征图会很大,所以文章只选择了中间77的位置(因为这个77可以包含所有的信息)
他们对ResNet做了finetune对网络的精度还有很大的提升。
3、Layer-wise Aggregation
因为ResNet不同层的感受野不一样,低层的信息一般是一些表观的特征,比如颜色、形状、边缘,是用来定位的,而深层则是一些语义类的信息,可以用来做分类。如上图3,文章就把conv3\4\5层的特征都拿出来做分类,把这三层的特征都feed到SiameseRPN网络中,然后将他们直接加权:
S
a
l
l
=
∑
l
=
3
5
α
i
∗
S
l
,
B
a
l
l
=
∑
i
=
3
5
β
+
i
∗
B
l
S_{all} = \sum_{l=3}^5 \alpha_i*S_l , B_{all} = \sum_{i=3}^5 \beta+i*B_l
Sall=l=3∑5αi∗Sl,Ball=i=3∑5β+i∗Bl
加权的权重是offline预训练的。
4、Depthwise Cross Correlation
如下图:
其实就是因为他们发现了属于相同类的物体在相同的channel上响应度比较高,所以他们把输出的特征分组,按组来做相关操作,这样就会使得网络参数量大大降低,不过这一块具体如何实现的文章里没有详细写. 听说这个DW卷积是人家做模型压缩的时候常用的手法, 像MobileNet里面就用到了, 现在整个测试的代码都已经开源了,具体怎么做的看代码应该就知道了.
Experiment
在各大benchmark上都是第一,速度35FPS,这个提升实在厉害,延续了这个组一出手都是最强的,还以为DaSiamRPN就已经很难超越了,没想到又有这么大的提升。
总结
优点
- 分析了为什么Siamese的网络之前不能用深层网路,提出了用ResNet来做,给tracking提了一个新思路吧;
- 解决了深层网络的限制性,并且使用多层的特征来预测,更加准确;
- 使用depthwise来减少网络参数,使得网络更加稳定。
缺点
- 唉,就是depthwise每怎么解释怎么做,还有就是没有模板更新吧,不过用的应该还是DaSiamrpn里的更新方式,简单粗暴效果好。