自定义数据上的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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

环形链表 [两道题目](详解)

环形链表(详解) 第一题: 题目: 题目链接 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表…

使用protoc-jar-maven-plugin生成grpc项目

在《使用protobuf-maven-plugin生成grpc项目》中我们使用protobuf-maven-plugin完成了grpc代码的翻译。本文我们将只是替换pom.xml中的部分内容,使用protoc-jar-maven-plugin来完成相同的功能。总体来说protoc-jar-maven-plugin方案更加简便。 环境 见《使用proto…

【数据结构(邓俊辉)学习笔记】列表01——从向量到列表

文章目录 0.概述1. 从向量到列表1.1 从静态到动态1.2 从向量到列表1.3 从秩到位置1.4 列表 2. 接口2.1 列表节点2.1.1 ADT接口2.1.2 ListNode模板类 2.2 列表2.2.1 ADT接口2.2.2 List模板类 0.概述 学习了向量,再介绍下列表。先介绍下列表里的概念和语义&#xff0…

global IoT SIM解决方案

有任何关于GSMA\IOT\eSIM\RSP\业务应用场景相关的问题,欢迎W: xiangcunge59 一起讨论, 共同进步 (加的时候请注明: 来自CSDN-iot). Onomondo提供的全球IoT SIM卡解决方案具有以下特点和优势: 1. **单一全球配置文件**:Onomondo的SIM卡拥…

hive-row_number() 和 rank() 和 dense_rank()

row_number() 是无脑排序 rank() 是相同的值排名相同,相同值之后的排名会继续加,是我们正常认知的排名,比如学生成绩。 dense_rank()也是相同的值排名相同,接下来的排名不会加。不会占据排名的坑位。

C#知识|将选中的账号信息展示到控制台(小示例)

哈喽,你好啊,我是雷工! 上篇学习了控件事件的统一关联, 本篇通过实例练习继续学习事件统一处理中Tag数据获取、对象的封装及泛型集合List的综合运用。 01 实现功能 在上篇的基础上实现,点击选中喜欢的账号&#xff0…

WebSocket 多屏同显和异显

介绍 多屏同显:通过在一个应用上进行操作之后,另一个应用也能跟着一起发生改变,例如app1播放了晴天这首音乐,那么app2也要同步播放这首音乐,确保所有屏幕显示的内容完全相同。多屏异显:每个屏幕可以显示不同的内容,或者在内容更新时存在一定的延迟,而不需要严格保持同步…

MyBatis 使用 XML 文件映射

在MyBatis中 我们可以使用各种注解来配置我们Mapper 类中的方法 我们为什么要使用XML文件呢? 如果我们是一条非常长的SQL 语句 使用 注解配置的话, 会非常不利于阅读 如下 所以,就需要使用到一个XML文件来对SQL语句进行映射,那么 …

力扣763. 划分字母区间

Problem: 763. 划分字母区间 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建一个名为 last 的数组,用于存储每个字母在字符串 s 中最后出现的位置。然后,获取字符串 s 的长度 len。 2.计算每个字母的最后位置:遍历字符串 s&#xff0…

(五)SQL系列练习题(上)创建、导入与查询 #CDA学习打卡

目录 一. 创建表 1)创建课程表 2)创建学生表 3)创建教师表 4)创建成绩表 二. 导入数据 1)导入课程科目数据 2)导入课程成绩数据 3)导入学生信息数据 4)导入教师信息数据 …

RocketMQ SpringBoot 3.0不兼容解决方案

很多小伙伴在项目升级到springBoot3.0版本以上之后,整合很多中间件会有很多问题,下面带小伙伴解决springBoot3.0版本以上对于RocketMQ 不兼容问题 报错信息 *************************** APPLICATION FAILED TO START *************************** Des…

电脑崩溃了,之前备份的GHO文件怎么恢复到新硬盘?

前言 之前咱们说到用WinPE系统给电脑做一个GHO镜像备份,这个备份可以用于硬盘完全崩溃换盘的情况下使用。 那么这个GHO镜像文件怎么用呢? 咱们今天详细来讲讲! 如果你的电脑系统硬盘崩溃了或者是坏掉了,那么就需要使用之前备份…

ubuntu 小工具

随着在专业领域待得越久,发现总会遇到各种奇怪的需求。因此,这里介绍一些ubuntu上的一些小工具。 meld 对比文件 sudo apt-get install meld sudo apt --fix-broken install # maybeHow to compare two files

pytorch笔记:ModuleDict

1 介绍 在 PyTorch 中,nn.ModuleDict 是一个方便的容器,用于存储一组子模块(即 nn.Module 对象)的字典这个容器主要用于动态地管理多个模块,并通过键来访问它们,类似于 Python 的字典 2 特点 组织性 nn…

《金融研究》:普惠金融改革试验区DID工具变量数据(2012-2023年)

数据简介:本数据集包括普惠金融改革试验区和普惠金融服务乡村振兴改革试验区两类。 其中,河南兰考、浙江宁波、福建龙岩和宁德、江西赣州和吉安、陕西铜川五省七地为普惠金融改革试验区。山东临沂、浙江丽水、四川成都三地设立的是普惠金融服务乡村振兴…

可视化大屏应用(20):智慧水务、水利、防汛

hello,我是大千UI工场,本篇分享智智慧水务的大屏设计,关注我们,学习N多UI干货,有设计需求,我们也可以接单。 在智慧水务领域,可视化大屏具有以下几个方面的价值: 数据展示和监控 可…

华为手机 鸿蒙系统-android studio识别调试设备,开启adb调试权限

1.进入设置-关于手机-版本号,连续点击7次 认证:有锁屏密码需要输入密码, 开启开发者配置功能ok 进入开发者配置界面 打开调试功能 重新在androd studio查看可运行running devices显示了, 不行的话,重启一下android …

开源版本管理系统的搭建一:SVN

作者:私语茶馆 1.Windows搭建SVN版本管理系统 1.1.SVN概要和组成 背景介绍 Svn是一个开源版本管理系统,由CollabNet公司于2000年发布,23年12月发布最新版本Apache Subversion 1.14.3。官方网站:Apache Subversion。 Svn可以直…

npm install报错

总结:没有安装visual studio 2017以上带有C桌面开发的版本 #开始试错 #报错总信息mingw_x64_win版本 百度网盘链接: link 提取码:3uou #尝试用mingw配置个C编译器,并配置环境变量,失败 #只认可使用VS!GIthub原址: 链接: link 上…

「 网络安全常用术语解读 」SBOM主流格式CycloneDX详解

CycloneDX是软件供应链的现代标准。CycloneDX物料清单(BOM)可以表示软件、硬件、服务和其他类型资产的全栈库存。该规范由OWASP基金会发起并领导,由Ecma International标准化,并得到全球信息安全界的支持,如今CycloneD…