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

    浏览量

    7306
  • 数据集
    +关注

    关注

    4

    文章

    1208

    浏览量

    24683

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

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

收藏 人收藏

    评论

    相关推荐

    在RK3568教学实验箱上实现基于YOLOV5的算法物体识别案例详解

    种非常流行的实时目标检测模型,它提供了出色的性能和精度。YOLOv5可以分为三部分,分别是: 1、主干特征提取网络(Backbone) 2、加强特征提取网络(FPN) 3、分类器与回
    发表于 12-03 14:56

    YOLOv10自定义目标检测之理论+实践

    概述 YOLOv10 是由清华大学研究人员利用 Ultralytics Python 软件包开发的,它通过改进模型架构并消除非极大值抑制(NMS)提供了种新颖的实时目标检测方法。这些
    的头像 发表于 11-16 10:23 386次阅读
    <b class='flag-5'>YOLOv</b>10<b class='flag-5'>自定义</b>目标<b class='flag-5'>检测</b>之理论+实践

    在树莓派上部署YOLOv5进行动物目标检测的完整流程

    卓越的性能。本文将详细介绍如何在性能更强的计算机上训练YOLOv5模型,并将训练好的模型部署到树莓派4B上,通过树莓派的摄像头进行实时动物目
    的头像 发表于 11-11 10:38 851次阅读
    在树莓派上部署<b class='flag-5'>YOLOv5</b>进行动物目标<b class='flag-5'>检测</b>的完整流程

    RK3588 技术分享 | 在Android系统中使用NPU实现Yolov5分类检测-迅为电子

    RK3588 技术分享 | 在Android系统中使用NPU实现Yolov5分类检测-迅为电子
    的头像 发表于 08-23 14:58 682次阅读
    RK3588 技术分享 | 在Android系统中使用NPU实现<b class='flag-5'>Yolov5</b>分类<b class='flag-5'>检测</b>-迅为电子

    NVIDIA NeMo加速并简化自定义模型开发

    如果企业希望充分发挥出 AI 的力量,就需要根据其行业需求量身定制的自定义模型
    的头像 发表于 07-26 11:17 739次阅读
    NVIDIA NeMo加速并简化<b class='flag-5'>自定义</b><b class='flag-5'>模型</b>开发

    YOLOv5的原理、结构、特点和应用

    YOLOv5(You Only Look Once version 5)是种基于深度学习的实时目标检测算法,它属于卷积神经网络(CNN)的范畴。下面我将详细介绍
    的头像 发表于 07-03 09:23 5441次阅读

    maixcam部署yolov5s 自定义模型

    maixcam部署yolov5s 自定义模型 本博客将向你展示零基础步步的部署好自己的yolov5s
    发表于 04-23 15:43

    鸿蒙ArkUI实例:【自定义组件】

    组件是 OpenHarmony 页面最小显示单元,页面可由多个组件组合而成,也可只由组件组合而成,这些组件可以是ArkUI开发框架
    的头像 发表于 04-08 10:17 620次阅读

    YOLOv8+PyQT5打造细胞计数与识别应用说明

    YOLOv8对象检测模型基于自定义数据集训练红白细胞检测
    的头像 发表于 01-15 17:22 1136次阅读
    <b class='flag-5'>YOLOv8+PyQT5</b>打造细胞计数与识别应用说明

    YOLOv8实现旋转对象检测

    YOLOv8框架在在支持分类、对象检测、实例分割、姿态评估的基础上更近步,现已经支持旋转对象
    的头像 发表于 01-11 10:43 1789次阅读
    <b class='flag-5'>YOLOv</b>8实现旋转<b class='flag-5'>对象</b><b class='flag-5'>检测</b>

    基于YOLOv8实现自定义姿态评估模型训练

    Hello大家好,今天给大家分享下如何基于YOLOv8姿态评估模型,实现在自定义数据集上,完成自定义姿态评估
    的头像 发表于 12-25 11:29 2830次阅读
    基于<b class='flag-5'>YOLOv</b>8实现<b class='flag-5'>自定义</b>姿态评估<b class='flag-5'>模型</b><b class='flag-5'>训练</b>

    如何基于深度学习模型训练实现工件切割点位置预测

    Hello大家好,今天给大家分享下如何基于深度学习模型训练实现工件切割点位置预测,主要是通过对YOLOv8姿态评估模型
    的头像 发表于 12-22 11:07 798次阅读
    如何基于深度学习<b class='flag-5'>模型</b><b class='flag-5'>训练</b>实现工件切割点位置预测

    如何基于深度学习模型训练实现圆检测与圆心位置预测

    Hello大家好,今天给大家分享下如何基于深度学习模型训练实现圆检测与圆心位置预测,主要是通过对YOLOv8姿态评估
    的头像 发表于 12-21 10:50 1906次阅读
    如何基于深度学习<b class='flag-5'>模型</b><b class='flag-5'>训练</b>实现圆<b class='flag-5'>检测</b>与圆心位置预测

    在C++中使用OpenVINO工具包部署YOLOv5-Seg模型

    YOLOv5兼具速度和精度,工程化做的特别好,Git clone到本地即可在自己的数据集上实现目标检测任务的训练和推理,在产业界中应用广泛。开源社区对YOLOv5支持实例分割的呼声高涨
    的头像 发表于 12-21 10:17 2090次阅读
    在C++中使用OpenVINO工具包部署<b class='flag-5'>YOLOv5</b>-Seg<b class='flag-5'>模型</b>

    基于YOLOv8的自定义医学图像分割

    YOLOv8是种令人惊叹的分割模型;它易于训练、测试和部署。在本教程中,我们将学习如何在自定义数据集上使用
    的头像 发表于 12-20 10:51 767次阅读
    基于<b class='flag-5'>YOLOv</b>8的<b class='flag-5'>自定义</b>医学图像分割