自定义数据上的YOLOv9分割训练

原文地址:yolov9-segmentation-training-on-custom-data

2024 年 4 月 16 日

在飞速发展的计算机视觉领域,物体分割在从图像中提取有意义的信息方面起着举足轻重的作用。在众多分割算法中,YOLOv9 是一种稳健且适应性强的解决方案,它具有高效的分割能力和出色的准确性。

在本文中,我们将深入探讨 YOLOv9 在自定义数据集上进行对象分割的训练过程,并在测试数据上进行推理。

步骤 1 下载数据集

本文将使用Furniture BBox To Segmentation (SAM)。要获取 Furniture BBox To Segmentation (SAM) 数据集。你可以从 Kaggle(一个数据科学竞赛、数据集和机器学习资源的流行平台)上获取。

下载数据集后,如果数据集已打包,你可能需要从压缩格式(如 ZIP 或 TAR 文件)中提取文件。

步骤 2 安装 Ultralytics

!pip install ultralytics -qq

导入软件包

from ultralytics import YOLO
import matplotlib.pyplot as plt
import cv2
import pandas as pd
import seaborn as sns

步骤 3 使用预训练的 YoloV9 权重进行推理

model = YOLO('yolov9c-seg.pt')
model.predict("image.jpg", save=True)
  1. model = YOLO('yolov9c-seg.pt'):
  • 此行初始化用于物体分割的 YOLOv9(只看一次)模型。
  • 模型从名为 "yolov9c-seg.pt "的文件中加载,该文件包含 YOLOv9 架构的预训练权重和配置,专门用于分割任务。
  1. model.predict("image.jpg",save=True):
  • 此行使用初始化的 YOLOv9 模型对名为 "image.jpg "的输入图像执行预测。
  • 预测函数接收输入图像并进行分割,识别和划分图像中的对象。
  • save=True 参数表示将保存分割结果。

步骤 4 在自定义数据集上微调 YOLOv9-seg

配置 yolov9:

dataDir = '/content/Furniture/sam_preds_training_set/'
workingDir = '/content/'

变量 dataDir 表示对象分割模型训练数据所在的目录路径。训练数据存储在"/content "目录下 "Furniture "目录下名为 "sam_preds_training_set "的目录中。

同样,变量 workingDir 表示存储主要工作文件的目录路径。

num_classes = 2
classes = ['Chair', 'Sofa']
  1. num_classes = 2:这个变量指定了模型将被训练分割的类别总数。在本例中,num_classes 设置为 2,表示模型将学习识别两个不同的物体类别。
  2. classes = ['Chair', 'Sofa']: 该列表包含模型将被训练识别的类别或对象的名称。列表中的每个元素都对应一个特定的类标签。这些类别被定义为 "椅子 "和 "沙发",模型将在此基础上训练分割属于这些类别的对象。
import yaml
import os
file_dict = {'train': os.path.join(dataDir, 'train'),'val': os.path.join(dataDir, 'val'),'test': os.path.join(dataDir, 'test'),'nc': num_classes,'names': classes
}
with open(os.path.join(workingDir, 'data.yaml'), 'w+') as f:yaml.dump(file_dict, f)
  1. file_dict: 创建包含数据集信息的字典:
  • train"、"val "和 "test": 分别指向训练、验证和测试数据目录的路径。这些路径由 dataDir(包含数据集的目录)和相应的目录名连接而成。
  • nc": 数据集中的类数,由变量 num_classes 表示。
  • names':类名列表,由变量 num_classes 表示: 类名列表,由变量 classes 表示。
  • with open(...) as f:: 以写模式('w+')打开名为'data.yaml'的文件。如果文件不存在,则将创建该文件。with 语句确保文件在写入后被正确关闭。
  • yaml.dump(file_dict, f): yaml.dump() 函数将 Python 对象序列化为 YAML 格式并写入指定的文件对象。
model = YOLO('yolov9c-seg.pt')
model.train(data='/content/data.yaml' , epochs=30 , imgsz=640)

使用指定的预训练权重文件 "yolov9c-seg.pt "初始化用于对象分割的 YOLOv9 模型。然后在数据参数指定的自定义数据集上训练模型,数据参数指向 YAML 文件 "data.yaml",该文件包含数据集配置细节,如训练和验证图像的路径、类的数量和类的名称。

步骤 5 加载自定义模型

best_model_path = '/content/runs/segment/train/weights/best.pt'
best_model = YOLO(best_model_path)

我们要定义的是训练过程中获得的最佳模型的路径。best_model_path 变量保存了存储最佳模型权重的文件路径。这些权重代表了 YOLOv9 模型的学习参数,该模型在训练数据中取得了最高性能。

