当前位置: 首页 > news >正文

一文学习yolov5 实例分割:从训练到部署

一文学习yolov5 实例分割:从训练到部署

  • 1.模型介绍
  • 1.1 YOLOv5结构
    • 1.2 YOLOv5 推理时间
  • 2.构建数据集
    • 2.1 使用labelme标注数据集
    • 2.2 生成coco格式label
    • 2.3 coco格式转yolo格式
  • 3.训练
    • 3.1 整理数据集
    • 3.2 修改配置文件
    • 3.3 执行代码进行训练
  • 4.使用OpenCV进行c++部署
  • 参考文献

1.模型介绍

1.1 YOLOv5结构

SF-YOLOv5: A Lightweight Small Object Detection Algorithm Based on Improved Feature Fusion Mode论文中给出了yolov5的结构框图:
在这里插入图片描述
SPPF块与传统的SPP之间的差异:
在这里插入图片描述

特征融合的几种结构:
在这里插入图片描述
YOLOV5的特征融合结构:
在这里插入图片描述

Ultralytics YOLOv5 Architecture 官方文档给出的详细的整体架构如下:
在这里插入图片描述

1.2 YOLOv5 推理时间

YOLOv5 CPU Export Benchmarks 给出的CPU推断时间:

benchmarks: weights=yolov5s.pt, imgsz=640, batch_size=1, data=/usr/src/app/data/coco128.yaml, device=, half=False, test=False, pt_only=False
Checking setup...
YOLOv5 🚀 v6.1-174-gc4cb7c6 torch 1.11.0+cpu CPU
Setup complete ✅ (96 CPUs, 1007.7 GB RAM, 1948.4/3519.3 GB disk)Benchmarks complete (128.39s)Format  mAP@0.5:0.95  Inference time (ms)
0                 PyTorch        0.4623                56.52
1             TorchScript        0.4623                59.21
2                    ONNX        0.4623                60.95
3                OpenVINO        0.4623                27.44
4                TensorRT           NaN                  NaN
5                  CoreML           NaN                  NaN
6   TensorFlow SavedModel        0.4623                70.84
7     TensorFlow GraphDef        0.4623                72.44
8         TensorFlow Lite        0.4623               130.43
9     TensorFlow Edge TPU           NaN                  NaN
10          TensorFlow.js           NaN                  NaN

https://learnopencv.com/custom-object-detection-training-using-yolov5/给出的时间:在这里插入图片描述

2.构建数据集

参考labelme+yolov5实例分割:自定义数据集制作、训练与注意点,使用labelme来构建yolov5支持的数据集。

2.1 使用labelme标注数据集

pip安装labelme,打开目录进行标注。

2.2 生成coco格式label

使用位于labelme-main\examples\instance_segmentation目录下的labelme2coco.py文件。

python  labelme2coco.py labelme标注json文件夹  coco目标文件夹 --labels labels.txt路径

查看设置的生成目录,存在以下三个文件:
在这里插入图片描述

2.3 coco格式转yolo格式

使用官方提供的转换工具 general_json2yolo.py :

代码中稍加修改2出:

  • 修改1
if __name__ == "__main__":source = "COCO"if source == "COCO":convert_coco_json("../datasets/coco/annotations",  # directory with *.jsonuse_segments=True,cls91to80=True,)

改为:

if __name__ == "__main__":source = "COCO"if source == "COCO":convert_coco_json("上一步生成的coco文件目录",  # directory with *.jsonuse_segments=True,cls91to80=False,# 这里修改成False)
  • 修改2
    在这里插入图片描述
    修改为:
            # Writewith open((fn / f[11:]).with_suffix(".txt"), "a") as file: #去掉字符串的父路径for i in range(len(bboxes)):line = (*(segments[i] if use_segments else bboxes[i]),)  # cls, box or segmentsfile.write(("%g " * len(line)).rstrip() % line + "\n")

运行

转换后的结果位于此文件同目录下的new_dir文件夹/labels/annotations目录中。一张图片对应一个txt文件。

3.训练

3.1 整理数据集

将上面环节生成的数据集保存成以下层次:

datasetimagestrainvallabelstrainval

3.2 修改配置文件

在git主目录下的data文件夹下新建或者修改自定义项目的数据集配置文件:

path:数据集目录
train:训练集目录
val:验证集目录# Classes 
names:0: cat11: cat2...

3.3 执行代码进行训练

python segment/train.py --model yolov5s-seg.pt --data data/custom.yaml --epochs 5 --img 640

4.使用OpenCV进行c++部署

https://github.com/doleron/yolov5-opencv-cpp-python/tree/main

参考文献

[1] https://learnopencv.com/custom-object-detection-training-using-yolov5/
[2] YOLOv5 CPU Export Benchmarks
[3] https://github.com/ultralytics/yolov5/releases
[4] https://sh-tsang.medium.com/brief-review-yolov5-for-object-detection-84cc6c6a0e3a
[5] Ultralytics YOLOv5 Architecture
[6] SF-YOLOv5: A Lightweight Small Object Detection Algorithm Based on Improved Feature Fusion Mode
[7] labelme+yolov5实例分割:自定义数据集制作、训练与注意点

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring RestClient报错:400 Bad Request : [no body]
  • CentOS7 配置Nginx域名HTTPS
  • React@16.x(23)useEffect
  • [ue5]建模场景学习笔记(5)——必修内容可交互的地形,交互沙(3)
  • Spring Boot 深度学习笔记:从入门到精通的全面指南
  • 【报文数据流中的反压处理】
  • CleanMyMac2024最新免费电脑Mac系统优化工具
  • SQL Server中的CTE和临时表优化
  • C语言 | Leetcode C语言题解之第140题单词拆分II
  • CMakeLists如何多行注释
  • 计算机毕业设计python+spark知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习
  • RoLabelImg下载及旋转目标检测数据标注
  • Linux | buildrootfs 添加mkfs.ext3/mkfs.ext4 支持
  • 【算法小记】深度学习——时间序列数据分析 Time series Data Analysis
  • C#操作MySQL从入门到精通(17)——使用联结
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Android 架构优化~MVP 架构改造
  • AngularJS指令开发(1)——参数详解
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • exports和module.exports
  • Javascript 原型链
  • JDK 6和JDK 7中的substring()方法
  • Laravel核心解读--Facades
  • Map集合、散列表、红黑树介绍
  • Spring Cloud Feign的两种使用姿势
  • 大型网站性能监测、分析与优化常见问题QA
  • 给第三方使用接口的 URL 签名实现
  • 关于 Cirru Editor 存储格式
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 排序算法之--选择排序
  • 什么软件可以剪辑音乐?
  • 使用common-codec进行md5加密
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 一天一个设计模式之JS实现——适配器模式
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • elasticsearch-head插件安装
  • MPAndroidChart 教程:Y轴 YAxis
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #{}和${}的区别是什么 -- java面试
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $ git push -u origin master 推送到远程库出错
  • (¥1011)-(一千零一拾一元整)输出
  • (1)bark-ml
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2)STL算法之元素计数
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...