模型实战(2)之YOLOv5 实时实例分割+训练自己数据集

news2024/12/22 20:41:53

模型实战(2)之YOLOv5 实时实例分割+训练自己数据集

本文将详解YOLOv5实例分割模型的使用及从头训练自己的数据集得到最优权重,可以直接替换数据集进行训练的训练模型可通过我的gitcode进行下载:https://gitcode.net/openmodel/yolov5-seg

详细过程将在文章中给出:

  • 2022年11月22号YOLO的官方团队发布了yolov5-v7.0版用于实例分割,号称目前最快和最准确的模型:https://github.com/ultralytics/yolov5/tree/v7.0,其性能如下图:

在这里插入图片描述

  • 为了对其更好的测试、验证和部署,可以参考官方手稿:https://github.com/ultralytics/yolov5/blob/master/segment/tutorial.ipynb
  • 我们使用A100 gpu在coco上训练了300个epoch的YoLOv5分割模型,图像大小为640。我们将所有模型导出到ONNX FP32进行CPU速度测试,并导出到TensorRT FP16进行GPU速度测试。为了便于再现,我们在谷歌Colab Pro笔记本电脑上运行了所有速度测试。

YOLOv5n-seg … YOLOv5s-seg … YOLOv5m-seg … YOLOv5l-seg … YOLOv5x-seg

在这里插入图片描述

1.模型训练、验证、及预测

  • 克隆代码到本地
git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5

#创建环境 
conda create -n yolov5-seg python=3.8
#激活
conda activate yolov5-seg

# 安装 torch 1.8.2+cu11.1
pip install torch==1.8.2 torchvision==0.9.2 torchaudio===0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111

#其他版本:torch+cuda10.2
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

# 修改requirements.txt,将其中的torch和torchvision注释掉
pip install -r requirements.txt
  • train
    YOLOv5 segmentation training supports auto-download COCO128-seg segmentation dataset with --data coco128-seg.yaml argument and manual download of COCO-segments dataset with bash data/scripts/get_coco.sh --train --val --segments and then python train.py --data coco.yaml.
# Single-GPU
python segment/train.py --model yolov5s-seg.pt --data coco128-seg.yaml --epochs 5 --img 640

# Multi-GPU DDP
python -m torch.distributed.run --nproc_per_node 4 --master_port 1 segment/train.py --model yolov5s-seg.pt --data coco128-seg.yaml --epochs 5 --img 640 --device 0,1,2,3
  • val 验证
    Validate YOLOv5m-seg accuracy on ImageNet-1k dataset:
bash data/scripts/get_coco.sh --val --segments  # download COCO val segments split (780MB, 5000 images)
python segment/val.py --weights yolov5s-seg.pt --data coco.yaml --img 640  # validate
  • predict 预测
    Use pretrained YOLOv5m-seg.pt to predict bus.jpg:
python segment/predict.py --weights yolov5m-seg.pt --data data/images/bus.jpg

在这里插入图片描述

  • 导出onnx或者tensorRT:
python export.py --weights yolov5s-seg.pt --include onnx engine --img 640 --device 0

2.训练自己的数据集实现实例分割

  • 预训练模型下载
    可通过我的开源仓库进行下载,已经各个文件路径、数据集制作等demo准备好,可以直接复用,详见:https://gitcode.net/openmodel/yolov5-seg
    在这里插入图片描述

  • 实例分割时目标检测与语义分割的结合,所以其标注文件初始为通过labelme标注的json格式,要用yolo模型进行训练,需要将其转换为yolo所需要的txt格式:
    在这里插入图片描述

  • 对于标准好的数据集,通过datas中的json2yolo.pyjson格式标注文件转换为.txt格式的标准文件
    在这里插入图片描述
    在这里插入图片描述
    编写demo将标注的多边形区域复制到一个全黑背景(原图大小)图像中并imshow下:

import os, cv2, json
import numpy as np

