基于自定义数据集的YOLOv8模型实战

Google 开发者在线课程 开局学习

基于自定义数据集的YOLOv8模型实战

译文 精选 作者: 朱先忠 本文将经过一个完整的实战案例来展现经常使用Python、命令行或Google Colab等方式在自定义数据集上训练自己的计算机视觉模型。

简介

,Ultralytics公司研制的初级YOLOv8模型成为处置计算机视觉疑问的最佳方法之一,同时该模型也最大限制地缩小了有关开发环节遭逢的费事。YOLOv8是Ultralytics YOLO(You Only Look Once)系列模型的第8次也是最新一次性迭代,与其他迭代一样,它经常使用卷积神经网络(CNN)来预测对象类别及其边界框。YOLO系列对象探测器以准确和极速而知名,并提供了一个基于PyTorch构建的平台,从而简化了人们从头开局创立模型的大局部环节。

尤其关键的是,YOLOv8也是一个十分灵敏的模型。它可以在各种平台上经常使用你选用的任何数据集启动训练,预测模型可以基于许少数据源运转。本文将作为一个片面的教程,涵盖训练和运转YOLOv8模型的许多不同方法,并展现每种方法的优缺陷,这些方法将依据你的配件和数据集帮你选用最适合的开发方案。

【留意】本文中创立上述示例数据集时经常使用的一切图像均由作者自己拍摄。

开发环境搭建

要开局训练咱们的YOLOv8模型,第一步是选择咱们想在什么样的环境中训练咱们的模型(请记住,训练和运转模型是独自的义务)。

演绎来看,可供咱们选用的环境在很大水平上可以分为两类:基于本地运转和基于云端方案运转。

经过基于本地的训练,咱们基本上是经常使用设施的物理配件间接在咱们的系统上运转训练环节。在基于本地的训练中,YOLOv8为咱们提供了两个选项:Python API和CLI。这两种选用的结果或速度没有真正的区别,由于雷同的环节是在幕后启动的;惟一的区别在于训练的设置和运转方式。

另一方面,基于云端的训练准许你应用云主机的配件。经过经常使用互联网,你可以衔接到云运转时并口头代码,就像在本地计算机上一样,只是如今它在云配件上运转。

到目前为止,最受欢迎的机器学习云平台是谷歌Colab。它经常使用Jupyter笔记本格局,准许用户创立可以编写和运转代码片段的“单元格”,并提供与Google Drive和Github的弱小集成。

你选择经常使用哪种环境在很大水平上取决于你可用的配件。假设你有一个装备上流NVIDIA GPU的弱小系统,基于本地的训练或许会对你很有效。假设你的本地机器的配件不合乎机器学习的性能倡导,或许你只是想要比本地更多的计算才干,谷歌Colab或许是你更失当的选用。

谷歌Colab最大的好处之一是它收费提供了一些计算资源,但也有一个繁难的更新门路,可以让你应用更快的计算配件。即使你曾经有了一个弱小的系统,假设谷歌Colab的上层方案中提供的更快的GPU比你现有的配件有清楚的性能优化,你也可以思考经常使用谷歌Colab。经常使用收费方案,你只能经常使用NVIDIA T4,其性能大抵相当于RTX 2070。关于更初级别性能的方案,L4(性能约为4090)和A100(性能约2 4090)是可用的。在比拟GPU时,请记住VRAM的数量是机器学习性能的关键选择起因。

数据集

为了开局训练模型,你须要少量数据来训练它。对象检测数据集通常由各种对象的图像汇合组成,此外还有一个围绕对象的“边界框”,批示其在图像中的位置。

检测到的对象周围的边界框示例

YOLOv8兼容的数据集具有特定的结构。它们关键分为有效文件夹、训练文件夹和测试文件夹,区分用于模型的验证、训练和测试(验证和测试之间的区别在于,在验证环节中,结果用于调整模型以提高其准确性;而在测试环节中,结果仅用于提供模型真实环球准确性的权衡规范)。

在每个文件夹中,数据集进一步分为两个文件夹:图像(images)和标签(labels)文件夹。这两个文件夹的内容严密相连。

望文生义,images文件夹蕴含数据集的一切对象图像。这些图像通常具有方形纵横比、低分辨率和小的文件尺寸。

