一文学习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是每个像素点对…

2024前端面试准备4-Vue相关

Vue2.0 1. 双向绑定原理 Vue是采用数据劫持发布订阅模式的方式,通过Object.defienProperty()来劫持各个属性的setter\getter,在数据发送变动时发布消息给订阅者,触发相应的监听回调。主要分为以下几个步骤: observe的数据对象进行递归遍历&a…

正态分布公式

正态分布(也称为高斯分布)的概率密度函数(PDF)公式如下: 对于均值为 (\mu) ,标准差为 (\sigma) 的正态分布,其概率密度函数为: f ( x ) 1 2 π σ 2 e − ( x − μ ) 2 2 σ 2 f(…

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

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

算法 | 用贪心求解背包动态规划、回溯、分支限界法求解0-1背包

背包问题 普通背包: 贪心时间复杂度:O(nlogn) 首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心 选择策略,将尽可能多的单位重量价值最高的物品装入背包。若 将这种物品全部装入背包后,背包内的物品总重量未超过C&a…

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) …

Web前端伯乐在线:探索技术的深度与广度

Web前端伯乐在线:探索技术的深度与广度 在浩瀚的互联网海洋中,Web前端技术犹如一艘航行在波涛汹涌的海洋中的巨轮,承载着无数的创新与可能。而在这个领域里,伯乐在线就像一座灯塔,照亮着前行者的道路,引领…

备战 清华大学 上机编程考试-冲刺前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开发”为切入点,详细介绍搭建智慧互联网医院系统的过程。 一、智慧互联网医院系统的架构设计 系统架构概述 -前端 -后端 -数据库 功能模块划分 -用户 -预约 -挂号 -问诊、 -病历 -管理 -药品 -配送…

Web前端发展路线:深度解析与未来展望

Web前端发展路线:深度解析与未来展望 在数字化时代的浪潮中,Web前端技术日新月异,成为推动互联网行业发展的重要引擎。本文将从四个方面、五个方面、六个方面和七个方面,深入探讨Web前端的发展路线,为您揭示这一领域的…

C++ 分治法找到第K大的数

有一个整数数组&#xff0c;请你根据快速排序的思路&#xff0c;找出数组中第 k 大的数。 例如&#xff1a; 输入 [1,3,5,2,2], 找出数组中第2大的数&#xff0c;输出 3. #include <iostream>using namespace std; #include <stack> #include <string> #i…

Pytorch 从零实现 Transformer

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

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

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