目标追踪学习经验总结

news2024/11/18 0:26:01

标题目标追踪算法学习经验总结
  最近对目标追踪算法进行了学习,以下是我的学习经验,如有不对之处,欢迎大家指正。

1、简介

1.1 定义

  目标跟踪是通过分析视频图片序列,对检测出的各个候选目标区域实施匹配,定位出这些目标在图像中的坐标位置,然后得到一系列相同目标的连续变化的过程。

1.2 分类

单目标跟踪:给定某视频序列初始帧的目标大小与位置的情况下,预测后续帧中该目标的大小与位置。
多目标跟踪(MOT):追踪多个目标的大小和位置,且每一帧中目标的数量和位置都可能变化。
重识别(Re-ID):即给定一个监控行人图像,检索跨设备下的该行人图像。旨在弥补固定的摄像头的视觉局限,并可与行人检测/行人跟踪技术相结合。

1.3 难点

1.遮挡与消失;
2.形态变化;
3.运动模糊;
4.复杂背景;
5.准确性与实时性。

2、多目标追踪

2.1 分类

在线追踪:仅利用当前帧与过去帧的信息,与人眼类似;
离线追踪:可以利用当前帧、过去帧、未来帧的信息进行追踪。
  主流方法是TBD(Tracking-by-Detection),即先进行目标检测,再对生成的检测框进行匹配跟踪。还有一种算法是JDE,即使用类似检测的算法直接实现跟踪。

2.2 基本步骤

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

2.3 主要评价指标

一、MOTA(MOT Accuracy)
  衡量检测物体和保持轨迹方面的性能
在这里插入图片描述
FN:未检测到的GT框数目(漏检)
FP: 不能与GT框相匹配的预测框数量;
IDSW:GT框所分配的id变化次数。
  MOTA考虑了FN、FP、ID Switch 三个问题,对所有帧求和,缺点是FN、FP的比重过大、更考虑检测器的性能。
二、MOTP(MOT Precision)
  衡量定位精度(检测器性能)
在这里插入图片描述
  分母为t帧总共匹配的数目,分子的d表示检测框与实际GT框之间的距离。
三、ID Scores
IDP(识别精确度):整体评价精确度的好坏。
在这里插入图片描述
IDF1(平均数比率):正确的目标检测数与真实数和计算检测数和的平均数比率。
在这里插入图片描述
IDR(识别召回率):当IDF1-score最高时正确预测的目标数与真实目标数之比。
在这里插入图片描述
IDTP:在整个视频中检测目标被正确分配的数量;
IDFN:在整个视频中检测目标被漏分配的数量;
IDFP: 在整个视频中检测目标被错误分配的数量。

3、经典算法

3.1 Sort

  全称(Simple Online and Realtime Tracking)
  由目标检测、卡尔曼滤波、匈牙利匹配算法组成。
  优缺点:原理简单、易于实现;但当目标物被遮挡时,准确率急剧下降。

3.1.1 目标检测

  原论文使用Faster R-CNN,也可以使用YOLO系列等等目标检测模型。

3.1.2 卡尔曼滤波

定义:是一个去噪算法,结合先验经验与当前测量更新的状态估计算法;在SORT中,即将数学模型根据上一帧轨迹进行预测的预测框与当前帧对应的检测器检测的检测框进行融合,找到最优估计值。
作用:检测器所得到的预测框不够准确; 俩帧之间的间距很小,目标物的外形、运动特征具有较高相似度,是可以通过上一帧的信息对当前帧的位置进行预测。
简单流程
在这里插入图片描述

3.1.3 匈牙利匹配

  匈牙利算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。它的基本原则就是在原有匹配(最开始的按优先顺序匹配)基础上重新分配,看是否可以添加一个新的匹配。
  简单原理:假设存在俩个集合S,T。S中有m个元素,T中有n个元素,集合内部的元素不相连,匈牙利算法则是要把俩个集合中的元素进行俩俩匹配。匹配原则为:“损失最小”。
  在SORT中,将检测器在当前帧检测到的m个检测框与n个轨迹预测的预测框进行IOU距离计算,得到n*m的IoU代价矩阵,其中COSTij就表示预测框i与检测框j的IOU损失;去除小于置信度阈值的元素;再使用匈牙利算法进行递归匹配,最终得到三个集合,分别为匹配上的轨迹,未匹配上的轨迹,未匹配上的检测框。

3.1.4 算法流程

在这里插入图片描述

3.2 DeepSort

在SORT基础上进行改进,相比于SORT,多了级联匹配,以及新轨迹确认。

