多目标跟踪算法

文章目录

  • 多目标跟踪算法
    • 一、多目标跟踪任务
      • 1.1 数据集
      • 1.2 评价指标
    • 二、多目标跟踪算法分类
    • 三、基于目标检测的多目标跟踪
      • 2.1 基于轨迹预测的目标跟踪算法
      • 2.2 基于目标特征建模
    • 四、多目标跟踪算法
      • 4.1 DeepSort
      • 4.2 Motdt
      • 4.3 Towards Real-Time Multi-Object Tracking

多目标跟踪算法

一、多目标跟踪任务

1.1 数据集

  • MOT Challenge
    2015年、2016年、2017年数据,包括行人和车辆

1.2 评价指标

  • 所有出现的目标都要及时能够找到;
  • 目标位置要尽可能与真实目标位置一致;
  • 每个目标都应该被分配一个独一无二的ID,并且该目标分配的这个ID在整个序列中保持不变。
    多目标跟踪算法_第1张图片
    多目标跟踪算法_第2张图片

二、多目标跟踪算法分类

多目标跟踪算法_第3张图片
DBT(Detection Based Tracking)(如上图左层所示)是指在跟踪之前每一幅图像中的目标信息都事先经过检测算法得到。它首先检测目标,然后链接到已有的轨迹中。这种策略也通常被称为“tracking -by- detection”。跟踪目标的数量,跟踪目标的类型全部由检测算法的结果来决定,无法预知。也就是说MOT过程包含一个独立的detection 过程。这种方法性能比较依赖于检测算法的好坏。

DFT(Detection Free Tracking )(如上图右层所示)需要人工标定第一帧图像中的目标,之后边检测边跟踪目标。DBT 和DFT相比较,DBT使用的更多。原因在于DFT 目标需要人工标定,对于非第一帧出现的目标或者中间帧消失的目标没办法处理。

三、基于目标检测的多目标跟踪

  • 跟踪成功:在上一帧中的N个目标轨迹中找到了本次检测到的目标。
  • 新目标出现:在上一帧中的N个目标轨迹中没有找到本次检测到的目标
  • 目标消失:在上一帧中存在某个目标,但这一帧并没有与之关联的目标

2.1 基于轨迹预测的目标跟踪算法

先预测目标的下一帧会出现的位置,然后让真实的检测结果与预测的位置进行对比关联。

  • 跟踪预测方法
    卡尔曼滤波
    粒子滤波
    均值漂移算法
  • 数据关联算法
    多假设跟踪方法
    关联滤波器方法
    匈牙利算法
    马尔可夫链蒙特卡罗方法
    贪婪关联算法

2.2 基于目标特征建模

对于每帧,每个检测到的目标,先利用卷积神经网络提取表观特征(可以理解为该目标的一种特征编码),然后计算每个目标特征之间的余弦距离,进行关联匹配。
多目标跟踪算法_第4张图片

  • 流程
    多目标跟踪算法_第5张图片

四、多目标跟踪算法

4.1 DeepSort

deepsort是一种在检测的基础上,将检测框与跟踪器关联匹配的方式实现跟踪。

  • 三个重要模块:
    (1)运动状态估计:(u,v,r,h;x,y,r,h),u,v为坐标点,r为宽高比,h为高度;后面四个分量分别对应前四个变量的改变量。
    (2)跟踪器的创建与移除:如果连续三帧跟踪匹配成功,则认为是新目标,新建跟踪器。如果未匹配成功帧数大于一定帧数,则认为目标丢失,删除跟踪器。
    (3)指派问题(多目标匹配):卡尔曼预测结果与检测结果的距离。特征关联,前几帧与当前帧特征的距离。两个距离加权得到最终距离。距离最小的检测框与跟踪框匹配。
  • 级联匹配的流程:
    多目标跟踪算法_第6张图片
  • 跟踪算法流程:
    (1)检测器(Yolov3等)检测当前帧目标,得到目标的bounding-box和conference。
    (2)利用conference抑制部分检测框,得到滤除后的检测框。并利用深度神经网络提取各个检测目标的特征。
    (3)利用上一帧跟踪器的跟踪框,使用kalman滤波,预测当前帧目标的位置,这里称为预测框。其中每个跟踪器中保存了各自目标的历史特征。
    (4)级联匹配,将会得到,检测器和跟踪器匹配上的 M M M,未匹配上的检测框 U U U,未匹配上的跟踪器。
    (5)匹配上的检测器和跟踪器,用检测器得到的新坐标值更新卡尔曼滤波器的参数;未匹配上的检测框,先建立一个虚拟的跟踪器,保存检测框的坐标以及特征,如果连续三帧这个跟踪器均跟上,才认为是新的目标;未匹配上的跟踪器,则age+1,如果age>Amax,则删除跟踪器。

4.2 Motdt

MOTDT主要利用将检测和跟踪框作为候选框的方法,解决了检测不可靠的问题。其有几个重要的结构与公式:

  • 实时目标分类------R-FCN

