如何在自定义数据集上训练 YOLOv8 实例分割模型

在本文中,我们将介绍微调 YOLOv8-seg 预训练模型的过程,以提高其在特定目标类别上的准确性。Ikomia API简化了计算机视觉工作流的开发过程,允许轻松尝试不同的参数以达到最佳结果。

使用 Ikomia API 入门

通过 Ikomia API,我们只需几行代码就可以训练自定义的 YOLOv8 实例分割模型。要开始,请在虚拟环境中安装 API。

pip install ikomia

在本教程中,我们将使用 Roboflow 的珊瑚数据集。您可以通过以下链接下载此数据集:https://universe.roboflow.com/ds/Ap7v6sRXMc?key=ecveMLIdNa

使用几行代码运行训练 YOLOv8 实例分割算法

您还可以直接加载我们准备好的开源笔记本。

from ikomia.dataprocess.workflow import Workflow




# Initialize the workflow
wf = Workflow()


# Add the dataset loader to load your custom data and annotations
dataset = wf.add_task(name='dataset_coco')


# Set the parameters of the dataset loader
dataset.set_parameters({
    'json_file': 'Path/To/Mesophotic Coral/Dataset/train/_annotations.coco.json',
    'image_folder': 'Path/To/Mesophotic Coral/Dataset/train',
    'task': 'instance_segmentation',
}) 


# Add the YOLOv8 segmentation algorithm
train = wf.add_task(name='train_yolo_v8_seg', auto_connect=True)


# Set the parameters of the YOLOv8 segmentation algorithm
train.set_parameters({
    'model_name': 'yolov8m-seg',
    'batch_size': '4',
    'epochs': '50',
    'input_size': '640',
    'dataset_split_ratio': '0.8',
    'output_folder':'Path/To/Folder/Where/Model-weights/Will/Be/Saved'
})

使用 NVIDIA GeForce RTX 3060 Laptop GPU(6143.5MB),50个时期的训练过程大约需要1小时。

什么是 YOLOv8 实例分割?

在进行具有所有参数详细信息的逐步方法之前,让我们更深入地了解实例分割和 YOLOv8。

什么是实例分割?

实例分割是计算机视觉任务,涉及在图像中识别和描绘单个对象。与语义分割不同,后者将每个像素分类为预定义的类别,实例分割旨在区分和分离对象的各个实例。

在实例分割中,目标不仅是对每个像素进行分类,还要为每个不同的对象实例分配一个唯一的标签或标识符。这意味着将同一类别的对象视为单独的实体。例如,如果图像中有多个汽车实例,实例分割算法将为每辆汽车分配一个唯一的标签,以实现精确的识别和区分。

5a8cffe1417fbc117f2e0fc5e2fa5498.jpeg

实例检测、语义分割和实例分割之间的比较

与其他分割技术相比,实例分割提供了有关对象边界和空间范围的更详细和精细的信息。它广泛用于各种应用,包括自动驾驶、机器人技术、目标检测、医学图像和视频分析。

许多现代实例分割算法,如 YOLOv8-seg,采用深度学习技术,特别是卷积神经网络(CNN),以同时执行像素级分类和对象定位。这些算法通常结合了目标检测和语义分割的优势,以实现准确的实例级分割结果。

YOLOv8概述

发布和优势

由Ultralytics开发的YOLOv8是一种专门用于目标检测、图像分类和实例分割任务的模型。它以其准确性和紧凑的模型大小而闻名,成为YOLO系列的显着补充,该系列在YOLOv5方面取得了成功。凭借其改进的架构和用户友好的增强功能,YOLOv8为计算机视觉项目提供了一个出色的选择。

709608971fea20ee9b1950556e2dfd94.jpeg

与其他实时目标检测器的比较:YOLOv8实现了最先进(SOTA)的性能

架构和创新

虽然YOLOv8的官方研究论文目前不可用,但对存储库和可用信息的分析提供了有关其架构的见解。YOLOv8引入了无锚检测,该方法预测对象中心而不依赖锚框。这种方法简化了模型并改善了后处理步骤,如非最大抑制。

该架构还包含新的卷积和模块配置,倾向于ResNet样式的结构。有关网络架构的详细可视化,请参阅GitHub用户RangeKing创建的图像。

1df89a10b46db1a264ac3a42e7556ca2.jpeg

YOLOv8模型结构(非官方)

训练例程和数据增强

