运动目标跟踪(MOT)子系统(也称为多目标检测与跟踪-DATMO)负责检测和跟踪自动驾驶汽车周围环境中运动障碍物的姿态。

该子系统对于使自主车辆做出决策和避免与潜在移动物体(如其他车辆和行人)碰撞至关重要。
随着时间的推移,移动障碍物的位置通常是根据测距传感器(如激光雷达和雷达)或立体相机捕获的数据来估计的。单目摄像机的图像能够提供丰富的视觉信息,可以用来改进运动障碍假设。针对传感器测量的不确定性,采用Bayes滤波器(如Kalman和粒子滤波器)进行状态预测。

MOT方法主要分为六类:传统的、基于模型的、基于立体视觉的、基于栅格地图的、基于传感器融合的和基于深度学习的。

MOT 方法分类

1、Traditional Based MOT

传统的MOT方法主要包括三个步骤:数据分割、数据关联和过滤

在数据分割阶段,利用聚类或模式识别技术对传感器数据进行分割。

在数据关联步骤中,使用数据关联技术将数据段与目标(移动障碍物)关联。

在滤波阶段,对于每个目标,通过取分配给目标的数据的几何平均值来估计位置。

位置估计通常由卡尔曼滤波或粒子滤波进行更新。

2、Model Based MOT

基于模型的方法直接从传感器数据中推断,使用传感器的物理模型和对象的几何模型,并使用非参数滤波器(如粒子滤波器)。不需要数据分割和关联步骤,因为几何对象模型将数据关联到目标

3、Stereo Vision Based MOT

基于立体视觉的方法依靠立体图像对提供的颜色和深度信息来检测和跟踪环境中的运动障碍物

Ess等人提出了一种障碍物检测和识别方法,该方法仅使用来自前视立体摄像机的同步视频。他们的工作重点是基于行人和汽车探测器每帧输出的障碍物跟踪。

对于障碍物检测,他们采用了一种带有方向梯度直方图(HOG)特征的支持向量机(SVM)分类器,将每个图像区域分类为障碍物或非障碍物。对于障碍物跟踪,他们应用一种假设和验证策略,将一组轨迹拟合到可能检测到的障碍物上,使得这些轨迹一起具有很高的后验概率。候选轨迹集由扩展卡尔曼滤波器(EKFs)生成,EKFs由障碍物检测初始化。最后,使用模型选择技术仅保留一组解释过去和现在观测结果的最小且无冲突的轨迹。对于MOT,采用半全局匹配(SGM)方法从立体图像对中重构出稠密视差图像。三维环境中的所有障碍物都由一组称为超级像素或stixels的垂直方向的薄矩形来近似。使用Kalman滤波器跟踪随时间变化的stixel。最后,使用空间、形状和运动约束将stixel分割为静态背景和移动障碍物。在时空分析的基础上,提出了一种基于外观的检测与识别方案,该方案利用特定类别(行人和车辆)模型,提高了视觉感知的鲁棒性。

实时识别主要包括三个阶段:感兴趣区域(ROI)、障碍物分类和目标跟踪。Chen等人使用半全局匹配算法从立体图像对计算视差图。在视差图的辅助下,简单线性迭代聚类产生的图像分割边界分为共面边界、铰链边界和遮挡边界。利用改进的随机样本一致性(RANSAC)算法在自我运动估计过程中获得运动点。最后,根据边界类型和运动情况,采用超像素合并的方法提取运动障碍物。

4、Grid Map Based MOT

基于栅格地图的方法首先构建动态环境的占用栅格地图。地图构建步骤之后是数据分割、数据关联和过滤步骤,以便提供场景的对象级表示。Nguyen等人提出了一种基于网格的立体摄像机运动目标检测与跟踪方法。他们的工作重点是行人检测和跟踪。

从立体图像对重建三维点。利用逆传感器模型,基于相关的三维点估计网格地图中每个单元的占用概率

采用分层分割的方法,根据网格单元之间的区域距离,将网格单元划分成若干段

