MOTDT是2018年提出的一种非常简单有效且实时的多目标跟踪方法,代码已开源,其整体架构及其中部分模块都可以在工程中部署,效果不错。

原文:Real-Time Multiple People Tracking With Deeply Learned Candidate Selection And Person Re-Identification

源码:https://github.com/longcw/MOTDT

目录

一. MOTDT基本思想

二. MOTDT基本架构

三. 候选框Score及Refine

1. S_cls 分类置信度

2. S_trk 轨迹置信度

3. 候选框Refine

4. 需要注意的点

四. 基于Re-ID特征的外观表达

五. 分级数据关联


一. MOTDT基本思想

目标跟踪领域一个亟待解决的问题是:如何将不可靠的检测结果与已经跟踪的目标轨迹进行关联。为解决这一问题,MOTDT同时从当前帧的检测结果和Kalman跟踪预测结果生成候选区域(Candidates),然后将这些候选区域与目标依次依据外观特征(Re-ID feature)和交并比(IOU)进行分级数据关联,完成跟踪任务。作者认为,在不同的情况下,检测和跟踪是可以相互弥补的,比如:可靠性较高的检测在长时间(long-term)跟踪中可以防止跟踪漂移,而单纯的跟踪预测则可以避免因为遮挡出现的错漏检测而导致的匹配失败。所以,基于检测结果和跟踪结果生成的候选区域,可以较完备的体现跟踪目标可能出现的位置。

二. MOTDT基本架构

MOTDT整体架构十分简单,如下:

(1)对上一帧的跟踪目标T(t-1),用Kalman滤波器预测这些目标在当前帧的位置,生成来自于跟踪的Candidates,C_trk

(2)检测结果,生成来自检测的Candidates,C_det

(3)合并Candidates,C=C_det∪C_trk

(4)滤除C中不可靠和冗余的Candidates

(5)数据关联,对T(t-1)和C进行数据关联,得到匹配的跟踪-检测对(T-D pair)、未匹配的跟踪T_u、未匹配的检测D_u

(6)更新跟踪(包括删除不活动的跟踪目标、增加新出现的跟踪目标、更新正在运动的跟踪目标等)

可以看到,基于作者的思想合并Candidates后(第3步),最重要的任务就变成了如何进行准确的数据关联,候选框的滤除也是为了更准确的给后续的数据关联提供备选集合。为了从大量的候选位置中实时有效的找到与跟踪目标的最优匹配,作者提出了三个处理模块:

(1)基于CNN提出一种对候选框的打分机制,通过得分优略对候选框进行滤除和去冗余

(2)用基于Re-ID数据集训练的CNN,提取目标的深层次(语义级别)外观特征

(3)利用分级关联策略,基于空间信息和Re-ID特征,进行跟踪目标与候选框之间的目标关联

MOTDT架构的步骤(1)和(2)十分简单,在这里不赘述。下面直接从步骤(3)——候选框滤除开始讲起。

三. 候选框Score及Refine

同时从检测结果和跟踪预测结果得到候选框,必然会得到一个包含一定冗余信息且数量较大的候选框集合。为了从这些候选框中得到真正可能的候选位置,则需要对候选框进行Refine,Refine的依据是基于检测和跟踪的得分score,得分高说明候选框的可靠性较高,反之则候选框很有可能位于被遮挡、误检测或者预测失败的位置。

在这个阶段,所有的候选框C(C=C_det∪C_trk)都经过统一的打分方程进行计算。打分方程由两部分组成:

(1)S_cls:分类置信度,通过具有位置判别能力的分类器,给候选框是目标的概率进行打分

(2)S_trk:轨迹置信度,由跟踪目标历史轨迹的未匹配间隔数对来自跟踪的候选框C_trk进行打分

打分方程为:

                                                                                S = S_cls + S_trk

1. S_cls 分类置信度

作者使用基于R-FCN的分类器对候选框为目标(本文中是行人)的可能性进行判断,R-FCN是Faster-RCNN的改进,它为了平衡目标检测过程中定位所需的位置敏感性和分类需要的位置不敏感性,提出了位置敏感的ROI Pooling层(Position-Sensitive ROI Pooling,简写为PS_ROI)。PS_ROI层将经过之前网络处理得到的特征图进行分块,然后逐层分块的取特征的局部得到目标ROI的feature进行分类和位置回归。分类时,取代FasterRCNN中的全连接层,改为利用投票机制,对所有块的结果进行平均统计,得到目标属于某类的概率。这个网络还蛮有意思的,具体参考博文

文章中的R-FCN训练好后,实际使用时是直接去除RPN模块的,所有的proposals直接由候选框集合C提供。输入当前帧图像和候选框集合C,R-FCN直接预测候选框为目标的概率,所以这里的R-FCN是一个二分类网络。

看过源码后,发现文中R-FCN的backbone是一个基于SqueezeNet的编解码结构(Encode-Decoder结构)。

