YOLOv8 分类模型训练指南

YOLOv8 是 Ultralytics 公司最新推出的计算机视觉模型系列,它支持对象检测图像分割分类等多种任务。本指南将介绍如何使用 YOLOv8 的分类功能来训练一个能够区分香蕉成熟度的模型。将使用 Roboflow Universe 上的香蕉数据集来训练模型。

步骤 1: 安装 Ultralytics pip 包

在开始训练模型之前,需要安装 ultralytics pip 包。ultralytics 是 YOLOv8 的官方 pip 包,SDK 提供了一系列 Python 方法用于训练、评估和运行 YOLOv8 方法的推理。与之前的 YOLO 模型不同,将直接在 Python 代码中进行训练,而不是通过命令行运行脚本。

要安装 ultralytics pip 包,请运行以下命令:

pip install ultralytics

步骤 2: 上传数据集到 Roboflow

现在已经安装了 ultralytics 包,准备开始准备数据集进行训练。在这个指南中,将训练一个模型来检测香蕉是否成熟或过熟。将使用 Roboflow Universe 上的香蕉成熟度分类数据集。可以在这个指南中使用任何喜欢的数据!

首先,创建一个免费的 Roboflow 账户。转到香蕉成熟度数据集的 Universe 数据集页面,点击侧边栏中的 "数据集",然后点击 v1 选项:

这个数据集比其他的要小,所以训练会更快(尽管会有准确性的权衡)。然后,将数据集下载为 ZIP 文件:

接下来,转到 Roboflow 控制面板并创建一个新项目。当被要求指定项目类型时,选择 “单标签分类”:

接下来,将图像拖入 Roboflow 平台:

如果图像尚未标记,可以在 Roboflow Annotate 中标记它们,这是图像注释解决方案。将通过一个流程来批准注释并将它们添加到 Roboflow 平台上的数据集中。有了标记好的图像,点击 Roboflow 项目侧边栏中的 “生成” 以生成版本。

对于本指南,将保留所有配置选项的默认值,这将为提供一个良好的起点。在训练了第一模型之后,可以参考预处理和增强指南尝试不同的增强选项。点击 “生成”。这将调整图像大小,并确保数据准备好用于模型。现在有一个注释好的数据集,准备用于模型。

步骤 3: 训练 YOLOv8 分类模型

首先,让从 Roboflow 下载数据,以便可以在项目中使用它:

from roboflow import Roboflow rf = Roboflow(api_key="YOUR_API_KEY") project = rf.workspace().project("YOUR_PROJECT_ID") dataset = project.version(1).download("folder")

用与项目相关的值替换 API 密钥和项目 ID。可以从项目元数据和 API 密钥指南中找到这些值。接下来,可以使用 Ultralytics pip 包加载一个预训练的模型。将使用预训练的模型作为起点来训练自定义模型:

model = YOLO("yolov8n-cls.pt") model.train(data="/full/path/to/dataset/", epochs=20)

在这段代码中,下载了在 ImageNet 上预训练的YOLOv8分类模型的权重。这为提供了一个基础点,可以从中训练香蕉成熟度检测模型。接下来,训练模型。选择了 20 个周期进行训练,这将足够示例。

建议尝试这个数字以帮助实现最佳的模型性能。训练作业默认运行的周期数是 100,但已将其减少到 20,以便在更短的时间内训练模型。训练步骤将在 GPU 上根据训练的硬件以及是否更改了周期值,需要几十分钟到一个小时。可以在等待的时候去泡一杯茶或咖啡!

训练完成后,可以进行测试和评估模型!

步骤 4: 测试和评估模型

在进行全面评估之前,让在示例图像上测试模型:

results = model("./Banana-Ripeness-1/valid/freshripe/musa-acuminata-banana-ad75a3ca-394a-11ec-bd23-d8c4975e38aa_jpg.rf.9a0901469c07274fc8cbc92f1b256b85.jpg")

对于结果中的每一个,有:

for result in results: probs = list(result.probs) classes = result.names highest_prob = max(probs) highest_prob_index = probs.index(highest_prob) print(f"Class: {classes[highest_prob_index]}")

代码返回:

Class: freshripe

这张图像在验证数据集中被分类为 freshripe。模型成功地识别了运行推理的图像的类别。现在,让使用YOLOv8提供的 val() 函数来查看显示模型性能的指标:

metrics = model.val()

这将在 runs/classify/val 目录中保存各种评估结果。例如,有一个混淆矩阵显示了 val 集或如果没有找到,则是 test 集的模型性能。可以使用以下代码绘制这张图像:

from google.colab.patches import cv2_imshow import cv2 cv2_imshow(cv2.imread("./runs/classify/val/confusion_matrix.png"))

如果在 Google Colab 之外运行,可以使用 cv2.imshow() 而不使用 Colab 补丁。需要使用 Colab 补丁,因为 Colab 不支持 cv2.imshow() 函数。这是模型的混淆矩阵:

保存和部署模型

一旦完成了YOLOv8模型的训练,将有一组训练好的权重准备使用。这些权重将位于项目的 /runs/classify/train/weights/best.pt 文件夹中。可以将模型权重上传到 Roboflow Deploy 进行自动标记、自动扩展推理和稍后使用。

Roboflow pip 包中的 .deploy() 函数支持上传 YOLOv8 权重。只能在 Roboflow 中使用 deploy 函数部署自己的项目。运行以下代码以保存模型权重:

project.version(dataset.version).deploy(model_type="yolov8-cls", model_path=f"{HOME}/runs/classify/train/")

要了解更多关于上传自定义模型权重的信息,请参考 Roboflow 上传模型权重指南。一旦模型权重上传,它们将通过 Roboflow 托管的 API 可供访问。还可以使用 Roboflow Inference,一个开源的计算机视觉推理服务器,在自己的硬件上部署模型。

YOLOv8 是 Ultralytics 公司最新推出的计算机视觉模型系列,它支持对象检测分类图像分割等多种任务类型。YOLOv8 提供了 Python SDK 和命令行工具,通过这些工具可以训练和验证 YOLOv8 模型。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485