最后,采用交互式多模型(IMM)方法对移动障碍物进行跟踪。

Azim和Aycard使用基于八叉树的3D局部占用栅格地图,该地图将环境划分为占用、自由和未知体素。

在构建局部网格地图后,基于局部网格地图中自由空间和占用空间的不一致性,可以检测出移动障碍物。动态体素被聚集成移动的物体,这些物体被进一步划分成层。

使用从每个层提取的几何特征,将移动对象分类为已知类别(行人、自行车、汽车或公共汽车)。

5、Sensor Fusion Based MOT

基于传感器融合的方法融合来自各种传感器(如激光雷达、雷达和照相机)的数据,以探索它们各自的特点,提高环境感知能力。Darms等人介绍了自动驾驶汽车“Boss”采用的基于传感器融合的运动车辆检测与跟踪方法(卡内基梅隆大学的汽车在2007年DARPA城市挑战赛中获得第一名)。

MOT子系统分为两层。**传感器层从传感器数据中提取特征,这些特征可用于根据点模型或盒模型描述移动障碍物假设。**传感器层还尝试将特征与来自融合层的当前预测假设相关联。无法与现有假设关联的功能用于生成新的建议。对与给定假设相关联的每个特征生成观察,封装更新假设状态估计所需的所有信息。

融合层根据传感器层提供的建议和观测,为每个假设选择最佳跟踪模型,并使用卡尔曼滤波器估计(或更新)假设状态的估计。Cho等人描述卡内基梅隆大学新的实验性自主车辆使用的新MOT子系统。以前的MOT子系统,由Darms等人提出。Mertz等人使用可直接从二维激光雷达、从三维激光雷达投影到二维平面或从多个传感器(激光雷达、雷达和相机)融合获得的扫描线。扫描线被转换成世界坐标并被分割。为每个线段提取直线和角点特征。分段与现有障碍物相关联,并使用卡尔曼滤波器更新目标的运动学。Byun等人合并由多个传感器(如雷达、二维激光雷达和三维激光雷达)生成的移动障碍物轨迹。将二维激光雷达数据投影到二维平面上,利用联合概率数据关联滤波器(JPDAF)跟踪运动障碍物。三维激光雷达数据被投影到一幅图像上,并使用区域增长算法分割成运动障碍物。最后,利用迭代最近点(ICP)匹配或基于图像的数据关联来估计或更新轨迹的姿态。Xu等人。XU15描述了卡内基梅隆大学的新型无人驾驶实验车对用于保持距离的移动障碍物的上下文感知跟踪。给定行为上下文,在道路网络中生成ROI。找到感兴趣区域内的候选目标并将其投影到道路坐标中。通过将来自不同传感器(激光雷达、雷达和摄像机)的所有候选目标关联起来,获得距离保持目标。薛等人融合激光雷达和摄像机数据,提高行人检测的准确性。他们利用行人高度的先验知识来减少错误检测。他们根据针孔摄像机方程,结合摄像机和激光雷达的测量来估计行人的高度

6、Deep Learning Based MOT

基于深度学习的方法利用深度神经网络检测运动障碍物的位置和几何特征,并基于当前摄像机数据跟踪其未来状态。

基于视觉的多目标跟踪

MOT算法的通常工作流程:

  • (1)给定视频的原始帧;
  • (2)运行对象检测器以获得对象的边界框;
  • (3)对于每个检测到的物体,计算出不同的特征,通常是视觉和运动特征;
  • (4)之后,相似度计算步骤计算两个对象属于同一目标的概率
  • (5)最后,关联步骤为每个对象分配数字ID。

因此绝大多数MOT算法无外乎就这四个步骤:①检测 ②特征提取、运动预测 ③相似度计算 ④数据关联。

其中影响最大的部分在于检测,检测结果的好坏对于最后指标的影响是最大的。

多目标追踪的研究重点又在相似度计算数据关联这一块。