YOLOv8的训练例程包括马赛克增强,其中多个图像被组合在一起,使模型暴露于对象位置、遮挡和周围像素的变化。但是,在最终训练时关闭此增强以防止性能降低。

准确性和性能

YOLOv8的准确性改进已在广泛使用的COCO基准测试上得到验证,在该基准测试中,该模型实现了令人印象深刻的平均精度(mAP)分数。例如,YOLOv8m-seg模型在COCO上实现了令人瞩目的49.9% mAP。以下表格提供了YOLOv8-seg不同变体的模型大小、mAP分数和其他性能指标的摘要:

7b48ca4477cdc8bec00fbb9fa756a529.jpeg

以下是使用YOLOv8x检测和实例分割模型的输出示例:

14e73423422f031d2980a4587cf8b246.gifYOLOv8x检测和实例分割模型

逐步操作:使用Ikomia API微调预训练的YOLOv8-seg模型

使用您下载的航拍图像数据集,您可以使用Ikomia API训练自定义的YOLO v7模型。

第1步:导入并创建工作流

from ikomia.dataprocess.workflow import Workflow


wf = Workflow()

Workflow是创建工作流的基本对象。它提供了设置输入(如图像、视频和目录)、配置任务参数、获取时间度量和访问特定任务输出(如图形、分割掩码和文本)的方法。我们初始化一个工作流实例。然后,“wf”对象可用于向工作流实例添加任务,配置它们的参数,并在输入数据上运行它们。

第2步:添加数据集加载器

下载的COCO数据集包括两种主要格式:.JSON和图像文件。图像被分成train、val、test文件夹,每个文件夹都有一个包含图像注释的.json文件:

  • 图像文件名

  • 图像大小(宽度和高度)

  • 具有以下信息的对象列表:对象类别(例如“person”、“car”);边界框坐标(x、y、宽度、高度)和分割掩码(多边形)

我们将使用Ikomia API提供的dataset_coco模块加载自定义数据和注释。

# Add the dataset loader to load your custom data and annotations
dataset = wf.add_task(name='dataset_coco')


# Set the parameters of the dataset loader
dataset.set_parameters({
    'json_file': 'Path/To/Mesophotic Coral/Dataset/train/_annotations.coco.json',
    'image_folder': 'Path/To/Mesophotic Coral/Dataset/train,
    'task': 'instance_segmentation'
})

第3步:添加YOLOv8分割模型并设置参数

我们向工作流添加'train_yolo_v8_seg'任务,用于训练自定义的YOLOv8-seg模型。为了自定义我们的训练,我们指定以下参数:

# Add the YOLOv8 segmentation algorithm
train = wf.add_task(name='train_yolo_v8_seg', auto_connect=True)

# Set the parameters of the YOLOv8 segmentation algorithm
train.set_parameters({
    'model_name': 'yolov8m-seg',
    'batch_size': '4',
    'epochs': '50',
    'input_size': '640',
    'dataset_split_ratio': '0.8',
    'output_folder':'Path/To/Folder/Where/Model-weights/Will/Be/Saved'
})

这是可配置的参数及其相应的描述:

  • batch_size:在更新模型之前处理的样本数。

  • epochs:在训练数据集上的完整通过次数。

  • input_size:训练和验证期间的输入图像大小。

  • dataset_split_ratio:算法自动将数据集分为训练和评估集。值为0.8表示使用80%的数据进行训练,20%进行评估。

您还可以修改以下参数:

  • workers:数据加载的工作线程数。当前设置为'0'。

  • optimizer:要使用的优化器。可用的选择包括SGD、Adam、Adamax、AdamW、NAdam、RAdam、RMSProp和auto。

  • weight_decay:优化器的权重衰减。当前设置为'5e-4'。

  • momentum:SGD动量/Adam beta1值。当前设置为'0.937'。

lr0:初始学习率。对于SGD,设置为1E-2,对于Adam,设置为1E-3。

lrf:最终学习率,计算为lr0 * lrf。当前设置为'0.01'。

第4步:运行您的工作流

最后,我们运行工作流以开始训练过程。

wf.run()

您可以使用Tensorboard或MLflow等工具监视培训的进度。一旦训练完成,train_yolo_v8_seg任务将在output_folder中的时间戳文件夹内保存最佳模型。您可以在时间戳文件夹的weights文件夹中找到您的best.pt模型。

测试微调的YOLOv8-seg模型

首先,我们可以在预训练的YOLOv8-seg模型上运行珊瑚图像:

