点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自: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部署全解析相关推荐

  1. Yolov5学习全过程:训练+运行+c#部署(无理论全实操)

    Yolov5学习全过程:训练+运行+c#部署(无理论全实操) 1.Yolov5 理论介绍 2.Yolov5下载地址 3.Yolov5使用方法 4.制作训练样本 4.1 labelImg 下载 4.2 ...

  2. win10安装yolox,训练自定义模型,使用tensorrt部署全流程

    系统环境:win10.cuda10.2.cudnn8.2 一.采集数据 有2段视频,先使用ffmpeg对视频进行抽帧,由于视频比较长,所以每隔5秒抽取1张图片. ffmpeg -i light000. ...

  3. Android自定义view之View的测量过程全解析

    Android 应用层开发中绕不开自定义 View 这个话题,虽然现在 Github 上有形形色色的开源库供大家使用, 但是作为一名开发者而言,虽然不提倡重复造轮子,但是轮子都是造出来的.碰到一些新鲜 ...

  4. 目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践

    目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践 flyfish 源码地址 https://github.com/shaoshengsong/rockc ...

  5. OpenVINO 部署 YOLOv5 转换IR文件

    环境: Windows:10 YOLOv5:3.1 Python 3.7.10 torch:1.7.0+cu101 torchvision:0.8.1+cu101 OpenVINO:openvino_ ...

  6. 【C++实现yolov5的OpenVINO部署_2】

    文章目录 引言 模型训练 1.首先获取yolov5工程 2.训练准备 描述信息准备 数据准备 3. 执行训练 1.pt格式转onnx格式 2.onnx格式转换OpenVINO的xml和bin格式 使用 ...

  7. YOLOv5自定义数据集训练

    YOLOv5自定义数据集训练 简介 本文介绍如何在自己的VOC格式数据集上训练YOLO5目标检测模型. VOC数据集格式 首先,先来了解一下Pascal VOC数据集的格式,该数据集油5个部分组成,文 ...

  8. Yolov5自定义图片训练测试及模型调优(详细过程)

    Yolov5自定义图片训练测试及模型调优(详细过程) 1. 图像数据获取.标注 2. 数据集划分及准备 3. 配置训练参数,准备训练: 3.1 修改data/训练配置xxx.yaml文件: 3.2 修 ...

  9. 深度学习目标检测YOLOV5的主要过程梳理和工程部署的具体手段

    一.YOLOV5训练数据基本格式以及格式的相互转换(labimg标注数据格式) 1.1 VOC数据格式 基本图片数据集,每张图片对应的.xml标注文件,类别classes.txt文件. 其中.xml的 ...

最新文章

  1. ubuntu 强制关机后 mysql无法启动
  2. 把jquery的this写入选择器里(伪写入)哈哈~
  3. 大佬的引用。。。。太猛了啊
  4. arcgis Manager 登陆时提示Incorrect login Information
  5. 03.elasticsearch_index操作
  6. c语言二维数组省略号,LaTex 常用语法
  7. Android顶部粘至视图具体解释
  8. 《设计模式详解》创建型模式 - 原型模式
  9. linux web目录安全设置,[LNMP]Linux的Web环境的安全配置
  10. STM32 CAN波特率计算程序
  11. 健康管理软件 PHP,健康管理信息系统
  12. 【jdk1.8特性】之Instant
  13. CSS布局之各种需要掌握的小技巧~
  14. 4.Java数组(一)
  15. 常用的字符串方法大全
  16. 这个世界上有三种几何学
  17. Loss.backward()
  18. 基础教程:Mac 电脑小白应该了解哪些东西?
  19. 电子技术综合实训考核装置
  20. 银联商务技术开发笔试题目

热门文章

  1. 千亿级照片,毫秒间匹配最佳结果,微软开源Bing搜索背后的关键算法
  2. 苹果裁员逾200人,拿无人驾驶“开刀”
  3. 用AI帮你找工作,领英是如何做的?
  4. 马云:很多P2P公司披着互联网金融的外衣做非法金融服务
  5. JVM 有 Full GC,为什么还会出现 OutOfMemoryError呢?
  6. 2022 AI趋势8大预测!
  7. 抛弃P值,选择更直观的A/B测试!
  8. 终于有人把计算机视觉讲明白了
  9. PyTorch 多机多卡训练:DDP 实战与技巧
  10. 继天元开源后,旷视又亮出“看家本领”:推出Brain++商业版