3.2.1 马氏距离

运动模型、又称为协方差距离,可以有效计算俩个未知样本集相似度的方法,度量预测和检测的匹配程度。
在这里插入图片描述
其中,d和y分别代表测量分布和预测分布;S为两个分布之间的协方差矩阵,它是一个实对称正定矩阵。

3.2.2 余弦距离

当物体的运动状态的不确定性较低时,可以使用马氏距离。但是当目标物突然加减速,运动状态快速变化时,就要使用余弦距离来度量预测与检测之间的表观特征间的距离。
DeepSort为每个目标物设计了一个“深度外观特征描述符”,是一个在行人重识别数据集上离线训练的 ReID 网络提取到的 128 维单位特征向量(模长为 1 )。对于每个追踪器 tracker,保留它最后 100 个与检测框关联成功的外观特征描述符集合 R 并计算出它们和检测框的最小余弦距离:
在这里插入图片描述
同上,余弦距离这部分也使用了一个指示器,如果余弦距离小于,则认为匹配上。这个阈值在代码中被设置为0.2(由参数max_dist控制),这个属于超参数,在人脸识别中一般设置为0.6。

3.2.3 级联匹配

目的:当物体被长时间遮挡时,卡尔曼滤波器不能对目标状态准确预测。但是当两个轨迹竞争同一检测框时,其中一个是长期丢失目标的轨迹A,一个是短期丢失目标的轨迹B,马氏距离会带来较大的不确定性。会导致A优先于B被匹配,但这很可能是错误匹配,造成目标物ID的连续变换。因此,Deep Sort引入了级联匹配,来赋予更少丢失目标的轨迹的优先匹配权。
步骤
1、输入跟踪目标轨迹集合T,当前帧检测器检测的检测框集合D,允许连续被遮挡的最大帧数A_max。
2、计算T与D的运动及外观匹配度矩阵C;
在这里插入图片描述
可以通过超参数λ来控制每个指标对合并成本的影响。在论文中,发现当摄像机运动较大时,将λ=0 ,即只使用余弦距离,而不使用马氏距离。马氏距离仅作为门控矩阵过滤马氏距离较远的检测框。
3、计算T与D的阈值矩阵;
4、对成功匹配集合P、未成功匹配预测框集合U进行初始化;
5、开始匹配,对于没丢失过的轨迹优先匹配,丢失最久的轨迹最后匹配。
在这里插入图片描述

3.2.4 算法流程

激活轨迹:已连续俩帧以上追踪到的轨迹;
未激活轨迹:新轨迹,仅一帧检测到的轨迹;
失追轨迹:丢失目标物的轨迹(age<A_max)。
age:丢失目标的帧数;
A_max:允许最大丢失目标帧数。
在这里插入图片描述

3.3 ByteTrack

  相比于DeepSORT,ByteTrack认为检测器所得到的低置信度的检测框仍有作用,很可能是目标物被部分遮挡而导致的低置信度,因此算法对低分的检测框也进行了一次匹配。
  同时,相比于DeepSORT,ByteTrack仅在检测器部分使用了深度学习算法,而跟踪器部分并没有使用。

3.3.1 算法流程

在这里插入图片描述

3.4 BoT-Sort

  在ByteTrack的基础上进行改进,拥有BoT-SORT、BoT-SORT-ReID(多了一个重识别)俩个版本。
  改进:1、卡尔曼滤波的状态变量改进;2、加入相机运动补偿(CMC),即利用稀疏光流(目标外画面中的关键点)来获得俩帧之间画面的移动,进而补偿卡尔曼滤波算法的状态估计过程;3、IoU距离与Re-ID特征的余弦距离的融合。

3.4.1 KF中的状态向量改进

在这里插入图片描述

3.4.2 相机运动补偿

  动态相机运动场景下,目标边界框的位置可能发生剧烈变化,在静态情况下,也有可能由于风等原因造成相机移动。
  使用OpenCV中的全局运动补偿(GMC),将前后俩帧的图像配准转化为相机的运动在二维平面上的投影,即通过转化坐标系,将后一帧的图像进行投影,使其与前一帧的图像配准。

3.4.3 IoU距离与ReID特征的余弦特征融合

在这里插入图片描述在这里插入图片描述

没有使用DeepSort中的超参数λ。

3.4.4 算法流程

在这里插入图片描述

4 总结与对比

4.1 参数对比

BoTSort论文中
在这里插入图片描述

4.2 总结

