目标跟踪那些事
目标跟踪那些事
跟踪与检测的区别
目标跟踪和目标检测是计算机视觉中的两个重要概念,但它们的目的和方法是不同的。
-
目标检测(object Detection):是指在图像或视频帧中识别并定位一个或多个感兴趣的目标对象的过程 。
-
目标跟踪(object Tracking):是指在视频帧序列中连续地监测和定位一个或多个目标对象的位置的过程。
区别:跟踪与检测的区别
- 输入数据不同:目标检测通常处理单一的图像,而目标跟踪处理的是视频序列。
Input:视频序列
Output: The trajectory and a unique ID for each target.
- 目标和任务不同:目标检测关注于在单个图像或视频帧中确定和定位对象,而目标跟踪关注于在视频序列中跟踪对象的动态变化。

目标跟踪应用场景
常见的应用场景包括了:
- 自动驾驶
- 车流人流的统计
- 越界识别与监控

-
实时决策:在许多应用中,如无人驾驶车辆或安全监控,实时的目标跟踪能够提供必要的信息来做出快速决策。
-
自动化流程:目标跟踪可以自动化许多任务,如视频分析或医学诊断,从而减少人工干预。
-
提高准确性:与人工跟踪相比,自动自标跟踪通常更加准确和一致。
-
增强体验:在娱乐和游戏行业,目标跟踪提供了更沉浸式的体验,使用户感觉更真实。
目标跟踪的困难
困难一:Inter-Object Occlusion 物体之间的遮挡。

困难二:Obstacle Occlusion :障碍物的阻碍(导致跟踪后前后的物体被判断为两个对象)也就是导致id switch现象的发生。

目标跟踪的步骤
当前主流的目标跟踪:Tracking-by-detection的主要步骤
- 通过检测器做目标的定位
- 进行特征的提取
- 做数据的关联(匈牙利算法)
- 轨迹的管理与状态的更新(卡尔曼滤波)

主流的目标跟踪算法
DeepSORT、ByteTrack和BoT-SORT都是当前较为主流的多目标跟踪算法,各有特点:
- DeepSORT:基于检测的跟踪框架,使用
深度ReID网络提取目标特征,并结合卡尔曼滤波进行运动预测,性能稳定。

-
ByteTrack:
端到端跟踪框架,直接在目标检测的基础上进行跟踪,可以没有独立的特征提取模块。速度快但不如DeepSORT鲁棒。 -
BoT-SORT:在ByteTrack基础上使用相机运动补偿和改进的具有更准确状态向量的卡尔曼滤波器。精度较高但速度较慢。
总体来说:
- 如果追求速度,可以首选ByteTrack。
- 如果追求精度,BoT-SORT会更好。
- 如果资源有限但要稳定跟踪,DeepSORT是不错的选择。
多目标跟踪任务
Multi-object tracking (MoT) is to locate each target at each frame, and draw their trajectories
包括两种常见的方式:
- Model-free-tracking (MFT):需要手动的初始化给出第一帧中目标对象的位置,在此基础上进行目标的跟踪。

- Tracking-by-detection (TBD) :不需要初始化只需要一个检测器即可实现。

- 首先会做视频帧的分割
Frames Separation - 送入神经网络的目标检测器(Object Detector Neural Network)进行检测
- MOT问题可以看作是数据关联问题,其目的是将视频序列中跨帧的检测关联起来。
多目标跟踪数据集
多目标跟踪(Multiple Object Tracking,MOT)数据集主要用于评估和比较不同的多目标跟踪算法。这些数据集包含带有标注的视频序列,其中的每一帧都标注了目标对象的位置(通常是用边界框表示)和ID。
- MOT challenge:MOT Challenge是一个常见的多目标跟踪数据集和基准测试,包含多个不同的子集(例如,2D MOT 2015、MOT16、MOT17、MOT20等),涵盖了各种不同的环境和场景。每个子集都有自己的训练集和测试集,并且提供了详细的标注信息,包括目标的位置、ID以及一些额外的属性(如是否被遮挡、是否静止等)。MOTChallenge的官方网站还提供了一个在线的评估服务器,用于比较和排名不同的跟踪算法。

- UA-DETRAC: UA-DETRAC数据集主要用于汽车跟踪任务。它包含了在复杂的交通场景中捕获的超过140,000帧的高质量视频。这些视频涵盖了各种不同的环境和天气条件,以及不同的交通流量。UA-DETRAC数据集还提供了详细的标注信息,包括汽车的位置、速度、尺度等。

- BDD100K
- KITTI
多目标跟踪评估指标

