本文是我对CVPR2018上的一篇论文的一些阅读笔记和个人理解,欢迎批评指正。
论文题目:high performance visual tracking with siamese region proposal network(论文链接在这)
零、关于tracking
目标跟踪是指:对于一段连续的视频,给定第一帧中的标定框(框住需要跟踪的物体),要求在该视频的后续帧框住该物体。
注意,目标跟踪和目标检测是不同的:detection是给一幅图,要求输出图片上的《在训练集中出现过的物体》的类别和位置;而tracking则是给一组连续的视频帧,以及第一帧中物体的位置,要求输出剩余帧中该物体的位置,并且该物体是训练集中从未出现过的。可以看出,detection要求localization and classification,而tracking则只要求localization,但是tracking对定位的精度和速度的要求比detection高得多:tracking的精度评价指标EAO与IOU直接相关,而detection的评价指标mAP则是要求IOU只要过线就行。而且更重要的是,tracking要求定位的物体是训练集中从未出现过的,这是最主要、最本质的区别。
tracking的两类主要方法:
1、基于相关滤波。比如KCF、ECO等。此类模型为生成式模型,没有像神经网络那样的迭代训练过程。
2、基于深度学习(CNN)。比如Siamese-FC,Siamese-RPN等。
一、本文主要贡献
1、提出siamese region proposal network(Siamese-RPN)用于解决目标跟踪问题。该网络可利用“图片对”进行端到端地离线训练;
2、该模型可将在线跟踪任务转换为one-shot检测任务,而不是使用低效费时的多尺度测试(multi-scale test);
3、该模型在保证准确率的同时,达到了较高的速度。
二、相关工作
介绍了Siamese-FC提出的Siamese结构以及Faster-RCNN提出的RPN。其实该模型就是由Siamese subnetwork与RPN subnetwork串联而成,并没有网络结构或数学理论的较大创新。
三、Siamese-RPN模型结构
模型整体结构如下图所示。
1、Siamese Network
Siamese Network包括两个branch: template branch和detection branch。其中的CNN是不带padding的fully convolutional network。论文使用了修改后的AlexNet,具体修改方法就是去掉padding,同时修改stride以使得网络输出特征图的高度和宽度与上图相匹配,此处可参照Siamese-FC论文:
另外,template branch与detection branch中的两个CNN共享参数,这相当于使用了同样的线性变换,或者说对template frame 和detection frame提取了同样的特征。
2、RPN
RPN也包含两个branch:分类分支和回归分支。本文以分类分支(即上图中RPN部分靠上的虚线框)为例来说明。
conv1的目的是对来自template的特征进行通道数提升。将其变为(2kX256)个通道后,再经过切分,变成四维的变量(4X4X2kX256),才能作为卷积核。为了与template保持一致,图中对detection也进行了相应操作(即conv2),但保持detection的维度不变。图中的星号代表“互相关”(cross-correlation)操作。(其实也就是CNN中的卷积操作,因为CNN中所谓的“卷积”绝大多数情况下指的是互相关操作),相当于用template在detection进行搜索。图中的k表示anchor的数量(论文中取k=5)。在RPN中,分类分支的输入应当具有2k个通道,分别表示k个anchor是前景还是背景的概率,因此φ(z)的输出通道数为2k。
回归分支与分类分支的操作类似,不再赘述。
四、模型训练
本论文采用的loss与Faster-RCNN相同,分类部分的采用cross-entropy loss,回归部分采用smooth L1 loss。
然后图像预处理方式与Siamese-FC相同,具体来说就是经过填充、裁剪、缩放,把ground truth box放到图像的中心位置。预处理后的效果如下图所示。
公式见下图。另外,由论文中的以下公式可以看出,template frame和detection frame中ground truth box总是被缩放到约为64^2的面积。
那么为什么要进行这样的操作呢?这样操作有什么好处呢?Siamese-FC论文中说到:
意思也就是说,《与目标相邻但又不是目标的子窗口》对跟踪器性能影响最大。这个比较好理解,因为跟踪器的性能评价指标与IOU紧密相关,IOU在0.2,0.3左右确实比较影响性能。经过这样的处理以后,《与目标相邻但又不是目标的子窗口》在数量和质量上都得到了保障。
但这样又带来了一个问题:纯背景的IOU更小,不是会更加影响性能吗?为什么不用纯背景作为反例来进行训练呢?
我个人的理解是这样:
1、在真正进行跟踪时,如果真的跟踪到了纯背景的图像,那么想在下面的帧跟踪到目标已经不可能了。与其这样,还不如在IOU比较小的时候及时进行调整。
2、跟踪器在VOT或OTB数据集上进行测试时,若IOU小于某个阈值,则会进行复位操作(即把ground truth告诉给跟踪器),基于这种考虑,模型在数据集上进行测试时不太可能跟踪到纯背景的图像。
3、纯背景的图象太多,而且没有提供关于目标的任何信息,因此用这种图像来训练没有任何意义。
另外,我个人认为,这种预处理方法还有一个好处:任何尺寸(w×h)的物体总是可以分别在模板和检测中占据相同的区域(64^ 2)。这个很好推导,根据上图中的公式(15),在template frame中,若w=h,则p=w=h,那么A=2w=2h,然后经过缩放,由于template是127×127的,所以物体约是64×64的。在detection frame中同理。即使w!=h,物体的面积与64^ 2相差也不大。经过这样的处理,跟踪器在训练和测试时就易于对具有不同大小,但具有相似《形变》的的物体进行迁移,因为模型在训练时真正需要的不是某类物体的特征,而是学习物体形变的特征(具体见七)。
五、模型预测
模型预测与Faster-RCNN差不多,添加了一些tricks。具体步骤如下:
1、对于coutput,首先扔掉其边缘,即仅保留与中心距离小于某阈值的输出。由于相邻的帧变化不大,故这一步可过滤掉outliers;
2、使用cosine window。cosine window的本质也是对远离边缘的数据进行抑制。
3、使用下图所示的penalty。这一步的目的是对相邻两帧之间过大的形状和尺度变化进行抑制。
综合以上因素后,对coutput的各个位置的score进行比较,从而得到coutput最大值所在的位置。
然后一方面得到了该位置所对应的anchor,另一方面根据该位置得到routput中的相应元素,确定该anchor的四个偏移量(dx, dy, dw, dz),根据anchor的坐标及偏移量就能得到预测框。这一过程其实就是构造rlabel的逆过程。
该预测框的坐标是根据预处理后的图像得到的,因此还要把它还原到原图。
六、实验结果
Siamese-RPN的具体实验结果可以看论文,这里就不贴了。
关于tracking的各种评测指标,网上的介绍比较少,这里根据我的理解,通俗地介绍一下论文中出现的各种评测指标。
EAO:是指所有帧重合率的平均值。
准确率(Accuracy):成功跟踪时的帧占总帧数的比例。所谓“成功跟踪”是指重叠率大于某个阈值的那些帧。
失败率(Failure):一定长度的帧数之内,重合率小于某个阈值的次数。在VOT或OTB数据集上,每当重合率小于某个阈值时,会进行复位,所谓“复位”也就是把ground truth告诉模型。
EFO:表示归一化后的跟踪速度。具体做法是在同一台设备上用《跟踪算法处理每帧图像的时间》除以《用30*30的窗口对600×600的图像做滤波操作的时间》。
七、关于目标跟踪的一些想法
可以看到,用于目标跟踪的Siamese-RPN模型非常简单(Siamese-FC模型就更简单了),层数特别少,而且真正训练的时候,只训练到了6个卷积层(AlexNet的后两个卷积层+图中的conv1~conv4),但经典的CNN网络如VGG,Inception,ResNet等等,少则几百层,多则上千层,为什么用于目标跟踪的模型的层数和参数量这么少呢(更重要的是需要跟踪的物体还是训练集中从未出现过的)?
个人的理解是这样,VGG,Inception,ResNet这些模型学到的是每一类物体的特点,因此在测试时可以输出物体的类别。Siamese-RPN模型真正学到的,并不是某一类或某几类物体的特点,而是通过这些物体来学习所有物体形变的特点。也就是说虽然物体的种类有很多,但任何物体的形变都是有规律的,是可迁移的,或者说是可数的。当然,所有形变的种类加起来是无数种(比如旋转,可以旋转0~360之间任何一个角度,还包括扭曲、弯折等更复杂的形变),但由于它们都有规律,那么当训练集足够大时,就可以囊括(或者说模型可以学到)各种各样的规律,这样就可以用《用只包含有限物体的训练集而训练出的模型》来《对任意物体进行跟踪》。因此即使模型在面对一个没见过的物体时,也能正确进行跟踪。