在这里插入图片描述

  目标检测器的性能很大程度上影响整个跟踪算法的精度,如ByteTrack也是由于检测器精度够高,才能对低分检测框进行利用;
  Re-ID能够一定程度上解决短时间内目标遮挡的现象,但会降低模型运行速度;
  相机运动补偿可以提高一定的跟踪精度。

5、 参考链接

1、实时目标追踪:ByteTrack算法步骤详解和代码逐行解析
2、【论文阅读5】BoT-SORT:Robust Associations Multi-Pedestrian Tracking
3、【论文-目标追踪】BoT-SORT: Robust Associations Multi-Pedestrian Tracking
4、多目标跟踪算法 | DeepSort
5、多目标跟踪入门篇(1):SORT算法详解
6、深入浅出——零基础一文读懂DeepSORT(原理篇)
7、目标追踪—deepsort原理讲解
8、目标跟踪概念、多目标跟踪算法SORT和deep SORT原理
9、知乎-----多目标跟踪(MOT)入门

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

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

相关文章

架构设计师

一、软件架构 .特定领域软件架构(Domain Specific Software Architecture,DSSA) &#xff08;1&#xff09;垂直域。定义了一个特定的系统族,导出在该领域中可作为系统的可行解决方案的一个通用软件架构。 &#xff08;2&#xff09;水平域。定义了在多个系统和多个系统族中功…

pt28django教程

缓存 缓存是一类可以更快的读取数据的介质统称&#xff0c;读取硬盘、较复杂的计算、渲染都会产生较大的耗时。数据变化频率不会很高的场景适合使用缓存。使用缓存场景&#xff1a;博客列表页、电商商品详情页、缓存导航及页脚。 Django中设置缓存 Django中提供多种缓存方式…

解决 MyBatis-Plus 中增加修改时,对应时间的更新问题

问题&#xff1a;在添加修改时&#xff0c;对应的 create_time 与 insert_time 不会随着添加修改而自动的更新时间 第一步&#xff1a;首先在对应的属性上&#xff0c;加上以下注解 如果只添加以下注解&#xff0c;在增加或者修改时&#xff0c;可能对应的 LocalDateTime 会出…

大学生登记国家证书软件著作权提升就业资质

大学生登记国家证书软件著作权提升就业资质 随着信息技术的快速发展&#xff0c;软件行业成为了许多大学生就业的热门选择之一。然而&#xff0c;在竞争激烈的就业市场中&#xff0c;除了掌握专业知识和技能外&#xff0c;如何提升自己的就业资质也显得尤为重要。其中&#xff…

【数据结构】冒泡排序,快速排序的学习知识总结

目录 1、冒泡排序 1.1 算法思想 1.2 代码实现 方式一&#xff1a;顺序表 方式二&#xff1a;链表 2、快速排序 2.1 算法思想 2.2 代码实现 2.3 例题分析 1、冒泡排序 1.1 算法思想 冒泡排序是一种简单的排序算法&#xff0c;它的基本思想是从数组的第一个元素开始…

2009 款沃尔沃 S80L 车换挡顿挫

故障现象 一辆2009款沃尔沃S80L车&#xff0c;搭载2.5T发动机和6速自动变速器&#xff0c;累计行驶里程约为30万km。车主反映&#xff0c;换入D挡或R挡时车辆会顿挫。 故障诊断 接车后试车&#xff0c;起动着机后仪表无故障灯点亮&#xff0c;踩住制动踏板&#xff0c;换入D挡或…

LetCode算法题---第2天