Encoder部分使用的1.1版本的SqueezeNet,得到Size依次下降,维度分别为(64,128,256,512)的四组不同层次的特征。在解码器部分,将其中的两组特征进行上采样与顺序处理的特征进行element wised 相加,并进行后续的卷积操作即可得到最终的特征。网络的分块数为k=9,即一共将ROI划分为7*7的区域。

题外话,最近读的两篇文章(D&T 和 MOTDT)都用了R-FCN架构,只是大概看了一下这个架构,还是有待补充。

2. S_trk 轨迹置信度

S_trk描述一个已跟踪轨迹的置信程度,公式如下:

                                       

其中,L_trk表示该跟踪目标最后一次成功关联检测目标后,纯靠Kalman滤波预测位置的个数,即该目标最后一次成功匹配到当前帧的帧数;L_det表示整个轨迹成功关联检测的次数;Ⅱ(L_det≥2)在L_det≥2时值为1,否则为0。

通俗的来说,轨迹置信度S_trk依据跟踪目标连续成功匹配的次数衡量目标是一个良好跟踪的概率。当跟踪目标连续未匹配的次数越多(L_trk越大)时,轨迹可靠程度越低。Ⅱ(L_det≥2)则是用于对那些由噪声引起误检测而产生的跟踪进行强制0分。

我在工程中用了S_trk来判断一个轨迹的好坏,得分太低就认为跟踪失败,还蛮好用的。比直接累加未匹配的帧数要稳一些。

3. 候选框Refine

得到每个候选框的得分之后,就可以依据得分进行Refine操作,具体分为两步:

(1)用一个交并比阈值τ_nms,对所有候选框进行非极大值抑制(NMS),先滤除重叠率过高的候选框。

(2)用一个分数阈值τ_s,滤除得分较低的候选框,得到最终的候选框。

4. 需要注意的点

稍作思考可以发现,对于来自于检测的候选框C_det是没有所谓的轨迹置信度的,查阅代码后,作者将C_det的S_trk直接默认置为1。

四. 基于Re-ID特征的外观表达

这一部分实际上是作为分级数据关联步骤中,关联依据的一部分。这里单独拿出来简单说一下,Re-ID是近年来多目标跟踪领域常用的模块,我看过的最早是在MCMT(多相机多目标)跟踪领域进行跨相机的人员关联,因为跨相机轨迹预测就会间断嘛,用外观特征进行身份重识别就可以对不同相机下的目标进行轨迹跟踪。之前大热的DeepSort就是基于这一点对其基础算法SORT进行的改进。

Re-ID特征通常是一个分类网络,训练时,数据集中有N个身份的人,则网络的分类数即为N+1。训练完成后,该网络得到了泛化的可以识别同一个人外观特征的能力。去除最后分类用的全连接层,即只利用该网络做特征提取不进行后续分类。

在应用时,已有一个人的图像P,要判断另一张图像Q中的人是否有相同的特征,操作如下:

(1)将P和Q分别送入Re-ID网络,提取特征向量

(2)计算特征向量的距离d(欧式距离、余弦距离,任选)

(3)若d>m,则是两张图中的人有相同的身份;否则,身份不同

其中,m是阈值。

现在常用的Re-ID网络,backbone一般为ResNET50。

五. 分级数据关联

前序步骤中我们合并了来自检测和跟踪的候选框,并进行了Refine。但是我们不能直接用这个Refine后的候选框集合C来进行数据关联,还需要进行拆解,然后分级的做数关联。原因是:C中的C_trk主要的目的是用来处理拥挤环境中的漏检的,而在大多数环境中,由于类间目标遮挡(有相似的外观特征),这些候选框中可能包含其他的目标。为了避免引入不期望的目标和背景的外观特征,这里依次且分别对C_det和C_trk用不同的关联策略,过程如下:

(1)拆解Refine后的候选框集合C为C_trk和C_det

(2)提取来自集合C_det候选框的Re-ID外观特征

(3)计算上一帧的跟踪结果T_t-1与C_det的Re-ID特征距离,生成距离矩阵,利用匈牙利算法生成最优(最大利益)的匹配结果,得到匹配对集合T-C_pair_0,未匹配的跟踪集合T_u_0,未匹配的检测候选框集合D_u_0

(4)合并D_u_0和C_trk,得到所有未匹配的候选框集合C_u。对于未匹配的跟踪T_u_0,利用位置信息即IOU与C_u进行关联,得到匹配对集合T-C_pair_1,未匹配的跟踪集合T_u_1,未匹配的候选框集合C_u,未匹配的检测候选框集合D_u_1,(D_u_1∈C_u)

(5)此时,当前帧的数据关联工作已经完成,用T-C_pair_0和T-C_pair_1中的候选框更新跟踪目标的位置、KalmanFilter以及外观特征

(6)新建新的跟踪目标,将未匹配的检测候选框集合D_u_1都初始化未新的跟踪目标,并将这些目标加入跟踪队列。

候选框合并又拆解并不是无用功,合并是为了除去不可靠的检测,而拆分是为了保障数据关联的精确。

 

MOTDT的架构很简单,代码也很清晰,值得工程借鉴。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