应用YOLOV4 - DeepSort 实现目标跟踪

2023-05-16

转载自 https://cloud.tencent.com/developer/article/1706259

本文分享利用yolov4+deepsort实现目标跟踪,主要是讲解如何使用,具体原理可以根据文中的参考资料更加深入学习。目前主流的趋势是将算法更加易用,让更多人感受到视觉的魅力,也能让更多有意向从事这个领域的人才进入。但受限于某些客观的限制,比如github下载容易失败,谷歌网盘无法下载等,让部分人不得不退却。

因此,我想我的分享的价值就在于感受视觉魅力的“最后一公里”。

完整的权重文件和项目都放在后台了,回复“yolov4” 即可获取。

欢迎分享,帮助更多的小伙伴!

使用YOLOv4、DeepSort和TensorFlow实现的目标跟踪。YOLOv4是一种非常优秀的算法,它使用深卷积神经网络来执行目标检测。更详细的介绍可以参考之前文章。

吊打一切的YOLOv4的tricks汇总!附参考论文下载

今天分享的内容是将YOLOv4的输出输入到Deep-SORT(Simple Online and Realtime Tracking with a Deep Association Metric),以创建一个高精度的目标跟踪器。

demo效果展示:

 


开始实操

1、克隆项目


git clone https://github.com/theAIGuysCode/yolov4-deepsort.git
  

2、环境配置

从github项目的requirements-gpu.txt 文件我们可以知道所需要的依赖文件内容(这里以GPU版本为例,也可以选择安装requirements.txt ):


tensorflow-gpu==2.3.0rc0
opencv-python==4.1.1.26
lxml
tqdm
absl-py
matplotlib
easydict
pillow
  

强烈建议使用conda 创建虚拟环境避免污染其他环境


# 创建虚拟环境
conda create xxx
# 激活虚拟环境

# 安装依赖,这里使用的TensorFlow 2 
pip install -r requirements-gpu.txt
  

PS:建议使用的 cuda 版本是 10.1

可能存在的问题,tensorflow和opencv下载太慢


# 通过指定源来下载https://www.cnblogs.com/whw1314/p/11748096.html
# 以pip 安装 tensorflow-gpu==2.3.0rc0 为例:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade tensorflow-gpu==2.3.0rc0
  

3、预训练模型下载

我们的目标跟踪器使用 YOLOv4 进行目标检测,然后使用 deep sort 进行跟踪。这里提供官方的 YOLOv4 目标检测模型 作为预训练模型,该模型能够检测 80 类物体。

为了便于演示,我们将使用预训练的权重作为我们的跟踪器。下载预训练的yolov4.weights文件:

https://drive.google.com/open?id=1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT

将下载好的权重文件复制到 data 文件夹下。

PS:如果你向使用 yolov4-tiny.weights,一个更小的模型,运行更快但精度略低一些,可以在这里下载

https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights

使用 YOLOv4 运行跟踪器

为了将 YOLOv4 应用到目标跟踪上,首先我们需要将权重文件转换 成对应的TensorFlow 模型,并将保存到 checkpoints 文件夹中。然后我们需要运行 object_tracker.py 来实现目标跟踪。


# Convert darknet weights to tensorflow model
python save_model.py --model yolov4 

# Run yolov4 deep sort object tracker on video
python object_tracker.py --video ./data/video/test.mp4 --output ./outputs/demo.avi --model yolov4

# Run yolov4 deep sort object tracker on webcam (set video flag to 0)
python object_tracker.py --video 0 --output ./outputs/webcam.avi --model yolov4
  

--output 后面接的是目标跟踪输出结果视频文件的存储路径。

当然如果你希望使用YOLOv4-Tiny 可以参考下面的操作

使用 YOLOv4-Tiny 运行跟踪器

下面的命令将可以运行yolov4-tiny模型。Yolov4-tiny允许你获得一个更高的速度(FPS)的跟踪器,但可能在精度上有一点损失。确保你已经下载了权重文件,并将其添加到“data”文件夹中。


