【Deepsort-yolov5实现无人机视觉检测和跟踪】

2023-05-16

Deepsort-yolov5无人机视觉检测和跟踪

    • 1. YOLOv5无人机视觉检测
      • 1.1 训练无人机数据集
      • 1.2无人机检测结果
    • 2. Deepsort跟踪
      • 2.1 算法原理
      • 2.2 无人机跟踪实现
      • 2.3 无人机运动轨迹可视化
      • 2.4 目标质心点保存
      • 2.5目标重识别模型要注意的问题
    • 3. 飞机目标检测

无人机视觉检测和跟踪系列
数据集一
数据集二
数据集三
数据集四
数据集五
数据集六
数据集七
数据集八
无人机视频段
YOLOv5无人机训练权重
YOLOv3无人机训练权重
Darknet-YOLOv3无人机训练权重
Darknet-YOLOv4无人机训练权重
SSD无人机检测训练权重
CenterNet无人机检测训练权重
Deepsort-YOLOv5无人机视觉检测和跟踪代码

1. YOLOv5无人机视觉检测

1.1 训练无人机数据集

  • 准备无人机数据集:需要YOLO格式的标签,若数据标签式VOC,则需要转换;
  • 划分数据集:将数据集划分为训练集train、验证集val、测试集test,其中train和val用于训练,test用于对训练好的模型进行评估,在YOLOv5中,test用于val.py(或者test.py,5版中用于验证的脚本是test.py)对训练好的模型进行验证;
# val.py或者test.py
parser.add_argument('--task', default='test', help='train, val, test, speed or study')
  • 划分好的数据集文件目录结构如下所示,其中images中放图片,lables中放对应的txt格式标签:
    在这里插入图片描述
  • 新建加载数据的配置文件drone.yaml。在YOLOv5项目文件下的data文件夹中新建drone.yaml文件,其内容如下:
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
#path: ../datasets/coco128  # dataset root dir
train: ../drone-all/images/train  # train images (relative to 'path') 128 images
val: ../drone-all/images/val  # val images (relative to 'path') 128 images
test: ../drone-all/images/test # test images (relative to 'path') 128 images(optional)

# Classes
nc: 1 # number of classes
names: [ 'drone']  # class names
  • 然后修改train.py中的参数行中的--weights--data,--epochs,--batch-size,就运行trian.py就开始训练了。修改后的参数如下:
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
    parser.add_argument('--data', type=str, default='data/drone.yaml', help='data.yaml path')
    parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
    parser.add_argument('--epochs', type=int, default=150)
    parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs')
    parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--notest', action='store_true', help='only test final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
    parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')
    parser.add_argument('--project', default='runs/train', help='save to project/name')
    parser.add_argument('--entity', default=None, help='W&B entity')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--linear-lr', action='store_true', help='linear LR')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
    parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
    parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
    parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
    opt = parser.parse_args()

1.2无人机检测结果

训练完成后,权重文件以及训练过程中的各种指标曲线图保存在runs/train/exp文件夹中;然后在detect.py中修改一些参数加载训练好的无人机pt权重文件,运行detect.py就可以实现无人机的检测,需要修改的部分如下:

parser = argparse.ArgumentParser()
    parser.add_argument('--weights', nargs='+', type=str, default='runs/exp/weights/best.pt', help='model.pt path(s)')
    parser.add_argument('--source', type=str, default='./drone_imgs', help='source')  # file/folder, 0 for webcam

其中,“--weight” 参数是加载训练好的无人机检测权重文件;'--source'参数是设置要检测的图片或者视频,或者调用摄像头实时检测无人机。'--source'使用方法如下:

Usage - sources:
    $ python detect.py --weights yolov5s.pt --source 0                               # webcam
                                                     img.jpg                         # image
                                                     vid.mp4                         # video
                                                     path/                           # directory
                                                     'path/*.jpg'                    # glob
                                                     'https://youtu.be/Zgi9g1ksQHc'  # YouTube
                                                     'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