labels文件夹蕴含边界框在每个图像中的位置和大小的数据,以及每个图像示意的对象的类型(或类别)。例如:

这里的第一行数据代表图像中存在的单个对象。在每一行中,第一个数字示意对象的类别,第二个和第三个数字示意边界框核心的x和y坐标,第四个和第五个数字示意边缘框的宽度和高度。

images和labels文件夹中的数据经过文件名链接在一同。images文件夹中的每个图像在labels文件夹中都有一个具有相反文件名的相应文件;反之亦然。在数据集中,images和labels文件夹中总是有婚配的文件对,它们具有相反的文件名,但文件裁减名不同;.jpg用于图像,.txt用于标签。.jpg图片中每个对象的边界框数据蕴含在相应的.txt文件中。

有几种方法可以取得与YOLOv8兼容的数据集来开局训练模型。你可以创立自己的数据集,也可以经常使用互联网上预先性能的数据集。在本教程中,咱们将经常使用 创立自己的数据集,并经常使用

CVAT(CVAT.ai)是一个注释工具,它准许你经过手动方式为图像和视频增加标签来创立自己的数据集。

创立帐户并登录后,开局注释的环节很繁难。只要创立一个名目,给它一个适合的称号,并依据须要为尽或许多的对象类型/类别增加标签。

作者在cvat.ai.Video上创立新名目和标签

创立一个新义务,并上行你宿愿成为数据集一局部的一切图像。点击“Submit & Open”按钮,名目下应创立一个新义务,其中蕴含一个作业。

在cvat.ai上创立新义务和作业

关上此作业将准许你启动注释环节。你可以经常使用矩形工具为数据集中的每个图像创立边界框和标签。

经常使用cvat.ai上的矩形工具创立边界框

在为一切图像增加注释后,前往义务并选用“Actions(举措)”→“Export task>

作者从cvat.ai.Image导出的示例数据集

至此,你的数据集已成功并预备好经常使用了!

Kaggle(Kaggle.com)是最大的在线数据迷信社区之一,也是探求数据集的最佳网站之一。你可以经过繁难地搜查他们的网站来尝试找到你须要的数据集,除非你正在寻觅十分详细的物品;否则,你很或许会找到动向的数据集。但是,Kaggle上的许少数据集不是YOLOv8兼容的格局和/或与计算机视觉有关;因此,你或许想在查问中蕴含“YOLOv9”来优化你的搜查。

你可以经过数据集的Data Explorer(页面右侧)中的文件结构来判别数据集能否与YOLOv8兼容。

假设数据集相对较小(几MB)和/或你想在本地训练,那么可以间接从Kaggle下载数据集。但是,假设你方案在Google Colab上经常使用大型数据集启动训练,最好从笔记本文件自身启动数据集检索(更多消息见下文)。

训练模型

训练环节将依据你是在本地还是在云端启动训练而有所不同。

本地

为一切训练文件创立一个名目文件夹。在本教程中,咱们将称之为yolov8-project。而后,将数据集移动/复制到此文件夹下。

接上去,经常使用所需的YOLOv8依赖项设置Python虚构环境:

python3 -m venv venvsource venv/bin/activatepip3 install ultralytics

而后,创立一个名为config.yaml的性能文件。这个文件将会指定用于训练的关键数据集消息:

path: /Users/oliverma/yolov8-project/dataset/ # absolute path to>

在上方性能消息的path局部,提供的是指向数据集根目录的相对文件门路。你也可以经常使用相对文件门路,但这取决于config.yaml的相对位置。

而后,在test、train和val局部,提供用于测试、训练和验证的图像的位置(假设你只要训练图像,则只要对一切这三种操作均经常使用train/images)。

在names局部,指定每个类别的称号。这些消息通常可以在任何YOLOv8数据集的data.yaml文件中找到。

如前所述,Python API或CLI(命令行方式)都可以用来启动本地训练。

Python API方式

创立另一个名为main.py的文件。这是实践训练开局的中央:

from ultralytics import YOLOmodel = YOLO("yolov8n.yaml")model.train(data="config.yaml", epochs=100)

经过将咱们的模型初始化为YOLO("yolov8n.yaml"),咱们基本上是从头开局创立一个新模型。咱们经常使用yolov8n是由于它是最快的模型,但依据你自己的经常使用状况,你也可以选用经常使用其他模型。

