文章目录
前言
今天的主要目的还是快速上手目标跟踪,先前的话我是简单说了一下卡尔曼滤波,然后由于博客的问题,没有说完。本来是想做一个系列的,但是很难整理,而且说实话有些东西我也没搞清楚。当然这并不影响我们使用,抽象一下继续happy,就像你不懂SpringBoot 或者Django底层一样,还是阔以做出一个网站的。
算法简介
首先我们这边的话其实整个项目呢,是两个部分,一个是目标的追踪部分,还有一个是目标的识别检测部分。我们要先检测出来一个物品,我们才能去跟踪,同时这个算法也是基于目标检测算法来的。
他们之间的关系就是这样的:
那么目标检测的话这里就不多说了。
可以参考这几篇博文:
GitHub 水项目之 快速上手 YOLOV5
YOLOV5 参数设定与模型训练的坑点一二三
YOLOV1论文小整理
以及这篇博文:
手把手教你如何自制目标检测框架(从理论到实现)
所以我们这边主要就是咱们deepsort的一个情况。
sort算法
说到这个玩意就还得得先说说sort算法。
前面在说到目表跟踪的时候,我们说到了卡尔曼滤波
但是这个只是解决了一个问题,就是我们预测改物体下一个框可能存在的位置,之后我们计算一些IOU确定一下这个下一个框确定是我们的目标物体的,从而确定他的轨迹完成目标跟踪。
但是我们先前假设的是单目标的一个情况,如果是多目标的话,还涉及到如何去分配一个跟踪的目标的问题。也就是给目标不同的标号,然后识别预测到他的轨迹之后,确定这个轨迹是哪个目标的。
所以这个sort算法其实有两个部分,也就是为了完成我们的一个目标跟踪。
一个是匈牙利算法,目的是为了确定谁是谁,一个是卡尔曼为了预测出物体的一个状态进行跟踪。
deepsort
deepsort 是在sort算法基础上做了很多别的工作。
那么他的算法流程大概是这样的:
(知乎大佬的图)
项目结构
我们今天这里的话,还是先简单的去做一个介绍,之后的话咱们到像以前yolo一样如何训练自己的模型,然后完成自己的一个需求。
我们重点先看到这个deep_sort
这里我先对这些参数进行一个说明。
那么之后的话我们打开deepsort文件夹,可以看到这些玩意:
里面还是有sort算法的。
那么此外sort算法对应的是这个玩意
detection.py:保存通过目标检测的一个检测框框,以及该框的置信度和获取的特征;同时还提供了框框的各种格式的转化方法。
那么回到我们的根目录:
最后来看看效果演示