视频理解技术之目标跟踪(一)物体检测与个体识别联合学习的多目标跟踪框架

举报
避尘 发表于 2020/06/18 00:04:28 2020/06/18
【摘要】 跟踪物体的运动轨迹,即目标跟踪,是视频理解中非常重要的一项任务。按照跟踪物体的数量,目标跟踪任务可以分为单目标跟踪和多目标跟踪两类。这篇笔记主要关注多目标跟踪中物体检测和识别联合学习的方法框架。

1 概述

跟踪物体的运动轨迹,即目标跟踪,是视频理解中非常重要的一项任务。目标跟踪要求在给定的视频中,对指定的物体——有时会指定某些类别的所有物体,确定其在每一视频帧上的位置,并将不同视频帧上的相同物体进行关联,从而得到每个指定物体的完整运动轨迹。按照跟踪物体的数量,目标跟踪任务可以分为单目标跟踪(Single Object Tracking,SOT)和多目标跟踪(Multiple Object Tracking,MOT)两类;按照跟踪时考虑的摄像头数量(同一物体的轨迹不间断的情况下跨越摄像头的数量),目标跟踪任务可以分为单摄像头目标跟踪和跨摄像头目标跟踪,后者有时也被称为跨镜(头)跟踪、跨域跟踪等;另外按照其它分类标准,常见的还有在线目标跟踪(Online Object Tracking)、离线目标跟踪等。这篇笔记主要关注多目标跟踪,其中并不刻意区分是单摄像头还是跨摄像头场景,不过所涉及的方法通常没有针对跨摄像头场景进行专门的考虑。


目前多目标跟踪技术通常基于“tracking-by-detection”框架(也许可以译为“检测代跟踪”或者“检测后跟踪”框架)。这一框架将多目标跟踪分成两个相互独立的步骤来进行:

1) 物体检测:采用物体检测技术在视频(帧)中检测待跟踪物体的位置。

2) 位置关联(data association):将检测出的位置按照物体进行关联,将相同物体对应的位置按照时间先后串联到一起,形成物体的运动轨迹。

第一个步骤关注待跟踪物体的位置信息,第二个步骤则关注其“身份”信息,即哪些位置对应于同一个物体,本质上是物体识别任务,而且是细粒度的个体识别任务,或者更为贴切的称为个体“再识别/重识别(re-identification,ReID)”任务,即在后一视频帧中再次/重新识别出前一视频帧中的物体。由于上述两个步骤相互独立,而物体检测通常是作为一个单独的课题来研究,因此多目标跟踪的大部分工作主要关注位置关联这一步,并且整个跟踪过程需要通过两个单独的模型来完成。


采用两步法的“tracking-by-detection”框架虽然是目前的主流,但是其存在一个明显的缺点,即在速度上一般难以满足实时性要求。一些以提升跟踪精度为主要目标的方法,往往由于在第一步采用了高精度同时高复杂度的物体检测器,其在速度上的劣势会更为显著。这些方法所所汇报的“实时”速度通常对应的是第二个步骤,而非整个跟踪过程。有些方法甚至在只计算第二个步骤所花时间的情况下,速度仍然达不到实时性要求。


针对“tracking-by-detection”框架在速度上的不足,涌现出了一批将两个步骤的任务进行集成通过一个模型来完成的方法,即对应于笔记的副标题中所写的“物体检测与个体识别联合学习”框架。为了表述方便,下文将分两个单独步骤的“tracking-by-detection”框架称为独立型框架,而把两个步骤集成在一个模型中的方式称为联合型框架。从跟踪过程来看,基于联合型框架的方法通常仍然是采用两个步骤来进行,其和基于独立型框架的方法的主要区别在于将两个任务放在一个模型中来完成。由于在两个步骤之间实现了很大一部分计算的共享,类似于“Faster R-CNN = RPN + Fast R-CNN”中主干网络的共享,因此这类方法在跟踪的整体速度上相比有较为显著的提升,此外,这类方法在精度上也并不逊色,甚至于表现更好,除了得益于深度神经网络强大的建模能力,也有一部分原因在于检测和识别两部分任务的相辅相成。这篇笔记将着重介绍基于联合型框架的多目标跟踪方法。


联合型框架考虑的核心问题是如何进行多任务学习(Multi-Task Learning,MTL),包括如何设计模型结构来进行多任务、如何对多个任务的目标函数进行联合优化、如何合理利用多个任务的数据等。


2 基于联合型框架的多目标跟踪方法