性能目的

最后,咱们开局训练模型,并传递性能文件和迭代次数,或训练轮数。一个比拟好的训练目的是经常使用300个训练轮数,但你或许想依据数据集的大小和配件的速度来调整这个数字。

你或许还宿愿包括一些更有用的设置:

你的名目目录如今应该看起来相似于上方的样子:

名目目录的示例文件结构

如今,咱们终于预备好开局训练咱们的模型了。为此,只要要在名目目录中关上一个终端并运转:

python3 main.py

随着训练的启动,终端将显示每个训练世代的训练进展消息。

终端中显示的每个训练世代的训练进展

训练结果将保留在门路runs/detect/train(或许train2,train3,等)。留意,这里包括了权重数据(文件裁减名为.pt),这对运转模型很关键;还有文件results.png,它显示了许多蕴含关系训练统计数据的图表。

CLI方式

在名目目录中关上一个新终端并运转以下命令:

yolo detect train>

此命令可以经常使用上方为Python API列出的相反参数启动修正。例如:

yolo detect train>

训练将开局,进展将显示在终端上。其他的训练环节与Python CLI相反。

谷歌Colab方式

导航到,并为训练创立一个新的笔记本文件。

在训练之前,请确保经过选用右上角的“Change runtime type(更改运转时类型)”衔接到GPU运转时。CPU运转时的训练将十分缓慢。

将笔记本电脑运转时从CPU更改为T4 GPU

在开局经常使用Google Colab启动任何训练之前,咱们首先须要将数据集导入笔记本文件。直观地说,最繁难的方法是将数据集上行到谷歌云端硬盘,并从那里导入到咱们的笔记本文件中。但是,上行任何大于几MB的数据集都须要十分长的期间。处置方法是将数据集上行到远程文件托管服务(如Amazon S3甚至是Kaggle),并将数据集间接从那里拉入咱们的Colab笔记本文件。

从Kaggle导入

以下是如何将Kaggle数据集间接导入Colab笔记本文件的说明:

在Kaggle账户设置中,向下滚动到API并选用“Create New Token”命令。这将下载一个名为kaggle.json的文件。

在笔记本单元格中运转以下命令:

!pip install kagglefrom google.colab import filesfiles.upload()

上行刚刚下载的kaggle.json文件,而后运转以下命令:

!mkdir ~/.kaggle!cp kaggle.json ~/.kaggle/!chmod 600 ~/.kaggle/kaggle.json!kaggle>

数据集将作为zip存档下载。只要要经常使用unzip命令提取有关内容:

开局训练

在笔记本文件的文件资源治理器中创立一个新的config.yaml文件,并依照前面的形容启动性能。Colab笔记本文件中的自动上班目录是/content/,因此数据集的相对门路将是/content/[dataset folder]。例如:

path: /content/dataset/ # absolute path to>

确保审核一下数据集的文件结构,以确保config.yaml中指定的门路准确。有时数据集会被搁置在多个级别的文件夹中。

而后,将以下内容作为单元格运转:

!pip install ultralyticsimport osfrom ultralytics import YOLOmodel = YOLO("yolov8n.yaml")results = model.train(data="config.yaml", epochs=100)

前面提到的用于修副本地训练设置的参数也实用于这里。

与本地训练相似,结果、权重和图表将保留在runs/detect/train中。

在本地启动预测

无论你是在本地还是在云端启动训练,预测都必定在本地运转。

在模型成功训练后,runs/detect/train/weights中会有两个权重,区分命名为best.pt和last.pt,区分是最佳训练轮次和最新训练轮次的权重。在本教程中,咱们将经常使用best.pt运转模型。

假设你在本地启动训练,请将best.pt移动到繁难的位置(例如咱们的名目文件夹yolov8-project)以运转预测。假设你在云端训练,请将best.pt下载到你的本地设施上。在Google Colab上,右键单击笔记本资源治理器中的文件,而后选用“Download”(下载)命令。

与本地训练相似,预测可以经过Python API或CLI运转。

经常使用Python API预测

在与best.pt相反的位置,创立一个名为predict.py的新文件:

from ultralytics import YOLOmodel = YOLO("best.pt")results = model(source=0, show=True, conf=0.25, save=True)

