SORT目标追踪


文章目录

  • SORT目标追踪
  • 前言
  • 一、卡尔曼滤波器
  • 1.迭代算法
  • 2.数据融合
  • 3.协方差矩阵
  • 4.状态空间表达
  • 5.卡尔曼滤波详细推导



前言

SORT(Simple Online and Realtime Tracking)算法是一种简单的在线实时多目标跟踪算法,主要利用卡尔曼滤波来传播目标物体到未来帧中,再通过IOU作为度量指标来建立关系


提示:以下是本篇文章正文内容,下面案例可供参考

一、卡尔曼滤波器

Kalman Filter的Filter并不能很好的体现出它的特性。
卡尔曼滤波器一言以蔽之,就是Optimal Recursive Data Processing Algorithm,最优化递归数字处理算法。
它更像一种观测器,而不是一种滤波器。

1.迭代算法

真实的世界中充满了不确定性,当描述一个系统时,不确定性主要来自三个方面:
① 不存在完美的数学模型
② 系统的扰动不可控,也很难建模 (系统噪声)
③测量传感器存在误差 (测量噪声)


假设有一把尺子,取测量一个硬币的直径,第一次测得50.1mm,第二次测得50.4mm,第三次测得49.8mm,求真实数据值,最直观的就是求平均值

估计一个真实数据,大致的方法就是取平均值

SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法:第k次的估计值。Hat表示先验估计
SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_02:第K次的测量值
SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_03
分析这个公式,随着K增大, 1/K减小,Xk趋向于Xk-1。也就是随着K增加,测量结果不再重要了。
当k小时,1/k 大,Zk的作用较大,也就是测量值的作用比较大。

也就是当前的估计值 = 上一时刻的估计值 + 系数 * (当前时刻测量值 - 上一次的估计值)
此时的系数即为Kalman Gain,卡尔曼增益/因数
这样迭代求估计值的过程为:
①计算Kalman Gain SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_04
②计算先验估计值 SLAM 目标跟踪算法 目标跟踪经典算法_迭代_05
③更新估计误差 SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_06

用一把精度为(3mm, 0.25)的尺子去测量一个5cm卡片的长度,测得的长度分别为47mm,52mm,53mm,51mm,48mm,49mm,49mm,48mm,49mm,51mm,50mm,求卡片的真实长度
①起始估计值设为40mm,估计误差为8mm
②依次计算Kalman增益、先验估计值、更新估计误差

SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_07


SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_08


也可以从上面的计算过程可以看出,卡尔曼滤波其实就是选择了最佳加权系数的加权平均

2.数据融合

有两把把尺子
SLAM 目标跟踪算法 目标跟踪经典算法_迭代_09
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波算法_10
通过这两把尺子的测量值,估算真实值
上文介绍的迭代算法,可以得到
SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_11
根据最小方差无偏估计,我们要求出一个k使得方差最小
SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_12
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_13,解得:
SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_14
SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_15
SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_16

3.协方差矩阵

协方差矩阵就是将方差与协方差在一个矩阵中表现出来,表示变量间的联动关系
协方差SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_17表示两个变量的变化方向,大于0表示正相关
一般协方差矩阵表示为
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_18
接下来介绍一个求解协方差矩阵的方法,方便编程计算协方差矩阵
引入过渡矩阵a
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_19
SLAM 目标跟踪算法 目标跟踪经典算法_迭代_20

4.状态空间表达

SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_21


在这里引入弹簧阻尼系统来介绍状态空间表达式

SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_22

引入状态变量:

SLAM 目标跟踪算法 目标跟踪经典算法_迭代_23

SLAM 目标跟踪算法 目标跟踪经典算法_迭代_24

把F看作u作为系统的一个输入:

SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_25

SLAM 目标跟踪算法 目标跟踪经典算法_迭代_26

SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波算法_27

SLAM 目标跟踪算法 目标跟踪经典算法_迭代_28

离散化之后,可以总结为:

SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_29 过程噪音

SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波算法_30

那么便引出了核心问题:如何在一个不那么准确的估计值和一个不那么准确的测量值之间,估算出一个较为准确的SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波算法_31,这也就是卡尔曼滤波要解决的事情

5.卡尔曼滤波详细推导

状态空间方程:
SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_32
但是SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_33SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波算法_34是无法建模的,不可知的。因此只能列出下面两个公式
SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_35
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_36表示SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_37的估计值,SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_38表示SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_37的先验估计值,只通过状态空间方程得到,没有经过任何处理
这样,我们得到一个算出来的结果SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波算法_40和一个测出来的结果SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_02,这两个数值都是不准确的,那么怎么得到一个较为精确的数值呢。自然想到我们上面介绍的数据融合
SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_42
教科书中一般写成如下公式:
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_43
SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_44
这样写应该是为了防止SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_45矩阵不可逆吧。
那么我们的目标就是寻找SLAM 目标跟踪算法 目标跟踪经典算法_迭代_46,使得SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_47更加接近于SLAM 目标跟踪算法 目标跟踪经典算法_迭代_48(真实值)
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波算法_49
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_33是过程噪声,我们假设真实世界的噪声是符合正态分布的,SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_51满足正态分布,SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_51的协方差矩阵:
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_53
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_51的期望最小,等价于方差最小,等价于P的迹最小
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波算法_55
SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波算法_56

SLAM 目标跟踪算法 目标跟踪经典算法_目标跟踪_57

SLAM 目标跟踪算法 目标跟踪经典算法_卡尔曼滤波_58

SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_59
SLAM 目标跟踪算法 目标跟踪经典算法_SLAM 目标跟踪算法_60