2.1 JDE: Joint Detection and Embedding


Towards Real-Time Multi-Object Tracking [arXiv 1909.12605]

- 作者:Zhongdao Wang, Liang Zheng, Yixuan Liu, Shengjin Wang

- 代码:https://github.com/Zhongdao/Towards-Realtime-MOT


这篇文章在单阶段物体检测框架的基础上进行了改造,给网络增加了个体识别对应的输出分支,即在预测检测框及其得分的同时,还输出对应物体的特征,以此来实现检测和识别的多任务协同学习。作者命名其方法为JDE,其中“E”对应于“Embedding”,即指用于个体识别的特征。


具体而言,JDE采用DarkNet-53作为主干网络,其具有特征金字塔网络(Feature Pyramid Network,FPN)的结构,使用了$\frac{1}{32}$、$\frac{1}{16}$和$\frac{1}{8}$三个尺度的特征图。在每个尺度的特征图的每个位置上,设置$A$个锚点框(anchor box),预测每个锚点框的位置和尺寸参数相对于物体实际参数的调整量,以及其表示物体和背景的概率,对应输出维度为$(4 + 2)A$,这两部分即物体检测中的边框回归和前背景分类任务,相当于一个区域建议网络(Region Proposal Network,RPN);同时,在每个位置上还输出一个$D$维的特征向量用于个体识别,因此每个位置的输出维度为$(6A + D)$——注意到同一个位置的$A$个框对应于相同的特征向量。对于一个尺寸为$H\times W$的特征图,总的输出维度为$(6A+D)\times H \times W$。对于物体检测的边框回归和前背景分类任务,分别采用光滑$L_1$损失函数和交叉熵(Cross Entropy,CE)损失函数来引导模型优化。


个体识别通常是一个度量学习(metric learning)任务,因而JDE考虑选择三元组损失函数(triplet loss)来引导模型优化,更进一步地,JDE也考虑了三元组损失函数的一种光滑上界,以及交叉熵损失函数。在作者的实验中,采用交叉熵损失函数能够得到最好的跟踪精度,作者认为这是因为交叉熵损失要求在特征空间中每个个体远离所有的反例类别,而三元组损失及其上界则只要求每个个体远离采样出的负样例。


多任务学习中一个重要的问题是如何调配不同任务损失函数的作用。在JDE中,物体检测两个任务的损失函数的权重设置为相同,个体识别任务损失函数的权重另行设置,每个任务的损失函数在各个尺度(特征图)上保持相同的权重,因此JDE实际需要确定的损失函数权重仅有两个,一个对应于物体检测任务,一个对应于个体识别任务。作者采用了已有文献中的一种自动调整的方式来确定这两个权重。


在跟踪的推理过程中,给定输入视频,在当前视频帧上,JDE输出所有检测到的物体的边框及其特征,然后计算每个物体和所有正在跟踪的物体的相似度,得到对应的相似度矩阵(affinity matrix),之后通过匈牙利算法(Hungarian algorithm)来将检测到的物体和正在跟踪的物体进行关联。JDE还通过卡尔曼滤波(Kalman filtering)来对物体轨迹进行平滑,以及预测正在跟踪的物体在当前帧上的位置,如果通过特征关联上的物体的位置和预测的位置相距甚远,则取消已经建立的关联(即关联失败)。对于成功建立了关联的物体,则用在当前视频帧上提取的特征来对之前记录的该物体的特征进行更新,更新时通过动量因子(momentum)来保持特征更新的平滑性。如果一个正在跟踪的物体没有和当前帧检测出的任何物体建立关联,则认为该物体暂时失踪,而当一个物体长时间失踪时,则认为这个物体已经离开视频画面了,将其排除出正在跟踪的物体集合。


作者通过实验和分析有如下结论:

- 对于个体识别任务,从跟踪精度上看,交叉熵损失函数显著优于三元组损失函数。

- 在自动调整各任务损失函数的权重过程中,个体识别任务对应的权重会迅速下降到$10^{-1}$量级,而物体检测任务对应的权重则会上升到$10^{2}$量级,这和(人工)搜索出的最优权重基本一致($0.1:64$)。

- 多任务学习情况下得到的个体识别特征和单独学习的特征在跟踪上的表现几乎一样。

- JDE在IDF1和ID变换次数这两个评价指标上表现不佳,主要原因是在物体相互遮挡的情形下检测框不准确,容易导致物体ID发生变化(错误关联或者关联失败)。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。