无人机检测结果示例如下图所示:
在这里插入图片描述

2. Deepsort跟踪

2.1 算法原理

Sort算法利用卡尔曼滤波和匈牙利匹配,将 跟踪结果和检测结果之间的 IoU 作为代价矩阵,实现 了一种简单高效并且实用的跟踪范式。
但是 SORT 算 法的缺陷在于所使用的关联度量(Association Metric) 只有在状态估计不确定性较低的情况下有效,因此算 法执行时会出现大量身份切换现象,当目标被遮挡时 跟踪失败。为了改善这个问题,DeepSORT 将目标的 运动信息和外观信息相结合作为关联度量,改善目标 消失后重新出现导致的跟踪失败问题。
DeepSORT 利用检测器的结果初始化跟踪器,每个跟踪器都会设置一个计数器,在卡尔曼滤波之后 计数器累加,当预测结果和检测结果成功匹配时,该 计数器置为 0。在一段时间内跟踪器没有匹配到合适 的检测结果,则删除该跟踪器。DeepSORT 为每一帧 中新出现的检测结果分配跟踪器,当该跟踪器连续 几帧的预测结果都能匹配检测结果,则确认是出现了新 的轨迹,否则删除该跟踪器。

2.2 无人机跟踪实现

YOLOv5整个项目代码放入到Deepsort项目代码中,并将其重命名为yolov5,在track.py中修改一些参数如下:

 parser = argparse.ArgumentParser()  #参数设置,下面是一系列参数设置选项,自己根据需要进行设置
    parser.add_argument('--yolo_weights', nargs='+', type=str, default='yolov5/weights/yolov5m.pt', help='model.pt path(s)')    #加载权重,
    parser.add_argument('--deep_sort_weights', type=str, default='deep_sort_pytorch/deep_sort/deep/checkpoint/ckpt.t7', help='ckpt.t7 path')
    # file/folder, 0 for webcam
    parser.add_argument('--source', type=str, default='car_track-1.mp4', help='source') #这里把car_track-1.mp4改成自己需要跟踪的视屏,注意路径
    parser.add_argument('--output', type=str, default='inference/output', help='output folder')  # 输出结果保存在inference/output下
    parser.add_argument('--img-size', type=int, default=416, help='inference size (pixels)')    #416指将图片缩放至416尺寸
    
    parser.add_argument('--show-vid', action='store_true', help='display tracking video results')   #--show-vid指运行过程中显示出结果
    parser.add_argument('--save-vid', action='store_true', help='save video tracking results')  #--save-vid指对跟踪后的视屏

修改后运行track.py即可实现无人机的多目标跟踪,跟踪结果如下所示:
在这里插入图片描述

2.3 无人机运动轨迹可视化

在这里插入图片描述

2.4 目标质心点保存

质心坐标保存在center_pts.txt中;其中每行数据分别为cls_id, frame_idx, id,center_x, center_y(类别ID,第几帧,身份ID, 质心坐标x, 质心坐标y)
在这里插入图片描述

2.5目标重识别模型要注意的问题

deepsort中的目标重识别模型是在行人数据集中训练得到,针对其他目标的跟踪效果肯定没有行人跟踪效果那么好,但还是能用的。当然也可以针对特定跟踪目标制作目标重识别数据集,然后再选用先进的目标重识别算法训练,这个跟踪的效果可能会更好。

3. 飞机目标检测

