本文整理记录了旷视研究院Detection组针对视频目标跟踪与分割问题的探讨和收获,并从喜闻乐见的图像处理出发,以期更好阐述视频目标跟踪的意义。
- VideoAnalyst开源代码:https://github.com/MegviiDetection/video_analyst
自然图像的物体实例模式识别任务,比如人脸识别、人体解析和场景关系识别,其整体思路大多采用局部定位再分而治之,即先使用检测算法定位图像中的目标个体,再针对其做相对应处理;此时,图像处理的实例即是一个个局部区域(空间位置)。
同样,视频的实例处理对象自然成了每个目标物体的tracklet(实例对象在每一帧上的空间位置)。如何获取每个实例对象在时空上的tracklet,也就是追踪技术,就成了视频对象处理的基础技术之一。在广义的单目标跟踪中,不再限制跟踪目标的类别,仅仅以初始帧给出的目标为准进行跟踪。
SiamFC++算法
单目标跟踪的性能其实主要依靠特征对比和逻辑推理。
特征对比是多数工作的主流方向,因为在已知第一帧目标图像前提下,定位下一帧目标位置的最直观方法是把下一帧图像以滑动窗为单位(或者以物体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。
SAT算法
把上述单目标跟踪过程中的目标初始化条件,修改为首帧可以给予目标mask,并预测该目标在每一帧图像中的mask,便成了视频目标分割的任务。
依据对单目标跟踪算法的理解,本文的核心处理方法是以该目标的tracklet为基础单位,逐像素分类tracklet里面的目标物体。最简单的解决方法是利用跟踪算法直接对分割目标进行跟踪,在跟踪得到的目标框内进行分割,这便是本文算法的baseline,但是仍存在一些问题:
1.分割需要更加精细的特征,而跟踪模型无法很好地提供;
2.准确的目标分割对目标的特征库更新提出了更高要求(逐像素分类),目标建模需要根据目标状态的变化进行更新;
3.分割结果仅仅是后处理操作,无法辅助进行更加高效的目标跟踪。
分析以上问题之后,旷视研究院提出了SAT[4] (CVPR2020)算法,pipeline如图5所示。
图5:SAT 结构图
由图5可知,通过增加Saliency Encoder用于给分割提供高分辨率特征, 增加Global Modeling Loop用于全局目标特征的更新,增加Cropping Strategy Loop来根据分割结果进行跟踪质量的评估,从而在直接使用分割结果和跟踪结果作为目标位置之间进行切换,提升整体pipeline的运行效率。
本文同样进行了详尽的对比分析,结果如图6所示。
图6:SAT评测结果
与当前SOTA相比,SAT算法在速度与指标的trade-off上取得了很好的结果,也希望可以激发出更多的改进方案。
开源VideoAnalyst
为方便学术交流,旷视研究院开源了以深度学习任务为核心的基于PyTorch的训练工程VideoAnalyst,它目前以算法SiamFC++和SAT(comming soon)为项目实例,通过分析当前深度学习模型训练测试工程的结构特点,开发出一套注重任务扩展性的深度学习训练/测评框架,其系统由5个模块构成:
1.dataloader提供训数据;
2.model构建模型结构、初始化和损失函数等,构成模型的整体架构;
3.optimizer专注于模型(model)的训练细节,比如学习率调节 (lr schedule)、优化器参数 (optim method)、梯度调整 (grad modifier) 等;
4.engine trainer-控制一个epoch的训练流程;tester-控制一个测试集的测试流程;
5.pipeline 根据一个任务使用model完成的任务处理流程,可以独立运行测试,或提供对外API接口。
图7:VideoAnalyst 系统配置架构
实现VideoAnalyst的核心问题就是,1)如何在这5个模块中实现不同的任务;2)如何对一个训练或测试流程进行合理的模块化配置。
为解决这两个问题,本工程采用config与代码模块一一对应的方式,配置即系统构建,整个工程在一套大的config配置树的规划下进行开发,如图7所示。对于模块的具体实现,采用注册器的形式对其所属的任务进行注册。
SOT训练测试流程
图8:VideoAnalyst 系统流程图
本文按照配置即系统构建的设计原则,在配置文件中按照代码模块的实际分布进行相关参数的配置,使其集中化,逻辑化。config示例请见:
训练和测试仅需要运行 python3 main/train.py or test.py -cfg configfile.yaml 即可,具体模块的构建流程如图8所示。
结论
由于着重于多任务框架的设计和实现,遵守开闭原则 (Open–closed principle),因此video_analyst具有非常好的多任务扩展属性。
旷视研究院后续会基于该框架,实现更多的计算机视觉任务算法,也欢迎大家在这个框架上实现新工作。
总而言之,旷视研究院会在目前工作基础上继续开发第二代项目VisionAnalyst,敬请期待。
---------作者-------
- 李作新,北京航空航天大学硕士, 现为旷视研究院Detection组研究员。
- 许胤达,浙江大学硕士,曾在旷视研究院Detection组实习, SiamFC++共同一作。
- 陈汐,浙江大学硕士,曾在旷视研究源Detection组实习,SAT一作。
参考文献
- Bertinetto, Luca, et al. "Fully-convolutional siamese networks for object tracking." European conference on computer vision. Springer, Cham, 2016.
- Li, Bo, et al. "High performance visual tracking with siamese region proposal network." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.
- Xu, Yinda, et al. "SiamFC++: Towards Robust and Accurate Visual Tracking with Target Estimation Guidelines." arXiv preprint arXiv:1911.06188 (2019).
- Chen, Xi, et al. "State-Aware Tracker for Real-Time Video Object Segmentation." arXiv preprint arXiv:2003.00482 (2020).