多目标跟踪(MOT)入门介绍

news2024/12/25 0:14:39

 1. 相关方向

这些是我所了解的多目标跟踪(MOT)的一些相关方向。其中单目标跟踪(VOT/SOT)、目标检测(detection)、行人重识别(Re-ID)都是非常热门的方向。而偏视频的相关方向就比较冷门。而且今年五月DukeMTMC因为隐私问题不再提供MTMCT的数据了,MTMCT的研究也是举步维艰。

2. 核心步骤

MOT算法的通常工作流程:

(1)给定视频的原始帧;

(2)运行对象检测器以获得对象的边界框;

(3)对于每个检测到的物体,计算出不同的特征,通常是视觉和运动特征;

(4)之后,相似度计算步骤计算两个对象属于同一目标的概率;

(5)最后,关联步骤为每个对象分配数字ID。

因此绝大多数MOT算法无外乎就这四个步骤:

①检测 

②特征提取、运动预测 

③相似度计算 

④数据关联。

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

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

3. 评价指标

关于评价指标:

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

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

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

3.1. one-pass evaluation (OPE)

主要有精度和成功率两个指标

3.1.1. 精度

中心位置的平均误差,即目标的估计中心与目标的真值中心作差,在整个跟踪过程中对其求平均值。

3.1.2. 成功率

即交并比

其中r_t是跟踪框,r_a是真值框。

3.2. MOTA

其中FN指假阴性(False Negative),FP指假阳性(False Positive),IDSW指ID错换 (ID switches)。

4. 数据集

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

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

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

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

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

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

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

这个是MOT16公开检测器上的结果。可以看到从17年开始,MOTA就涨的很慢了。关注一下这个帧率有20Hz的算法MOTDT也是我后面要讲的一个。

这个是MOT16私有检测器上的结果。可以看到检测器性能的好坏对于结果的影响非常重要。SOTA算法换了私有检测器后性能直接涨了快20个点。

这个是MOT17公开检测器上这几年比较突出的算法。注意因为这个数据集用了三个检测器,所以FP、FN这些指标也都几乎是16数据集的三倍。

5. SORT和DeepSORT

关键算法

从这两个工业界关注度最高的算法说起。

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

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

匈牙利算法解决的是一个分配问题。SK-learn库的linear_assignment_和scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。不过要注意的是这两个库函数虽然算法一样,但给的输出格式不同。具体算法步骤也很简单,是一个复杂度O(n^3)的算法。

DeepSORT的优化主要就是基于匈牙利算法里的这个代价矩阵。它在IOU Match之前做了一次额外的级联匹配,利用了外观特征马氏距离

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

5.1. SORT

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

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

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

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

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

这篇文章的机翻在《SORT》论文翻译

http://www.harlek.cn/2019/12/06/sort-lun-wen-fan-yi/

5.2. 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/

5.3. 改进策略

看到这个DeepSORT的流程图不知道大家可以想到什么优化的地方?其实有几个点是很容易想到的。

第一点,把Re-ID网络和检测网络融合,做一个精度和速度的trade off;

第二点,对于轨迹段来说,时间越长的轨迹是不是更应该得到更多的信任,不仅仅只是级联匹配的优先级,由此可以引入轨迹评分的机制

第三点,从直觉上来说,检测和追踪是两个相辅相成的问题,良好的追踪可以弥补检测的漏检,良好的检测可以防止追踪的轨道飘逸,用预测来弥补漏检这个问题在DeepSORT里也并没有考虑;

第四点,DeepSORT里给马氏距离也就是运动模型设置的系数为0,也就是说在相机运动的情况下线性速度模型并不work,所以是不是可以找到更好的运动模型

6. 最新进展

这是最近比较新的一些方法。

工业界青睐的算法在学术界其实并不重视,一方面是因为开源的原因,另一方面可以看到顶会的算法都不是注重速度的,通常用了很复杂的模块和trick来提升精度。

而且这些trick不是一般意义的trick了,是针对这个数据集的或者说针对糟糕检测器的一些trick, 对于实际应用几乎没有帮助。

第一篇论文是基于DeepSORT改进的,它的创新点在于引入了轨迹评分机制,时间越久的轨迹可信度就越高,基于这个评分就可以把轨迹产生的预测框和检测框放一起做一个NMS,相当于是用预测弥补了漏检

第二篇论文是今年9月份发在arxiv上的一篇论文,它的工作是把检测网络和嵌入网络结合起来,追求的是速度和精度的trade off。

6.1. MOTDT