与训练相似,存在许多有用的参数可以修正预测设置:

有关预测参数的完整列表,请访问:

经常使用CLI预测

运转以下CLI命令即可启动模型:

python3 predict.py

经过实时网络摄像头馈送运转YOLOv8模型预测

CLI命令

经常使用CLI方式启动预测运行的命令是:

yolo detect predict model=best.pt source=0 show=True cnotallow=0.25 save=True

留意到,这里所经常使用的参数与Python API中的参数相反。

将YOLOv8模型集成到实践场景

如今,咱们曾经能够在实时网络摄像头上成功地运转起咱们的模型,但这又会怎么呢?咱们如何实践经常使用这个模型并将其集成到实战名目中?

让咱们从输入和输入的角度来思考这个疑问。为了使这个模型成功地运行于咱们构建的外部运行程序中,此模型必定能够接受有用的输入并发生有用的输入。值得庆幸的是,YOLOv8模型的灵敏性使得将模型集成到各种经常使用场景中成为或许。

例如,咱们可以经常使用source=0将网络摄像头设置为预测的输入源。但是,YOLOv8模型可以应用比这更多的输入源。以下是几个例子:

results = model(source="path/to/image.jpg", show=True, conf=0.25, save=True) # static imageresults = model(source="screen", show=True, conf=0.25, save=True) # screenshot of current screenresults = model(source="https://ultralytics.com/images/bus.jpg", show=True, conf=0.25, save=True) # image or video URLresults = model(source="path/to/file.csv", show=True, conf=0.25, save=True) # CSV fileresults = model(source="path/to/video.mp4", show=True, conf=0.25, save=True) # video fileresults = model(source="path/to/dir", show=True, conf=0.25, save=True) # all images and videos within directoryresults = model(source="path/to/dir/**/*.jpg", show=True, conf=0.25, save=True) # glob expressionresults = model(source="https://www.youtube.com/watch?v=dQw4w9WgXcQ", show=True, conf=0.25, save=True) # YouTube video URL

有关预测源和输中选项的完整列表,请访问:

每当咱们运转预测时,YOLOv8都会以Results对象列表的方式前往少量有价值的数据,其中包括有关预测的边界框、宰割掩码、关键点、类别概率和定向解围盒(OBB)的消息。

由于咱们在代码中将预测结果调配给results变量,因此咱们可以经常使用它来检索有关预测的消息:

from ultralytics import YOLOmodel = YOLO("best.pt")results = model(source="bottles.jpg", show=True, conf=0.25, save=True)print("Bounding boxes of all detected objects in xyxy format:")for r in results:print(r.boxes.xyxy)print("Confidence values of all detected objects:")for r in results:print(r.boxes.conf)print("Class values of all detected objects:")for r in results:print(r.boxes.cls)

本教程中蕴含的输入结果类型太多,但你可以经过访问链接以了解更多消息:

这里提供的只是一个十分基本的例子,说明你可以用YOLOv8模型的输入做点什么了。其实,你可以经过上述罗列的很多种方式将模型运行于自己的名目中。

论断

在本文中,咱们终于成功了从头开局制造咱们自己的YOLOv8兼容数据集,从Kaggle导入数据集,经常使用包括Python API、CLI和Google Colab在内的多种环境来训练模型,而后在本地运转咱们的模型,并找到许多输入/输入方法,使咱们能够在自己的名目中应用训练出的YOLOv8模型。

请记住,本教程的目的是作为YOLOv8或计算机视觉的学习终点。咱们简直没有波及YOLOv8模型盘根错节的外表,随着你对YOLOv9和计算机视觉越来越有阅历,深化了解这个模型相对是理智的。

话虽如此,假设你遵照了本教程并保持到最后,那依然是一个很大的成功。我宿愿这篇文章能协助你对机器学习、计算机视觉和YOLOv8模型有一个基本的了解。兴许你甚至对这个主题发生了激情,并将在未来继续学习更初级的内容。

译者引见

朱先忠,社区编辑,专家博客、讲师,潍坊一所高校计算机老师,自在编程界老兵一枚。

The Comprehensive Guide to Training and Running YOLOv8 Models on Custom> 来源: 内容精选

您可能还会对下面的文章感兴趣: