目录
[1 目标检测](#1 目标检测)
[2 卡尔曼滤波](#2 卡尔曼滤波)
[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