论文水平:CVPR 2019 https://arxiv.org/pdf/1812.05050.pdf
测试代码:https://github.com/foolwood/SiamMask
今年CVPR有一篇亮眼的视觉跟踪方面的论文,作者提出新算法SiamMask,在视频跟踪任务上达到最优性能,并且在视频目标分割上取得了当前最快的速度。
此篇文章一出,基本就是一个细分领域的终结。所有做单目标、短视频追踪的同学要么早点毕业,要么尽快转方向...如多目标跟踪问题、长时间稳定跟踪、3D目标实时跟踪、6D姿态跟踪。或者是在子领域做出卓有建树的工作,如笔者从事计算机辅助导航中的2D/3D/4D超声视频跟踪,融合了复杂样本、奇异分布、多目标标联合、长时间跟踪(15-25min)难题。
在两年前,当我们提起视觉跟踪(Visual Tracking),我们的脑海里总是灌满了相关滤波(KCF,SRDCF,CF2,CCOT,ECO... 等等经典工作在我的脑海里飘荡)。如果给这个时代截取一篇最经典的工作,我想我会选择 KCF。他是真的将视觉跟踪推向流行,让整个领域真的沸腾起来的工作。如果现在来分析他之所以能统治跟踪领域的原因,我觉得主要是两点:足够高效 + 开源。高效到只需要 10 行以内的代码就可以实现核心计算,随便一个 CPU 就可以跑到 200FPS 以上。这极大程度上拉低了视觉跟踪领域的门槛,让所有人很容易进入这个领域。
当然,除了怀旧以外。我们也会经常反思甚至有些诧异,似乎视觉跟踪和整个 CV 大领域走到了不同的方向,深度学习在跟踪领域并没有得到什么用武之地。当然,所有新的方向的产生大都遵循着量变到质变的基本原则。
Siamese 网络的概念应用于目标跟踪的源头应该从 SINT 这篇文章开始,但真正开始流行却是从 SiamFC 开始。简洁优雅的框架让它得变得流行,像极了上一波的 KCF。
而SiamMask像极了结合SiameseFC和MaskCNN的优势,所以取得了最佳跟踪结果令很多学术界人士感觉在情理之中。
长久以来,我们的思维倾向于陷入舒适区。当 A 做了物体检测,我们尝试改网络,改 loss,别的领域 trick 拿来就是一篇。而我们常常忽略了更为重要的问题,到底这个问题的该如何定义,这点极为重要。
对于目标跟踪而言,一般论文开篇通常都会说在第一帧给定目标位置,在后续帧中预测目标的位置。然而如何对后续帧中表述的定义直接影响了整个跟踪领域的发展。
为了方便表述,早期的跟踪算法都是坐标轴对齐的的矩形框。但随着跟踪精度的不断提升,数据集的难度在不断提升,在 VOT2015 时即提出使用旋转矩形框来作为标记。在 VOT2016 的时候提出自动的通过 mask 来生成旋转框的方法。更为本质的,我们会发现,这个旋转的矩形框实际上就是 mask 的一种近似。我们所要预测的实际上就是目标物体的 mask。利用 mask 才能得到精度本身的上界。
视频跟踪算法有两类代表:
第一类是预测score的方法,这类算法以相关滤波和SiameFC为代表。通过预测候选区域的score map来得到物体的位置,物体的尺度大小通常是通过图像金字塔得到。同时无法得到物体的长宽比变化。
第二类就是以GOTURN和SiamRPN为代表的做boundingbox regression的方法。这也是SiamRPN取得当前最好结果的核心所在,充分挖取精度方向的红利。实际上并不是SiamRPN预测的有多稳定,而是在预测正确的时候,会给出更为精确的box。利用网络预测长宽比可以调整box,这个方向一直以来被大家所忽视,所以SiamRPN很快杀出重围。
而在物体发生旋转的时候,简单的box的表述通常会产生极大的损失,这实际上就是表述本身存在的缺陷。而为了进一步探索在精度上存在的问题。更进一步,直接预测物体的mask。这种表述使得我们可以得到最为准确的box。最直观的利用一个简单的事例的可视化就可以看出,这三种算法的区别。
同时,对于视频目标分割(VOS)领域,之前普遍流行的算法是利用语义分割网络在线进行一个二分类的训练,然后再后续帧进行预测。这种方法在训练过程中一般都会花费数分钟,给人一种电脑假死的感觉。最近越来越多的不需要在线finetune的算法被提出。但其速度仍然无法到达令人满意的状态,例如FAVOS和OSMN分别需要1s/帧,120ms/帧。这距离真正的实时运行还是有一定差异。另一方面,VOS算法的第一帧需要给定目标的mask,这在人机交互的场景中很难时间,这个mask获取成本过高。
所以王强博士提出了对视觉目标跟踪(VOT)和视频目标分割(VOS)的统一框架SiamMask。我们将初始化简化为视频跟踪的box输入即可,同时得到box和mask两个输出。
视觉目标跟踪 、 视频目标分割 统一框架但是相较于预测score和box,mask的预测会更为困难。这里使用的表述方法,是利用一个vector来编码一个RoW的mask。这使得每个prediction位置具有非常高的输出维度(63*63), 通过depthwise的卷积后级联1x1卷积来升维来实现高效运行。这样即构成了主要模型框架。
但直接预测的Mask分支的精度并不太高。所以提出了如下图所示的Refine Module用来提升分割的精度,refine module采用top-down的结构。
1)高效的在线学习算法:进展到目前为止,所有实验研究表明。Siamese网络无法真正意义上抑制背景中的困难样本。离线的学习从本质上无法区分两个长相相似的人或者车。而CF相关算法可以通过分析整个环境的上下文关系来进行调整。如果对于提升整个算法的上界(偏学术)的角度考虑,在线学习有必要。如果正常的工程使用,我认为目前的算法只要在相应的场景中进行训练就足够了。
2)精确输出表达:王强博士的工作提出额外的mask输出。可直接扩展的思路为关键点输出(CornerNet / PoseTrack),极点预测(ExtremeNet),甚至6D pose跟踪。本质上是通过网络可以预测任何与目标相关的输出。
3)定制网络架构:其中包含两个子方向,一个是追求精度的去探索究竟什么样的网络架构会有利于当前的跟踪框架的学习。另一个有价值的子方向是如何构建超快速的小网络用于实际工程。工程项目中有时并没有GPU的资源供使用,如何提供“廉价”的高质量跟踪算法也具有很强的实际意义。当对网络进行裁剪之后,很容易达到500FPS的高性能算法来对传统的KCF进行真正的替换。
4)离线训练学习优化:目前的跟踪算法在相似性学习方向还是过于简单,如果去设计更为有效的度量学习方案,应该会有一定的提升。同时我们也并没有很好的掌握网络的训练。当前的训练策略是将网络主干的参数进行固定,先训练head。然后逐步放开。实际上我们发现,当直接将所有层全部放开一起训练的时候,网络的泛化性能会显著下降。另一个方面,train from scratch的概念已经在检测领域非常普遍了。跟踪的网络目前我们的经验在跟踪方面并不work。
5)更细粒度预测:这一条实际上是上一条的续集,就是专注于score分支的预测。现在大家的做法是>0.6 IoU的都当做前景(正样本),但实际上正样本之间还是有较大的差异的。跟踪本质上也是不断预测一个非常细小物体帧间运动的过程,如果一个网络不能很好的分辨细小的差异,他可能并不是一个最优的设计选择。这也是ATOM的IoUNet主攻的方向。
6)泛化性能提升:非常推荐自动化所黄凯奇老师组的GOT-10k数据集,数据组织的非常棒。黄老师组在one-shot learning领域有着深厚的积淀,所以站在这个领域的角度,他们提出了严格分离训练集和测试集的物体类别来验证泛化性能。所以原则上所有one-shot learning方向的一些嵌入学习方法都可以移过来用。同时,我觉得Mask-X-RCNN,segment everything这个思路可以借鉴。本质上我也不得不承认,基于深度学习的跟踪算法存在泛化性能问题。我们有理由怀疑跟踪是否会在未知的类别上有较好的泛化性能,实际上肯定是会下降。
7)long-term跟踪框架:截止到目前为止,虽然VOT组委会以及牛津这边的OxUVA都有专门的long-term的数据集,但long-term算法并没有一个较好的统一框架出来。关于这方面的研究似乎有点停滞,今年大连理工的文章非常可惜,我觉得质量非常不错。
中科院王强博士 : https://zhuanlan.zhihu.com/p/58154634