从SiamRPN将跟踪问题定义为one-shot detection任务之后,出现了大量将检测组件由于跟踪的研究。不过Siamese系列一个很大的问题在于其本质仍然是一个模板匹配问题,网络关注的是寻找与target相似的东西,而忽视了区分target和distractor的判别能力,这正是目标检测任务所擅长的。目标检测和目标跟踪的关键差异在于检测是一个class-level的任务,而跟踪是一个instance-level的任务(即检测只关注类间差异而不重视类内差异,跟踪需要关注每一个实例,同时跟踪的类别是不可知的)。
本篇笔记关注如何将目标检测框架应用在跟踪中,主要介绍其思想,细节部分不做过多描述,记录论文包含:
Bridging the Gap Between Detection and Tracking: A Unified Approach
从结构图可以很直观的看出这就是Faster RCNN的框架,作者将目标跟踪任务看成是one-shot object detection 和 few-shot instance classification 的组合。前者是一个class-level的子任务用来寻找和目标相似的候选框,后者是instance-level的任务用来区分目标和干扰物。主要有两个模块:Target-guidence module(TGM) 和 few-shot instance classifier。
TGM对目标和搜索区域的特征以及它们在主干中的相互作用进行编码,相当于让网络更关注于与目标相关的instance,后面几篇文章也用了不同的方法来实现这个目的。
TGM虽然使检测器聚焦于与目标相关的物体,但忽略了周围的背景干扰。为了弥补这一点,提出了few-shot instance classifier。 然而,直接从头开始训练耗时且容易导过拟合。因此作者通过Model-Agnostic Meta Learning (MAML)进行few-shot finetune,增强判别性进一步消除distractors。
MAML的目的是训练一组初始化参数,**通过在初始参数的基础上进行一或多步的梯度调整,来达到仅用少量数据就能快速适应新task的目的,**示意图如下:
域自适应的检测器整体训练流程如下图:
输入是三元组,包括examplar, support, query,训练分为inner and outer optimization loops。对于Inner optimization loop中,在support image上计算的loss用来微调meta-layers即detector heads的参数,然后用微调后的参数计算meta-loss其梯度用于更新outer optimization loop。具体公式可以参考原文。
在线跟踪中将之前帧的检测结果作为训练样本在线更新detector head的参数。
作者称这是第一篇将目标检测框架应用到跟踪上的通用框架,检测模型可以用Faster RCNN,SSD等,速度上SSD模型为10FPS Faster RCNN模型为3FPS。
GlobalTrack: A Simple and Strong Baseline for Long-term Tracking
这篇文章构建了一个global instance search tracker,主要思想是利用target来引导网络搜索特定instance,与上一篇的TGM模块思想类似,不过这里对在RPN阶段和分类回归阶段都加入了target信息进行引导。对应的就是Query-guided RPN 和 Query-guided RCNN。
Query-guided RPN
z ∈ [ k , k , c ]是query的ROI特征,x ∈ [ h , w , c ] 是搜索图像的特征。f _ z 用 k × k 0-padding的卷积将 z转换为 1 × 1 的核作用于搜索区域,f _ x 使用 3 × 3 1-padding的卷积。f_out 是 1 × 1 × c 的卷积将通道数变回为c,这个过程不使用正则化和激活函数。
Query-guided RCNN
z 定义同上,x ∈ [ h , w , c ]是提取的proposal的特征。h _ z和 h _ x均为 3 × 3 1-padding的卷积,h_out 为1 × 1 × c 卷积。
GlobalTrack 对视频每一帧的跟踪完全不依赖相邻帧,没有累计误差使得它在长期跟踪问题中准确率保持稳定。速度为6FPS。
车牌在长期跟踪过程中消失了一段时间,当车牌再次出现的时候,其他跟踪算法就再也无法恢复跟踪了,而没有累计误差的 GlobalTrack不受前面的影响立刻跟踪到了目标。
Learning to Track Any Object
图1 (a)从基于图像的数据集学习一个通用对象先验,(b)通过计算一个封闭形式的目标和背景之间的线性判别器使其适应于一个感兴趣的特定对象(例如左上角的总线)。这允许跟踪物体通过显著的变形,而不捕获干扰物
本文重点在于将category-specific object detector 变成 category-agnostic, object-specific detector来做跟踪。想达到这个目的,需要处理如下两个关键的问题,如图1所示:
1.如何将 category specific prior 改为 generic objectness prior?
2.如何进一步的将这种 generic prior 改为 particular instance of interst?
针对问题1,作者构建了 a joint model for category-specific object detection and category-agnostic tracking。和之前类似,也是添加了目标特征的检测框架(基于 Mask R-CNN)如下图2所示 。其将目标模板作为输入,计算 feature embedding。然后该模板特征与测试图像计算相似性得到attention mask。attention mask又被用于重新加权空间特征,以检测感兴趣的物体。另外这个框架可以同时用于检测、跟踪和分割。
针对问题 2,本文计算一个线性分类器来区分第一帧的感兴趣目标和其他目标,通过最小二乘方法得到闭式解从而可以学习到一个更关注感兴趣instance的鲁棒特征。下图3通过一个例子说明,左下是直接用feature embedding计算的attention map,右下是用线性分类器计算的attention map,显然右下效果更好。
最后运行速度为7FPS。
Siam R-CNN: Visual Tracking by Re-Detection
这个就是用重检测的思想做跟踪,也是基于RCNN框架的,同时使用Tracklet Dynamic Programming Algorithm去跟踪所有潜在的目标。
这篇文章在之前有过讲解。
Tracking by Instance Detection: A Meta-Learning Approach
同样是域自适应方法将检测器转化成跟踪器,此篇更像是第一篇Bridging the Gap Between Detection and Tracking: A Unified Approach的进阶,不同的是本文没有额外添加模板引导分支,而是直接用标准的检测器通过元学习的方式做域自适应。避免了冗余结构使得速度大幅提升,达到40FPS。另外就是训练的时候加入了很多来自MAML++喝MetaSGD的技巧,效果更好。
总结
这几篇文章的一个共同思路都是融合了Siamese架构和目标检测框架,将目标实例信息以各种形式加入待检测图像中,从而将class-level的通用检测转变成instance-level的实例检测(跟踪)。借助目标检测对尺度,形变等复杂条件的优越性来解决跟踪中的问题,同时将跟踪转变成one-shot的检测任务也避免了更新带来的漂移(第一篇里面使用了MAML进行更新,主要原因猜测是单纯往RPN中融合目标信息还不够work,像globaltracker在head上也添加了instance,而第三篇则是构建一个分类器增强鲁棒性)。当然引入检测框架带来的计算开销也是很大的,最后一种方法避免了额外的模板分支相当于跳出了Siamese框架,给实时带来了可能。