这是MOTDT的流程图,大概和DeepSORT差不多。这个图画的比较简单,其实在NMS之前有个基于SqueezeNet的区域选择网络R-FCN和轨迹评分的机制。这两个东西的目的就是为了产生一个统一检测框和预测框的标准置信度,作为NMS的输入。

6.2. JDE

这是JDE的结构图。这个方法是基于YOLOv3和MOTDT做的。它网络前面都和YOLOv3一样的,主要就是在特征图里多提取了一个嵌入(embedding)向量,采取的是类似于交叉熵的triplet loss。因为是多任务学习,这篇论文还用了一篇18年的论文提出来的自动学习损失权重方案:通过学习一组辅助参数自动地对非均匀损失进行加权。最后的结果是精度上差不太多,FPS高了很多。

7. 未来展望

最后用多目标追踪未来的一些思考作为结尾,这句话是最近的一篇关于多目标追踪的综述里的。

它在最后提出对未来的方向里有这样一句话,用深度学习来指导关联问题。其实现在基于检测的多目标追踪都是检测模块用深度学习,Re-ID模块用深度学习,而最核心的数据关联模块要用深度学习来解决是很困难的。现在有一些尝试是用RNN,但速度慢、效果不好,需要走的路都还很长。

我个人觉得短期内要解决实际问题,还是从Re-ID的方面下手思考怎样提取更有效的特征会更靠谱,用深度学习的方法来处理数据关联不是短时间能解决的。

参考文献

最好的多目标跟踪(MOT)入门介绍!

Multi-object tracking in traffic environments: A systematic literature review

Online Object Tracking: A Benchmark

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 随机数种子 java设置随机数种子教程 java随机数种子怎么设置