from ikomia.dataprocess.workflow import Workflow
from ikomia.utils.displayIO import display




# Initialize the workflow
wf = Workflow()


# Add the YOLOv8 segmentation alrogithm
yolov8seg = wf.add_task(name='infer_yolo_v8_seg', auto_connect=True)


# Set the parameters of the YOLOv8 segmentation algorithm
yolov8seg.set_parameters({
    'model_name': 'yolov8m-seg',
    'conf_thres': '0.2',
    'iou_thres': '0.7'
}) 


# Run on your image
wf.run_on(path="Path/To/Mesophotic Coral Identification.v1i.coco-segmentation/valid/TCRMP20221021_clip_LBP_T109_jpg.rf.a4cf5c963d5eb62b6dab06b8d4b540f2.jpg")


# Inspect your results
display(yolov8seg.get_image_with_mask_and_graphics())

23ee7f46676fde21c27efb1e47e844e5.jpeg

瑚检测使用YOLOv8-seg预训练模型

我们可以观察到,infer_yolo_v8_seg默认的预训练模型将珊瑚错误地识别为熊。这是因为该模型是在COCO数据集上进行训练的,该数据集不包含任何珊瑚对象。

要测试我们刚刚训练的模型,我们使用'model_weight_file'参数指定路径到我们的自定义模型。然后在先前使用的相同图像上运行工作流。

# Set the path of you custom YOLOv8-seg model to the parameter
yolov8seg.set_parameters({
    'model_weight_file': 'Path/To/Output_folder/[timestamp]/train/weights/best.pt',
    'conf_thres': '0.5',
    'iou_thres': '0.7'
})

291e1f49fc99482f99333168d89e92a8.jpeg珊瑚检测使用自定义模型

将我们的结果与地面实况进行比较,我们成功地识别了Orbicella spp.的物种。然而,我们观察到一些假阴性的情况。为了提高我们自定义模型的性能,进一步训练更多的时期并使用更多图像进行数据增强可能会有益处。另一个展示有效检测结果的示例是用Agaricia agaricites物种演示的:

630e2786523ee9cd54837d87ec5ca1ce.jpegYOLOv8检测珊瑚物种:Agaricia agaricites

·  END  ·

HAPPY LIFE

3a25b3b6fbaf393dd05c70712307a907.png

本文仅供学习交流使用,如有侵权请联系作者删除

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

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

相关文章

C++ : 初始化列表 类对象作为类成员