对于这些多目标跟踪的评估指标总体上可以分为以下的四类:
- Accuracy(准确度)
- id switches(IDsw)
- Multiple Object Tracking Accuracy (MOTA)
- Precision(精度)
- Multiple Object Tracking Precision (MOTP)
- Tracking Distance Error(TDE)
- Completeness(完整度)
- Mostly Tracked (MT),
- Partly Tracked (PT),
- Mostly Lost (ML)
- Fragmentation(FM)
- Robustness(鲁棒性)
- Recover from Short-term occlusion (RS)
- Recover from Long-term occlusion (RL)
MoTA
多目标跟踪的准确度
M O T A = 1 − ∑ t ( F N t + F P t + I D S W t ) ∑ t G T t \mathrm{MOTA}=1-\frac{\sum_{t}\left(\mathrm{FN}_{t}+\mathrm{FP}_{t}+\mathrm{IDSW}_{t}\right)}{\sum_{t} \mathrm{GT}_{t}} MOTA=1−∑tGTt∑t(FNt+FPt+IDSWt)
-
t:代表(frame index)视频帧的索引
-
GT:代表(the number of groundtruth objects)GT目标的总数
-
FN:the false negatives 漏报(
the number of ground truth objects that were detected by the method) -
FP:the false positives(误报)(
the number of objects that were falsely detected by the method but do not exist in the ground-truth.) -
IDSW :the number of identity switches(之前提到的id的切换次数)
MoTP (Multiple Object Tracking Precisicin)
M O T P = ∑ t , i d t , i ∑ t c t \mathrm{MOTP}=\frac{\sum_{t, i} d_{t, i}}{\sum_{t} c_{t}} MOTP=∑tct∑t,idt,i
- ct:代表的是在第t帧匹配的数目(
the number of matches in frame t) - dt,i:(
the bounding box overlap of target i with its assigned ground-truth object in frame t.)两个框的重叠面积本质上是IOU
主要是一种定位精度的度量
SORT目标跟踪原理
SIMPLE ONLINE AND REALTIME TRACKING
- 标题:简单的在线和实时跟踪 (SIMPLE ONLINE AND REALTIME TRACKING)
- 目的:开发一种实时多物体跟踪方法,适用于在线应用。
- 方法:通过组合卡尔曼滤波器和匈牙利算法等熟悉技术,实现了一个实时跟踪系统。
- 重点:检测质量被确定为影响跟踪性能的关键因素。通过改变CNN检测器,可以提高跟踪性能。
- 结论:该算法的更新速度为260 Hz,比其他最先进的跟踪器快20倍以上,同时实现了与最先进的在线跟踪器相当的准确性。
在多目标跟踪中,关联是指将当前帧中的检测与前一帧中的跟踪目标进行匹配。 在本文中,作者提出了一种简单的关联方法,仅使用检测框之间的loU,来完成关联。