base_path = './data_'
path_list = [i.split('.')[0]+'.'+i.split('.')[1] for i in os.listdir(base_path) if 'json' in i]
for path in path_list:
    image = cv2.imread(f'{base_path}/{path}.png')
    h, w, c = image.shape
    label = np.zeros((h, w), dtype=np.uint8)
    with open(f'{base_path}/{path}.json') as f:
        mask = json.load(f)['shapes']
    for i in mask:
        i = np.array([np.array(j) for j in i['points']])
        label = cv2.fillPoly(label, [np.array(i, dtype=np.int32)], color=255)
    image = cv2.bitwise_and(image, image, mask=label)
    cv2.imshow('Pic', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述

  • 转换完成后将图像+标签文件(.txt)按照既定格式放到路径./datasets文件夹下:
    在这里插入图片描述
  • ./data下修改模型配置文件:
    在这里插入图片描述
  • ./model下设置模型参数并选择模型(s,m,l):
    在这里插入图片描述
  • ./weights下下载官方权重作为预训练初始权重:
    我已将权重下载好并进行压缩,下载完代码后直接解压即可
    在这里插入图片描述
  • 训练demo修改相应路径,执行训练即可
    在这里插入图片描述
    在这里插入图片描述
    训练结束后,训练好的best,pt将保存在如下的 weights中:
    在这里插入图片描述
  • 修改predict.py中的相应参数,即可进行预测:
    在这里插入图片描述

3.Load YOLOv5 with PyTorch Hub

详见参考:https://github.com/ultralytics/yolov5/issues/36
This example loads a pretrained YOLOv5s model from PyTorch Hub as model and passes an image for inference. ‘yolov5s’ is the lightest and fastest YOLOv5 model.

import torch

# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# Image
im = 'https://ultralytics.com/images/zidane.jpg'

# Inference
results = model(im)

results.pandas().xyxy[0]
#      xmin    ymin    xmax   ymax  confidence  class    name
# 0  749.50   43.50  1148.0  704.5    0.874023      0  person
# 1  433.50  433.50   517.5  714.5    0.687988     27     tie
# 2  114.75  195.75  1095.0  708.0    0.624512      0  person
# 3  986.00  304.00  1028.0  420.0    0.286865     27     tie

This example shows batched inference with PIL and OpenCV image sources. results can be printed to console, saved to runs/hub, showed to screen on supported environments, and returned as tensors or pandas dataframes.

import cv2
import torch
from PIL import Image

# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# Images
for f in 'zidane.jpg', 'bus.jpg':
    torch.hub.download_url_to_file('https://ultralytics.com/images/' + f, f)  # download 2 images
im1 = Image.open('zidane.jpg')  # PIL image
im2 = cv2.imread('bus.jpg')[..., ::-1]  # OpenCV image (BGR to RGB)

# Inference
results = model([im1, im2], size=640) # batch of images

# Results
results.print()  
results.save()  # or .show()

results.xyxy[0]  # im1 predictions (tensor)
results.pandas().xyxy[0]  # im1 predictions (pandas)
#      xmin    ymin    xmax   ymax  confidence  class    name
# 0  749.50   43.50  1148.0  704.5    0.874023      0  person
# 1  433.50  433.50   517.5  714.5    0.687988     27     tie
# 2  114.75  195.75  1095.0  708.0    0.624512      0  person
# 3  986.00  304.00  1028.0  420.0    0.286865     27     tie

在这里插入图片描述

4.模型导出onnx或tensorRT

详细参考:https://github.com/ultralytics/yolov5/issues/251
YOLOv5 inference is officially supported in 11 formats:

💡 ProTip: Export to ONNX or OpenVINO for up to 3x CPU speedup. See CPU Benchmarks.
💡 ProTip: Export to TensorRT for up to 5x GPU speedup. See GPU Benchmarks.
在这里插入图片描述

  • 将已训练好的yolov5模型导出
    This command exports a pretrained YOLOv5s model to TorchScript and ONNX formats.
python export.py --weights yolov5s.pt --include torchscript onnx

💡 ProTip: Add --half to export models at FP16 half precision for smaller file sizes

output:

export: data=data/coco128.yaml, weights=['yolov5s.pt'], imgsz=[640, 640], batch_size=1, device=cpu, half=False, inplace=False, train=False, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=12, verbose=False, workspace=4, nms=False, agnostic_nms=False, topk_per_class=100, topk_all=100, iou_thres=0.45, conf_thres=0.25, include=['torchscript', 'onnx']
YOLOv5 🚀 v6.2-104-ge3e5122 Python-3.7.13 torch-1.12.1+cu113 CPU

Downloading https://github.com/ultralytics/yolov5/releases/download/v6.2/yolov5s.pt to yolov5s.pt...
100% 14.1M/14.1M [00:00<00:00, 274MB/s]

Fusing layers... 
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients

PyTorch: starting from yolov5s.pt with output shape (1, 25200, 85) (14.1 MB)

TorchScript: starting export with torch 1.12.1+cu113...
TorchScript: export success ✅ 1.7s, saved as yolov5s.torchscript (28.1 MB)

ONNX: starting export with onnx 1.12.0...
ONNX: export success ✅ 2.3s, saved as yolov5s.onnx (28.0 MB)

Export complete (5.5s)
Results saved to /content/yolov5
Detect:          python detect.py --weights yolov5s.onnx 
Validate:        python val.py --weights yolov5s.onnx 
PyTorch Hub:     model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.onnx')
Visualize:       https://netron.app/

The 3 exported models will be saved alongside the original PyTorch model:
在这里插入图片描述
Netron Viewer is recommended for visualizing exported models:
在这里插入图片描述

  • 引用模型:
python detect.py --weights yolov5s.pt                 # PyTorch
                           yolov5s.torchscript        # TorchScript
                           yolov5s.onnx               # ONNX Runtime or OpenCV DNN with --dnn
                           yolov5s_openvino_model     # OpenVINO
                           yolov5s.engine             # TensorRT
                           yolov5s.mlmodel            # CoreML (macOS only)
                           yolov5s_saved_model        # TensorFlow SavedModel
                           yolov5s.pb                 # TensorFlow GraphDef
                           yolov5s.tflite             # TensorFlow Lite
                           yolov5s_edgetpu.tflite     # TensorFlow Edge TPU
                           yolov5s_paddle_model       # PaddlePaddle

OpenCV inference with ONNX models:

python export.py --weights yolov5s.pt --include onnx

python detect.py --weights yolov5s.onnx --dnn  # detect
python val.py --weights yolov5s.onnx --dnn  # validate

Tutorials

  • Train Custom Data 🚀 RECOMMENDED
  • Tips for Best Training Results ☘️ RECOMMENDED
  • Multi-GPU Training
  • PyTorch Hub 🌟 NEW
  • TFLite, ONNX, CoreML, TensorRT Export 🚀
  • NVIDIA Jetson Nano Deployment 🌟 NEW
  • Test-Time Augmentation (TTA)
  • Model Ensembling
  • Model Pruning/Sparsity
  • Hyperparameter Evolution
  • Transfer Learning with Frozen Layers
  • Architecture Summary 🌟 NEW
  • Roboflow for Datasets, Labeling, and Active Learning 🌟 NEW
  • ClearML Logging 🌟 NEW
  • Deci Platform 🌟 NEW
  • Comet Logging 🌟 NEW

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

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

相关文章

使用matplotlib画图 + python色彩大全

目录画线画点散点画点的形状、线的形状画点线在特定位置写文字plt.legend()中图例的位置方法一 plt.legend(loc4)方法二 plt.legend(bbox_to_anchor(num1, num2))方法三 bbox_to_anchor(1.05, 1), loc2, borderaxespad0保存图片指定图片大小网格线根据自己的需求做了一个画图的…

图的最短路径

文章目录单源最短路径-Dijkstra算法单源最短路径--Bellman-Ford算法多源最短路径--Floyd-Warshall算法单源最短路径-Dijkstra算法 针对一个带权有向图G&#xff0c;将所有结点分为两组S和Q&#xff0c;S是已经确定最短路径的结点集合&#xff0c;在初始时为空&#xff08;初始…

如何使用监控诊断工具Arthas(阿尔萨斯)

Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加载信…

【python】实现精美圣诞树-拿下女神不是梦

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

Java Web基础面试题

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…

【K3s】第4篇 一篇文章带你了解使用Kompose

目录 1、Kompose介绍 2、安装Kompose 3、docker-compose文件转换为k8s文件 1、Kompose介绍 kompose是一个帮助熟悉 Kubernetes 的用户迁移到k8s的工具。 获取 Docker Compose 文件并将其转换为 Kubernetes 资源。 kompose是一个方便的工具&#xff0c;可以从本地 Docker …

Ffuf爆破神器(超详细)

目录为什么是Ffuf基本使用最基本的使用多个字典同时使用带cookie扫描&#xff08;-b&#xff09;静默模式&#xff08;-s&#xff09;递归扫描&#xff08;-recursion&#xff09;指定扩展名&#xff08;-e&#xff09;POST请求爆破方式1&#xff1a;指明请求地址和请求体【不推…

iOS 自动化测试踩坑(一): 技术方案、环境配置与落地实践

移动端的自动化测试&#xff0c;最常见的是 Android 自动化测试&#xff0c;我个人觉得 Android 的测试优先级会更高&#xff0c;也更开放&#xff0c;更容易测试&#xff1b;而 iOS 相较于 Android 要安全稳定的多&#xff0c;但也是一个必须测试的方向&#xff0c;这个系列文…

Android实现雪花特效自定义view

一、前言 这个冬天&#xff0c;老家一直没有下雨&#xff0c; 正好圣诞节&#xff0c;就想着制作一个下雪的特效。 圣诞祝福&#xff1a;平安夜&#xff0c;舞翩阡。雪花飘&#xff0c;飞满天。心与心&#xff0c;永相伴。 圣诞节是传统的宗教节日&#xff0c;对于基 督徒&…

前端自学你还在浪费时间吗?

其实最主要不是学的过程&#xff0c;而是学完后&#xff0c;你有没有把今天的练习题自己在重新敲个2&#xff0c;3遍&#xff0c;这样印象就会更加深刻&#xff0c;以后自己写代码的时候也会更加的得心应手。 手抄笔记让我打好了HTML基础和良好的CSS能力&#xff0c;当然这不一…

Cesium打包入门(gulp与esbuild)

本文针对Cesium源码包的打包工具gulp和esbuild进行了初步探讨&#xff0c;属于入门篇。 首先简要介绍采用gulpesbuild如何为多个源代码文件打包成一个单独文件&#xff0c;然后介绍了下Cesium中的源码包的结构&#xff0c;并简要分析了其打包的相关函数。 本文编译环境IDE使用…

【并发编程学习】一、线程的基本认识

一、线程的基本认识 1.1线程的基本介绍 线程是什么&#xff1f; 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运行单位。 为什么会有多线程&#xff1f; ①因为其是CPU的最小调度单位&#xff0c;所以在多核CPU中&#xff0c…

圣诞节,深圳街头有点冷清了~

正文大家好&#xff0c;我是bug菌~今天是圣诞节&#xff0c;这也是我新冠康复的第二周了吧&#xff0c;还有点小咳嗽&#xff0c;伴随有点鼻炎&#xff0c;不过这周已经上了三天班了&#xff0c;整体感觉还算好吧&#xff0c;毕竟我嘴巴不硬&#xff0c;也比较低调不嚣张&#…

底层硬件创新夯实算力、应用创新贴近业务:英特尔至强助力下的VR医疗培训系统

早在1935年&#xff0c;科幻小说家斯坦利温鲍姆的小说《皮格马利翁的眼镜》中&#xff0c;就构想了一款实现虚拟现实&#xff08;VR&#xff09;的眼镜。近年来&#xff0c;除游戏、娱乐等大众熟知的应用场景外&#xff0c;VR逐渐涉足医疗、教育、生产制造等各种领域。 以医疗…

LeetCode-1759-统计同构子字符串的数目

1、数学 我们可以使用数学进行分析&#xff1a;每当出现连续的nnn个字符时&#xff0c;我们最终将其合在一起进行计算个数。显然我们可以获得的同构子字符串的个数应为n(n1)2\frac{n \times (n1)}{2}2n(n1)​。因此我们只需要遍历整个字符串&#xff0c;分别统计连续出现的字符…

57岛屿数量-61全排列 最长递增路径

57岛屿数量 矩阵中多处聚集着1&#xff0c;要想统计1聚集的堆数而不重复统计&#xff0c;那我们可以考虑每次找到一堆相邻的1&#xff0c;就将其全部改成0&#xff0c;而将所有相邻的1改成0的步骤又可以使用深度优先搜索&#xff08;dfs&#xff09;&#xff1a;当我们遇到矩阵…

AtCoder Beginner Contest 283 (A~F)

比赛名称&#xff1a;UNIQUE VISION Programming Contest 2022 Winter(AtCoder Beginner Contest 283) 比赛链接&#xff1a;AtCoder Beginner Contest 283 A - Power 题意&#xff1a; 求A^B(1<A,B<9) 要注意这个int强制转换&#xff0c;不然9^9输出结果时387420489&…

python根据json数据画疫情分布地图

目录 一.基础地图使用 1.掌握使用pyecharts构建基础的全国地图可视化图表 二.疫情地图——国内疫情地图 1.案例效果 代码 三.疫情地图——省级疫情地图 四.数据集 注&#xff1a;数据集在文章最后 一.基础地图使用 1.掌握使用pyecharts构建基础的全国地图可视化图表 演…

Learning to Segment Every Thing

摘要 现有的目标实例分割方法要求所有训练样本都具有分割mask标注。然而&#xff0c;标注新的类别是非常费劲的&#xff0c;因此这将实例分割模型的应用范围限制在100个左右的有标注的类。本文的目的是提出一种新的部分监督的训练模型&#xff0c;以及一种新的权重传递函数&am…

洛谷【算法1-7】搜索刷题——优化、错题

文章目录[USACO1.5]八皇后 Checker Challenge题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路搜索框架代码位运算优化lowbit运算思路kkksc03考前临时抱佛脚题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码吃奶酪题目描述输入格式输…