所以就有一个很大的问题:你设计出更好的关联算法可能就提升了0.1个点,但别人用一些针对数据集的trick消除了一些漏检可能就能涨好几个点。所以研究更好的数据关联的回报收益很低。因此多目标追踪这一领域虽然工业界很有用,但学术界里因为指标数据集的一些原因,入坑前一定要三思。

评价指标benchmark

关于评价指标:

第一个是传统的标准,现在已经没人用了,就不介绍了。

第二个是06年提出的CLEAR MOT。现在用的最多的就是MOTA。但是这个指标FN、FP的权重占比很大,更多衡量的是检测的质量,而不是跟踪的效果。

第三个是16年提出的ID scores。因为都是基于匹配的指标,所以能更好的衡量数据关联的好坏。

数据集


数据集用的最多的是MOTChallenge,专注于行人追踪的。

第二个KITTI的是针对自动驾驶的数据集,有汽车也有行人,在MOT的论文里用的很少。

还有一些其他比较老的数据集现在都不用了。

15年的都是采集的老的数据集的视频做的修正。

16年的是全新的数据集,相比于15年的行人密度更高、难度更大。特别注意这个DPM检测器,效果非常的差,全是漏检和误检。

17年的视频和16年一模一样,只是提供了三个检测器,相对来说更公平。也是现在论文的主流数据集。

19年的是针对特别拥挤情形的数据集,只有CVPR19比赛时才能提交。

经典算法 SORT和DeepSORT

SORT作为一个粗略的框架,核心就是两个算法:卡尔曼滤波和匈牙利匹配。

卡尔曼滤波分为两个过程:预测和更新。

  • 预测过程:当一个小车经过移动后,且其初始定位和移动过程都是高斯分布时,则最终估计位置分布会更分散,即更不准确;
  • 更新过程:当一个小车经过传感器观测定位,且其初始定位和观测都是高斯分布时,则观测后的位置分布会更集中,即更准确。

匈牙利算法解决的是一个分配问题。

  • SK-learn库的linear_assignment_和scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。不过要注意的是这两个库函数虽然算法一样,但给的输出格式不同。具体算法步骤也很简单,是一个复杂度 [On3] 的算法。

DeepSORT的优化主要就是基于匈牙利算法里的这个代价矩阵。

它在IOU Match之前做了一次额外的级联匹配,利用了外观特征和马氏距离。

外观特征就是通过一个Re-ID的网络提取的

,而提取这个特征的过程和NLP里词向量的嵌入过程(embedding)很像,所以后面有的论文也把这个步骤叫做嵌入(起源应该不是NLP,但我第一次接触embedding是从NLP里)。然后是因为欧氏距离忽略空间域分布的计算结果,所以增加里马氏距离作为运动信息的约束

SORT 流程图


这个SORT的流程图非常重要,可以看到整体可以拆分为两个部分,分别是匹配过程卡尔曼预测加更新过程,都用灰色框标出来了。一定要把整个流程弄明白。后面的多目标追踪的大框架基本都由此而来。

关键步骤: 轨迹卡尔曼滤波预测使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配(IOU匹配) → 卡尔曼滤波更新

对于没有匹配上的轨迹,也不是马上就删掉了,有个T_lost的保存时间,但SORT里把这个时间阈值设置的是1,也就是说对于没匹配上的轨迹相当于直接删了。

关于这点论文里的原话是:

首先,恒定速度模型不能很好地预测真实的动力学,其次,我们主要关注的是帧到帧的跟踪,其中对象的重新识别超出了本文的范围。