接下来,我们使用 best_model_path 作为参数实例化 YOLO 对象。这样就创建了一个 YOLO 模型实例,并使用训练过程中获得的最佳模型的权重进行初始化。这个实例化的 YOLO 模型被称为 best_model,现在可以用于对新数据进行预测。

步骤 6 对测试图像进行推理

# Define the path to the validation images
valid_images_path = os.path.join(dataDir, 'test', 'images')
# List all jpg images in the directory
image_files = [file for file in os.listdir(valid_images_path) if file.endswith('.jpg')]
# Select images at equal intervals
num_images = len(image_files)
selected_images = [image_files[i] for i in range(0, num_images, num_images // 4)]
# Initialize the subplot
fig, axes = plt.subplots(2, 2, figsize=(10, 10))
fig.suptitle('Test Set Inferences', fontsize=24)
# Perform inference on each selected image and display it
for i, ax in enumerate(axes.flatten()):image_path = os.path.join(valid_images_path, selected_images[i])results = best_model.predict(source=image_path, imgsz=640)annotated_image = results[0].plot()annotated_image_rgb = cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)ax.imshow(annotated_image_rgb)ax.axis('off')
plt.tight_layout()
plt.show()
  1. 定义验证图像的路径: 这一行将创建 dataDir 目录中包含测试图像的目录路径。
  2. 列出目录中的所有 jpg 图像: 它将创建指定目录中所有 JPEG 图像文件的列表。
  3. 以相同间隔选择图像: 它从列表中选择一个图像子集进行可视化。在这种情况下,它会选择图像总数的四分之一。
  4. 初始化子绘图: 该行创建一个 2x2 网格的子图来显示所选图像及其相应的预测结果。
  5. 对每个选定图像进行推理并显示: 该行遍历每个子图,使用 best_model.predict() 函数对相应的选定图像执行推理,并显示带有边界框或分割掩码的注释图像。
  6. 最后,使用 plt.tight_layout() 将子图整齐排列,并使用 plt.show() 显示。

2

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

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

相关文章

vue2项目webpack3.x打包文件分割优化加载

vue2项目webpack3.x打包文件分割优化加载 0. 项目目录和依赖信息1. 开启 gzip(建议)2. vue2项目配置懒加载(建议)3. 拆分 vendor 包注意:webpack3使用CommonsChunkPlugin实现 本文使用 3 种方案进行叠加优化 优先级按以…

JavaWeb--1.Servlet

Servlet&#xff08;基础&#xff09; 1、配置依赖&#xff1a; ​ 在pom.xml文件中加入相关依赖 <dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0&l…

021、Python+fastapi,第一个Python项目走向第21步:ubuntu 24.04 docker 安装mysql8、redis(二)

系列文章目录 pythonvue3fastapiai 学习_浪淘沙jkp的博客-CSDN博客https://blog.csdn.net/jiangkp/category_12623996.html 前言 安装redis 我会以三种方式安装&#xff0c; 第一、直接最简单安装&#xff0c;适用于测试环境玩玩 第二、conf配置安装 第三、集群环境安装 一…

【简单介绍下Lisp的学习历程】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

k8s笔记 | Ingress

安装Ingress 添加helm创库 Installation Guide - Ingress-Nginx Controller Ingress | Kubernetes 下载包 将 文件helm 放到 /usr/local/bin/ 并给到执行权限 # 添加可执行权限 chmod ux helm # 测试是否能运行 helm version# 结果 version.BuildInfo{Version:"v3.14…

Eclipse 开创性地集成 Neon Stack,将 EVM 兼容性带到 SVM 网络

2024年5月2日&#xff0c;全球——在塑造区块链网络的战略联盟的过程中&#xff0c;Eclipse 通过集成 Neon EVM 核心团队开发的技术堆栈 Neon Stack&#xff0c;成为首个打破 EVM-SVM 兼容性障碍的生态。 Eclipse 旨在通过结合以太坊和 Solana 的最佳特性&#xff0c;来重构区…

【CTF Reverse】XCTF GFSJ0487 game Writeup(反编译+逆向工程)

game 菜鸡最近迷上了玩游戏&#xff0c;但它总是赢不了&#xff0c;你可以帮他获胜吗 解法 放进 exeinfope 中分析。 拖入 IDA 中。shift f12 查看字符串。ctrl f 搜索 flag。 DATA XREF: sub_45E94028↑o Function 中搜索 sub_45E940。 flag 应该是在这里算出来的&#xff…

C#语言入门

一、基础知识 1. 程序语言是什么 用于人和计算机进行交流&#xff0c;通过程序语言让计算机能够响应我们发出的指令 2. 开发环境 IDE&#xff0c;集成开发环境。它就是一类用于程序开发的软件&#xff0c;这一类软件一般包括了代码编辑、编译器、调试器、图形用户界面等等工…

MTEB - Embedding 模型排行榜

文章目录 关于 MTEBMTEB 任务和数据集概览使用 MTEB Pythont 库Installation使用 关于 MTEB MTEB : Massive Text Embedding Benchmark github : https://github.com/embeddings-benchmark/mtebhuggingface : https://huggingface.co/spaces/mteb/leaderboardpaper : https:/…

微信小程序的执行流程

1.首先会进入app.js 打开微信小程序首先会进入app.js,在app.js中会写入App()方法&#xff0c;App()接受一个object参数&#xff0c;用于指定小程序的生命周期等。App()方法有且仅有一个。 App()的object参数及其描述&#xff1a; onLaunch&#xff1a;监听小程序显示&#x…

【云原生】Docker 实践(五):搭建私有镜像 Harbor

【Docker 实践】系列共包含以下几篇文章&#xff1a; Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用Docker 实践&#xff08;二&#xff09;&#xff1a;什么是 Docker 的镜像Docker 实践&#xff08;三&#xff09;&#xff1a;使用 Dockerf…

一机游领航旅游智慧化浪潮:借助前沿智能设备,革新旅游服务效率,构建高效便捷、生态友好的旅游服务新纪元,开启智慧旅游新时代

目录 一、引言 二、一机游的定义与特点 &#xff08;一&#xff09;一机游的定义 &#xff08;二&#xff09;一机游的特点 三、智能设备在旅游服务中的应用 &#xff08;一&#xff09;旅游前的信息查询与预订支付 &#xff08;二&#xff09;旅游中的导航导览与互动体…

Jupyter Notebook魔术命令

Jupyter Notebook是一个基于网页的交互式笔记本&#xff0c;支持运行多种编程语言。 Jupyter Notebook 的本质式一个Web应用程序&#xff0c;便于创建和共享文学化程序文档&#xff0c;支持实现代码&#xff0c;数学方程&#xff0c;可视化和markdown。用途包括&#xff1a;数据…

thinkphp家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单安装教程

介绍 thinkphp家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单安装教程 上门预约服务派单小程序家政小程序同城预约开源代码独立版安装教程 程序完整&#xff0c;经过安装检测&#xff0c;可放心下载安装。 适合本地的一款上门预约服务小程序&#xff0…

机器学习之基于Jupyter中国环境治理投资数据分析及可视化

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 机器学习之基于Jupyter中国环境治理投资数据分析及可视化项目是一个结合了机器学习和数据可视化技术的项目&#xf…

MySQL-数据缓冲池(Buffer Pool)

InnoDB存储引擎以 页 为单位管理存储空间&#xff0c;增删改查的本质就是访问页面。为提高查询效率&#xff0c;DBMS会占用内存作为缓冲池&#xff0c;在执行SQL之前&#xff0c;会将磁盘上的页 缓存到内存中的 缓冲池&#xff08;Buffer Pool&#xff09;后执行相关SQL语句。 …

【51单片机LCD1602显示矩阵键盘原始键值】2023-6-1

缘由https://ask.csdn.net/questions/7955623 #include "reg52.h" sbit LCD1602_RS P3^5;//RS端数据命令选择(H/L) sbit LCD1602_RW P3^6;//RW端读写选择(H/L) sbit LCD1602_EN P3^7;//EN端使能信号上升沿25ns void PanDuan1602(/*LCD1602忙判断*/) { LCD1602…

Webshell绕过技巧分析之-base64编码和压缩编码

在网络安全运营&#xff0c;护网HVV&#xff0c;重保等活动的过程中&#xff0c;webshell是一个无法绕过的话题。通常出现的webshell都不是以明文的形式出现&#xff0c;而是针对webshell关键的内容进行&#xff0c;混淆&#xff0c;编码来绕过网络安全产品&#xff0c;例如IDS…

docker系列9:容器卷挂载(下)

传送门 docker系列1&#xff1a;docker安装 docker系列2&#xff1a;阿里云镜像加速器 docker系列3&#xff1a;docker镜像基本命令 docker系列4&#xff1a;docker容器基本命令 docker系列5&#xff1a;docker安装nginx docker系列6&#xff1a;docker安装redis docker系…

百度地图推出「AI 导游」功能:限时免费 五一期间上线

​​​​​​ 分享一个AI工具、资料、课程资源平台&#xff1a;AI科技智库 百度地图推出了「AI 导游」功能&#xff0c;用户可以在景区使用手机打开百度地图&#xff0c;点击左上的「AI 导游」按钮即可使用。 这个功能可以提供智能讲解&#xff0c;根据用户的实时位置智能送景…