cost matrix between each detected bounding box and all predicted bounding boxes
IoU ( D , P ) = [ iou ( D 1 , P 1 ) … iou ( D 1 , P M ) iou ( D 2 , P 1 ) … iou ( D 2 , P M ) ⋮ ⋱ ⋮ iou ( D N , P 1 ) … iou ( D N , P M ) ] \operatorname{IoU}(D, P)=\left[\begin{array}{ccc} \operatorname{iou}\left(D_{1}, P_{1}\right) & \ldots & \operatorname{iou}\left(D_{1}, P_{M}\right) \\ \operatorname{iou}\left(D_{2}, P_{1}\right) & \ldots & \operatorname{iou}\left(D_{2}, P_{M}\right) \\ \vdots & \ddots & \vdots \\ \operatorname{iou}\left(D_{N}, P_{1}\right) & \ldots & \operatorname{iou}\left(D_{N}, P_{M}\right) \end{array}\right] IoU(D,P)= iou(D1,P1)iou(D2,P1)⋮iou(DN,P1)……⋱…iou(D1,PM)iou(D2,PM)⋮iou(DN,PM)
相关文章:
目标跟踪那些事
目标跟踪那些事 跟踪与检测的区别 目标跟踪和目标检测是计算机视觉中的两个重要概念,但它们的目的和方法是不同的。 目标检测(object Detection):是指在图像或视频帧中识别并定位一个或多个感兴趣的目标对象的过程 。 目标跟踪(object Tracking)&…...
【Git】 如何将一个分支的某个提交合并到另一个分支
【Git】 如何将一个分支的某个提交合并到另一个分支 在使用 Git 进行版本控制时,常常会遇到这样的需求:将某个分支的特定提交合并到另一个分支中。这种情况下,我们可以使用 cherry-pick 命令来实现。本文将详细介绍 cherry-pick 命令的使用方…...
【嵌入式之RTOS】什么是消息队列
目录 一、FreeRTOS消息队列的基本概念 二、FreeRTOS消息队列的工作原理 三、FreeRTOS消息队列的特点 四、FreeRTOS消息队列的应用 五、示例 消息队列是一种用于任务间通信的机制,它允许一个任务(生产者)向消息队列发送消息,而…...
9-springCloud集成nacos config
本文介绍spring cloud集成nacos config的过程。 0、环境 jdk 1.8maven 3.8.1Idea 2021.1nacos 2.0.3 1、项目结构 根项目nacos-config-sample下有两个module,这两个module分别是两个springboot项目,都从nacos中获取连接mysql的连接参数。我们开工。 …...
市场主流 AI 视频生成技术的迭代路径
AI视频生成技术的迭代路径经历了从GANVAE、Transformer、Diffusion Model到Sora采用的DiT架构(TransformerDiffusion)等多个阶段,每个阶段的技术升级都在视频处理质量上带来了飞跃性的提升。这些技术进步不仅推动了AI视频生成领域的快速发展&…...
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——1.c++入门(2)
1. 函数重载 C⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。这样C函数调⽤就表现出了多态⾏为,使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同 名函数的。 #include<iostream> u…...
【Python系列】深入理解 Python 中的 `nonlocal` 关键字
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Flask目录结构路由重定向简单实例讲解——轻量级的 Python Web 框架
假设一个flask目录结构如下: my_flask_app/ │ ├── app.py ├── routes/ │ ├── __init__.py │ ├── ZhejiangProvince/ │ │ ├── __init__.py │ │ ├── la.py │ │ └── el.py │ ├── GuangdongProvince/ │ │ ├…...
破解PyCharm插件更新难题:让IDE焕发新生
破解PyCharm插件更新难题:让IDE焕发新生 PyCharm作为业界领先的集成开发环境(IDE),其丰富的插件生态是其强大功能的重要来源。然而,插件无法更新的问题可能会困扰许多用户,影响开发体验。本文将详细介绍如…...
cmake常用命令学习
1.include https://blog.csdn.net/qq_38410730/article/details/102677143 CmakeLists.txt才是cmake的正统文件,而.cmake文件是一个模块文件,可以被include到CMakeLists.txt中。 include指令一般用于语句的复用,也就是说,如果有…...
K8S可视化管理平台KubeSphere
什么是 KubeSphere ? KubeSphere 是一款开源项目,在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器管理平台,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时ÿ…...
Bugku-CTF-聪明的php
pass a parameter and maybe the flag files filename is random :> 传递一个参数,可能标记文件的文件名是随机的: 于是传一下参,在原网页后面加上/?a1,发现网页出现了变化 3.传入参数,一般情况下是文件包含,或者命令执行&…...
【MySQL进阶】MySQL主从复制
目录 MySQL主从复制 概念 主从形式 一主多从 多主一从 双主复制 主从级联复制 主从复制原理 三个线程 两个日志文件 主从复制的主要工作模式 异步复制 半同步复制 全同步复制 MySQL主从复制 概念 MySQL主从复制是一种数据分布机制,允许从一个数据库服…...
本地部署文生图模型 Flux
本地部署文生图模型 Flux 0. 引言1. 本地部署1-1. 创建虚拟环境1-2. 安装依赖模块1-3. 创建 Web UI1-4. 启动 Web UI1-5. 访问 Web UI 0. 引言 2024年8月1日,blackforestlabs.ai发布了 FLUX.1 模型套件。 FLUX.1 文本到图像模型套件,该套件定义了文本到…...
谷粒商城实战笔记-127-全文检索-ElasticSearch-整合-测试复杂检索
文章目录 一,使用Elasticsearch的Java RESTHighLevel Client完成复杂的查询请求1. 创建检索请求 (SearchRequest)2. 构造检索条件 (SearchSourceBuilder)3. 执行检索 (SearchResponse)4. 处理解析结果5. 获取聚合信息 二,AI时代的效率提升 一,…...
解锁PyCharm:破解依赖库导入之谜
解锁PyCharm:破解依赖库导入之谜 PyCharm作为Python开发者的强大IDE,提供了丰富的功能来简化开发流程。然而,在使用过程中,开发者可能会遇到导入依赖库时出现的错误。本文将深入探讨PyCharm中导入依赖库报错的问题,并…...
JSON-Viewer插件:json格式查看器
npm install vue-json-viewer 2,main.js 引入 import JsonViewer from vue-json-viewer Vue.use(JsonViewer) 3,组件里写入这个组件 <json-viewer:value"textSecond":expand-depth"5"copyableboxedsort></json-viewer…...
HDFS块信息异常,spark无法读取数据
背景:flume数据落盘到hdfs上时,正在写入的文件一般是以.log.tmp结尾的文件,当flume将文件关闭以后将变为:.log 结尾的文件。由于我们使用阿里云的服务器,经常会有个别节点挂掉(进程在,无法通信,…...
TCP协议概述
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,并在各种通信系统中广泛应用,为不同但互连的计算机通信网络的主计算机中的成对进程之…...
SpringSecurity-3(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)
SpringSecurity使用数据库数据完成认证 5 SpringSecurity使用数据库数据完成认证5.1 认证流程分析5.1.1 UsernamePasswordAuthenticationFilter5.1.2 AuthenticationManager5.1.3 AbstractUserDetailsAuthenticationProvider5.1.4 AbstractUserDetailsAuthenticationProvider中…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