【MOT 多目标跟踪 综述 】(更新中)相关推荐

  1. 多目标跟踪(MOT)最新综述,一文快速入门

    多目标跟踪(MOT)最新综述,一文快速入门 0 写在前面 去年暑期实习的时候,误打误撞进了一家自动驾驶公司,做了多目标跟踪的工作,工作也是秋招时靠着相关工作拿到了几个算法岗offer,后来毕业课题也换 ...

  2. CVPR 2021 结果出炉!最全论文下载及分类汇总(更新中)

    作为计算机视觉领域三大顶会之一,CVPR2021目前已公布了所有接收论文ID,一共有1663篇论文被接收,接收率为23.7%,虽然接受率相比去年有所上升,但竞争也是非常激烈. CVPR2021 最全整 ...

  3. 图像处理-机器学习一些科普材料汇集 - 持续更新中_拔剑-浆糊的传说_新浪博客...

    图像处理-机器学习-SLAM基础知识汇集(更新中) --by zxg519 at sina.com 1.适用于机器学习的矩阵求导推导技巧 1.矩阵求导术(上)-- 非常好 https://zhuanl ...

  4. 【0514 更新中】CVPR2019 论文解读汇总

    CVPR2019 论文解读汇总(0514 更新中) 原文 http://bbs.cvmart.net/topics/287/cvpr2019 计算机视觉顶会CVPR 2019 接收结果已经出来啦,相关 ...

  5. 科研相关工具(更新中…)

    科研相关工具(更新中-) 文献管理工具 文献检索工具 笔记管理工具 论文撰写工具 英文润色工具 内容存储管理工具 作为一个科研狗,一些基本的工具还是需要掌握的,这是提高生产力的关键.在这里介绍一些基本 ...

  6. 【CVPR2019_论文汇总】(按方向划分,0401 更新中)

    转载链接:http://bbs.cvmart.net/topics/302/cvpr2019paper 作为计算机视觉领域三大顶会之一,CVPR2019(2019.6.16-6.19在美国洛杉矶举办) ...

  7. CVPR 2019 论文汇总(按方向划分,0409 更新中)[转载]

    转载链接:http://bbs.cvmart.net/topics/302/cvpr2019paper 作为计算机视觉领域三大顶会之一,CVPR2019(2019.6.16-6.19在美国洛杉矶举办) ...

  8. 三维点云分割综述(中)

    本文转载自公众号@点云PCL,三维点云分割综述(中):https://mp.weixin.qq.com/s/nEFAUcZnXe07J7hv41wh3A 这是一篇综述性论文,以下只做概述性介绍,介绍文 ...

  9. linux运维常用命令一句话(持续更新中)

    整理收集一些Linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...

最新文章

  1. 探索 COVID-19 新冠数据来学习 Pandas
  2. CRMEB移动端前端目录结构
  3. 横向排列两个多个div盒子的方法(CSS浮动清除float-clear/inline)/办法
  4. Linux\Unix线程的互斥锁和条件变量
  5. numpy 基础 —— np.linalg
  6. shell-一些有趣的使用
  7. kepware odata 接口访问地址
  8. 92-Kafka详解
  9. 最小二乘法拟合圆心和半径 python实现
  10. AWS大数据三种经典玩法
  11. eCognition9.0安装教程
  12. C++类的多种构造函数
  13. 首屏优化,减少白屏时间
  14. 【GZOI 1032G】腐败分子看直播(树)
  15. Python3.8更新笔记
  16. 信息融合之Add与Concat,你了解它们吗?
  17. centos8安装jdk教程
  18. 交叉网线 千兆网线 做法,开发板 PC直连
  19. RationalDMIS 2020 位置度公差显示XYZ误差
  20. 1058: 求解不等式 ZZULIOJ

热门文章

  1. java 获取当前hhmm_java 判断当前时间符合cron时间表达式_J2SE_Java
  2. 【JAVA拾遗】Java8新特性合辑
  3. linux dns 对外攻击,各种的常见dns攻击手法和dns劫持解决方法
  4. java支付宝网页授权登录界面_支付宝开发平台之第三方授权登录与获取用户信息...
  5. Python爬虫(一)——爬取古诗文网,初识什么是爬虫
  6. 乐忧商城项目总结-2
  7. 服务器文档怎么进入,服务器怎么进入
  8. 国内关于自然语言处理的研究方向细分
  9. java高清截屏_java截屏简单例子
  10. 使用PHP+QueryList 爬取猫眼电影榜单信息