一文学习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实例分割:自定义数据集制作、训练与注意点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手写kNN算法的实现-用欧几里德空间来度量距离

kNN的算法思路:找K个离预测点最近的点,然后让它们进行投票决定预测点的类型。 step 1: kNN存储样本点的特征数据和标签数据step 2: 计算预测点到所有样本点的距离,关于这个距离,我们用欧几里德距离来度量(其实还有很多…

苍穹外卖笔记-07-菜品管理-增加、删除、修改、查询分页还有菜品起售或停售状态

菜品管理 1 新增菜品1.1 需求分析与设计1.2 代码开发文件上传新增菜品实现 1.3 功能测试 2 菜品分页查询2.1 需求分析和设计2.2 代码开发设计DTO类设计VO类Controller层Service层Mapper层 2.3 功能测试 3 删除菜品3.1 需求分析和设计3.2 代码开发Controller层Service层Mapper层…

机器学习——卷积神经网络

卷积神经网络CNN 多层感知机MLP的层数足够,理论上可以用其提取出二位特征,但是毕竟复杂,卷积神经网络就可以更合适的来提取高维的特征。 而卷积其实是一种运算 二维离散卷积的公式 可以看成g是一个图像的像素点,f是每个像素点对…

【计网复习】应用层总结(不含HTTP和错题重点解析)

应用层总结(不含HTTP和错题重点解析) 应用层简介 应用层的主要功能常见的应用层协议小林对于应用层通常的解释 网络应用模型 客户端-服务器模型(Client-Server Model, C/S) 特点优点缺点应用场景 对等网络模型(Peer-to…

IO流字符流(FileReader与FileWriter)

目录 FileReader 空参read方法 带参read方法👇 FileWriter void write(intc) 写出一个字符 void write(string str) 写出一个字符串 void write(string str,int off,int len) 写出一个字符串的一部分 void write(char[] cbuf) …

备战 清华大学 上机编程考试-冲刺前50%,倒数第5天

T1:多项式求和 小K最近刚刚习得了一种非常酷炫的多项式求和技巧,可以对某几类特殊的多项式进行运算。非常不幸的是,小K发现老师在布置作业时抄错了数据,导致一道题并不能用刚学的方法来解,于是希望你能帮忙写一个程序…

C语言 树与二叉树基础部分

树与二叉树基础部分 树的基础概念二叉树的性质二叉树的遍历前序遍历中序遍历后序遍历层序遍历根据遍历结果恢复二叉树 二叉树的创建第一种第二种 二叉树的其他典型操作查找指定元素(一般二叉树)二叉树的高度(深度)二叉树的拷贝二叉…

!力扣102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] /*** Definition for…

大模型应用工程化过程

近年来,以人工智能为代表的新一代信息技术加速应用,特 别是基于大模型、大数据、大算力的 ChatGPT 的发布,标志着人 工智能技术取得里程碑式突破,推动科技创新进入新阶段。随着 大模型技术的迅猛发展和场景价值的不断涌现&#xf…

9.2 Go 接口的实现

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Day44 代码随想录打卡|二叉树篇---找树左下角的值

题目(leecode T513): 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 方法:本题需要找二叉树左下角的值,因此该节点首先是在最后一行&#xff0…

搭建智慧互联网医院系统教学:源码解析与在线问诊APP开发

本篇文章,小编将以“源码解析与在线问诊APP开发”为切入点,详细介绍搭建智慧互联网医院系统的过程。 一、智慧互联网医院系统的架构设计 系统架构概述 -前端 -后端 -数据库 功能模块划分 -用户 -预约 -挂号 -问诊、 -病历 -管理 -药品 -配送…

Pytorch 从零实现 Transformer

前言 之前虽然了解过 Transformer 架构,但是没有自己实现过。 最近阅读 transformers 库中 Llama 模型结构,于是想试着亲手实现一个简单的 Transformer。 在实现过程中加深了理解,同时发现之前阅读 Llama 中一些错误的地方,因此…

【实战项目二】Python爬取豆瓣影评

目录 一、环境准备 二、编写代码 一、环境准备 pip install beautifulsoup4 pip intall lxml pip install requests我们需要爬取这些影评 二、编写代码 我们发现每个影评所在的div的class都相同,我们可以从这入手 from bs4 import BeautifulSoup import request…

Qwen2大模型微调入门实战(完整代码)

Qwen2是通义千问团队的开源大语言模型,由阿里云通义实验室研发。以Qwen2作为基座大模型,通过指令微调的方式实现高准确率的文本分类,是学习大语言模型微调的入门任务。 指令微调是一种通过在由(指令,输出)对…

倩女幽魂手游攻略:云手机自动搬砖辅助教程!

《倩女幽魂》手游自问世以来一直备受玩家喜爱,其精美画面和丰富的游戏内容让人沉迷其中。而如今,借助VMOS云手机,玩家可以更轻松地进行搬砖,提升游戏体验。 一、准备工作 下载VMOS云手机: 在PC端或移动端下载并安装VM…

流程的控制

条件选择语句 我们一般将条件选择语句分为三类: 单条件双条件多条件 本篇文章将分开诉说着三类。 单条件 单条件的语法很简单: if (条件) {// 代码}条件这里我们需要注意下,可以向里写入两种: 布尔值布尔表达式 当然&…

Docker高级篇之Docker网络

文章目录 1. Docker Network简介2. Docker 网络模式3. Docker 网络模式之bridge4. Docker 网络模式之host5. Docker 网络模式之none6. Docker 网络模式之container7. Docker 网络模式之自定义网络模式 1. Docker Network简介 从Docker的架构和运作流程来看,Docker是…

计算机组成原理之指令寻址

一、顺序寻址 1、定长指令字结构 2、变长指令字结构 二、跳跃寻址 三、数据寻址 1、直接寻址 2、间接寻址 3、寄存器寻址 寄存器间接寻址 4、隐含寻址 5、立即寻址 6、偏移寻址 1、基址寻址 2、变址寻址 3、相对寻址

力扣199. 二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入: [] 输出: [] /*** Def…