sort--目标检测融合匈牙利、卡尔曼滤波实现目标的跟踪

文章目录

  • 前言
  • 一、目标检测算法
  • 二、卡尔曼滤波算法
    • 1.卡尔曼滤波数学原理
    • 2.卡尔曼滤波数学建模
    • 2.卡尔曼滤波矩阵求解
  • 三、匈牙利算法
    • 1.目标ID分配
    • 2.ID分配机制
  • 四、算法及性能


前言

在机器视觉中我们经常会需要实现对目标进行跟踪的问题,本博文主要基于目标检测算法融合匈牙利和卡尔曼滤波算法实现多目标的跟踪。SORT(Simple Online and Realtime Tracking)算法是一种简单的在线实时多目标跟踪算法,主要利用卡尔曼滤波来传播目标物体到未来帧中,再通过IOU作为度量指标来建立关系
根据应用场景的不同,跟踪算法分为两类,在线跟踪(online tracking)和离线跟踪(offline tracking/batch tracking)。

  1. 在线跟踪只能使用当前帧及过去帧的信息对当前帧中目标的位置进行推测,这和人类的跟踪方式相同;
  2. 离线跟踪则充分利用整个视频的全部信息,对当前帧进行追踪,不仅可以利用过去帧的信息,还可以利用未来帧。

主流的多目标跟踪方法是TBD(Tracking-

by-Dectection),即与目标检测算法相结合的跟踪方法。TBD方法在每一帧都进行目标检测,再利用目标检测的结果进行追踪。
sort--目标检测融合匈牙利、卡尔曼滤波实现目标的跟踪_第1张图片

SORT于2016年提出,其性能超过了同时代的其他多目标跟踪器。SORT的原理非常简单,源码只有不到300行!SORT主要由三部分组成:目标检测,卡尔曼滤波,匈牙利算法。
sort--目标检测融合匈牙利、卡尔曼滤波实现目标的跟踪_第2张图片

一、目标检测算法

目标检测的任务就是找到目标的位置,常用一个矩形(bounding box,简称为bbox)将目标框出来,来表示目标的位置。在SORT中,作者使用了Faster RCNN来得到bbox,当然,除了Faster RCNN以外还可以用其他的检测算法,如YOLO等。值得一提的是,作者发现目标跟踪质量的好坏与检测算法的性能有很大的关系,通过使用先进的检测算法,跟踪结果质量能够显著提升。

二、卡尔曼滤波算法

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

1.卡尔曼滤波数学原理

sort--目标检测融合匈牙利、卡尔曼滤波实现目标的跟踪_第3张图片

2.卡尔曼滤波数学建模

通过目标检测算法获取bbox后,从严格上来说,我们无法准确获取目标框。因为测量总是存在误差的,我们通过目标检测得到的bbox会不可避免地带有噪声,导致bbox的位置不够精确。这时,卡尔曼滤波的作用就体现出来了。
卡尔曼滤波可以通过利用数学模型预测的值和测量得到的观测值进行数据融合,找到“最优”的估计值(这里的最优指的是均方差最小)。比方说,我们现在要知道t帧时某一目标准确的bbox(即,计算估计值),记为bbox_{optimal}。我们已知的是1t­-1帧中目标的bbox。现在我们有两种方法得到t帧的bbox:一是通过数学建模,根据1t-1的信息来预测出t帧的bbox,记为bbox_{prediction};二是通过检测算法,直接测量出t帧的bbox,记为bbox_{measurement}。卡尔曼滤波做的事情就是利用bbox_{prediction}和bbox_{measurement}来得到bbox_{optimal},具体分两步实现:预测(predict),即通过数学模型计算出bbox_{prediction};更新(update),结合测量值bbox_{measurement}得到当前状态(state)的最优估计值。
总之,卡尔曼滤波是一种去噪技术,能够在目标检测的基础上,得到更加准确的bbox。

2.卡尔曼滤波矩阵求解

三、匈牙利算法

匈牙利算法是一种数据关联(Data Association)算法,其实从本质上讲,跟踪算法要解决的就是数据关联问题。假设有两个集合S和T,集合S中有m个元素,集合T中有n个元素,匈牙利算法要做的是把S中的元素和T中的元素两两匹配(可能匹配不上)。结合跟踪的情景,匈牙利算法的任务就是把t帧的bbox与t-1帧的bbox两两匹配,这样跟踪就完成了。
要想匹配就需要一定的准则,匈牙利算法依据的准则是“损失最小“。损失由损失矩阵的形式来表示,损失矩阵描述了匹配两个集合中某两个元素所要花费的代价

1.目标ID分配

定义损失矩阵
Bboxprdection
Bboxmea
利用IOU定义损失矩阵

追踪器的创建和销毁

2.ID分配机制

四、算法及性能

理解了目标检测、卡尔曼滤波、匈牙利匹配组件后,SORT的原理就显得特别简单了。SORT将卡尔曼滤波预测的bbox_{prediction}和目标检测算法得到的bbox_{measurement},用匈牙利算法进行匹配,在用bbox_{prediction}和bbox_{measurement}更新当前状态,得到bbox_{optimal},作为追踪的结果。
上面说了,匈牙利算法在使用前需定义损失矩阵。SORT利用bbox_{prediction}和bbox_{measurement}的IOU(交并比)来定义损失矩阵。比如损失矩阵Costij就表示前一帧第i个bbox与这一帧第j个bbox的IOU。
SORT中Kalman滤波采用线性匀速模型,状态向量描述成
在这里插入图片描述
其中,u,v表示bbox的中心坐标,s表示面积,r表示横纵比(SORT中认为对每个目标而言,r是不变的常数;而在deepSORT中则不是),头上带点的是相应的变化率(速度)。
还会涉及到一些其他的技术细节,如追踪器的创建与销毁。

sort--目标检测融合匈牙利、卡尔曼滤波实现目标的跟踪_第4张图片
sort既能使算法比较简单还能兼顾实时性。
sort--目标检测融合匈牙利、卡尔曼滤波实现目标的跟踪_第5张图片

你可能感兴趣的:(机器视觉算法,算法)