欢迎关注『youcans动手学模型』系列
本专栏内容和资源同步到 GitHub/youcans
【YOLO5 项目实战】(1)YOLO5 环境配置与检测
【YOLO5 项目实战】(2)使用自己的数据集训练目标检测模型
【YOLO5 项目实战】(4)YOLO5+DeepSort 目标追踪
【YOLO5 项目实战】(4)YOLO5+DeepSort 目标追踪
-
- [1. 目标追踪任务](#1. 目标追踪任务)
-
- [1.1 目标追踪任务的一般步骤](#1.1 目标追踪任务的一般步骤)
- [1.2 目标追踪任务的常用算法](#1.2 目标追踪任务的常用算法)
- [2. YOLOv5_Deepsort](#2. YOLOv5_Deepsort)
-
- [2.1 YOLOv5_Deepsort 简介](#2.1 YOLOv5_Deepsort 简介)
- [2.2 YOLOv5_Deepsort 下载](#2.2 YOLOv5_Deepsort 下载)
- [2.3 YOLOv5_Deepsort 环境配置](#2.3 YOLOv5_Deepsort 环境配置)
- [3. 运行 YOLO5+DeepSort 目标追踪](#3. 运行 YOLO5+DeepSort 目标追踪)
-
- [3.1 YOLO5+DeepSort 帮助](#3.1 YOLO5+DeepSort 帮助)
- [3.2 运行目标追踪程序](#3.2 运行目标追踪程序)
- [3.3 报错处理](#3.3 报错处理)
上节介绍 YOLOv5 目标检测任务,本节详细介绍 YOLOv5 + Deepsort 算法目标追踪任务。
YOLOv5_Deepsort 是一个基于 YOLOv5 的两阶段目标追踪算法,用于实现视频中的目标检测和追踪。先使用 Yolov5 模型逐帧进行目标检测,再使用 Deepsort 对目标检测结果进行匹配来实现目标跟踪。可以帮助用户快速地在本地或者云端上实现视频目标检测和跟踪。
1. 目标追踪任务
目标检测任务要求识别图像或视频中的特定对通过在目标周围绘制边界框(Bounding Box)来标记目标位置。
目标追踪任务在目标检测任务的基础上,要求从视频序列中连续地跟踪特定目标的运动轨迹。目标追踪任务不仅要从图像中检测目标位置,还要在时间上保持目标的一致性。
目标追踪的应用非常广泛,例如视频监控、自动驾驶、视频分析、虚拟现实等。
1.1 目标追踪任务的一般步骤
-
目标初始化:首先要在视频序列的第一帧中检测和识别目标,并为目标分配唯一的ID。
-
目标预测:在之后的视频帧中,目标追踪算法会使用目标在上一帧中的位置和运动信息,对目标在当前帧的位置进行预测。
-
目标检测:使用目标检测或特征匹配技术检测当前帧中的目标位置。常用方法有区域匹配、相关滤波器、深度学习。
-
目标关联:检测到当前帧中的目标位置以后,要将其与之前帧中的目标进行关联,以保持目标的一致性。
-
后处理: 通过滤波或者平滑处理,可以减少噪声或者不稳定性,并提高追踪的准确性和稳定性。
1.2 目标追踪任务的常用算法
- 单目标跟踪器:
-
MedianFlow: 基于KLT(Kanade-Lucas-Tomasi)光流和匹配的简单单目标跟踪器。
-
KCF(Kernelized Correlation Filters): 使用核相关滤波器来实现快速的单目标跟踪。
TLD(Tracking-Learning-Detection): 结合目标检测和跟踪,能够在目标丢失时重新检测目标。
-
MIL(Multi Instance Learning): 采用多实例学习方法跟踪目标。
- 多目标跟踪器:
-
SORT(Simple Online and Real Time Tracking): 在多目标跟踪中,通过卡尔曼滤波和匈牙利算法进行目标关联。
-
DeepSORT: 在SORT的基础上加入深度学习特征,提高目标关联的准确性和鲁棒性。
-
IOU Tracker: 使用目标边界框的IoU(Intersection over Union)来进行目标关联的简单方法。
- SORT(Simple Online and Realtime Tracking)是一种基于卡尔曼滤波和匈牙利算法的多目标跟踪器,它在实时场景下能够进行在线目标追踪。
-
卡尔曼滤波器(Kalman Filter): 卡尔曼滤波是一种递归的状态估计算法,通常用于目标运动预测和位置估计。它结合了观测数据和系统动力学模型,对目标的状态进行预测和更新。
-
匈牙利算法是用于解决二分图最优匹配问题的经典算法,它能够在多个候选匹配中找到最佳的匹配组合。在SORT算法中,使用匈牙利算法将当前帧的目标检测结果与之前帧中的跟踪目标进行关联,以确定目标在连续帧中的唯一ID。
- DeepSORT(Deep Learning-based SORT)算法是基于深度学习的多目标跟踪算法,是SORT的改进版。
DeepSORT算法的主要步骤如下:
(1)目标检测:在每一帧中,使用目标检测算法(如YOLO、Faster R-CNN、SSD等)来检测图像中的目标,并得到目标的边界框(bounding box)和类别信息。
(2)边界框预测:使用卡尔曼滤波器对检测到的对象进行边界框预测,生成未来的位置估计。
(3)深度外观描述符:对于每个检测到的目标,使用预训练的深度学习模型(如ResNet、MobileNet等)来提取目标区域的特征向量。这些特征向量能够表示目标的语义信息和视觉特征。
(4)IOU匹配:使用IOU计算检测到的边界框与预测边界框的相似度,进行匹配。
(5)级联匹配:在时间维度上进行级联匹配,确保长时间的对象跟踪稳定性。
(6)结果输出:结合卡尔曼滤波和深度外观描述符的结果,生成最终的对象跟踪结果。
2. YOLOv5_Deepsort
2.1 YOLOv5_Deepsort 简介
YOLOv5_Deepsort 是一个基于 YOLOv5 的两阶段目标追踪算法,用于实现视频中的目标检测和追踪。
-
先使用 Yolov5 模型逐帧进行目标检测,YOLOv5 是一种在COCO数据集上预训练的目标检测模型,可以在实时性要求比较高的场景下进行目标检测。
-
再使用 Deepsort 对目标检测结果进行匹配来实现目标跟踪。DeepSORT 是一种基于卡尔曼滤波器和匈牙利算法的目标跟踪算法,可以将视频帧中的目标在时间序列中进行跟踪,并且可以自适应地调整卡尔曼滤波器的参数,以提高跟踪的精度和鲁棒性。
YOLOv5_Deepsort 的主要功能:
-
视频目标检测和跟踪:可以读取本地或者云端的视频文件,对视频帧中的目标进行检测和跟踪,将跟踪结果保存为视频文件或者输出为实时视频流。
-
目标检测和跟踪参数的调整:采用自适应卡尔曼滤波自动调整滤波器参数,用户可以根据实际场景调整参数,包括:目标检测的置信度阈值、目标跟踪的匹配阈值、卡尔曼滤波器的参数等。
-
相机标定:提供了相机标定的工具,可以对相机进行标定,以提高目标检测和跟踪的精度。
-
多目标跟踪:支持同时跟踪多个目标,可以通过目标 ID 进行区分和跟踪。
2.2 YOLOv5_Deepsort 下载
下载网址1: GitHub - mikel-brostrom/Yolov5_Deepsort-Pytorch
下载网址2: GitHub - WangRongsheng/DeepSort_Pytorch_Yolov5
说明:由于 Mikel 又推出了 BoxMOT 目标追踪项目,其主页目前已不再提供 Yolov5_Deepsort 的下载,推荐使用 网址2 下载。
克隆 repo。
git clone https://github.com/ultralytics/yolov5.git
git clone https://github.com/WangRongsheng/Yolov5-DeepSort-Pytorch
或者直接从 GitHub 网页下载压缩文件,如下图所示。解压到 Python 项目文件夹,如"C:\Python|PythonProjects\YOLOv5_Deepsort"。
项目主要文件夹说明如下:
deep_sort_pytorch:DeepSort 跟踪训练程序 文件夹
yolov5:YOLOv5 目标检测程序 文件夹
inference:测试视频和测试结果文件夹
下载 YOLOv5 权重文件:
YOLOv5_Deepsort 项目中可能并不包括 YOLOv5 权重文件,需要自己下载。
下载 YOLOv5 / yolov5.weights权重文件。将 YOLOv5 的权重文件放置在 yolov5/weights 文件夹下,DeepSort 的权重文件 ckpt.t7 放置在 deep_sort/deep/checkpoint 文件夹下。也可以保存在其它文件夹,则需在配置中相应修改。
YOLOv5 有多个不同规模的模型,从小到大依次是:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x。推荐从 YOLOv5 release下载 YOLOv5 预训练模型。本文选择 YOLOv5s,参数约 7.2M。
2.3 YOLOv5_Deepsort 环境配置
(1)使用 PyCharm 编辑器打开下载的 YOLOv5_Deepsort 项目。
(2)在 PyCharm 的菜单"文件-设置-项目-Python 解释器" 中,为项目配置 Python 环境。注意要求 Python>=3.8.0 环境。
这个步骤需要用户根据计算机的 Python 环境来选择,但该环境中需要安装 PyTorch 等 Python 库。注意需要 Python 3.8 以上版本和 torch 1.7 以上版本。
(3)在所选择的 Python 环境下,安装项目所需的依赖(安装项目所需的库)。
本项目中的 requirements.txt 文件已经详细列出了所需的库及版本。
可以在 Pycharm 的控制台(terminal),输入脚本指令来安装所需的库。也可以通过 Anaconda 或 Miniconda 来安装,注意要安装到所选择的 Python 环境。例如:
python
(base) C:\Users\Administrator>conda activate torch
(torch) C:\Users\Administrator>pip install -r .\requirements.txt
(4)DeepSort 配置文件的路径,默认保存路径为:"deep_sort_pytorch/configs/deep_sort.yaml",内容如下:
python
DEEPSORT:
REID_CKPT: "deep_sort_pytorch/deep_sort/deep/checkpoint/ckpt.t7"
MAX_DIST: 0.2
MIN_CONFIDENCE: 0.3
NMS_MAX_OVERLAP: 0.5
MAX_IOU_DISTANCE: 0.7
MAX_AGE: 70
N_INIT: 3
NN_BUDGET: 100
如果需要自定义 REID_CKPT 模型或参数,可以修改 deep_sort.yaml 配置文件。
3. 运行 YOLO5+DeepSort 目标追踪
3.1 YOLO5+DeepSort 帮助
从控制台运行 track.py 查看帮助:
python .\track.py -h
运行结果如下:
python
(torch) PS C:\Python\PythonProjects\YOLOv5_DeepSort2> python .\track.py -h
usage: track.py [-h] [--weights WEIGHTS] [--source SOURCE] [--output OUTPUT] [--img-size IMG_SIZE] [--conf-thres CONF_THRES] [--iou-thres IOU_THRES] [--fourcc FOURCC] [--device DEVICE] [--view-img] [--save-txt]
[--classes CLASSES [CLASSES ...]] [--agnostic-nms] [--augment] [--config_deepsort CONFIG_DEEPSORT]
optional arguments:
-h, --help show this help message and exit
--weights WEIGHTS model.pt path
--source SOURCE source
--output OUTPUT output folder
--img-size IMG_SIZE inference size (pixels)
--conf-thres CONF_THRES
object confidence threshold
--iou-thres IOU_THRES
IOU threshold for NMS
--fourcc FOURCC output video codec (verify ffmpeg support)
--device DEVICE cuda device, i.e. 0 or 0,1,2,3 or cpu
--view-img display results
--save-txt save results to *.txt
--classes CLASSES [CLASSES ...]
filter by class
--agnostic-nms class-agnostic NMS
--augment augmented inference
--config_deepsort CONFIG_DEEPSORT
其中:
- [--weights WEIGHTS] 用于指定YOLOv5 权重文件的路径,默认路径为:'yolov5/weights/yolov5s.pt'
- [--config_deepsort CONFIG_DEEPSORT] 用于指定 DeepSort 配置文件的路径,默认路径为"deep_sort_pytorch/configs/deep_sort.yaml"
- [--source SOURCE] 用于指定输入视频文件的路径,默认路径为:'inference/images'
- [--output OUTPUT] 用于指定输出结果文件的路径,默认路径为:'inference/output'
- [--save-txt] 用于保存跟踪数据文件
- [--classes CLASSES [CLASSES ...]] 用于指定跟踪类别
3.2 运行目标追踪程序
我们在下面的视频中进行测试。 测试视频保存在文件夹 'inference/images/test01.mp4',YOLOv5 权重文件保存在文件夹 'yolov5/weights/yolov5s.pt'。
从控制台运行 track.py 对测试视频进行目标追踪:
python track.py --source test01.mp4
运行结果如下:
python
(torch) PS C:\Python\PythonProjects\YOLOv5_DeepSort2> python track.py --source inference\images\test01.mp4
Namespace(agnostic_nms=False, augment=False, classes=[0], conf_thres=0.4, config_deepsort='deep_sort_pytorch/configs/deep_sort.yaml', device='', fourcc='mp4v', img_size=640, iou_thres=0.5, output='inference/output', save_txt=False, source='video\\test01.mp4', view_img=False, weights='yolov5/weights/yolov5s.pt')
video 1/1 (1/302) C:\Python\PythonProjects\YOLOv5_DeepSort2\video\test01.mp4: 384x640 15 persons, Done. (0.070s)
saving img!
saving video!
video 1/1 (2/302) C:\Python\PythonProjects\YOLOv5_DeepSort2\video\test01.mp4: 384x640 14 persons, Done. (0.006s)
saving img!
saving video!
...
video 1/1 (302/302) C:\Python\PythonProjects\YOLOv5_DeepSort2\video\test01.mp4: 384x640 12 persons, Done. (0.008s)
saving img!
saving video!
Results saved to C:\Python\PythonProjects\YOLOv5_DeepSort2\inference/output
Done. (16.977s)
目标追踪结果如下图所示,追踪视频默认保存在文件夹 'inference/output/test01.mp4'
如果要获得追踪结果的数据文件,可以在运行 track.py 时加入 "--save-txt" 选项:
python track.py --source inference/images/test01.mp4 --save-txt
就可以得到 追踪结果数据文件 'inference/output/test01.txt',内容如下。
python
2 1 800 232 864 421 -1 -1 -1 -1
2 2 1603 610 1717 872 -1 -1 -1 -1
2 3 1650 114 1712 282 -1 -1 -1 -1
2 4 244 792 364 1078 -1 -1 -1 -1
...
301 1 1342 1 1384 117 -1 -1 -1 -1
301 9 1280 0 1327 111 -1 -1 -1 -1
301 11 1166 0 1205 51 -1 -1 -1 -1
301 16 1319 277 1406 449 -1 -1 -1 -1
301 17 590 175 648 321 -1 -1 -1 -1
301 28 464 274 544 475 -1 -1 -1 -1
301 31 1381 7 1432 124 -1 -1 -1 -1
301 33 1537 706 1645 976 -1 -1 -1 -1
301 34 956 14 1001 131 -1 -1 -1 -1
301 35 241 297 316 493 -1 -1 -1 -1
301 38 910 927 1075 1079 -1 -1 -1 -1
301 39 20 571 82 806 -1 -1 -1 -1
追踪结果数据文件的每行有 10列数据,依次是:帧序号 frame_idx, 目标序号 identity, 边界框参数 bbox_left, bbox_top, bbox_w, bbox_h, 和标志位 -1, -1, -1, -1。
3.3 报错处理
(1)AttributeError: 'yaml' has no attribute 'FullLoader'
PyYaml 版本问题。卸载高版本 PyYaml,安装 PyYaml 5.3 版本:
pip install pyyaml==5.3
(2)AttributeError: module 'numpy' has no attribute 'float'.
Numpy 版本问题,不再使用 np.float
,需要将其修改为 np.float64
。
(3)AttributeError: module 'numpy' has no attribute 'int'.
Numpy 版本问题,不再使用 np.in
,需要将其修改为 np.int32
。
【本节完】
版权声明:
欢迎关注『youcans动手学模型』系列
转发请注明原文链接:
【YOLO5 项目实战】(4)YOLO5+DeepSort 目标追踪Copyright 2024 youcans, XUPT
Crated:2024-08-11