说明:
本文主要讲解的是基于YOLOv8+DeepSort的目标跟踪,从模型下载、环境部署、模型训练、模型评估、到模型预测的史诗级详细教程,使用的是YOLOv8-DeepSORT-Object-Tracking模型即是YOLOv8+DeepSort的目标跟踪(视频跟踪)模型,模型链接为:YOLOv8+Deepsort+Pytorch源码或者junhongnb/YOLOv8-DeepSort-Object-Tracking
本文以飞机的目标追踪为例,进行目标跟踪任务的演示,视频数据集抽帧后的数据集如下:
1、环境部署
1.1 运行环境
本文的实验案例是在魔搭社区环境中进行实验的,魔搭社区CPU环境可以免费用,GPU有大概二三十个小时的免费时间,感兴趣的可以去上面跑,我的实验是在上面进行测试演示的,当然有条件的下列项目也可以拿到可以去其他实验环境中去跑:魔搭社区
- 点击notebook
- 点击查看notebook,进入notebook:
- 选择终端:
1.2 下载YOLOv8模型
首先下载YOLOv8-DeepSORT-Object-Tracking模型:
- 方法一:
GitHub上下载源代码解压到本地,地址:YOLOv8-DeepSort
- 方法二:
通过git clone 的方式下载,即在终端中输入如下指令进行下载:
git clone https://github.com/junhongnb/YOLOv8-DeepSort-Object-Tracking.git
在终端中进行如下下载:
模型会下载到当前目录下:
进入该目录下,可以看到如下内容:
1.3 依赖安装
- 终端目录指令进入下载的模型文件夹中,如下:
cd YOLOv8-DeepSort-Object-Tracking/
- 然后安装依赖:
pip install -e '.[dev]'
- 如下:
2、相关权重文件下载
2.1 下载deep_sort_pytorch文件
首先进入/YOLOv8-DeepSort-Object-Tracking/ultralytics/yolo/v8/detect/目录下,然后下载deep_sort_pytorch文件,deep_sort_pytorch文件可以通过本地下载解压的方式下载,也可以通过git clone 的方式下载,如下:deep_sort_pytorch 或者 deep_sort_pytorch源码
cd ./ultralytics/yolo/v8/detect/
git clone https://github.com/junhongnb/deep_sort_pytorch.git
- 演示如下:
- 在目录中就可以看到此文件:
2.2 数据集准备
数据集如何制作的参考我另外一篇文章:【目标追踪1】一、基于YOLOv8的目标追踪-数据集标注(YOLOv8-DeepSORT-Object-Tracking目标跟踪训练自己的数据集之数据集标注)-CSDN博客
或者我自己制作并处理好的数据集,可以用于测试先跑通模型,再去自己制作数据集,数据集如下:datasets.zip
将datasets文件放置到/YOLOv8-DeepSort-Object-Tracking/ultralytics/yolo/v8/detect/目录下,然后解压:
unzip datasets.zip -d datasets
- 解压结果如下:
2.3 修改配置文件
找到该目录下的data.yaml文件,假如我数据集的结构如下:
datasets
--train
--images
--xx.jpg
--yy.jpg...
--labels
--xx.txt
--yy.txt...
--val
--images
...
--labels
...
--test
--images
...
则配置文件如下:
2.4 下载yolov8预训练权重文件
其实这一步是不需要下载的,启动模型训练的时候,如果没有,模型会自行下载,如下:
但是有时候这种方式下载过慢,所以就需要本地下载上传,yolov8预训练权重地址:yolov8l.pt
手动下载下来,放置到如下目录:
/YOLOv8-DeepSort-Object-Tracking/ultralytics/yolo/v8/detect/weights/yolov8l.pt
如图:
3、模型训练
至此,准备工作已经准备完毕,接下来是开始进行模型训练。
3.1 模型训练
模型训练指令:
python train.py model=./weights/yolov8l.pt data=./data.yaml epochs=10 imgsz=640
- model=./weights/yolov8l.pt:指定预训练权重的位置
- data=./data.yaml:指定配置文件的位置
- epochs=10:训练的轮数
- imgsz=640:图片尺寸大小
- 训练如下图所示:
3.2 训练结果解读
4、模型评估
4.1 预训练权重文件介绍
接下来是进行模型评估,模型训练好后,会在
/YOLOv8-DeepSORT-Object-Tracking/runs/detect/train/weights/目录下生成两个.pt权重文件:
包括 best.pt
和 last.pt
(1)best.pt
- 用途:
best.pt
文件保存的是在整个训练过程中验证集上表现最好的模型权重。 - 特点:
- 在每个训练周期(epoch)结束时,模型会评估其在验证集上的性能。
- 如果当前周期的性能(通常是指 mAP,即平均精度均值)超过了之前记录的最佳性能,那么当前的模型权重会被保存为
best.pt
。 - 因此,
best.pt
文件通常代表了模型在验证集上性能最佳的状态。
(2)last.pt
- 用途:
last.pt
文件保存的是训练过程中的最后一个周期的模型权重。 - 特点:
- 无论当前周期的性能如何,每个训练周期结束时都会更新
last.pt
文件。 - 因此,
last.pt
文件包含了训练结束时的最新模型权重。 - 这个文件对于继续训练或微调模型非常有用,因为它保留了最新的训练状态。
- 无论当前周期的性能如何,每个训练周期结束时都会更新
(3)区别总结
best.pt
:保存的是验证集上表现最好的模型权重,代表了模型的最佳性能。last.pt
:保存的是训练过程中的最后一个周期的模型权重,代表了训练结束时的最新状态。
(4)使用场景
- 评估和测试:如果你希望使用在验证集上表现最好的模型进行评估或测试,应该选择
best.pt
。 - 继续训练:如果你希望从上次训练的状态继续训练或进行微调,应该选择
last.pt
。
所以进行模型评估,使用的是best.pt文件来进行模型评估。
4.1 模型评估
模型评估指令如下:
python val.py model='/mnt/workspace/YOLOv8-DeepSORT-Object-Tracking/runs/detect/train/weights/best.pt' data=./data.yaml
#或者
python val.py model='../../../../runs/detect/train/weights/best.pt' data=./data.yaml
解释:
- model='xxx./runs/detect/train/weights/best.pt':预训练权重路径
- data=./data.yaml:配置文件路径
- 模型评估如下图所示:
评估结果保存在如下路径:xx/YOLOv8-DeepSort-Object-Tracking/runs/detect/train2:
如F1_curve.png:
就不一一展示了,感兴趣的自行去运行尝试。
注意模型评估后是保存到最新的train文件夹下的,不是固定的train2,比如我运行多次后是保存在最新的train5文件夹下的,总之,训练还是评估,的结果都在最新的trainx文件夹下,多次运行train后面的数字会一直累加:
5、模型预测
5.1 预测视频准备
在./ultralytics/yolo/v8/detect/目录下新建一个video文件夹,不需要预测的视频文件放置到该文件夹下,如下图所示:
5.2 下载ckpt.t7文件
(1)什么是ckpt.t7文件?
ckpt.t7
文件是用于 ReID(Re-Identification)任务的预训练权重文件。具体来说,这个文件包含了一个用于行人重识别(Person Re-Identification)的模型的权重。
(2)ckpt.t7文件下载
下载ckpt.t7文件:
通过百度网盘分享的文件:ckpt.t7
链接:https://pan.baidu.com/s/1QflXzs-e08GLd5F_etCYZA?pwd=b5v0
提取码:b5v0
百度网盘下载的慢的话,可以:快速下载ckpt.t7
终端路径进入到/ultralytics/yolo/v8/detect/目录下创建checkpoint目录:
#创建文件夹
mkdir ./deep_sort_pytorch/deep_sort/deep/checkpoint
将下载的ckpt.t7文件放置到该目录下:
5.3 目标跟踪(预测)
目标跟踪预测指令:
python predict.py model='../../../../runs/detect/train3/weights/best.pt' source='./video/test.mp4'
解释:
- model='../../../../runs/detect/train3/weights/best.pt' :训练好的权重的路径
- source='./video/test.mp4':需要预测的视频
- 预测成功后的结果如下:
可以发现预测好的视频存在了YOLOv8-DeepSort-Object-Tracking/runs/detect/train4路径下
预测好的视频:
视频预测的结果:
至此,与YOLOv8+DeepSort的目标跟踪实验就到此结束。