前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YOLOv5新版本6.x 自定义对象检测-从训练到部署

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

作者头像
OpenCV学堂
发布2022-09-20 18:44:28
1.4K0
发布2022-09-20 18:44:28
举报
文章被收录于专栏:贾志刚-OpenCV学堂

点击上方蓝字关注我们

微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识

安装与测试

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

代码语言:javascript
复制
https://github.com/ultralytics/yolov5/releases/tag/v6.1

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

代码语言:javascript
复制
https://github.com/ultralytics/yolov5/archive/refs/tags/v6.1.zip

下载完成之后解压缩到:

代码语言:javascript
复制
D:\python\yolov5-6.1

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

等待一段时间,完成全部安装之后,运行测试:

代码语言:javascript
复制
python detect.py --weights yolov5s.pt --source data\images\zidane.jpg

运行结果如下:

数据集准备与制作

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

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

代码语言:javascript
复制
https://gitee.com/opencv_ai/opencv_tutorial_data/tree/master/tools

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

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

代码语言:javascript
复制
Left top right bottom

转换为

代码语言:javascript
复制
Center_x, center_y, width, height

并归一化到0~1之间,这部分我写了一个脚本来完成label标签的生成,把xml的标注信息转换为YOLOv5的labels文件,这样就完成了数据集制作。最后需要创建一个dataset.ymal文件,放在与data文件夹同一层,它的内容如下:

代码语言:javascript
复制
# 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']

三:模型训练

制作好数据集之后,模型训练就成为一件很简单事情,一条命令行搞定。运行下面的命令行:

代码语言:javascript
复制
python train.py --img 640 --batch 4 --epochs 25 --data uav_bird_training\dataset.yaml --weights yolov5s.pt

其中uav_bird_training文件夹里是制作好的数据集。这样就开始训练,训练过程中可以通过tensorboard来查看可视化的结果,

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

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

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

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

代码语言:javascript
复制
-OpenCV DNN-OpenVINO-ONNXRUNTIME-TensorRT

测试,分别截图如下:

OpenCV DNN推理速度

OpenVINO平台上的推理速度

ONNXRUNTIME GPU推理速度

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

YOLOv5的6.x版本,是支持TensorRT 量化到FP16模型直接导出的,但是不支持INT8量化生成,所以自己实现了导出 量化INT8版本,测试结果如下:

代码语言:javascript
复制
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版本模型推理统计:

最终比较:

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

想要获得YOLOv5从数据集制作到训练四种平台OpenCV DNN, OpenVINO, ONNXRUNTIME, TensorRT部署的全部技能,解锁深度学习各种平台部署技巧与代码实现,本教程全部源码与相关PPT,立刻扫码

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

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

OpenCV DNN + CUDA版本推理

TensorRT-FP32模型推理速度

TensorRT-INT8模型推理速度

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

扫码获取YOLOv5 TensorRT INT8量化脚本与视频教程

扫码查看OpenCV+OpenVIO+Pytorch系统化学习路线图

 推荐阅读 

CV全栈开发者说 - 从传统算法到深度学习怎么修炼

2022入坑深度学习,我选择Pytorch框架!

Pytorch轻松实现经典视觉任务

教程推荐 | Pytorch框架CV开发-从入门到实战

OpenCV4 C++学习 必备基础语法知识三

OpenCV4 C++学习 必备基础语法知识二

OpenCV4.5.4 人脸检测+五点landmark新功能测试

OpenCV4.5.4人脸识别详解与代码演示

OpenCV二值图象分析之Blob分析找圆

OpenCV4.5.x DNN + YOLOv5 C++推理

OpenCV4.5.4 直接支持YOLOv5 6.1版本模型推理

OpenVINO2021.4+YOLOX目标检测模型部署测试

比YOLOv5还厉害的YOLOX来了,官方支持OpenVINO推理

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档