我们常用的随机数生成就是Math.random();java.util.Random类有两种方式构建方式:带种子和不带种子import java.util.Random;不带种子:不带种子将会返回随机的数字,每次运行结果不一样public class RandomTest {public static void…

分享149个ASP源码,总有一款适合您

ASP源码 分享149个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 149个ASP源码下载链接:https://pan.baidu.com/s/173AhCXJgM5AvPqBw-la60w?pwdqk9j 提取码&#x…

如何在UI自动化测试中加入REST API的操作

1、问题 当我们描述一个“好的自动化测试用例”时,经常出现标准是: 精确 自动化测试用例应该测试一件事,只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败。 独立 自动化测试用例不应该受测试套件中任何其他测…

SVN服务端使用教程

前言 正式进入公司项目后,我们需要和同事进行协同开发,此时代码管理工具是必不可少的,目前常用的两款工具是:SVN 和 Git。本人因为要搭建一个自动化测试的框架,对SVN和Git都不熟悉,在调研后选择了操作更为…

组合选择器

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>组合选择器</title> <style type"text/css"> /* 多个选择器组合在一起中间用逗号","隔开就形成了组合选择器&…

销售过程管理系统对企业的好处是什么

当线索转化成销售机会后&#xff0c;要不断地跟进才有可能成交。但是这个过程时间跨度长&#xff0c;涉及人员、要素过多&#xff0c;销售过程中经常会遇到很多的问题。不少企业使用CRM销售管理系统把控销售过程。下面来说说&#xff0c;为什么企业需要销售过程管理系统? 销售…

【Mysql】X档案:Mysql 服务和Navicat客户端的安装与使用(超详细步骤)

Mysql 服务和Navicat客户端的安装与使用&#xff08;超详细步骤&#xff09;一、Mysql 安装配置1、下载安装2、配置环境变量3、设置服务自动启动二、Mysql Cli 使用1、连接 Mysql2、创建数据库3、创建数据表4、数据表操作5、删除数据库对象三、Navicat 安装1、下载2、安装3、FR…

Android 实现隐私政策提示弹窗(完整版)

android studio版本&#xff1a;2021.2.1例程名称&#xff1a;pravicydialog功能&#xff1a;1、启动app后弹窗隐私协议2、屏蔽返回键3、再次启动不再显示隐私协议。本例程的绝大部分代码来自下面链接&#xff0c;因为本人改了一些&#xff0c;增加了一些功能&#xff0c;所以不…

【计算机网络】S1P1 概念、功能、组成、分类

计算机网络概念功能组成分类概念 计算机网络&#xff0c;是互连的、自治的计算机集合。 计算机网络&#xff0c;是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 分散的&#xf…

UOS桌面系统使用启动盘找回数据盘文件

使用启动盘找回数据盘文件1、格式化优盘2、准备一个UOS系统启动优盘3、进入UOS PE系统4、查看硬盘信息5、查看挂载信息6、查看路径信息7、找到Desktop目录8、安装器文件9、挂在数据盘10、查看是否挂载成功11、找到重要文件12、打包重要文件13、可以看到打好的tar.gz包大小为64M…

【学Vue就跟玩一样】如何正确快速使用Vue中的插槽和配置代理

一&#xff0c;插槽1.什么是插槽让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件——>子组件。插槽分为三种&#xff0c;分别是默认插槽、具名插槽、作用域插槽&#xff0c;下面分别列出了如何使用这三种插槽1.1默认插槽啥是默认插槽呢&am…

Java:基于注解的Spring使用【AOP容器】

目录 第十五章 AOP前奏15.1 代理模式15.2 为什么需要代理【程序中】15.3 手动实现动态代理环境搭建15.4 手动实现动态代理关键步骤第十六章 Spring中AOP【重点】16.1 AspectJ框架【AOP框架】16.2 使用AspectJ步骤&#xff08;入门&#xff09;16.3 Spring中AOP概述16.4 Spring中…

帮助粉丝用青泥学术大数据推荐毕业论文选题(围绕 教育信息化2.0、疫情期间线上学习质量问题、Steam教育、智慧教育等突破点来抉择)

需求 本科论文水平&#xff0c;青泥学术可以起到一定帮助。 说明 我也只是读了一个学期的硕士而已&#xff0c;谈不上多高的指点&#xff0c;可能比一些人更努力一些。 所以我的学术造诣不算太高&#xff0c;不敢盲目建议。 但是君子性非异也&#xff0c;善假于物也。 我借…

软件版本的命名规则

最近在完善实验室项目的软件设计&#xff0c;涉及功能的完善和 Bug 的修复&#xff0c;为了方便管理&#xff0c;更新软件版本号是不错的方法&#xff0c;故总结了下软件版本的命名规范。 软件版本号一般由四部分组成&#xff0c;格式如&#xff1a;主版本号.子版本号.修订版本…

3、数据的录入与保存

目录 一、定义变量 1.定义变量名 2.定义变量类型 3.宽度定义 4.小数位数定义 5.变量标签定义 6.变量值标签的定义 7.缺失值的定义 8.列的定义 9.对齐的定义 10.测量的定义 11.变量角色的定义 二、数据录入 三、数据保存 四、案例录入 本文内容之前简单介绍过&am…

Codeforces Round #847 (Div. 3) A-F 冲蓝名场

想上蓝名&#xff0c;赛前1414分&#xff0c;目标蓝名。 updateupdateupdate赛后排名575757。 A. Polycarp and the Day of Pi 题意 给你一个数字判断该数字是否和圆周率的前30位匹配。 思路 发现样例有一个长度为30为的数&#xff0c;ctrlcvctrl c vctrlcv一下&#xff0c;暴…

Elasticsearc最新版8.6.1集群安装教程

一、为何要搭建 Elasticsearch 集群凡事都要讲究个为什么。在搭建集群之前&#xff0c;我们首先先问一句&#xff0c;为什么我们需要搭建集群&#xff1f;它有什么优势呢&#xff1f;&#xff08;1&#xff09;高可用性 Elasticsearch 作为一个搜索引擎&#xff0c;我们对它的基…

微信小程序——用户安全等级

有小伙伴私信说有没有微信小程序相关系列文章&#xff0c;后续会持续输出有关微信小程序相关文档接口 前言 前面几篇我们讲到了微信的文本内容、音视频、图片等内容的安全识别问题&#xff0c;这样会涉及到一个用户的安全等级的判定问题&#xff0c;怎么来识别预判用户的等级…

管理事实(RH294)

事实简介Ansible事实是指Ansible在受管主机上自动检测到的变量事实中含有与主机相关的信息&#xff0c;可以像play中的常规变量&#xff0c;条件&#xff0c;循环等其他语句那样使用受管主机收集的事实有以下部分主机名称内核版本网络接口IP地址操作系统版本环境变量CPU数量可用…

Nacos安装配置教程

Nacos安装配置教程_其他_大数据知识库 Nacos注册中心 Nacos是阿里巴巴的产品&#xff0c;现在是SpringCloud中的一个组件。相比Eureka功能更加丰富&#xff0c;在国内受欢迎程度较高。 官方入门手册 Nacos 快速开始这个快速开始手册是帮忙您快速在您的电脑上&#xff0c;下载…