# save yolov4-tiny model
python save_model.py --weights ./data/yolov4-tiny.weights --output ./checkpoints/yolov4-tiny-416 --model yolov4 --tiny

# Run yolov4-tiny object tracker
python object_tracker.py --weights ./checkpoints/yolov4-tiny-416 --model yolov4 --video ./data/video/test.mp4 --output ./outputs/tiny.avi --tiny
  

输出结果

如上所述,生成的视频将保存到设置 --output 命令行标志路径的位置。这里把它设置为保存到‘output’文件夹。你也可以通过调整--output_format标志来改变保存的视频类型,默认情况下它被设置为AVI编解码器,也就是XVID。

示例视频显示跟踪所有coco数据集类:

 

目标跟踪器跟踪的类别

默认情况下,代码被设置为跟踪coco数据集中的所有80个类,这是预先训练好的YOLOv4模型所使用的。但是,可以简单地调整几行代码,以跟踪80个类中的任意一个或任意一个组合。只选择最常见的person类或car类非常容易。

要自定义选择的类,所需要做的就是注释掉object_tracker.py的第159行和第162行allowed_classes列表,并需要添加想要跟踪的任何类。这些类可以是模型训练的80个类中的任何一个,可以在data/classes/ cocoa .names文件中看有那些跟踪类

这个示例将允许跟踪person和car的类。

 

目标跟踪demo将跟踪的类别设置为“person”

目标跟踪demo将跟踪的类别设置为“car”

命令行参数参考


