yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法

文章目录

  • 一、项目思路
  • 二、算法详解
    • 2.1、卡尔曼滤波算法
      • 2.1.1、小车位置估计(入门)
      • 2.1.2、理论推导详细过程(精通)
      • 2.1.3、举例说明
      • 2.1.4、应用:追踪需要考虑的8个状态
    • 2.2、匈牙利匹配算法
      • 2.2.1、背景导入
      • 2.2.2、算法匹配原则与详细计算步骤
      • 2.2.3、举例说明
      • 2.2.4、代价矩阵的三种形式(运动 + 外观 + IOU)
      • 2.2.5、行人重识别网络模型(ReID)
    • 2.3、追踪算法
      • 2.3.1、sort算法
      • 2.3.2、deepsort算法

一、项目思路

目标追踪是在目标检测算法的基础上,对每一帧的图像所检测到的目标都进行追踪。反而言之,只有当目标检测算法检测到当前目标才能进行目标追踪,故追踪效果的好坏取决于目标检测效果。

  • (1)通过卡尔曼滤波进行状态更新。每一个追踪器track都要基于当前状态去预测下一时刻状态,然后基于目标检测得到的结果去修正估计值。其中,第一帧检测得到的目标信息用来初始化卡尔曼滤波的状态变量(追踪器tracks)。
  • (2)通过匈牙利匹配算法进行目标匹配。共有三种匹配方法:一是基于卡尔曼滤波得到的8个状态向量匹配;二是基于深度学习的行人重识别网络模型进行外观特征匹配;三是基于IOU重叠区域匹配。通过该三种方式的先后筛选后,取代价矩阵最小的目标(如:田忌赛马)即定义为当前正在追踪的目标。

yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第1张图片

二、算法详解

2.1、卡尔曼滤波算法

最终目标:训练权重项(卡尔曼增益 K),使得最终得到的K值能让最优值的不确定性最小。 其中,第一帧检测得到的目标信息用来初始化卡尔曼滤波的状态变量(追踪器tracks)。
本文从三个部分进行讲解:(1)小车位置估计(入门);(2)理论推导详细过程(精通);(3)举例论证(实战)。

2.1.1、小车位置估计(入门)

当前状态的最优值的实现过程使用上一次状态的最优值预测当前状态的估计值,同时使用当前得到的测量值修正估计值,得到当前状态的最优值。
获取最优值的影响因素(1)传感器的测量值本身就是不准确的;(2)理论推导得到的估计值与真实情况得到的测量值存在一定范围的误差;
yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第2张图片

2.1.2、理论推导详细过程(精通)

bilibili视频讲解:从放弃到精通!卡尔曼滤波从理论到实践~yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第3张图片
一文图解卡尔曼滤波(Kalman Filter)
卡尔曼滤波(Kalman Filtering)详解:详细推导过程
卡尔曼滤波,最最容易理解的讲解.找遍网上就这篇看懂了.:举例贯穿理解

2.1.3、举例说明

yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第4张图片

2.1.4、应用:追踪需要考虑的8个状态

yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第5张图片

2.2、匈牙利匹配算法

最终目标:使得匹配后的代价矩阵最小(如:田忌赛马)。 缺点:该方法不是最优匹配,而是尽可能的使得每个目标都匹配上。在sklearn与scipy中有匈牙利匹配算法的API接口:(1)【sklearn】linear_assignment()(2)【scipy】linear_sum_assignment()。故在使用时只需要输入准备好的代码矩阵就行。

(备注:虽然已经有API接口,但为了更好地了解该算法原理,进行了详细的分析与举例说明。请按需求选择该部分的内容。)

2.2.1、背景导入

在同一帧图像中,若有N个待检测目标(如:图像中有30个人),则目标检测算法会检测得到N个目标,而卡尔曼滤波将分别预测其在下一帧图像中所对应的目标(8个状态信息)。 那么当前帧图像的多个目标要如何在下一帧图像中,匹配彼此对应的追踪器track,且使得匹配后得到的代价最小?

  • 情况1:两个人挨着很近或叠加在一起,而导致无法区别。
  • 情况2:当前帧图像得到8个追踪器track,下一帧图像却有10个目标。

2.2.2、算法匹配原则与详细计算步骤

yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第6张图片

2.2.3、举例说明

yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第7张图片

2.2.4、代价矩阵的三种形式(运动 + 外观 + IOU)

共有三种匹配方式,有先后顺序。

  • 第一步:运动信息匹配 。通过卡尔曼滤波得到下一帧的8个估计状态量,将估计结果与下一帧实际检测结果进行比对,得到运动信息的代价矩阵。
  • 第二步:外观匹配deepsort的核心。

采用行人重识别网络模型(ReID)进行ReID特征提取,该模型对行人特征的提取效果最佳。注意:只适用于人体追踪,如果是其他目标需要自定义+自训练模型。主要过程:将目标框bbox输入到行人重识别模型中进行特征提取,得到128维的特征向量。

