Yolov5-DeepSort多目标跟踪算法

 

Yolov5-DeepSort多目标跟踪算法

多目标跟踪,顾名思义,就是可以对多个目标进行跟踪,区别于单目标跟踪

1. 多目标跟踪的一般工作流程

  • 获取图像

    获取视频的图像帧;

  • 检测

    利用目标检测器(e.g. yolo等)获取目标对象在原图上的检测框;

  • 提取特征

    提取每个检测目标的特征,通常包括外观特征(e.g. ReID)和运动特征(e.g. 卡尔曼滤波);

  • 计算相似度

    利用上述特征计算检测目标之间的相似度;

  • 匹配

    利用相似度进行目标匹配(e.g. 匈牙利算法)。

上述工作流程是对多目标跟踪算法最基本的了解。标题中Yolov5指的是检测器,DeepSort是多目标跟踪算法中非常经典的算法之一。关于Yolov5目标检测算法,这里不做过多介绍,本博客主要介绍 DeepSort

2. DeepSort的基本概念

DeepSort算法符合多目标跟踪的工作流程,但是增加了很多细节。要想理解DeepSort算法,必须先了解下面几个基本概念。本博客从宏观角度来讲解DeepSort算法主要流程,因此对一些概念也只是简单陈述其作用(“做了什么”),其进一步深入理解(“怎么做的”)放在其他博客中详细介绍,因为有些涉及到证明推理,需要有一定数学基础,需要由浅入深,避免直接入土。

  • 卡尔曼滤波

    卡尔曼滤波算法分预测和更新两个过程,但主要是用来维护检测目标的状态协方差矩阵

    代码中卡尔曼滤波默认是一个匀速运动系统。维护的状态x = (x, y, γ, h, ẋ, ẏ, γ̇, ḣ) 是一个8 维向量,(x, y) 检测框中心点,γ 是检测框宽高比,h 是检测框高以及它们各自在图像坐标系中的一阶导数,即各自的速度。协方差矩阵表示估计状态的不确定性,是一个 8x8 的对称矩阵,矩阵中对角线数字越大则表明不确定性越大。进一步详细说明见博客

    DeepSort卡尔曼滤波主要是提供状态协方差矩阵与最新的检测状态一起计算马氏距离来剔除运动距离较远的目标。

  • ReID

    行人重识别(Person re-identification, ReID)也称行人再识别,是利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术。广泛被认为是一个图像检索的子问题。给定一个监控行人图像,检索跨设备下的该行人图像。ReID是CV领域里很重要的一个分支,方法很多,罗浩大牛的讲解很详细,大家可以自行搜索,这里不做过多赘述。

    DeepSortReID主要是用来提取目标图像的特征向量,用于计算目标之间的余弦相似度

  • 余弦相似度余弦距离

    余弦相似度,是通过计算两个向量的夹角余弦值来评估他们的相似度,见定义

    a*b= a * b *cosθ
    => 余弦相似度 cosθ = a*b / ( a * b )

    => 余弦距离 dis_cos = 1 - cosθ

    DeepSort主要是利用余弦距离来提取目标图像特征向量之间的外观相似度。

  • 马氏距离

    马氏距离可以简单理解为经过标准化的欧氏距离,避免量纲不同的影响,见定义。代码中马氏距离以另一种方式实现,进一步详细说明见博客

    DeepSort主要是在余弦距离之后利用马氏距离来过滤掉目标图像外观相似但是运动距离较远的目标。

  • IoUIoU距离

    交并比或重叠度(Intersection over Union, IoU)是一种测量在特定数据集中检测相应物体准确度的一个标准,见定义

    IoU距离 dis_iou = 1 - IoU

    IoU示意图:

  • 匈牙利匹配算法

    DeepSort匈牙利匹配算法解决的是二部图中的最小权重匹配问题,其需要输入一个代价矩阵,输出最佳匹配结果。匈牙利匹配算法主要用在级联匹配算法IOU匹配算法,进一步详细说明见博客

  • 目标跟踪状态定义

    • 不确定态(Tentative):检测到新目标时状态初始化为Tentative,当其匹配成功且次数不超过 n_init 时,状态都是Tentative;
    • 确定态(Confirmed):当Tentative的跟踪对象匹配次数超过 n_init 且未匹配上次数小于max_age时,状态都是Confirmed;
    • 删除态(Deleted):未匹配上的次数(即距上一次更新)超过max_age,或Tentative的跟踪对象未匹配成功就直接Deleted。

    3种跟踪状态的关系图:

  • 级联匹配算法

    级联匹配算法是对于确定态的跟踪目标利用匹配的优先程度进行多级优先匹配,该匹配策略是以余弦距离结合马氏距离为代价矩阵的匈牙利匹配算法。代码进一步详细说明见博客

  • IOU匹配算法

    IOU匹配算法是以IoU距离为代价矩阵的匈牙利匹配算法。代码进一步详细说明见博客

3. DeepSort的流程图

对上述概念有所掌握后,便可尝试了解其流程图,如下:

4. DeepSort代码详解

代码详解见本人github,代码里添加详细注释,帮助大家理解。

本文作者: 崔玉君
版权声明: 转载请注明出处!

Enjoy! :ghost: :ghost: :ghost:


If you like my blog, don’t forget to give me a star. :star2:

Star This Project