多目标跟踪算法_第7张图片
(1)网络输入:图片,输出为:Score maps。
(2)将检测框和卡尔曼滤波预测的跟踪框作为候选框,在score maps中切出ROI区域。并将这个ROI区域划分为k*k个区域,通过下式计算类别概率。
多目标跟踪算法_第8张图片
训练阶段,是目标的区域标签为1,非目标区域标签为0。测试阶段,选择奖ROI划分为k*k个框的作用为防止当ROI为目标的一部分时,得分很高,导致错误分类。

  • 跟踪置信度和得分函数
    跟踪轨迹的候选是通过卡尔曼滤波预测得到的,但是如果连续很多帧没有匹配到检测框的话,跟踪的结果可靠程度就会下降,因此引入一个跟踪置信度。
    在这里插入图片描述
    L d e t L_{det} Ldet​表示与跟踪器相关联的的检测框个数, L t r k L_{trk} Ltrk表示距离上次匹配上检测框,已经使用了多少次跟踪预测。
    得分函数:
    在这里插入图片描述

  • 外观表示和REID特征
    使用REID网络来进行外观表示,网络的骨架使用GoogLeNet,接上k个分支全连接层。训练时构建一个triplet, T = ⟨ I i , I j , I k ⟩ T={⟨I_i,I_j,I_k⟩} T=Ii,Ij,Ik,其中 ⟨ I i ​ , I j ​ ⟩ ⟨I_i​,I_j​⟩ Ii,Ij是同一人正确配对, ⟨ I i ​ , I k ​ ⟩ ⟨I_i​,I_k​⟩ Ii,Ik是来自不同人的错误配对,通过训练使得正确配对的欧式距离小于错误配对:
    在这里插入图片描述

  • 数据关联
    1、首先使用检测的候选进行数据关联,只取REID特征欧式距离小于阈值 τ d ​ τ_d​ τd的。
    2、利用IOU进行关联,配对剩下的检测候选和跟踪候选里面,阈值小于 τ I O U ​ τ_{IOU​} τIOU的;只有当跟踪轨迹匹配上了检测候选,才更新外观表示。
    3、将剩下的未配对的检测候选,生成新的跟踪轨迹。

  • 算法步骤:
    多目标跟踪算法_第9张图片
    (1)使用R-FCN得到Score map,初始化 C d e t = D k C_{det} = D_k Cdet=Dk, C t r k = ϕ C_{trk} = \phi Ctrk=ϕ.
    (2)利用上一帧的坐标,通过卡尔曼滤波得到预测框,更新 C t r k C_{trk} Ctrk
    (3)将更新后的 C d e t C_{det} Cdet C t r k C_{trk} Ctrk作为候选框,计算候选框和跟踪框的得分 S S S,然后,使用非极大值抑制,并滤掉 s s s小于阈值的 C d e t C_{det} Cdet C t r k C_{trk} Ctrk
    (4)利用REID训练的网络提取更新后的 C d e t C_{det} Cdet检测框的特征 F d e t F_{det} Fdet
    (5)数据匹配:1)利用特征计算跟踪器特征 F t r k F_{trk} Ftrk与检测器特征 F d e t F_{det} Fdet间的距离;2)将剩下的检测器 F t r k F_{trk} Ftrk和跟踪器 F d e t F_{det} Fdet使用IoU关联;3)将剩下的没有匹配上的检测器生成新的跟踪轨迹。将最终剩下的跟踪器赋给最终的跟踪结果,并把相应的特征保留。

4.3 Towards Real-Time Multi-Object Tracking

传统的Tracking by detection一般是先检测,再关联,关联过程提取特征与检测过程提取特征重复。作者针对这个问题提出了一种将检测和关联任务重的外观表示作为多任务学习。JDE模型:
多目标跟踪算法_第10张图片

  • 目标检测有两个loss,前景和背景分类的 L α L_{\alpha} Lα,边界框回归 L β L_{\beta} Lβ
  • 跟踪的外观表示的loss则采用度量学习,同一目标尽量接近,不同目标尽量远离,采用triplet loss:
    多目标跟踪算法_第11张图片
  • 总的Loss:
    多目标跟踪算法_第12张图片
  • 算法步骤:
    (1)当前帧图像输入JDE,得到输出边框和相应的外观嵌入。
    (2)卡尔曼滤波根据轨迹预测当前帧的位置。
    (3)计算观测值的嵌入与之前存在的轨迹池中的嵌入之间的关联矩阵。 使用匈牙利算法将观测分配给轨迹。
    (4)分配到各个轨迹的观测值与卡尔曼预测的位置比较,当观测值在空间上与预测位置相距太远,则拒绝分配。
    (5)分配到观测值的跟踪器,更新kalman参数,未分配到观测值的跟踪器如果超过一定时间,删除该跟踪器。

你可能感兴趣的:(深度学习)