一、目标追踪整体代码
代码目录如下图所示:
、
追踪相关代码:
检测相关代码和权重
调用 检测 和 追踪的代码:
首先代码分为三个部分:
- 目标追踪的相关代码和权重
- 目标检测相关代码和权重,这里用的是yolov5.5目标检测算法
- 调用检测和追踪代码相关py文件
二 ,追踪部分代码讲解
YOLOv5完成了项目的检测部分,这里就不再展开
2.1 Configs文件目录下:
deep_sort.yaml:这个yaml文件主要是保存一些参数。
(1)里面有特征提取权重的目录路径;
(2)最大余弦距离,用于级联匹配,如果大于该阈值,则忽略。
(3)检测结果置信度阈值
(4)非极大抑制阈值,设置为1代表不进行抑制
(5)最大IOU阈值
(6)最大寿命,也就是经过MAX_AGE帧没有追踪到该物体,就将该轨迹变为删除态。
(7)最高击中次数,如果击中该次数,就由不确定态转为确定态。
(8)最大保存特征帧数,如果超过该帧数,将进行滚动保存。
2.2 deep目录下
ckpt.t7:这是一个特征提取网络的权重文件,特征提取网络训练好了以后会生成这个权重文件,方便在目标追踪的时候提取目标框中的特征,在目标追踪的时候避免ID switch。
evaluate.py:计算特征提取模型精确度。
feature_extractor.py:提取对应bounding box中的特征, 得到一个固定维度的特征,作为该bounding box的代表,供计算相似度时使用。
model.py:特征提取网络模型,该模型用来提取训练特征提取网络权重。
train.py:训练特征提取网络的python文件
test.py:测试训练好的特征提取网络的性能
2.3 sort目录下
detection.py:保存通过目标检测的一个检测框框,以及该框的置信度和获取的特征;同时还提供了框框的各种格式的转化方法。
iou_matching.py:计算两个框框之间的IOU。
kalman_filter.py:卡尔曼滤波器的相关代码,主要是利用卡尔曼滤波来预测检测框的轨迹信息。
linear_assignment.py:利用匈牙利算法匹配预测的轨迹框和检测框最佳匹配效果。
nn_matching.py:通过计算欧氏距离、余弦距离等距离来计算最近领距离。
preprocessing.py:非极大抑制代码,利用非极大抑制算法将最优的检测框输出。
track.py:主要储存的是轨迹信息,其中包括轨迹框的位置和速度信息,轨迹框的ID和状态,其中状态包括三种,一种是确定态、不确定态、删除态三种状态。
tracker.py:保存了所有的轨迹信息,负责初始化第一帧,卡尔曼滤波的预测和更新,负责级联匹配,IOU匹配
2.4 模型的对象跟踪器
三 ,检测 和 追踪的调用
检测器 :AIDetector_pytorch.py
追踪器 : tracker.py
调用上述两个,实现 针对读取的视频进行目标追踪 :demo.py
四 ,实现原理流程
-
准备数据:将经过 YOLOv5 目标检测得到的目标位置信息以及其对应的类别标签作为输入。这些数据将作为 DeepSORT 算法的输入。
-
安装 DeepSORT:首先需要安装并配置 DeepSORT 算法。你可以在其官方文档中找到安装和配置的指南。
-
建立轨迹:使用 DeepSORT 算法对每个目标进行跟踪,并将它们关联成轨迹。DeepSORT 会根据目标的运动特征和外观特征来进行匹配和关联。
-
处理匹配问题:在实际应用中,可能会遇到匹配过程中的问题,比如遮挡、目标消失、新目标出现等。需要在算法中实现相应的逻辑来处理这些问题,确保跟踪的准确性和鲁棒性。
-
结合检测和跟踪:将经过 DeepSORT 跟踪后的结果与 YOLOv5 的目标检测结果结合起来,从而实现完整的目标检测和跟踪系统。
-
评估和调优:在实施完整的检测和跟踪系统后,需要对系统进行评估和调优。利用测试数据集来评估系统的性能,根据评估结果来调整参数或改进算法。
总的来说,实现目标跟踪需要将不同模块(如目标检测和目标跟踪)进行有效整合,同时考虑实际场景中可能遇到的各种问题。因此,在整个实现过程中,需要综合考虑算法的性能、稳定性和实时性,以实现一个准确、高效的目标跟踪系统。