YOLOv5实现自定义对象训练与OpenVINO部署全解析
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本文转自:opencv学堂
大家好,前面写了一个OpenVINO部署YOLOv5推理的教程,收到很多反馈!这里就再写了一篇如何使用YOLOv5训练自定义对象检测,从数据准备到推理整个环节,帮助大家更好的使用YOLOv5来解决实际问题。整个文章主要分为三个部分,分别是数据准备与YOLO格式数据转换,模型训练与推理测试,模型转换为ONNX与部署。
关于环境搭建与测试请看这里:
YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解
数据下载与准备
数据下载我参考了别人提到一个Open Imag数据集的下载工具,github地址如下:
https://github.com/EscVM/OIDv4_ToolKit
用这个工具可以很方便的下载想要的数据,Open Image数据集包括包括100W+张图像,对象检测支持600个类别,所以很多图像都可以通过这个来下载,避免自己收集图像数据与标注数据的时间。所以首先需要执行
git clone https://github.com/EscVM/OIDv4_ToolKit
然后运行
pip3 install -r requirements.txt
安装好所有依赖,之后再下载数据集
python3 main.py downloader --classes Apple Orange --type_csv validation
意思是下载苹果跟橘子两个类别的图像标注数据。下载好的数据集文件夹结构如下:
分为三个文件夹,分别对应训练集、测试集、验证集。其中jpg文件是每个图像,labels里面的txt同名文件是每个图像中对象标注信息,格式如下:
name_of_the_class left top right bottom
name_of_the_class 对象类别名称
left top标注框左上角坐标
right bottom 标注框右下角坐标
转换为YOLO标注格式数据,首先看一下标注文本文件与图像的文件夹结构
其中images是所有图像的集合,labels是所有标签信息集合。train表示训练集、valid表示测试集。这里需要注意的是,labels信息中的标签信息YOLO格式标注框需要把原始标注信息的标注框格式从:
Left top right bottom
转换为
Center_x, center_y, width, height
并归一化到0~1之间,这部分我写了一个脚本来完成label标签的生成。代码如下:
for f in files:if os.path.isfile(os.path.join(current_dir, f)):image = cv.imread(os.path.join(current_dir, f))label_file = os.path.join(current_dir, "label", f.replace(".jpg", ".txt"))yolo_label = f.replace(".jpg", ".txt")data_label_text_f = os.path.join(valid_label_dir, yolo_label)file_write_obj = open(data_label_text_f, 'w')with open(label_file) as f:boxes = [line.strip() for line in f.readlines()]clazz_index = -1# create new filefor box in boxes:anno_info = box.split(" ")if anno_info[0] == "Cricket":print("class name: ", anno_info[0] + " ball")x1 = float(anno_info[2])y1 = float(anno_info[3])x2 = float(anno_info[4])y2 = float(anno_info[5])clazz_index = 0else:print("class name: ", anno_info[0])x1 = float(anno_info[1])y1 = float(anno_info[2])x2 = float(anno_info[3])y2 = float(anno_info[4])clazz_index = 1h, w, c = image.shapecx = (x1 + (x2 - x1) / 2) / wcy = (y1 + (y2 - y1) / 2) / hsw = (x2 - x1) / wsh = (y2 - y1) / hfile_write_obj.write("%d %f %f %f %f\n"%(clazz_index, cx, cy, sw, sh))# cv.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)),(0, 0, 255), 2, 8)file_write_obj.close()
最后需要创建一个dataset.ymal文件,放在与data文件夹同一层,它的内容如下:
# train andval datasets (image directory or *.txt file with image paths)
train:football_training/data/images/train/
val: football_training/data/images/valid/# number ofclasses
nc: 2# class names
names:['Cricketball', 'Football']
其中
Cricketball与Football是我从Open Image中下载的两个类别数据。
nc:2 表示识别两个类别。
这样就完成了整个数据集准备部分。
模型训练与推理测试
这里我分别基于yolov5l.ymal与yolov5s.ymal完成了模型训练,需要修改的只有一个地方,就是把类别数目从80改为2。图示如下:
然后执行训练脚本的命令行如下:
python train.py --data --epochs 300 football_training/dataset.yaml --cfg football_traing/yolov5l.yaml --weights '' --batch-size 1
推荐的参数中没有这么小的batchi-size,我是用笔记本训练,发现2就爆内存了,人穷!有条件的把这个参数调大点,效果会好!训练时可以通过tensorboard查看训练实时变换,图示如下:
最终每个类别的AP得分
最终训练完成得到best.pt文件
运行测试视频
python detect.py --source football_training/test.mp4 --weights football_training/best.pt --conf 0.5
ONNX格式推理部署
通过下面的脚本转换为ONNX文件
python models/export.py --weights football_training/best.pt --img 640 --batch 1
然后再转换为OpenVINO的IR中间文件格式,C++推理与部署代码实现参见
YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解
运行效果如下:
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
YOLOv5实现自定义对象训练与OpenVINO部署全解析相关推荐
- Yolov5学习全过程:训练+运行+c#部署(无理论全实操)
Yolov5学习全过程:训练+运行+c#部署(无理论全实操) 1.Yolov5 理论介绍 2.Yolov5下载地址 3.Yolov5使用方法 4.制作训练样本 4.1 labelImg 下载 4.2 ...
- win10安装yolox,训练自定义模型,使用tensorrt部署全流程
系统环境:win10.cuda10.2.cudnn8.2 一.采集数据 有2段视频,先使用ffmpeg对视频进行抽帧,由于视频比较长,所以每隔5秒抽取1张图片. ffmpeg -i light000. ...
- Android自定义view之View的测量过程全解析
Android 应用层开发中绕不开自定义 View 这个话题,虽然现在 Github 上有形形色色的开源库供大家使用, 但是作为一名开发者而言,虽然不提倡重复造轮子,但是轮子都是造出来的.碰到一些新鲜 ...
- 目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践
目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践 flyfish 源码地址 https://github.com/shaoshengsong/rockc ...
- OpenVINO 部署 YOLOv5 转换IR文件
环境: Windows:10 YOLOv5:3.1 Python 3.7.10 torch:1.7.0+cu101 torchvision:0.8.1+cu101 OpenVINO:openvino_ ...
- 【C++实现yolov5的OpenVINO部署_2】
文章目录 引言 模型训练 1.首先获取yolov5工程 2.训练准备 描述信息准备 数据准备 3. 执行训练 1.pt格式转onnx格式 2.onnx格式转换OpenVINO的xml和bin格式 使用 ...
- YOLOv5自定义数据集训练
YOLOv5自定义数据集训练 简介 本文介绍如何在自己的VOC格式数据集上训练YOLO5目标检测模型. VOC数据集格式 首先,先来了解一下Pascal VOC数据集的格式,该数据集油5个部分组成,文 ...
- Yolov5自定义图片训练测试及模型调优(详细过程)
Yolov5自定义图片训练测试及模型调优(详细过程) 1. 图像数据获取.标注 2. 数据集划分及准备 3. 配置训练参数,准备训练: 3.1 修改data/训练配置xxx.yaml文件: 3.2 修 ...
- 深度学习目标检测YOLOV5的主要过程梳理和工程部署的具体手段
一.YOLOV5训练数据基本格式以及格式的相互转换(labimg标注数据格式) 1.1 VOC数据格式 基本图片数据集,每张图片对应的.xml标注文件,类别classes.txt文件. 其中.xml的 ...
最新文章
- ubuntu 强制关机后 mysql无法启动
- 把jquery的this写入选择器里(伪写入)哈哈~
- 大佬的引用。。。。太猛了啊
- arcgis Manager 登陆时提示Incorrect login Information
- 03.elasticsearch_index操作
- c语言二维数组省略号,LaTex 常用语法
- Android顶部粘至视图具体解释
- 《设计模式详解》创建型模式 - 原型模式
- linux web目录安全设置,[LNMP]Linux的Web环境的安全配置
- STM32 CAN波特率计算程序
- 健康管理软件 PHP,健康管理信息系统
- 【jdk1.8特性】之Instant
- CSS布局之各种需要掌握的小技巧~
- 4.Java数组(一)
- 常用的字符串方法大全
- 这个世界上有三种几何学
- Loss.backward()
- 基础教程:Mac 电脑小白应该了解哪些东西?
- 电子技术综合实训考核装置
- 银联商务技术开发笔试题目
热门文章
- 千亿级照片,毫秒间匹配最佳结果,微软开源Bing搜索背后的关键算法
- 苹果裁员逾200人,拿无人驾驶“开刀”
- 用AI帮你找工作,领英是如何做的?
- 马云:很多P2P公司披着互联网金融的外衣做非法金融服务
- JVM 有 Full GC,为什么还会出现 OutOfMemoryError呢?
- 2022 AI趋势8大预测!
- 抛弃P值,选择更直观的A/B测试!
- 终于有人把计算机视觉讲明白了
- PyTorch 多机多卡训练:DDP 实战与技巧
- 继天元开源后,旷视又亮出“看家本领”:推出Brain++商业版