【目标追踪1】基于YOLOv8+DeepSort的目标追踪-YOLOv8-DeepSORT-Object-Tracking模型训练自己的数据集的史诗级详细教程

说明:

        本文主要讲解的是基于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

         或者:YOLOv8+Deepsort+Pytorch源码

  • 方法二:

        通过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 训练结果解读

如上图,可以看到训练的结果存放在如下路径: YOLOv8-DeepSORT-Object-Tracking/runs/detect/train/,进入该路径进行查看,如下图:

4、模型评估

4.1 预训练权重文件介绍

接下来是进行模型评估,模型训练好后,会在

/YOLOv8-DeepSORT-Object-Tracking/runs/detect/train/weights/目录下生成两个.pt权重文件:

包括 best.ptlast.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的目标跟踪实验就到此结束。

YOLOv8DeepSORT是多目标追踪中常用的两种技术,结合使用可以实现高效的多目标追踪。以下是对YOLOv8DeepSORT的介绍以及如何在C++中实现多目标追踪的简要说明。 ### YOLOv8 YOLOv8(You Only Look Once version 8)是一种实时的目标检测算法,具有高精度和高速度的特点。它通过卷积神经网络(CNN)来检测图像中的目标,并返回目标的边界框和类别信息。 ### DeepSORT DeepSORT是一种多目标追踪算法,基于SORT(Simple Online and Realtime Tracking)算法进行改进。DeepSORT通过结合目标的外观信息和运动信息来实现更稳定的多目标追踪。它使用深度学习模型来提取目标的特征向量,并通过这些特征向量来进行目标匹配和身份保持。 ### C++实现 在C++中实现YOLOv8DeepSORT的多目标追踪需要以下几个步骤: 1. **环境配置**: - 安装C++编译器(如g++或clang++)。 - 安装OpenCV库,用于图像处理和视频读取。 - 安装深度学习框架(如TensorFlow C++ API或PyTorch C++ API),用于加载和使用YOLOv8DeepSORT模型。 2. **加载YOLOv8模型**: - 使用深度学习框架加载预训练YOLOv8模型- 对输入图像进行预处理(如缩放、归一化等)。 - 通过模型进行前向传播,得到目标检测结果。 3. **实现DeepSORT**: - 使用深度学习框架加载预训练DeepSORT特征提取模型- 提取目标的外观特征向量。 - 实现卡尔曼滤波器(Kalman Filter)进行目标运动预测。 - 实现匈牙利算法(Hungarian Algorithm)进行目标匹配。 4. **多目标追踪流程**: - 读取视频帧。 - 对每一帧进行目标检测。 - 提取每个目标的外观特征。 - 更新卡尔曼滤波器。 - 进行目标匹配和身份保持。 - 绘制追踪结果。 ### 示例代码 以下是一个简单的示例代码,展示了如何在C++中结合使用YOLOv8DeepSORT进行多目标追踪: ```cpp #include <opencv2/opencv.hpp> #include <tensorflow/c/c_api.h> #include <vector> // 加载YOLOv8模型并进行目标检测 std::vector<Object> DetectWithYOLOv8(TF_Session* session, const cv::Mat& frame); // 加载DeepSORT模型并提取特征 std::vector<float> ExtractFeatureWithDeepSORT(TF_Session* session, const cv::Mat& frame, const cv::Rect& bbox); // 多目标追踪类 class MultiObjectTracker { public: MultiObjectTracker(); void Update(const std::vector<Object>& detections, const cv::Mat& frame); void Draw(cv::Mat& frame); private: // 实现卡尔曼滤波器和匈牙利算法 // ... }; int main() { // 初始化TensorFlow会话 TF_Session* yolov8_session = LoadYOLOv8Model(); TF_Session* deepsort_session = LoadDeepSORTModel(); cv::VideoCapture cap("input_video.mp4"); if (!cap.isOpened()) { std::cerr << "Error opening video file" << std::endl; return -1; } MultiObjectTracker tracker; cv::Mat frame; while (cap.read(frame)) { std::vector<Object> detections = DetectWithYOLOv8(yolov8_session, frame); tracker.Update(detections, frame); tracker.Draw(frame); cv::imshow("Multi-Object Tracking", frame); if (cv::waitKey(1) == 27) break; // 按下ESC键退出 } // 释放资源 TF_DeleteSession(yolov8_session, nullptr); TF_DeleteSession(deepsort_session, nullptr); return 0; } ``` ###
评论 70
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值