注:大佬解答来自LetCode官方题解 80.删除有序数组的重复项Ⅱ 1.题目 2.个人解答 var removeDuplicates function (nums) {let res [];for (let index 0; index < nums.length; index) {let num 0;if (res.includes(nums[index])) {for (let i 0; i < res.length; …

软考高级之系统架构师之软件需求工程

概述 一个完整的软件生存周期是以需求为出发点。软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。 需求开发&#xff1a; 需求获取需求分析需求定义&#xff08;需求规格说明书&#xff09;需求验证 需求管理: 变更控制版本控制需求跟踪需求状态跟踪 需…

MATLAB 多信号显示方案

效果示例 重要参考资料 MATLAB官方资料 matlab plot3 函数说明 利用for循环和plot函数画多条曲线时如何添加图例&#xff1f; x1:100; krandperm(20)‘; A{‘aa’,‘bb’,‘ccc’,‘ddd’}; y(k*x)’ for i1:20 plot(x,y(:,i)) STRsprintf(‘曲线%d’,i); A(i)cellstr(STR); …

腾讯云 Cloud Studio 实战训练营结营活动获奖公示

点击链接了解详情 “腾讯云 Cloud Studio 实战训练营” 是由腾讯云联合 CSDN 推出的系列开发者技术实践活动&#xff0c;通过技术分享直播、动手实验项目、优秀代码评选、有奖征文活动等&#xff0c;让广大开发者沉浸式体验腾讯云开发者工具 Cloud Studio 的同时&#xff0c;实…

Docker——容器生命周期管理(下篇)

Docker 一、run1、options说明2、-p的三种写法3、实例14、实例25、实例36、实例47、实例58、实例69、实例78、实例89、退出容器 二、start/stop/restart1、语法格式2、stop/restart 命令的 options 三、kill1、重点2、说明3、实例 四、rm1、说明2、实例 五、create实例 六、exe…

【Qt】QTabWidget如何添加控件到Tab页水平位置

在开发中&#xff0c;QTabWidget控件经常出现在项目或软件中&#xff0c;有时为了美观兼顾操作便利&#xff0c;需要把按钮或其他控件添加到QTabWidget控件的Tab页水平位置。 实现思路&#xff1a; 查看帮助文档&#xff0c;发现该类有个方法void setCornerWidget()可以实现所…

Java笔记四(方法与递归)

方法 Java的方法类似于C语言的函数&#xff0c;是一段用来完成特定功能的代码片段&#xff0c;一般情况下&#xff0c;定义一个方法包含以下语法&#xff1a; 方法包含一个方法头和一个方法体&#xff0c;下面是一个方法的所有部分&#xff1a; ◆修饰符:修饰符,这是可选的&…

FPGA设计时序约束二、输入延时与输出延时

目录 一、背景 二、set_input_delay 2.1 set_input_delay含义 2.2 set_input_delay参数说明 2.3 使用样例 三、set_output_delay 3.1 set_output_delay含义 3.2 set_output_delay参数说明 3.3 使用样例 四、样例工程 4.1 工程代码 4.2 时序报告 五、参考资料 一、…

风光储一体化能源中心 | 图扑数字孪生

自“双碳”目标提出以来&#xff0c;我国能源产业不断朝着清洁低碳化、绿色化的方向发展。其中&#xff0c;风能、太阳能等可再生能源在促进全球能源可持续发展、共建清洁美丽世界中被寄予厚望。风能、太阳能具有波动性、间歇性、随机性等特点&#xff0c;主要通过转化为电能再…

如何在几分钟内创建一个对话机器人?

随着互联网的发展&#xff0c;人们迫切希望以快速高效的方式获取信息和解决问题&#xff0c;传统的人工客服渐渐地已经无法满足人们的需求。然而&#xff0c;对话机器人&#xff08;chatbot&#xff09;的出现可以很好地解决这个痛点。 对话机器人是一种人工智能工具&#xff…

[代码随想录]基本数据结构篇

文章目录 1.数组篇1.1 704-二分查找1.2 27-移除数组1.3 977-有序数组的平方1.4* 209--长度最小的子数组(滑动窗口)1.5* 59-螺旋矩阵II 2. 链表篇2.1 203-移除链表元素2.2 707-设计链表2.3 206-反转链表2.4* 24-两两交换链表中的节点(跳针)2.5* 19-删除链表的倒数第N个节点(快慢…

[Realtek sdk-3.4.14b]RTL8197FH-VG 2.4G to WAN吞吐量低于60%的问题分析及解决方案

问题描述 RTL8197FH-VG 2.4G wifi to WAN吞吐量低于65%的标准,正常2T2R的wifi 300Mbps x 65% = 195Mbps,但是实际只能跑到160Mbps,这个时候CPU的idl已经为0,sirq占用率达到98%左右 网络拓扑 一台PC通过2.4G WiFi连接到RTL8197FH-VG,另外一台PC直接通过WAN口连接到RTL8197…

求各区域热门商品Top3 - HiveSQL

背景&#xff1a;这是尚硅谷SparkSQL练习题&#xff0c;本文用HiveSQL进行了实现。 数据集&#xff1a;用户点击表&#xff0c;商品表&#xff0c;城市表 题目: ① 求每个地区点击量前三的商品&#xff1b; ② 在①的基础上&#xff0c;求出每个地区点击量前三的商品后&a…

SkyWalking搭配springboot应用(三)

title: “SkyWalking搭配springboot应用(三)” createTime: 2021-07-13T16:27:5708:00 updateTime: 2021-07-13T16:27:5708:00 slug: “SkyWalking搭配springboot应用(三)” draft: false author: “ggball” tags: [“skywalking”] categories: [“java”] description: “sk…