多目标跟踪(MOT)入门综述
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
前言 本文记录了多目标跟踪方向的调研,因此把调研的结果以图片加文字的形式展现出来,希望能帮助到入门这一领域的同学。
本文介绍了与之相关的方向、核心步骤、评价指标、主流算法SORT和DeepSORT、最新进展和未来展望。
作者:Harlek@知乎(已授权转载)
编辑:CV技术指南
原文:https://zhuanlan.zhihu.com/p/97449724
相关方向
这些是我所了解的多目标跟踪(MOT)的一些相关方向。其中单目标跟踪(VOT/SOT)、目标检测(detection)、行人重识别(Re-ID)都是非常热门的方向。而偏视频的相关方向就比较冷门。而且今年五月DukeMTMC因为隐私问题不再提供MTMCT的数据了,MTMCT的研究也是举步维艰。
核心步骤
MOT算法的通常工作流程:
(1)给定视频的原始帧;
(2)运行对象检测器以获得对象的边界框;
(3)对于每个检测到的物体,计算出不同的特征,通常是视觉和运动特征;
(4)之后,相似度计算步骤计算两个对象属于同一目标的概率;
(5)最后,关联步骤为每个对象分配数字ID。
因此绝大多数MOT算法无外乎就这四个步骤:
①检测
②特征提取、运动预测
③相似度计算
④数据关联。
其中影响最大的部分在于检测,检测结果的好坏对于最后指标的影响是最大的。
但是,多目标追踪的研究重点又在相似度计算和数据关联这一块。所以就有一个很大的问题:你设计出更好的关联算法可能就提升了0.1个点,但别人用一些针对数据集的trick消除了一些漏检可能就能涨好几个点。所以研究更好的数据关联的回报收益很低。因此多目标追踪这一领域虽然工业界很有用,但学术界里因为指标数据集的一些原因,入坑前一定要三思。
评价指标
关于评价指标:
第一个是传统的标准,现在已经没人用了,就不介绍了。
第二个是06年提出的CLEAR MOT。现在用的最多的就是MOTA。但是这个指标FN、FP的权重占比很大,更多衡量的是检测的质量,而不是跟踪的效果。
第三个是16年提出的ID scores。因为都是基于匹配的指标,所以能更好的衡量数据关联的好坏。
数据集
数据集用的最多的是MOTChallenge,专注于行人追踪的。
第二个KITTI的是针对自动驾驶的数据集,有汽车也有行人,在MOT的论文里用的很少。
还有一些其他比较老的数据集现在都不用了。
15年的都是采集的老的数据集的视频做的修正。
16年的是全新的数据集,相比于15年的行人密度更高、难度更大。特别注意这个DPM检测器,效果非常的差,全是漏检和误检。
17年的视频和16年一模一样,只是提供了三个检测器,相对来说更公平。也是现在论文的主流数据集。
19年的是针对特别拥挤情形的数据集,只有CVPR19比赛时才能提交。
这个是MOT16公开检测器上的结果。可以看到从17年开始,MOTA就涨的很慢了。关注一下这个帧率有20Hz的算法MOTDT也是我后面要讲的一个。
这个是MOT16私有检测器上的结果。可以看到检测器性能的好坏对于结果的影响非常重要。SOTA算法换了私有检测器后性能直接涨了快20个点。
这个是MOT17公开检测器上这几年比较突出的算法。注意因为这个数据集用了三个检测器,所以FP、FN这些指标也都几乎是16数据集的三倍。
SORT和DeepSORT
关键算法
从这两个工业界关注度最高的算法说起。
SORT作为一个粗略的框架,核心就是两个算法:卡尔曼滤波和匈牙利匹配。
卡尔曼滤波分为两个过程:预测和更新。预测过程:当一个小车经过移动后,且其初始定位和移动过程都是高斯分布时,则最终估计位置分布会更分散,即更不准确;更新过程:当一个小车经过传感器观测定位,且其初始定位和观测都是高斯分布时,则观测后的位置分布会更集中,即更准确。
匈牙利算法解决的是一个分配问题。SK-learn库的linear_assignment_和scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。不过要注意的是这两个库函数虽然算法一样,但给的输出格式不同。具体算法步骤也很简单,是一个复杂度 的算法。
DeepSORT的优化主要就是基于匈牙利算法里的这个代价矩阵。它在IOU Match之前做了一次额外的级联匹配,利用了外观特征和马氏距离。
外观特征就是通过一个Re-ID的网络提取的,而提取这个特征的过程和NLP里词向量的嵌入过程(embedding)很像,所以后面有的论文也把这个步骤叫做嵌入(起源应该不是NLP,但我第一次接触embedding是从NLP里)。然后是因为欧氏距离忽略空间域分布的计算结果,所以增加里马氏距离作为运动信息的约束。
SORT
这个SORT的流程图非常重要,可以看到整体可以拆分为两个部分,分别是匹配过程和卡尔曼预测加更新过程,都用灰色框标出来了。一定要把整个流程弄明白。后面的多目标追踪的大框架基本都由此而来。
关键步骤:轨迹卡尔曼滤波预测→ 使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配(IOU匹配) → 卡尔曼滤波更新
对于没有匹配上的轨迹,也不是马上就删掉了,有个T_lost的保存时间,但SORT里把这个时间阈值设置的是1,也就是说对于没匹配上的轨迹相当于直接删了。
关于这点论文里的原话是:
首先,恒定速度模型不能很好地预测真实的动力学,其次,我们主要关注的是帧到帧的跟踪,其中对象的重新识别超出了本文的范围。
这篇文章的机翻在《SORT》论文翻译
http://www.harlek.cn/2019/12/06/sort-lun-wen-fan-yi/
DeepSORT
这是DeepSORT算法的流程图,和SORT基本一样,就多了级联匹配(Matching Cascade)和新轨迹的确认(confirmed)。
这篇文章的机翻在《DeepSORT》论文翻译
http://www.harlek.cn/2019/12/06/deepsort-lun-wen-fan-yi/
关键步骤:轨迹卡尔曼滤波预测→ 使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配(级联匹配和IOU匹配) → 卡尔曼滤波更新
级联匹配是核心,就是红色部分,DeepSORT的绝大多数创新点都在这里面,具体过程看下一张图。
关于为什么新轨迹要连续三帧命中才确认?个人认为有这样严格的条件和测试集有关系。因为测试集给的检测输入非常的差,误检有很多,因此轨迹的产生必须要更严格的条件。
级联匹配流程图里上半部分就是特征提取和相似度估计,也就是算这个分配问题的代价函数。主要由两部分组成:代表运动模型的马氏距离和代表外观模型的Re-ID特征。
级联匹配流程图里下半部分数据关联作为流程的主体。为什么叫级联匹配,主要是它的匹配过程是一个循环。从missing age=0的轨迹(即每一帧都匹配上,没有丢失过的)到missing age=30的轨迹(即丢失轨迹的最大时间30帧)挨个的和检测结果进行匹配。也就是说,对于没有丢失过的轨迹赋予优先匹配的权利,而丢失的最久的轨迹最后匹配。
论文关于参数λ(运动模型的代价占比)的取值是这么说的:
在我们的实验中,我们发现当相机运动明显时,将λ= 0设置是一个合理的选择。
因为相机抖动明显,卡尔曼预测所基于的匀速运动模型并不work,所以马氏距离其实并没有什么作用。但注意也不是完全没用了,主要是通过阈值矩阵(Gate Matrix)对代价矩阵(Cost Matrix)做了一次阈值限制。
关于DeepSORT算法的详细代码解读我比较推荐:目标跟踪初探(DeepSORT)
https://zhuanlan.zhihu.com/p/90835266
但关于卡尔曼滤波的公式讲的不是很详细,具体推导可以看看 Kalman Filter 卡尔曼滤波
http://www.harlek.cn/2019/12/02/qia-er-man-lu-bo/
改进策略
看到这个DeepSORT的流程图不知道大家可以想到什么优化的地方?其实有几个点是很容易想到的。
第一点,把Re-ID网络和检测网络融合,做一个精度和速度的trade off;
第二点,对于轨迹段来说,时间越长的轨迹是不是更应该得到更多的信任,不仅仅只是级联匹配的优先级,由此可以引入轨迹评分的机制;
第三点,从直觉上来说,检测和追踪是两个相辅相成的问题,良好的追踪可以弥补检测的漏检,良好的检测可以防止追踪的轨道飘逸,用预测来弥补漏检这个问题在DeepSORT里也并没有考虑;
第四点,DeepSORT里给马氏距离也就是运动模型设置的系数为0,也就是说在相机运动的情况下线性速度模型并不work,所以是不是可以找到更好的运动模型。
最新进展
这是最近比较新的一些方法。
工业界青睐的算法在学术界其实并不重视,一方面是因为开源的原因,另一方面可以看到顶会的算法都不是注重速度的,通常用了很复杂的模块和trick来提升精度。
而且这些trick不是一般意义的trick了,是针对这个数据集的或者说针对糟糕检测器的一些trick, 对于实际应用几乎没有帮助。
第一篇论文是基于DeepSORT改进的,它的创新点在于引入了轨迹评分机制,时间越久的轨迹可信度就越高,基于这个评分就可以把轨迹产生的预测框和检测框放一起做一个NMS,相当于是用预测弥补了漏检。
第二篇论文是今年9月份发在arxiv上的一篇论文,它的工作是把检测网络和嵌入网络结合起来,追求的是速度和精度的trade off。
MOTDT
这是刚才列举的第一篇论文(MOTDT)的流程图,大概和DeepSORT差不多。这个图画的比较简单,其实在NMS之前有个基于SqueezeNet的区域选择网络R-FCN和轨迹评分的机制。这两个东西的目的就是为了产生一个统一检测框和预测框的标准置信度,作为NMS的输入。
这篇文章的翻译在《Real-Time Multiple People Tracking With Deeply Learned Candidate Selection And Person Re-ID》论文翻译
http://www.harlek.cn/2019/12/02/real-time-multiple-people-tracking-with-deeply-learned-candidate-selection-and-person-re-id-lun-wen-fan-yi/
JDE
这是刚才第二篇论文(JDE)里的结构图。这个方法是基于YOLOv3和MOTDT做的。它网络前面都和YOLOv3一样的,主要就是在特征图里多提取了一个嵌入(embedding)向量,采取的是类似于交叉熵的triplet loss。因为是多任务学习,这篇论文还用了一篇18年的论文提出来的自动学习损失权重方案:通过学习一组辅助参数自动地对非均匀损失进行加权。最后的结果是精度上差不太多,FPS高了很多。
这篇文章的翻译在 《Towards Real-Time Multi-Object Tracking》论文翻译
http://www.harlek.cn/2019/11/27/towards-real-time-multi-object-tracking-lun-wen-fan-yi/
未来展望
最后用多目标追踪未来的一些思考作为结尾,这句话是最近的一篇关于多目标追踪的综述里的。
它在最后提出对未来的方向里有这样一句话,用深度学习来指导关联问题。其实现在基于检测的多目标追踪都是检测模块用深度学习,Re-ID模块用深度学习,而最核心的数据关联模块要用深度学习来解决是很困难的。现在有一些尝试是用RNN,但速度慢、效果不好,需要走的路都还很长。
我个人觉得短期内要解决实际问题,还是从Re-ID的方面下手思考怎样提取更有效的特征会更靠谱,用深度学习的方法来处理数据关联不是短时间能解决的。
好消息!
小白学视觉知识星球
开始面向外开放啦
多目标跟踪(MOT)入门综述相关推荐
- 多目标跟踪(MOT)最新综述,一文快速入门
多目标跟踪(MOT)最新综述,一文快速入门 0 写在前面 去年暑期实习的时候,误打误撞进了一家自动驾驶公司,做了多目标跟踪的工作,工作也是秋招时靠着相关工作拿到了几个算法岗offer,后来毕业课题也换 ...
- 多目标跟踪MOT入门
摘自:一线算法工程师整理!超实用的3大多目标跟踪算法 一线算法工程师整理!超实用的3大多目标跟踪算法https://mp.weixin.qq.com/s/LkfFY5PXzek-KRblo2gKGA ...
- 多目标跟踪MOT(Multiple Object Tracking)最全综述
1.MOT概念 多目标跟踪,一般简称为MOT(Multiple Object Tracking),也有一些文献称作MTT(Multiple Target Tracking).在事先不知道目标数量的情况 ...
- 多目标跟踪(MOT,Multiple Object Tracking)评价指标
简述 在事先不知道目标数量的情况下,对视频中的行人.轿车.卡车.自行车等多个目标进行检测并赋予ID进行轨迹跟踪.不同的目标拥有不同的ID,以便实现后续的轨迹预测.精准查找等工作. 多目标跟踪中即要面对 ...
- 多目标跟踪MOT踩坑记录
文章目录 tracking MOT log 0. 数据集 1.Github 2.资源综述 3.工具包Code MOT 工具包 MOT 评估 Python版 4.算法Code deep sort `py ...
- 因果模型一:因果模型入门综述
因果模型一:因果模型入门综述 一. 为什么要研究因果模型? 二. 因果研究的发展历程 1. C.G. Hempel 1984--因果研究的分水岭 2. 统计相关性模型 3. 虚假原因 三.INUS条件 ...
- 第一章:赛灵思(Xilinx)的Zynq的多处理器片上系统(MPSoC)入门综述
第一章:赛灵思(Xilinx)的Zynq的多处理器片上系统(MPSoC)入门综述 引言 Zynq的多处理器片上系统(MPSoC)简介 Xilinx 片上系统(SoCs)发展简介 设计方法 引言 本专栏 ...
- 多目标跟踪(MOT)论文随笔-SIMPLE ONLINE AND REALTIME TRACKING (SORT)
转载请标明链接:http://www.cnblogs.com/yanwei-li/p/8643336.html 网上已有很多关于MOT的文章,此系列仅为个人阅读随笔,便于初学者的共同成长.若希望详细 ...
- (HOTA)多目标跟踪MOT指标计算方法
基本内容: 先附上Track_eval下载地址:.GitHub - JonathonLuiten/TrackEval: HOTA (and other) evaluation metrics for ...
最新文章
- 数值分析第三次作业-常微分方程的数值解法
- 人工智能浪潮正席卷全球
- 周长最短面积最大_圆内接三角形中,正三角形周长最大值的证明
- python 讲课_Python语言
- android 活动销毁不了,即使活动已经销毁,AsyncTask也不会停止
- 前台为html后台是asp在vs2012中建立什么,Asp.net中后台*.cs与前台JS脚本之间相互调用的几点心得...
- oracle账号密码修改后特别容易锁定_Oracle密码过期如何取消密码180天限制及过期,账号锁住的问题...
- Redis集群的搭建与主从复制,redis-cluster
- mysql 分页 数据重复数据_MySQL 分页数据错乱重复
- 网络 如何解决输入路由器管理地址192.168.1.1进不去
- uniapp本地存储
- 三网融合融什么融,团购网站团什么团【涂雅速涂】
- Rational License Key Error的永久解决办法
- Android5.0框架层短信接收过程分析
- c语言心得100,c语言课程设计心得体会
- 如何在WORD中输入方框,并且在里面打勾?
- 你考软考的心路历程是什么?
- 怎样提取音频制作手机铃声
- html拆分单元格多行,拆分一个单元格中多行字符到不同单元格
- 中值滤波和均值滤波(转)
热门文章
- 勿以恶小而为之,勿以善小而不为。
- 超分辨率重建之SRCNN整理总结(三)
- [计算机毕业设计]MATLAB的人脸识别
- JavaScript拖拽事件
- 珠宝金行管理软件 V3.61
- 究竟什么是Spring Boot,和普通Spring项目有什么区别
- 计算机无线网络服务禁用了怎么办,无线网络禁用启用无效怎么办_无线禁用后启用不了的解决方法...
- 十年Android编程开发生涯,深入解析Android-AutoLayout,挥泪整理面经
- 为校招搜集整理的10万字java后端面试题ing...,基础不太好不知道从哪儿开头的冲它就完事了
- 【网盘搜索小程序完整源码】微信QQ双端通用