传统方式初始化 C 提供了初始化列表语法,用来初始化属性 初始化列表 语法: 构造函数():属性1(值1), 属性2(值2)... {} class Person { public://传统方式初始化 Person(int a, int b, int c) {m_A a;m_B b;m_C c…

生成工具集合

文章目录 前言一、SVG 波浪图片生成器二、背景图片生成器三、布局/形状分隔线四、Neumorphism五、动画按钮六、开发工具七、Interactions(图片轮播)八、CSS Gradient (渐变属性)九、获取波浪十、平滑阴影十一、CSS Clip-path Make…

图像重定向Image Retarget

1、什么是图像重定向? 图像重定向旨在调整图像的尺寸和比例,以适应不同的显示设备或布局要求。 它可以通过添加或删除像素来改变图像的宽度和高度,同时保持图像的内容和结构的相对比例。 这种技术可以通过保持图像的关键特征和结构来最大程度…

Java-多线程基本知识学习总结

多线程 前言一、线程的创建1、继承Thread类2、实现Runnable接口 二、线程的生命周期三、操作线程的方法1、线程的休眠2、线程的加入3、线程的礼让4、线程的优先级 四、线程同步End 前言 Java是支持多线程的编程语言,所谓多线程就是程序能够同时完成多种操作。 计算…

Linux中执行java命令报错:cannot execute binary file: Exec format error

网上很多文章 都是说操作系统和JDK,32位和64位不兼容问题 当你非常确定你的操作系统是64位,并且JDK也是64位的时候 或者非常确定你的操作系统是32位,并且JDK也是32位的时候 怎么办? 使用以下命令,查看你的操作系统…

IDEA插件推荐

今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,支持三大功能:写完代码IDEA内一键生成API文档;写完代码IDEA内一键调试;生成API目录树,双击即可快速定位API定义的代码…非常好用!而且完全免费&…

MySQL进阶-InnoDB引擎

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、语雀 、Github 🎉公众号:猫十二懿 一、InnoDB 逻辑存储引擎 InnoDB的逻辑存储结构如下图所示: 大小关系:表空间(Tablespace&#xff0…

消息队列MQ

文章目录 同步通讯和异步通讯什么是MQ?一.RabbitMQ概述二.SpringAMQP1.Work Queue 工作队列2.发布订阅-Fanout Exchange3.发布订阅-DirectExchange4.发布订阅-TopicExchange 3.消息转换器 同步通讯和异步通讯 其实在之前的JAVASE中就已经在线程一章中接触过了同步和异步的概念…

实战:登录接口测试用例举例

以下是一些可能的登录接口测试用例(使用Python编写的): 1. 测试正常情况下的登录接口: # 请求URL url "https://example.com/api/login" # 请求参数 username "testuser" password "testpassword&q…

数据治理框架和成熟度模型

数据治理成熟度模型 一个企业的数据治理能力越高,所享受到数据治理带来的价值也会越多,如增加收入、减少成本、降低风险等。于是,很多企业想要准确地评估本公司的数据治理能力,可以利用数据治理成熟度模型方法,包括 D…

摄影网站的技术 SEO:提示和最佳实践

摄影就是要给人留下良好的第一印象。如果你想在竞争中领先,摄影师的SEO是您可以采用的最佳营销方法之一。 我们都曾有过这样的经历:你建立了一个漂亮的作品集网站来吸引更多的业务。网站上线并在社交媒体上推广后,您就可以坐等了。网站访问量…

堆的应用(堆排序、Top-K问题)

文章目录 1 堆排序2 Top-K问题 1 堆排序 堆排序是一种基于二叉堆(通常使用数组实现)的排序算法。 它的基本思想是利用堆这种数据结构的性质,通过建立一个堆(大堆或小堆),使得堆的根节点是所有节点中的最大值…

牛客 算法题 golang语言实现

题目 HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识,对其元素按照升序或降序进行排序数据范围: 1 ≤ � ≤ 10001≤n≤1000 ,元素大小满足 0 ≤ � &#…

提升企业网络安全的得力助手——EventLog Analyzer网络日志管理

在当今数字化时代,企业的网络安全问题变得尤为重要。为了更好地应对日益增多的威胁和安全漏洞,企业需要一种高效的网络日志管理工具,EventLog Analyzer便是其中一款卓越的解决方案。 EventLog Analyzer EventLog Analyzer是一款综合性的网络…

探索短剧市场的商机:打造短视频平台的全方位指南

目前短剧市场蓬勃发展,上半年备案数远超电视剧,彰显了短剧小程序市场潜力巨大,商业价值巨大。用户对短小精悍娱乐内容的需求不断增加,而新兴市场中有限的短剧小程序正好能够迎合这一需求。 搭建短视频平台的关键步骤: …

GOAT:多模态、终身学习、平台无关的机器人通用导航系统

机器人应用中涉及到的核心技术包括:环境感知与理解、实时定位与建图、路径规划、行为控制等。GOAT通过多模态结合终生学习的方式让你的机器人可以在未知环境中搜索和导航到任何物体。小白也可以零门槛上手。 项目地址:https://theophilegervet.github.i…

性能优化的一般策略及方法

性能优化的一般策略及方法 在汽车嵌入式开发领域,性能优化始终是一个无法回避的问题: 座舱 HMI 想要实现更流畅的人机交互 通信中间件在给定的 CPU 资源下,追求更高的吞吐量 更一般的场景:嵌入式设备 CPU 资源告急,需…

Web前端开发技术:图像与多媒体文件

在现代的Web开发中,图像和多媒体文件在各种网站和应用程序中扮演着至关重要的角色。它们不仅能提供更丰富的内容,还能大大提高应用程序的吸引力和用户体验。本文将深入介绍一些关键的Web前端开发技术,这些技术将有助于开发者在处理图像和多媒…

【Python3】【力扣题】367. 有效的完全平方数

【力扣题】题目描述: 【Python3】代码: 1、解题思路:Python函数。num的平方根 或者 num的0.5次幂。 知识点:float.is_integer(...):判断浮点数的值是否等于整数。也可以:浮点数.is_integer()。 pow(a,b)&…

JAVA多线程总结

一、概念: 1、什么是多任务 多任务就是在同一时间做多件事情,如边吃饭边玩手机等。看起来是多个任务都在做,本质上我们的大脑在同一时间依旧只做了一件件事情 2、什么是程序 程序是指令和数据的有序集合,其本身没有任…