(1)将当前帧追踪器track得到的目标框bbox1通过卷积或特征提取(行人重识别模型),得到一个128维的向量。该向量表述了目标1的外观信息特征。重点知识:当前每一个track都有一个特征序列:[128-T1,128-T2,...,128-TM]。其中,T表示帧时间,最大帧时间M=100(论文中指定),当超出范围时,则丢前一帧保后一帧。每个帧时间都会得到一个128维的向量,特征序列代表了每个追踪器track都会保存其在M帧时间中所追踪的M个目标信息,目标可能相同也可能不同。
(2)同样,将下一帧目标检测得到的N个目标框,通过相同的操作得到N个128维的向量。
(3)计算下一帧中检测得到的任意目标的128维向量,与当前帧目标框bbox1的特征序列中所有帧时间的128维向量的余弦相似度,而不仅仅是前一帧时间,构建代价矩阵,最后将相似度最大的目标框与当前帧的目标框认定为同一个目标。
比如:在当前帧中目标消失无法检测到目标,而在几个帧时间之后继续出现,则由于前M帧时间中有该目标信息,故目标检测到的同时可以继续追踪。

  • 第三步:IOU匹配(bounding box,bbox)。表示下一帧目标框与当前帧目标框的IOU重叠区域。1-IOU表示IOU的距离。

2.2.5、行人重识别网络模型(ReID)

yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第8张图片

2.3、追踪算法

deepsort算法在sort算法的基础上新增了深度学习模型提取特征(级联匹配、状态确认),sort算法的核心是卡尔曼滤波算法和匈牙利算法。

2.3.1、sort算法

详细算法流程:

  • (1)第一帧检测得到的目标信息用来初始化卡尔曼滤波的状态变量(追踪器Tracks)。如:十个人就有十个追踪器。
  • (2)通过卡尔曼滤波(Kalman Filter) 对下一帧进行预测得到状态估计值,并使用yolo目标检测(Detections)得到实际检测值,然后进行IOU匹配(IOU Match)
    • 匹配结果1:未匹配的追踪器Tracks(Unmatched Tracks)。 如:上一帧初始化了8个tracks,但是下一帧有的目标被遮挡或消失了,则删除 此track。
    • 匹配结果2:未匹配的目标检测框(Unmatched Detections)。 如:上一帧初始化了8个tracks,但是下一帧有10个检测框,则新增 2个初始化track。
    • 匹配结果3:匹配成功的检测框与追踪器(Matched Tracks)。 更新当前目标的状态向量。
  • (3)反复循环步骤(2),直到视频帧结束。

yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第9张图片

2.3.2、deepsort算法

详细算法流程:目标追踪—deepsort原理讲解

  • (1)第一帧检测得到的目标信息用来初始化卡尔曼滤波的状态变量(追踪器Tracks),且必须连续3帧都匹配到目标才会在视频中显示目标框,在此之前不会进行级联匹配,而不会进行IOU匹配如:十个人就有十个追踪器。
  • (2)通过卡尔曼滤波(Kalman Filter) 对下一帧进行预测得到状态估计值,并使用yolo目标检测(Detections)得到实际检测值。

情况1:若该crack连续3帧都匹配到目标,则定义为确认状态(Confirmed)并进入级联匹配(Matching Cascade)
情况2:否则定义为非确认状态(Unconfirmed)直接进行IOU匹配(IOU Match)

Matching Cascade 级联匹配,又叫优先级匹配。
11、计算尔曼滤波预测的运动特征和深度学习模型提取的ReID外观特征之间的距离,组成新的代价矩阵。
22、假设在前100帧图像中,有4个track分别匹配上的次数为100,100,90,60。则第101帧图像会优先对匹配次数最多的track1和track2进行IOU匹配,其余track3/4在track1/2匹配剩下的目标框中再进行IOU匹配。

备注:由于匈牙利匹配算法的特点是尽可能让所有目标都匹配成功,故级联匹配与IOU匹配都会设置一个门单元(gate unit)。若匹配结果大于阈值,表示两者相差太大不满足要求,故不允许匹配在一起。

  • 匹配结果1:未匹配的追踪器Tracks(Unmatched Tracks)。 分两种情况:一是非确认状态Unconfirmed,若没有匹配到目标,则直接删除次track;一是确认状态Confirmed,若连续70帧都没有匹配到目标,则删除此track,否则重新返回下一帧并进行确认状态的级联匹配。 如:上一帧初始化了8个tracks。但是下一帧有的目标被遮挡或消失了。
  • 匹配结果2:未匹配的目标检测框(Unmatched Detections)。 如:上一帧初始化了8个tracks,但是下一帧有10个检测框,当满足一定条件后,则新增2个初始化track。
  • 匹配结果3:匹配成功的检测框与追踪器(Matched Tracks)。 更新当前目标的状态向量。

yolo目标追踪:卡尔曼滤波 + 匈牙利匹配算法 + deepsort算法_第10张图片

你可能感兴趣的:(深度学习,YOLO,目标跟踪,目标检测,深度学习,人工智能)