当前位置: 首页 > 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实例分割:自定义数据集制作、训练与注意点

http://www.lryc.cn/news/368301.html

相关文章:

  • 【设计模式】行为型设计模式之 策略模式学习实践
  • lua中大数相乘的问题
  • 第一个SpringBoot项目
  • Android 10.0 Launcher修改density禁止布局改变功能实现
  • CAN协议简介
  • (二)JSX基础
  • GB 38469-2019 船舶涂料中有害物质限量检测
  • 汇编:数组-寻址取数据
  • ROS自带的OpenCV库和自己安装版本冲突问题现象及解决方法
  • html+CSS+js部分基础运用19
  • 探索 Debian 常用命令:掌握 Linux 系统管理的重要一步
  • 「C系列」C 作用域规则
  • 【机器学习基础】Python编程10:五个实用练习题的解析与总结
  • 【设计模式】结构型设计模式之 门面模式
  • MAC地址简介
  • 五种网络IO模型
  • VSCode超过390万下载的请求插件
  • 前端 JS 经典:下载的流式传输
  • k8s面试题大全,保姆级的攻略哦(三)
  • 从年金理论到杠杆效应,再到财务报表与投资评估指标
  • K8S - 用kubectl远程访问内网的k8s集群
  • STM32F103C8移植uCOSIII并以不同周期点亮两个LED灯(HAL库方式)【uCOS】【STM32开发板】【STM32CubeMX】
  • 【c语言】qsort函数及泛型冒泡排序的模拟实现
  • MySQL之多表查询—表子查询
  • Java 18风暴来袭:解锁编程新纪元
  • 文件操作(Python和C++版)
  • Git【版本控制命令】
  • 打字侠是一款PWA网站,如何下载到电脑桌面?
  • Scikit-learn使用步骤?使用场景?
  • MySQL 5.7详细下载安装配置教程(MySQL 5.7安装包)_mysql5.7的安装教程