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

2024-05-04 06:28

本文主要是介绍自定义数据上的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

这篇关于自定义数据上的YOLOv9分割训练的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958519

相关文章

YOLO v3 训练速度慢的问题

一天一夜出了两个模型,仅仅迭代了200次   原因:编译之前没有将Makefile 文件里的GPU设置为1,编译的是CPU版本,必须训练慢   解决方案: make clean  vim Makefile make   再次训练 速度快了,5分钟迭代了500次

将一维机械振动信号构造为训练集和测试集(Python)

从如下链接中下载轴承数据集。 https://www.sciencedirect.com/science/article/pii/S2352340918314124 import numpy as npimport scipy.io as sioimport matplotlib.pyplot as pltimport statistics as statsimport pandas

6月21日训练 (东北林业大学)(个人题解)

前言:   这次训练是大一大二一起参加的训练,总体来说难度是有的,我和队友在比赛时间内就写出了四道题,之后陆陆续续又补了了三道题,还有一道题看了学长题解后感觉有点超出我的能力范围了,就留给以后的自己吧。话不多说,上正文。 正文:   Problem:A 幸运数字: #include <bits/stdc++.h>using namespace std;int sum,ans;in

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址:YOLOv9 2、使用下面代码进行检测 import torchimport cv2from models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.plots import plot_o

国产AI算力训练大模型技术实践

&nbsp;&nbsp; ChatGPT引领AI大模型热潮,国内外模型如雨后春笋,掀起新一轮科技浪潮。然而,国内大模型研发推广亦面临不小挑战。面对机遇与挑战,我们需保持清醒,持续推进技术创新与应用落地。 为应对挑战,我们需从战略高度全面规划大模型的研发与运营,利用我们的制度优势,集中资源攻坚克难。通过加强顶层设计,统一规划,并加大政策与资源的扶持,我们必将推动中国人工智能实现从追赶者到

leetcode刷题(95)——416. 分割等和子集

给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子

预训练是什么?

预训练是什么? 图像领域的预训练 在介绍图像领域的预训练之前,我们首先介绍下卷积神经网络(CNN),CNN 一般用于图片分类任务,并且CNN 由多个层级结构组成,不同层学到的图像特征也不同,越浅的层学到的特征越通用(横竖撇捺),越深的层学到的特征和具体任务的关联性越强(人脸-人脸轮廓、汽车-汽车轮廓) 由此,当领导给我们一个任务:阿猫、阿狗、阿虎的图片各十张,然后让我们设计一个深度神经网

本地离线模型搭建指南-LLaMA-Factory训练框架及工具

搭建一个本地中文大语言模型(LLM)涉及多个关键步骤,从选择模型底座,到运行机器和框架,再到具体的架构实现和训练方式。以下是一个详细的指南,帮助你从零开始构建和运行一个中文大语言模型。 本地离线模型搭建指南将按照以下四个部分展开 中文大语言模型底座选择依据本地运行显卡选择RAG架构实现LLaMA-Factory训练框架及工具 4 训练架构及工具 4.1 为什么要使用LLaMA-Factor

ChatGPT原理和训练【 ChatGPT是由OpenAI开发】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰哦) ChatGPT原理和训练【 ChatGPT是由OpenAI开发】 学习教程(传送门)1.概述2

算法训练与程序竞赛题目集合(L4)

目录 L4-103 就不告诉你 输入格式: 输出格式: 输入样例: 输出样例: L4-104 Wifi密码 输入格式: 输出格式: 输入样例: 输出样例: L4-105 冠军魔术 输入格式: 输出格式: 输入样例 1: 输出样例 1: 输入样例 2: 输出样例 2: L4-106 判断题 输入格式: 输出格式: 输入样例: 输出样例: L4-107