save_model.py:
  --weights: path to weights file
    (default: './data/yolov4.weights')
  --output: path to output
    (default: './checkpoints/yolov4-416')
  --[no]tiny: yolov4 or yolov4-tiny
    (default: 'False')
  --input_size: define input size of export model
    (default: 416)
  --framework: what framework to use (tf, trt, tflite)
    (default: tf)
  --model: yolov3 or yolov4
    (default: yolov4)
    
 object_tracker.py:
  --video: path to input video (use 0 for webcam)
    (default: './data/video/test.mp4')
  --output: path to output video (remember to set right codec for given format. e.g. XVID for .avi)
    (default: None)
  --output_format: codec used in VideoWriter when saving video to file
    (default: 'XVID)
  --[no]tiny: yolov4 or yolov4-tiny
    (default: 'false')
  --weights: path to weights file
    (default: './checkpoints/yolov4-416')
  --framework: what framework to use (tf, trt, tflite)
    (default: tf)
  --model: yolov3 or yolov4
    (default: yolov4)
  --size: resize images to
    (default: 416)
  --iou: iou threshold
    (default: 0.45)
  --score: confidence threshold
    (default: 0.50)
  --dont_show: dont show video output
    (default: False)
  --info: print detailed info about tracked objects
    (default: False)  

参考资料

  • tensorflow-yolov4-tflite:https://github.com/hunglc007/tensorflow-yolov4-tflite
  • Deep SORT Repository: https://github.com/nwojke/deep_sort

https://github.com/theAIGuysCode/yolov4-deepsort

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用YOLOV4 - DeepSort 实现目标跟踪 的相关文章

  • mysql-server 依赖 mysql-server-5.5 解决方案

    问题 ubuntu14 04 3安装mysql时报错 xff1a sudo apt get install mysql server mysql client 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 有
  • 生成aruco码方法

    有两种方法得到想要的aruco码 xff1a 1 直接通过网址得到 http chev me arucogen xff08 不过只有四个格式 xff09 网页截图为 xff1a 2 通过运行C 43 43 代码得到 利用C 43 43 生成
  • 超详细c语言简化tcp通信接口(多线程实现一个服务端处理多个客户端服务)

    超详细c语言tcp通信接口 1 可下载源码 xff08 客户端 服务端通信 xff09 2 说明3 接口代码4 客户端通信main client demo c5 服务端通信main server demo c 1 可下载源码 xff08 客
  • 怎么在视频上叠加字幕和Logo--技术实现1

    这篇文章我给大家讲解的这种字幕叠加和Logo叠加方法是在渲染视频的时候 画 上去的 xff0c 其实是通过某种API将OSD和Logo绘制到显卡缓存 xff0c 然后提交缓存到屏幕 我们知道渲染视频有几种常用的API xff1a GDI x
  • opencv源码编译及配置完整版教程(win10+vs2019+opencv-4.4.0+opencv_contrib-4.4.0)

    opencv源码编译及配置完整版教程 xff08 win10 43 vs2019 43 opencv 4 4 0 43 opencv contrib 4 4 0 xff09 一 下载vs2019 官网下载 xff1a https visua
  • c++使用多个库的头文件内容里有名字相同问题

    首先说下结构体 xff0c 如果两个头文件定义的结构体内容不一样 xff0c 但名字一样 xff0c 当一个文件同时包含着两个头文件的时候 xff0c 就会报如下错误 xff1a 此时 xff0c 在不修改头文件的情况下 最好不要改动 xf
  • 蓝牙模块 HC08_两个STM32开发板无线通信

    一 HC08重要参数 蓝牙4 0 xff0c BLE xff0c 主从一体 xff1b 模块上电后 xff0c 启动需要150ms xff1b UART波特率 xff1a 9600默认 xff1b 空中速率 xff1a 1Mbps 与HC0
  • STM32 --- 使用内部FLASH存储数据

    本文记录了对一些知识点的理解 操作方法 xff0c 如有错误 xff0c 请务必批评指正 xff01 xff01 最终的测试截图 xff1a 目录 一 内部FLASH要点 关于地址 xff1a 关于解锁 xff1a 关于擦除 xff1a 关
  • Keil 代码自动格式化对齐整理 AStyle设置图解

    代码对齐 xff0c 使用前后效果 xff1a 建议 设置成快捷键 xff1a CTRL 43 S xff0c 即可保存 43 对齐 一 下载插件 https sourceforge net projects astyle files as
  • keil5 烧录程序到单片机的方法

    Keil是一种常用的单片机开发工具 xff0c 支持多种单片机芯片 下面详细说明Keil5如何烧录程序到单片机的方法 编译程序 首先 xff0c 在Keil5中打开编写好的程序工程 xff0c 进行编译 编译生成的可执行文件是 hex或 b
  • 基于STM32 + SYN6288语音播报

    完整代码下载 https download csdn net download zhouml msn 85592868 一 接线示例 xff1a 二 模块重点 xff1a 1 xff1a 5V供电 xff0c 功耗约120mA 带图中小喇叭
  • STM32开发---ADC单通道电压采集

    代码zip下载 xff1a https download csdn net download zhouml msn 86666457 spm 61 1001 2014 3001 5501 STM32 ADC单通道电压数据采集 xff0c 直
  • Keil仿真调试Debug不能放断点_图解

    前提 xff1a 正常连接了调试器 43 开发板 xff0c 才能进入Debug模式 xff01 xff01 xff01 一 正常情况 当Keil进入Debug模式 xff0c 正常可以放置断点时的界面 xff0c 是下面这样的 xff1a
  • 无人机(2)_电机

    型号值 如2212 前两位 电机外径 后两位 转子高度KV值 电机空转 时 电压每提高1V 电机转速提高 800转 分钟无刷电机 电机分有刷和无刷 无人机都是无刷 电机 贵 力气大 耐用 电池节数 很重要 一节是4 2V电调大小 A越大越好
  • Linux下运用opencv的简单图像编程

    文章目录 Linux下运用opencv的简单图像编程一 编写一个打开图片进行特效显示的代码 一 用普通方式编译程序1 准备工作 xff1a 2 准备一张图片 xff0c 移到相同目录下3 编译程序4 运行程序 二 用make 43 make
  • 简单stm32程序编写以及调试

    简单stm32程序编写以及调试 一 环境配置 1 MDK的安装 MDK xff08 Microcontroller Development Kit xff09 是针对ARM处理器 xff0c 特别是Cortex M内核处理器的最佳开发工具
  • STM32以中断的方式点亮LED小灯(标准库)

    STM32以中断的方式点亮LED小灯 xff08 标准库 xff09 文章目录 STM32以中断的方式点亮LED小灯 xff08 标准库 xff09 一 认识中断1 中断优先级 xff1a 2 中断嵌套 xff1a 3 中断执行流程4 中断
  • STM32 I2C_OLED显示汉字及屏幕滚动

    STM32 I2C OLED显示汉字及屏幕滚动 文章目录 STM32 I2C OLED显示汉字及屏幕滚动一 I2C以及AHT20温湿度传感器介绍二 用0 96寸OLED屏幕显示数据1 OLED介绍2 样例测试 三 汉字编码原理编码排序A0A
  • # FPGA编程入门

    FPGA编程入门 文章目录 FPGA编程入门一 1位全加器1 原理图1 1原理图1 2 全加器 2 verilog实现1位全加器2 1 代码2 2 编译 xff0c 查看RTL2 3 仿真实现 二 烧录三 4位全加器1 原理图实现4位全加器
  • 基于NIOS-II软核与verilog语言的流水灯实现

    基于NIOS II软核与verilog语言的流水灯实现 文章目录 基于NIOS II软核与verilog语言的流水灯实现1 实验目的2 实验设备3 实验内容4 软核设计4 1 新建一个工程4 2 Qsys 系统设计4 3 进行逻辑连接4 3

随机推荐

  • 处理器的大小端及位序

    大端Big Endian xff1a 数据的高字节存储到低位地址中 小端little Endian xff1a 数据的低字节存储到低位地址中 举例说明 xff1a 32位16进制数据为 61 0x12345678 xff0c 大端存储 地址
  • # VGA协议实践

    VGA协议实践 文章目录 VGA协议实践1 VGA介绍2 ALTPLL3 字模与图像生成4 ROM5 代码5 1 vga驱动模块5 2 显示数据生成模块5 3 按键消抖模块5 4 顶层模块5 5 TCL绑定引脚代码 6 效果7 总结8 参考
  • 串口扩展芯片

    串口扩展芯片 WK2124 实现SPI桥接 扩展4个增强功能串口 xff08 UART xff09 功能 扩展的子通道具备以下功能特点 xff1a 每个子通道UART的波特率 字长 校验格式可以独立设置 xff0c 最高可以提供2Mbps的
  • 手把手教你学51单片机_第 一、二章

    MCU CPU Flash 8kByte EMMC 64G 程序存储空间 xff0c 容量大 xff0c 掉电数据不丢失 RAM 512Byte DDR 4G 代码运行时中间变量的存取区 xff0c 无限次读写 xff0c 且读写速度快 x
  • 九天揽月带你玩转Ardupilot 的EKF2纸老虎

    目录 目录 摘要 1 kalman基础知识储备 2 ardupilot代码EKF流程学习 3 下面重点 逐一分析各个函数 摘要 本文主要记录自己学习ardupilot的ekf2代码的过程 xff0c 相信很多人想移植或者学习ekf2 看到眼
  • 在C++中定义全局变量时避免重复定义

    问题 xff1a 如何在C 43 43 中定义全局变量时避免重复定义呢 今天遇到问题 xff0c 全局变量重定义错误 xff0c 印象中记得要加extern xff0c 但是怎么都不对 xff0c 找资料后得到了解决方案 xff0c 记之
  • Ubuntu16.04下的FireFox浏览器无法查看网页视频的原因及解决方法

    Ubuntu16 04自带的firefox浏览器 在搭建好其他环境后 xff0c 我通过firefox去廖雪峰老师的官网查看python的教程 xff0c 发现无法打开网页中的视频 此时 xff0c 我又通过firefox浏览器中进入了腾讯
  • 【嵌入式模块】MPU6050

    文章目录 0 前言1 MPU6050概述1 1 基本概述1 2 引脚和常用原理图 2 代码3 姿态解算3 1 欧拉角 amp 旋转矩阵3 2 DMP 3 校正 0 前言 作为惯性传感器中入门级别的器件 xff0c MPU6050凭借它出色的
  • 7-13 出栈序列的合法性(25 分)(解决此类题的重要规律)

    给定一个最大容量为 M 的堆栈 xff0c 将 N 个数字按 1 2 3 N 的顺序入栈 xff0c 允许按任何顺序出栈 xff0c 则哪些数字序列是不可能得到的 xff1f 例如给定 M 61 5 N 61 7 xff0c 则我们有可能得
  • STL-map的简单用法(以及如何使用sort将map进行排序)

    map是不可排序的 xff0c 可是凡事都不是绝对的 xff0c 现在我就告诉大家如何将map进行简单的排序以及其的简单用法 一 map的常用方式 xff1a mapname clear xff09 xff1a 清空map mapname
  • 初识c语言的条件判断和循环。

    刚开始接触c语言的循环 xff0c 也许你会烦躁 xff0c 但是你只需要静下心来再看一遍 xff0c 你就会有更多的收获 xff0c 加油 xff01 xff08 凡事开头难 xff0c 迈过第一关 xff0c 你就是最棒的 xff01
  • digest鉴权

    摘要 式认证 xff08 Digest authentication xff09 是一个简单的认证机制 xff0c 最初是为HTTP协议开发的 xff0c 因而也常叫做HTTP摘要 xff0c 在RFC2671中描述 其身份验证机制很简单
  • 超长整型除法运算

    1017 A除以B 20分 本题要求计算 A B xff0c 其中 A 是不超过 1000 位的正整数 xff0c B 是 1 位正整数 你需要输出商数 Q 和余数 R xff0c 使得 A 61 B Q 43 R 成立 输入格式 xff1
  • 练习2-11 计算分段函数[2] (10分)

    本题目要求计算下列分段函数f x 的值 xff1a f2 11 注 xff1a 可在头文件中包含math h xff0c 并调用sqrt函数求平方根 xff0c 调用pow函数求幂 输入格式 输入在一行中给出实数x 输出格式 在一行中按 f
  • 习题4-2 求幂级数展开的部分和 (20分)

    已知函数e x可以展开为幂级数1 43 x 43 x 2 2 43 x 3 3 43 43 x k k 43 现给定一个实数x xff0c 要求利用此幂级数部分和求e x 的近似值 xff0c 求和一直继续到最后一项的绝对值小于0 0000
  • 练习7-10 查找指定字符 (15分)

    本题要求编写程序 xff0c 从给定字符串中查找某指定的字符 输入格式 xff1a 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 xff08 不超过80个字符 xff09 输出格式 xff1a 如果找到 xff0c 在
  • 习题9-5 通讯录排序 (20分)

    输入n个朋友的信息 xff0c 包括姓名 生日 电话号码 xff0c 本题要求编写程序 xff0c 按照年龄从大到小的顺序依次输出通讯录 题目保证所有人的生日均不相同 输入格式 输入第一行给出正整数n xff08 lt 10 xff09 随
  • C++提高运行速度

    ios base span class token punctuation span span class token punctuation span span class token function sync with stdio s
  • Java小项目(功能齐全)-停车场管理系统(中英文版)

    一 项目目的 xff1a 停车场管理系统 对停车场进行更系统的管理 xff0c 使整个过程更加高效有序 二 主要功能 xff1a 1 进入停车场 2 离开停车场 3 搜索信息 4 停车场当前车位明细查询 5 历史查询 三 附加功能 xff1
  • 应用YOLOV4 - DeepSort 实现目标跟踪

    转载自 https cloud tencent com developer article 1706259 本文分享利用yolov4 43 deepsort实现目标跟踪 xff0c 主要是讲解如何使用 xff0c 具体原理可以根据文中的参考