本文整理记录了旷视研究院Detection组针对视频目标跟踪与分割问题的探讨和收获,并从喜闻乐见的图像处理出发,以期更好阐述视频目标跟踪的意义。
自然图像的物体实例模式识别任务,比如人脸识别、人体解析和场景关系识别,其整体思路大多采用局部定位再分而治之,即先使用检测算法定位图像中的目标个体,再针对其做相对应处理;此时,图像处理的实例即是一个个局部区域(空间位置)。
同样,视频的实例处理对象自然成了每个目标物体的tracklet(实例对象在每一帧上的空间位置)。如何获取每个实例对象在时空上的tracklet,也就是追踪技术,就成了视频对象处理的基础技术之一。在广义的单目标跟踪中,不再限制跟踪目标的类别,仅仅以初始帧给出的目标为准进行跟踪。
单目标跟踪的性能其实主要依靠特征对比和逻辑推理。
特征对比是多数工作的主流方向,因为在已知第一帧目标图像前提下,定位下一帧目标位置的最直观方法是把下一帧图像以滑动窗为单位(或者以物体proposal为单位)与目标图像特征进行比对,特征最相近便认为是目标物体。
但是,现有的特征提取器、传统特征提取方法或者卷积神经网络,皆无法在目标持续变动和周遭出现干扰物体的情况下,准确提取特征,很好地区分目标与非目标,因此,一些简单的推理逻辑,比如cosine window、scale-ratio penalty的方法,也用来修正特征比对结果。
当然,逻辑推理也不仅限于修正特征比对, 在特征已经实在无法有效区分的情况下 ,如何设计整体优化的判断逻辑也是很重要的工作。
图1:SiamFC结构图
图2:SiamRPN结构图
虽然单目标跟踪的核心在于特征对比和逻辑推理,但这更多是为了保证目标跟踪的鲁棒性,它的效果最终要体现在对每帧图像目标的状态估计(定位)上。旷视研究院在这一方向做了探究。
SiamFC[1](图1)是一个CNN实现的、十分简洁而精妙的单目标跟踪算法,同时有着对于跟踪目标在每一帧上的位置估计过度人为假设的问题;SiamRPN[2](图2)利用anchor回归逻辑进行更准确的位置估计,但是引入了一些歧义问题,跟踪器的鲁棒性受到影响。
通过分析tracking任务中定位的需求特点和SiamFC框架之后,旷视研究院对依据SiamFC进一步实现高性能目标跟踪算法的基本原则进行了探究,归纳总结出四条基本原则,
1)分类与回归任务分离,2)无歧义分类打分,3)无先验位置回归,4)预测质量评估,并在此基础上设计实现了SiamFC++[3]算法(AAAI2020),结构如下图所示:
图3:SiamFC++结构图
为了验证方法设计的合理性,本文在多个单目标跟踪数据集上进行了测试,结果如图4所示:
图4:SiamFC++评测结果
可以看到, 相较于现有SOTA,本文在多个数据集上均取得了跟踪质量和速度上的更优成绩;再加上简单的在线模板库逻辑后,SiamFC++更是在VOT18上实现EAO 46.7@50FPS。
把上述单目标跟踪过程中的目标初始化条件,修改为首帧可以给予目标mask,并预测该目标在每一帧图像中的mask,便成了视频目标分割的任务。
依据对单目标跟踪算法的理解,本文的核心处理方法是以该目标的tracklet为基础单位,逐像素分类tracklet里面的目标物体。最简单的解决方法是利用跟踪算法直接对分割目标进行跟踪,在跟踪得到的目标框内进行分割,这便是本文算法的baseline,但是仍存在一些问题:
分析以上问题之后,旷视研究院提出了SAT[4] (CVPR2020)算法,pipeline如图5所示。
图5:SAT 结构图
由图5可知,通过增加Saliency Encoder用于给分割提供高分辨率特征, 增加Global Modeling Loop用于全局目标特征的更新,增加Cropping Strategy Loop来根据分割结果进行跟踪质量的评估,从而在直接使用分割结果和跟踪结果作为目标位置之间进行切换,提升整体pipeline的运行效率。
本文同样进行了详尽的对比分析,结果如图6所示。
图6:SAT评测结果
与当前SOTA相比,SAT算法在速度与指标的trade-off上取得了很好的结果,也希望可以激发出更多的改进方案。
为方便学术交流,旷视研究院开源了以深度学习任务为核心的基于PyTorch的训练工程VideoAnalyst,它目前以算法SiamFC++和SAT(comming soon)为项目实例,通过分析当前深度学习模型训练测试工程的结构特点,开发出一套注重任务扩展性的深度学习训练/测评框架,其系统由5个模块构成:
图7:VideoAnalyst 系统配置架构
实现VideoAnalyst的核心问题就是,1)如何在这5个模块中实现不同的任务;2)如何对一个训练或测试流程进行合理的模块化配置。
为解决这两个问题,本工程采用config与代码模块一一对应的方式,配置即系统构建,整个工程在一套大的config配置树的规划下进行开发,如图7所示。对于模块的具体实现,采用注册器的形式对其所属的任务进行注册。
图8:VideoAnalyst 系统流程图
本文按照配置即系统构建的设计原则,在配置文件中按照代码模块的实际分布进行相关参数的配置,使其集中化,逻辑化。config示例请见:
https://github.com/MegviiDetection/video_analyst/blob/master/experiments/siamfcpp/train/siamfcpp_googlenet-trn.yaml。
训练和测试仅需要运行 python3 main/train.py or test.py -cfg configfile.yaml 即可,具体模块的构建流程如图8所示。
由于着重于多任务框架的设计和实现,遵守开闭原则 (Open–closed principle),因此video_analyst具有非常好的多任务扩展属性。
旷视研究院后续会基于该框架,实现更多的计算机视觉任务算法,也欢迎大家在这个框架上实现新工作。总而言之,旷视研究院会在目前工作基础上继续开发第二代项目VisionAnalyst,敬请期待。
---------作者-------
END