当前位置: 首页 > news >正文

【YOLO11】【DeepSort】【NCNN】使用YOLOv11和DeepSort进行行人目标跟踪。(基于ncnn框架,c++实现)

yolov11_deepsort_ncnn

使用YOLOv11和DeepSort进行行人目标跟踪。(基于ncnn框架,c++实现)

Github仓库:https://github.com/zhahoi/yolov11_deepsort_ncnn

写在前面

当前大部分Tracking相关的项目都是基于TensorRT部署的,使用NCNN框架部署的Tracking很少很少,但是对我来说,我更喜欢NCNN框架,因为平台和环境依赖性没那么高,因此想尝试自己用NCNN框架实现一版跟踪项目。

使用的目标检测为YOLOv11的nano版本,而DeepSort算法大部分是参考自yolov5_deepsort_ncnn_qt项目,不过自己对其进行了部分修改,使其更符合本项目的实现。模型的训练权重是官方提供的预训练权重,自己尝试从pt转到ncnn平台,因为有一些参考教程所以没那么复杂。

老实说Deepsort算法的id跟踪极大程度上依赖于提取的外观特征,我觉得这个算法其实不是很鲁棒,因为如果被跟踪的物体(人)动作幅度过大地话(从站立->摔倒->站立),这个跟踪id就可以切换好几次。另外Deepsort算法需要调整的参数很多,要想获得一个更好的效果,需要进行多次调整才行。本项目对于该部分没有做那么多的关注,只专注于最基本的实现。

本仓库的测试平台为Visual Studio2019,因为电脑内存的原因,暂时没办法在Ubuntu上尝试部署。如果你是想在嵌入式端部署的话,需要自己做一些额外的工作。

环境配置

  • Visual Studio 2019
  • ncnn-20250503-full-source
  • opencv-3.4.10
  • eigen3

注:并不需要和本仓库代码的配置环境保持一致,可以根据Visual Studio的版本,下载对应的ncnn和opencv-mobile的版本即可。

推理设置

(1)先在Visual Studio新建一个空白工程,将本仓库代码放到该工程中。把本项目中的.h.cpp文件分别导入到头文件源文件中。操作结果如下:

在这里插入图片描述

(2)在工程中载入推理需要依赖的库。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

附加依赖项添加的库如下:

opencv_world3410.lib
ncnn.lib
glslang.lib

(3)选择开始执行,应该在工程的Release的目录下可以成功地生成.exe文件。将测试图像复制到Release下的路径。

在这里插入图片描述

(4)执行推理。

推理脚本如下:

$ YOLOv11-DeepSORT.exe video video_2.mp4   // 推理视频
$ YOLOv11-DeepSORT.exe video 0   // 调用摄像头推理

在这里插入图片描述

推理结果

CSDN不支持上传,可以进入该项目Github的主页查看。

写在后面

  1. 本项目有几个需要重点关注的头文件,分别为deepsort.hyolov11.htracker.h。需要配置权重的位置和一些和跟踪结果相关的参数。
  2. 从上面的GIF中可以很直观地看出,当检测目标摔倒之后,其id切换得很快,这是基于外观跟踪算法一个弊端吧。我个人觉得DeepSort算法适合那种简单的行人检测,如果被检测对象动作过于丰富的话,那结果一定是不好的。
  3. 本项目默认开启了GPU加速,如果没有GPU的话,对于少量检测对象的话,其推理速度影响不大,但是如果是很多检测对象的话,那推理速度可就慢了,因为DeepSort本身就不轻量。
  4. 如果有疑问的话,可以开issue提问。如果觉得这个项目还不错的话麻烦给一个star或者fork,可以让我开心一整天。
  5. 某些把我开源的代码拿去打包出售的人能不能去死一死,做个人好嘛。

Reference

  • yolov5_deepsort_ncnn_qt
  • ncnn-android-yolo11
http://www.dtcms.com/a/314264.html

相关文章:

  • 文件与目录操作命令
  • Kubernetes(k8s)之认识Pod
  • k8s简介
  • Go语言 并发安全sync
  • 深度解析:CPU 与 GPU 上的张量运算,为何“快”与“慢”并非绝对?
  • 亚马逊撤离Google购物广告:重构流量生态的战略博弈
  • 从零开始搞定类与对象(中)
  • 企业架构被大模型重构:大模型驱动下的数字基建革命与机遇
  • 操作系统:RPC 中可能遇到的问题(Issues in RPC)
  • Ubuntu系统VScode实现opencv(c++)图像一维直方图
  • Git如何同步本地与远程仓库并解决冲突
  • C#利用unity游戏引实现开发设备仿真系统步骤
  • 《解构Angular组件变化检测:从自动到手 动的效能突破》
  • Unity Shader编程完全入门指南:从零到实战 C# 实战案例
  • 雷达系统工程学习:自制极化合成孔径雷达无人机
  • 【OpenGL】LearnOpenGL学习笔记03 - 着色器
  • 2025年半导体探针卡市场深度调研:规模数据、竞争格局
  • 防火墙的进阶练习
  • PVE环境对网口和wifi的配置
  • Neo4j 基础语法指南
  • 基于Spring Cloud Gateway和Resilience4j的微服务容错与流量控制实战经验分享
  • javacc学习笔记 03、编译原理实践 - JavaCC解析表达式并生成抽象语法树
  • MySQL5.0数据库管理系统安装部署
  • PCB反焊盘的样子越诡异,高速过孔的性能越好?
  • [自动化Adapt] 父子事件| 冗余过滤 | SQLite | SQLAlchemy | 会话工厂 | Alembic
  • 【物联网】基于树莓派的物联网开发【23】——树莓派安装SQLite嵌入式数据库
  • 秋招笔记-8.4
  • 小实验:按键点灯(中断法)
  • QT的UDP
  • 【数据结构入门】链表