# 基于YOLO与Deepsort的实时多目标跟踪 **Repository Path**: zg_buctedu/YOLO_sort ## Basic Information - **Project Name**: 基于YOLO与Deepsort的实时多目标跟踪 - **Description**: 该项目C++实现的多目标跟踪,旨在实现多目标实时跟踪与检测,集成了YOLO与DeepSORT算法。该项目具有灵活性,可同时部署在Jetson系列产品和X86服务器上。采用了高效的TensorRT库,实现了YOLO和DeepSORT算法的目标跟踪加速。在第一阶段,目标检测前处理借助CUDA加速,以达到超过100帧每秒的实时性能。这个项目的设计旨在在不同硬件平台上实现高性能目标检测和跟踪。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 18 - **Forks**: 5 - **Created**: 2024-04-04 - **Last Updated**: 2025-07-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于YOLO与Deepsort的实时多目标跟踪 ## 介绍 该项目旨在利用C++实现多目标跟踪系统,目标在于实现高效的多目标实时跟踪与检测,其中融合了`YOLO(You Only Look Once)`和`DeepSORT(Deep Simple Online and Realtime Tracking)`算法。该系统具备高度灵活性,能够无缝部署在Jetson系列产品和X86服务器上。为了提高算法效率,采用了`TensorRT`库进行目标跟踪加速,并通过CUDA加速实现了目标检测前处理,使系统能够达到超过70帧每秒的实时性能。整体设计旨在实现在不同硬件平台上的高性能目标检测与跟踪。 ![Alt Text](https://gitee.com/zg_buctedu/YOLO_sort/raw/master/Multiple_target_tracking/catkin_yolosort/src/yolosort/test_videos/Demo1.gif) ## 模型文件 这个项目中,需要两个模型,检测的`yolov5`和`deepsort`特征提取的`ckpt.t7`,对于`yolov5`,选择[yolov5s](https://github.com/ultralytics/yolov5)模型,并通过`yolov5s->yolovs.wts->yolov5.plan` ,获取plan file。deepsort模型在官方仓库里有训练好的模型[deepsort模型](https://github.com/ZQPei/deep_sort_pytorch)。如果要训练自己的模型,下面是我转换好的`deepsort.plan`,`yolov5s.plan`文件,可以直接使用。 | 模型 | 链接 | | ---------- | ----------| | 百度云| [deepsort.plan](https://pan.baidu.com/s/1gcsRGn7GbcAcDUUdmOjhAA?pwd=1z2g) (pwd:1z2g) | | 百度云| [yolov5s.plan](https://pan.baidu.com/s/1DV0n3-plEX5hzmXyP5GFkA?pwd=zg12) (pwd:zg12) | * `yolov5s->yolovs.wts->yolov5.plan`过程可参考[tensort/yolov5-v5.0](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v5.0/yolov5) * 获取`deepsort.plan`文件需要先获取[ckpt.t7](https://pan.baidu.com/s/1SN9Ti5uJy1xBlLjE9gGO9A?pwd=12zg)(pwd:12zg),经过以下步骤,可获得`deepsort.plan` ```python git clone https://github.com/RichardoMrMu/deepsort-tensorrt.git // 根据github的说明 cp {deepsort-tensorrt}/exportOnnx.py {deep_sort_pytorch}/ python3 exportOnnx.py mv {deep_sort_pytorch}/deepsort.onnx {deepsort-tensorrt}/resources cd {deepsort-tensorrt} mkdir build cd build cmake .. make ./onnx2engine ../resources/deepsort.onnx ../resources/deepsort.plan // test ./demo ../resource/deepsort.plan ../resources/track.txt ``` ## 编译及运行 ```python //下载本地仓库 git clone https://gitee.com/zg_buctedu/YOLO_sort.git cd Multiple_target_tracking/Deepsort-YOLOv5-TensorRT-main/yolov5-deepsort-tensorrt mkdir resources cp yolov5s.plan deepsort.plan resources/ // 在编译运行之前修改 ./src/main.cpp char* yolo_engine = ""; char* sort_engine = ""; 为自己的模型文件路径 mkdir build // cv::VideoCapture capture(video_path);将video_path换成mp4所在的路径,或者如果使用usb摄像头,就写成cv::VideoCapture capture(0) // 然后执行编译链接即可 cmake .. make -j8 // make成功后,会在build文件夹下生成一个yolosort二进制文件 运行即可 ./yolosort // 运行二进制文件 ``` ## 图文描述的多目标跟踪-Demo展示 该项目采用了双线程处理策略,以实现多目标跟踪与实时图文描述的功能。具体而言,通过将图像的每一帧分配给一个线程进行图文描述处理,同时在主线程中处理目标跟踪任务,从而实现了实时效果的目的。此外,为了成功将该算法部署到机器人平台上,并更好地与ROS通信结合,我们提供了相应的ROS功能包。 ![Alt Text](https://gitee.com/zg_buctedu/YOLO_sort/raw/master/Multiple_target_tracking/catkin_yolosort/src/yolosort/test_videos/Demo2.gif) ## 依赖环境说明 在`Jetson Xavier nx`上完整实现过,同样可以在`ubuntu`系统上实现。 ```python Jetson nano or Jetson Xavier nx python3 with default(jetson nano or jetson xavier nx has default python3 with tensorrt 8.4.3.1 ) tensorrt 8.4.3.1 torch 1.12.0 torchvision 0.13.0 torch2trt 0.3.0 onnx 1.13.1 opencv-python 4.8.1.78 protobuf 3.20.3 scipy 1.10.0 numpy 1.22.0 ``` ## 参考项目 * [YOLACTplus_Blind_Nav_System](https://gitee.com/zg_buctedu/YOLACTplus_Blind_Nav_System) * [Crystal_Particle_Diameter_Statistics](https://gitee.com/zg_buctedu/Crystal_Particle_Diameter_Statistics_UI) * [yolov5](https://github.com/ultralytics/yolov5) * [deepsort](https://github.com/ZQPei/deep_sort_pytorch) * [yolov5-deepsort-tensorrt](https://github.com/RichardoMrMu/yolov5-deepsort-tensorrt)