目标跟踪算法:SORT、卡尔曼滤波、匈牙利算法

目录

[1 目标检测](#1 目标检测)

[2 卡尔曼滤波](#2 卡尔曼滤波)

3《从放弃到精通!卡尔曼滤波从理论到实践》视频简单学习笔记

[3.1 入门](#3.1 入门)

[3.2 进阶](#3.2 进阶)

[3.2.1 状态空间表达式](#3.2.1 状态空间表达式)

[3.2.2 高斯分布](#3.2.2 高斯分布)

[3.3 放弃](#3.3 放弃)

[3.4 精通](#3.4 精通)

[4 匈牙利算法](#4 匈牙利算法)

[5 《【运筹学】-指派问题(匈牙利算法)》视频简单笔记](#5 《【运筹学】-指派问题(匈牙利算法)》视频简单笔记)

[6 SORT算法的具体流程实现](#6 SORT算法的具体流程实现)

参考文献:


平时工程中基本上都是用SORT跟踪算法,也知道他的大体原理,这次稍微有点时间,我想再认真了解一下里面的卡尔曼滤波和匈牙利算法的公式推导,虽然我这次看完之后大概率后面很快也还是会忘,但是肯定会加深我的理解。

1 目标检测

目标检测(Object Detection): SORT算法采用"Tracking-by-Detection"策略,即算法的输入数据来源于目标检测器。SORT本身不参与目标检测过程,而是利用目标检测器(如Faster R-CNN、YOLO等)的输出结果,通常是一个矩形(bounding box)来表示目标的位置

2 卡尔曼滤波

由于目标检测得到的bounding box会带有噪声,SORT使用卡尔曼滤波来预测目标的位置和速度信息,从而得到下一帧中目标的运动轨迹。卡尔曼滤波是一种递归滤波器,可以对系统的状态进行最优估计。

卡尔曼滤波可以通过利用数学模型预测的值和测量得到的观测值进行数据融合,找到"最优"的估计值(这里的最优指的是均方差最小)。比方说,我们现在要知道t帧时某一目标准确的bbox(即,计算估计值),记为。我们已知的是1~t­-1帧中目标的bbox。现在我们有两种方法得到t帧的bbox:一是通过数学建模,根据1~t-1的信息来预测出t帧的bbox,记为;二是通过检测算法,直接测量出t帧的bbox,记为。卡尔曼滤波做的事情就是利用来得到,具体分两步实现:预测(predict),即通过数学模型计算出;更新(update),结合测量值得到当前状态(state)的最优估计值。

总之,卡尔曼滤波是一种去噪技术,能够在目标检测的基础上,得到更加准确的bbox。

3《从放弃到精通!卡尔曼滤波从理论到实践》视频简单学习笔记

我看的B站的这个学习视频,下面是我的简单的学习笔记,建议还是直接去看原视频,视频链接如下:

从放弃到精通!卡尔曼滤波从理论到实践~_哔哩哔哩_bilibili

3.1 入门

3.2 进阶

3.2.1 状态空间表达式

3.2.2 高斯分布

正态分布就是正常状态下的概率分布。

3.3 放弃

3.4 精通

4 匈牙利算法

匈牙利算法是一种数据关联(Data Association)算法,其实从本质上讲,跟踪算法要解决的就是数据关联问题。假设有两个集合S和T,集合S中有m个元素,集合T中有n个元素,匈牙利算法要做的是把S中的元素和T中的元素两两匹配(可能匹配不上)。结合跟踪的情景,匈牙利算法的任务就是把t帧的bbox与t-1帧的bbox两两匹配,这样跟踪就完成了。

要想匹配就需要一定的准则,匈牙利算法依据的准则是"损失最小"。损失由损失矩阵的形式来表示,损失矩阵描述了匹配两个集合中某两个元素所要花费的代价。

在SORT算法中,匈牙利算法基于目标检测框(Detections)和预测的目标跟踪框(Tracks,)之间的交并比(Intersection over Union, IoU)来构建相似度矩阵。这个矩阵的每个元素表示一个检测框和一个跟踪框之间的相似度,通常用1减去IoU值来表示匹配的代价或损失,然后利用这个矩阵去寻找匹配代价最小的一组匹配,其实匈牙利算法本身还是用iou进行匹配的,然后本质上其实就是检测框和预测的跟踪框匹配后,保证iou最大,也就是匹配代价最小。

5 《【运筹学】-指派问题(匈牙利算法)》视频简单笔记

6 SORT算法的具体流程实现

参考文献:

从放弃到精通!卡尔曼滤波从理论到实践~_哔哩哔哩_bilibili

匈牙利算法-看这篇绝对就够了!-CSDN博客

匈牙利算法详解-CSDN博客

趣写算法系列之--匈牙利算法_匈牙利算法基本原理-CSDN博客

【运筹学】-指派问题(匈牙利算法)_哔哩哔哩_bilibili

相关推荐
不穿格子的程序员18 小时前
从零开始写算法——回溯篇1:全排列 + 子集
算法·leetcode·深度优先·回溯
Yupureki18 小时前
《算法竞赛从入门到国奖》算法基础:入门篇-贪心算法(下)
c语言·c++·学习·算法·贪心算法
zzz海羊18 小时前
【CS336】Transformer|2-BPE算法 -> Tokenizer封装
深度学习·算法·语言模型·transformer
_OP_CHEN18 小时前
【算法基础篇】(四十七)乘法逆元终极宝典:从模除困境到三种解法全解析
c++·算法·蓝桥杯·数论·算法竞赛·乘法逆元·acm/icpc
杭州杭州杭州18 小时前
pta考试
数据结构·c++·算法
YuTaoShao18 小时前
【LeetCode 每日一题】2975. 移除栅栏得到的正方形田地的最大面积
算法·leetcode·职场和发展
少许极端18 小时前
算法奇妙屋(二十五)-递归问题
算法·递归·汉诺塔
Remember_99318 小时前
【数据结构】初识 Java 集合框架:概念、价值与底层原理
java·c语言·开发语言·数据结构·c++·算法·游戏
:mnong18 小时前
通过交互式的LLM算法可视化工具学习大语言模型原理
学习·算法·语言模型
Remember_99318 小时前
【数据结构】Java集合核心:线性表、List接口、ArrayList与LinkedList深度解析
java·开发语言·数据结构·算法·leetcode·list