0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于YOLOv5框架如何训练一个自定义对象检测模型

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-09-21 10:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

安装与测试

最近YOLOv5最新更新升级到v6.x版本,工程简便性有提升了一大步,本教程教你基于YOLOv5框架如何训练一个自定义对象检测模型,首先需要下载对应版本:
https://github.com/ultralytics/yolov5/releases/tag/v6.1

鼠标滚到最下面下载源码zip包:

https://github.com/ultralytics/yolov5/archive/refs/tags/v6.1.zip

下载完成之后解压缩到:

D:pythonyolov5-6.1
首先运行下面命令行完成依赖库的安装:

3e0f0b56-38bb-11ed-ba43-dac502259ad0.png

等待一段时间,完成全部安装之后,运行测试:
python detect.py --weights yolov5s.pt --source dataimageszidane.jpg
运行结果如下:

3e18a346-38bb-11ed-ba43-dac502259ad0.jpg

数据集准备与制作

自己百度收集了一个无人机与飞鸟的数据集,其中训练集270张图像,测试集26张图像。

3e281af6-38bb-11ed-ba43-dac502259ad0.png

使用labelImg工具完成标注,工具下载地址:

https://gitee.com/opencv_ai/opencv_tutorial_data/tree/master/tools

YOLOv5要求的数据集目录结构如下:

3e3b0706-38bb-11ed-ba43-dac502259ad0.png

其中images是所有图像的集合,labels是所有标签信息集合。train表示训练集、valid表示测试集。这里需要注意的是,labels信息中的标签信息YOLO格式标注框需要把原始标注信息的标注框格式从:
Left top right bottom

转换为

Center_x, center_y, width, height
并归一化到0~1之间,这部分我写了一个脚本来完成label标签的生成,把xml的标注信息转换为YOLOv5的labels文件,这样就完成了数据集制作。最后需要创建一个dataset.ymal文件,放在与data文件夹同一层,它的内容如下:
# train and val datasets (image directory or *.txt file with image paths)train: uav_bird_training/data/images/train/val: uav_bird_training/data/images/valid/
# number of classesnc: 2
# class namesnames: ['bird', 'drone']

三:模型训练

制作好数据集之后,模型训练就成为一件很简单事情,一条命令行搞定。运行下面的命令行:
python train.py --img 640 --batch 4 --epochs 25 --data uav_bird_trainingdataset.yaml --weights yolov5s.pt
其中uav_bird_training文件夹里是制作好的数据集。这样就开始训练,训练过程中可以通过tensorboard来查看可视化的结果,

3e496bc0-38bb-11ed-ba43-dac502259ad0.png

3e578bce-38bb-11ed-ba43-dac502259ad0.png

3e64e6fc-38bb-11ed-ba43-dac502259ad0.png

3e720558-38bb-11ed-ba43-dac502259ad0.png

PR曲线说明训练效果还错!

不同框架与硬件平台推理比较

YOLOv5的6.x版本支持不同框架模型导出与推理,看下图:

3e7e15b4-38bb-11ed-ba43-dac502259ad0.png

这里分别导出模型为ONNX、XML、engien格式之后,使用同一段视频在我的笔记本上(CPUi7, GPU3050ti):在下面四种推理框架上运行
-OpenCV DNN-OpenVINO-ONNXRUNTIME-TensorRT
测试,分别截图如下:

OpenCV DNN推理速度

3e921726-38bb-11ed-ba43-dac502259ad0.png

OpenVINO平台上的推理速度

3e9dd070-38bb-11ed-ba43-dac502259ad0.png

ONNXRUNTIME GPU推理速度

3eb19182-38bb-11ed-ba43-dac502259ad0.png

TensorRT框架部署-FP32版本模型推理统计:

3ec34c88-38bb-11ed-ba43-dac502259ad0.png

YOLOv5的6.x版本,是支持TensorRT 量化到FP16模型直接导出的,但是不支持INT8量化生成,所以自己实现了导出量化INT8版本,测试结果如下:
python detect.py --weights uav_bird_training/uav_bird_int8.engine --data uav_bird_training/dataset.yaml --source D:/bird/bird_fly.mp4

TensorRT框架部署-INT8版本模型推理统计:

3ecf9524-38bb-11ed-ba43-dac502259ad0.png

最终比较:

3edd3c2e-38bb-11ed-ba43-dac502259ad0.png

注意:以上结果是基于Python语言上测试结果(前后处理都使用pytorch完成)

番外篇:C++推理与比较

使用C++部署时候,前后处理都改成了基于OpenCV 完成,使用CPU完成前后处理,OpenVINO+CPU运行速度截图如下:

3f0609a6-38bb-11ed-ba43-dac502259ad0.png

OpenCV DNN + CUDA版本推理

3f168a10-38bb-11ed-ba43-dac502259ad0.png

TensorRT-FP32模型推理速度

3f2ca642-38bb-11ed-ba43-dac502259ad0.png

TensorRT-INT8模型推理速度

3f3d0b04-38bb-11ed-ba43-dac502259ad0.png

最后把自定义训练导出的模型转换为TensorRT Engine文件之后,部署到了我的一块Jetson Nano卡上面,实现了边缘端的部署,有图有真相:

3f48ca48-38bb-11ed-ba43-dac502259ad0.png

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 检测模型
    +关注

    关注

    0

    文章

    17

    浏览量

    7424
  • 数据集
    +关注

    关注

    4

    文章

    1240

    浏览量

    26261