在这里插入图片描述

  • YOLOv7大飞机检测训练权重+代码+VOC飞机检测数据集
  • YOLOv5飞机检测训练好的权重+代码+VOC飞机检测数据集
  • YOLOv3大飞机检测训练权重+代码+标注好的数据集
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Deepsort-yolov5实现无人机视觉检测和跟踪】 的相关文章

  • 多线程CompletableFuture之常用方法示例

    文章目录 前期准备1 runAsync2 supplyAsync3 thenRunAsync4 thenAcceptAsync5 runAfterBothAsync6 thenCombineAsync7 exceptionally8 han
  • 算法题解-- stl

    周末舞会 题目描述 假设在周末舞会上 xff0c X 名男士和 Y 名女士进入舞厅时 xff0c 各自排成一队 xff0c 并分别按顺序编号 跳舞开始时 xff0c 依次从男队和女队的队头上各出一人配成舞伴 规定每个舞曲只能有一对跳舞者 跳
  • 简说spring 的设计模式

    spring 的设计模式 xff08 23种 xff08 面试题 xff09 说说BeanFactory和FactoryBean的实现原理和区别 xff1f spring 中你还知道哪些设计模式 xff1f xff1f 1 简单工厂模式 实
  • 【转载】MathGL中报错:undefined reference to `mgl_create_graph‘的解决方法

    概述 xff1a 在环境 xff1a ubuntu 20 04 中 成功下载好了mathGL xff0c 但是最后编译却报错 undefined reference to 96 mgl create graph 39 如下 xff1a 各种
  • 第十三届蓝桥杯 C/C++ 大学B组 题解

    第十三届蓝桥杯 C C 43 43 大学B组 题解 A 进制计算简单模拟 span class token macro property span class token directive hash span span class tok
  • Android12系统源码目录简单分析

    在这里插入图片描述 https img blog csdnimg cn 07a0627ec4754074b5b621cb3e4dae4d png 上面这么多文件夹 xff0c 有些是一直不需要去理会的 xff0c 比如说接触较多的文件夹 x
  • 应用层与内核层的区别

    应用层 xff1a 主要操作用户空间 xff0c 主要编写逻辑 xff0c 打印信息调用标准库里面的printf函数 内核层 xff1a 主要操作内核空间 xff0c 实现五大管理 xff1a 进程管理 xff0c 内存管理 xff0c 文
  • ubuntu软件:录制视频和截图工具,压缩视频

    1 自带录制视频工具 xff1b 使用方式 xff1a 无需下载 开始录屏 结束录屏 xff1a Ctrl 43 Alt 43 Shift 43 r 当看到 Ubuntu 桌面的右上方多了一个红色的小圆点 xff0c 代表正在录制 注意 x
  • Eth-trunk :LACP模式链路聚合实战

    Eth trunk LACP模式链路聚合实战 需求描述 PC1和PC3数据vlan10 xff0c 网段为192 168 10 0 24PC2和PC4数据vlan20 xff0c 网段为192 168 20 0 24确保设备之间互联互通 x
  • Test Case Framework (TCF) tcf itp 基本使用(二)

    查看机器是否支持itp tcf ls v interfaces power itp0 instrument
  • PDF发送短信2

    SMS是由Esti 所制定的一个规范 xff08 GSM 03 40 和 GSM 03 38 xff09 有两种方式来发送和接收SMS消息 xff1a 文本模式或者PDU xff08 protocol description unit xf
  • maven 打包资源文件需要注意的问题

    初衷 我写这篇博客的目的是想让大家了解一些 maven 项目的结构以及打包后是什么样子的 xff0c 方便大家在实际项目中去排查问题 比如 xff1a 我明明在 src main java 下把 mybatis 的 xml 写上了 xff0
  • Linux服务器Ubuntu上搭建Jenkins+Pytest+Gitee+Allure自动化

    一 安装Jenkins和Java Jenkins 是一个开源自动化服务器 xff0c 它可以自动执行软件持续集成和交付中涉及的重复性技术任务 Jenkins 易于安装且基于 Java xff0c 此外 xff0c 可以使用 Web 界面轻松
  • Python Cookbook学习总结

    第一章 xff1a 数据结构和算法 任何序列 xff08 可迭代的对象 xff09 都可以通过一个简单的赋值操作来分解为单独的变量 xff0c 唯一的要求是变量的总数和结构要与序列相吻合 xff08 比如对于存储二维坐标等的二维数组 xff
  • FreeRTOS入门——STM32下完成一个基于FreeRTOS的多任务程序

    文章目录 一 什么是FreeRTOS二 裸机系统与多任务系统1 裸机系统2 多任务系统3 系统之间的对比 三 实验要求四 实验准备五 在KEIL新建 FreeRTOS 工程1 新建本地工程文件夹2 使用 KEIL 新建工程3 在 KEIL
  • natnet/vrpn_cliernt环境配置

    vrpn sdk的频率上限就是60hz xff0c 想要提高频率可以使用natnet client进行话题接收 1 basalt vrpn client src下需要的其他package vrpn catkin glog catkin ca
  • 无人机集群学习

    natnet sdk4 0 学习 中文介绍 xff1a NatNet SDK Wiki 示例工程 xff1a NatNet Sample Projects NaturalPoint Product Documentation Ver 2 2
  • Nginx证书管理

    一 下载证书到本地 Nginx服务器上传 管理SSL证书 xff0c 将SSL证书压缩包下载到本地后 xff0c 加压Nginx服务器证书的压缩包文件 cert file name pem PEM格式的证书文件 xff0c PEM格式的证书
  • 【ESP32】arduino中的ESP32实时系统FreeRTOS使用教程(一)

    ESP32 FreeRTOS 任务的状态任务的优先级 创建任务传递给任务函数的参数结构体多参数传递互斥量MutexESP32的双核心固定频率运行任务软件定时器 简单的本节略过 xff0c 详细的可以看视频 xff1a 单片机ESP32上的F
  • Linux系统下GDB调试及opencv的使用

    Linux系统下GDB调试及opencv的使用 一 GDB的简介二 GDB的作用三 GDB的使用1 GDB调试举例2 段错误调试3 内存出错的gdb调试 四 安装opencv 3 4 11 下载opencv 3 4 12 解压3 编译4 配

随机推荐

  • Linux下vscode的配置与使用、proteus仿真运行stm32程序、Altium Designer18绘制STM32最小系统原理图

    Linux下vscode的配置与使用 proteus仿真运行stm32程序 Altium Designer18绘制STM32最小系统原理图 一 Linux下vscode的配置与使用1 安装vscode2 安装c 43 43 插件3 配置4
  • stm32f103核心板串口通信入门

    stm32f103核心板串口通信入门 一 基于寄存器与基于固件库编程方式的差异二 stm32串口通信1 前期准备硬件软件连接 2 编写程序并烧录设计程序烧录程序 三 总结 一 基于寄存器与基于固件库编程方式的差异 使用固件库 xff0c 目
  • Requirement already satisfied 的解决办法

    问题描述 xff1a 安装的时候出现Requirement already satisfied xff1a areadly exist 公司环境是需要dfmanager创建一个python36虚拟环境 xff0c 当在虚拟环境中使用pyth
  • 基于FreeRTOS的STM32多任务程序

    基于FreeRTOS的STM32多任务程序 一 材料准备二 FreeRTOS移植FreeRTOS是什么FreeRTOS移植到STM32上 MDK开发环境 1 下载FreeRTOS源代码2 前期准备3 手动移植RreeRTOS 程序的编写运行
  • STM32实现基于I2C的AHT20温湿度采集

    STM32实现基于I2C的AHT20温湿度采集 I2C通信协议软件I2C与 硬件I2C代码实现烧录硬件连接烧录并运行 参考 I2C通信协议 I2C协议简介 IC Inter Integrated Circuit xff09 总线是一种由 P
  • 计算机网络中Wireshark的简单使用与分析

    Wireshark应用实验 数据链路层网络层传输层TCP 和 UDP 段结构分析 TCP 建立和释放连接 应用层 数据链路层 熟悉 Ethernet 帧结构 其中 xff1a ff ff ff ff ff ff 接受计算机的MAC地址 xf
  • 计算机网络CPT简单应用

    计算机网络CPT简单应用 直接连接两台 PC 构建 LAN用交换机构建 LAN交换机接口地址列表生成树协议 xff08 Spanning Tree Protocol xff09 路由器配置初步 直接连接两台 PC 构建 LAN 将两台 PC
  • HTML入门学习

    HTML入门学习 一 软件准备及配置二 HTML入门学习1 HTML2 HTML文件结构及分析3 标题及文本格式4 超链接 图片与文件路径5 表格 列表及表单6 区块元素 内联元素 预设格式及特殊字符 三 总结与心得 一 软件准备及配置 所
  • CSS初步学习

    CSS初步学习 一 CSS二 CSS语法及生效方式三 三种样式 amp 颜色 尺寸与对齐四 BOX amp 边框与边距五 定位 amp 溢出六 浮动 amp 设置不透明度七 组合选择器 amp 伪类和伪元素八 总结 使用CSS需用到VS C
  • 《通信软件开发与应用》课程结业报告

    正在写 xff0c 12点之前肯定提交 xff0c 不要急 xff0c 老师 xff08 坚定的目光 xff09
  • printf函数的重定向

    为什么要重定向printf函数 xff1f printf函数是底层函数 xff0c 含于stdio h头文件 因为在C语言中printf函数已经定义为默认输出到显示器的 xff0c 若要想在串口上显示 xff0c 那就需要重定向printf
  • 利用蜂鸣器播放音乐

    我们知道 xff0c 蜂鸣器可分为有源蜂鸣器和无源蜂鸣器 xff0c 有源蜂鸣器内置了频率发生电路 xff0c 因此其通电就能够发出声音 xff0c 但是其频率是固定的 xff0c 而无源蜂鸣器内部没有频率发生电路 xff0c 需要外界给予
  • 关于Ubuntu18.04虚拟机连不上网的问题

    1 问题详情 尝试过桥接模式和NAT模式的设置但并没有解决问题 2 问题原因 网络设置过程有问题 3 解决问题 1 关闭当前虚拟机 xff0c 并按照下列截图在虚拟机设置里打开网络适配器 点击确认 2 选择编辑下的虚拟网络编辑器 3 重新开
  • WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.

    出现以下问题 解决办法 python m 会指定你当前使用的python版本 python m pip install pyreadline xff08 包名 xff09 安装成功 xff01
  • 大疆M3508电机分电板PCB及打板记录

    1 所需物品 已经完成的电路板4个xt30的航模公头接口1个xt60的航模母头接口1个xt60的航模公头接口5个GH1 25立贴母座 xff08 2Pin xff09 关于PCB文件转成G文件的方法 1 可以使用AD自带的转G文件的方法 x
  • ubuntu18.04下opencv的安装配置以及不同版本opencv的切换

    一 安装OpenCV3 4 1 如果是要跑ORB SLAM2 xff0c 建议用OpenCV 3 4 1 版本 xff0c 不然之后会很麻烦 xff0c 会出现不兼容问题 xff09 xff08 1 xff09 下载OpenCV 3 4 1
  • Docker基础使用篇

    一 什么是docker xff0c 项目中使用docker的目的是什么 xff1f 1 什么是docker xff1f 1 Docker 是一个开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中 xff
  • 基于Python_opencv的车牌识别系统

    基于python opencv的车牌识别系统 一 说明 根据现有的车牌识别系统 xff0c 本人对代码进行了优化 xff0c 原有功能 xff1a 1 对图片中的车牌号进行识别 xff0c 并对车牌所属地可视化 2 将识别出的车牌号 车牌所
  • 【FreeRtos内部机制-韦东山(更新中)】

    1 任务的引入 ARM框架 任务 xff1a span class token operator span span class token operator span 一段代码 xff1b 运行位置 xff1b 运行环境 span cla
  • 【Deepsort-yolov5实现无人机视觉检测和跟踪】

    Deepsort yolov5无人机视觉检测和跟踪 1 YOLOv5无人机视觉检测1 1 训练无人机数据集1 2无人机检测结果 2 Deepsort跟踪2 1 算法原理2 2 无人机跟踪实现2 3 无人机运动轨迹可视化2 4 目标质心点保存