原文标题:YOLOv5新版本6.x 自定义对象检测-从训练到部署

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用Python/MyHDL创建自定义FPGA IP

    使用 Python/MyHDL 创建自定义 FPGA IP,与 Vivado 集成,并通过 PYNQ 进行控制——实现软件上的简单硬件设计。
    的头像 发表于 04-09 09:53 216次阅读
    使用Python/MyHDL创建<b class='flag-5'>自定义</b>FPGA IP

    极海APM32F427如何实现自定义USB HID设备与PC进行通信

    最近需要使用到 APM32F427 枚举成Custom HID设备进行用户自定义通信,但是官方的例程只有提供的HID枚举为鼠标或者键盘类型的设备。这里记录下,怎么使用Geehy官方的USB中间件,实现自定义的USB HID设备
    的头像 发表于 03-30 09:30 2762次阅读
    极海APM32F427如何实现<b class='flag-5'>自定义</b>USB HID设备与PC进行通信

    基于迅为RK3588开发板实现高性能机器狗主控解决方案- AI能力实战:YOLOv5目标检测例程

    基于迅为RK3588开发板实现高性能机器狗主控解决方案- AI能力实战:YOLOv5目标检测例程
    的头像 发表于 11-28 11:32 1704次阅读
    基于迅为RK3588开发板实现高性能机器狗主控解决方案- AI能力实战:<b class='flag-5'>YOLOv5</b>目标<b class='flag-5'>检测</b>例程

    迅为如何在RK3576上部署YOLOv5;基于RK3576构建智能门禁系统

    迅为如何在RK3576开发板上部署YOLOv5;基于RK3576构建智能门禁系统
    的头像 发表于 11-25 14:06 1971次阅读
    迅为如何在RK3576上部署<b class='flag-5'>YOLOv5</b>;基于RK3576构建智能门禁系统

    强实时运动控制内核MotionRT750(九):内置C语言的自定义机械手模型实现

    内置C语言的自定义机械手模型实现。
    的头像 发表于 10-27 14:14 971次阅读
    强实时运动控制内核MotionRT750(九):内置C语言的<b class='flag-5'>自定义</b>机械手<b class='flag-5'>模型</b>实现

    技术分享 | RK3588基于Yolov5的目标识别演示

    YOLO是种基于深度神经网络的目标检测算法,用在图像或视频中实时识别和定位多个对象。在其各个版本的迭代中,YOLOv5凭借易用性和性能平衡在工业、医疗、农业、零售等领域被广泛的应用。
    的头像 发表于 09-18 17:27 1444次阅读
    技术分享 | RK3588基于<b class='flag-5'>Yolov5</b>的目标识别演示

    基于瑞芯微RK3576的 yolov5训练部署教程

    s、YOLOv5m、YOLOv5l、YOLOv5x 四模型YOLOv5 相比
    的头像 发表于 09-11 16:43 3214次阅读
    基于瑞芯微RK3576的 <b class='flag-5'>yolov5</b><b class='flag-5'>训练</b>部署教程

    在k230上使用yolov5检测图像卡死,怎么解决?

    0.99以上 模型转换指令 再将该模型放到k230设备上使用yolo大作战中yolov5检测示例,检测就会卡死,打印出的
    发表于 08-11 07:41

    yolov5训练部署全链路教程

    m、YOLOv5l、YOLOv5x四模型YOLOv5相比YOLOv4而言,在
    的头像 发表于 07-25 15:22 2025次阅读
    <b class='flag-5'>yolov5</b><b class='flag-5'>训练</b>部署全链路教程

    请问K210可以同时加载几个自定义模型

    K210可以同时加载几个自定义模型
    发表于 07-18 06:20

    大彩讲堂:VisualTFT软件如何自定义圆形进度条

    VisualTFT软件如何自定义圆形进度条
    的头像 发表于 07-07 17:10 1904次阅读
    大彩讲堂:VisualTFT软件如何<b class='flag-5'>自定义</b>圆形进度条

    完整指南:如何使用树莓派5、Hailo AI Hat、YOLO、Docker进行自定义数据集训练

    今天,我将展示如何使用令人印象深刻的HailoAIHat在树莓派5训练、编译和部署自定义模型。注意:文章内的链接可能需要科学上网。HailoAIHat根据你的设置,在树莓派
    的头像 发表于 06-28 08:23 4847次阅读
    完整指南:如何使用树莓派<b class='flag-5'>5</b>、Hailo AI Hat、YOLO、Docker进行<b class='flag-5'>自定义</b>数据集<b class='flag-5'>训练</b>?

    KiCad 中的自定义规则(KiCon 演讲)

    “  Seth Hillbrand 在 KiCon US 2025 上为大家介绍了 KiCad 的规则系统,并详细讲解了自定义规则的设计与实例。  ”   演讲主要围绕 加强 KiCad 中的自定义
    的头像 发表于 06-16 11:17 2556次阅读
    KiCad 中的<b class='flag-5'>自定义</b>规则(KiCon 演讲)

    HarmonyOS应用自定义键盘解决方案

    自定义键盘是种替换系统默认键盘的解决方案,可实现键盘个性化交互。允许用户结合业务需求与操作习惯,对按键布局进行可视化重构、设置多功能组合键位,使输入更加便捷和舒适。在安全防护层面,自定义键盘可以
    的头像 发表于 06-05 14:19 2605次阅读

    在K230上部署yolov5时 出现the array is too big的原因?

    重现步骤 1将yolov5的kmodel放入k230的data数据 2使用yolo大作战里的视频流推理代码 3运行 期待结果和实际结果 期待的结果 将目标检测的框圈起来 实际看到的结果
    发表于 05-28 07:47