跳至内容

使用 IBM Watsonx 训练YOLOv8 模型的分步指南

如今,可扩展的计算机视觉解决方案正变得越来越普遍,并改变着我们处理视觉数据的方式。IBM Watsonx 就是一个很好的例子,它是一个先进的人工智能和数据平台,可以简化人工智能模型的开发、部署和管理。它为整个人工智能生命周期提供了一个完整的套件,并与 IBM 云服务实现了无缝集成。

您可以使用 IBM Watsonx 训练Ultralytics YOLOv8 模型。对于希望高效训练模型、针对特定任务进行微调以及利用强大的工具和用户友好的设置提高模型性能的企业来说,这是一个不错的选择。在本指南中,我们将指导您完成使用 IBM Watsonx 训练YOLOv8 的过程,涵盖从设置环境到评估训练模型的所有内容。让我们开始吧!

什么是 IBM Watsonx?

Watsonx是 IBM 基于云的平台,专为商业生成式人工智能和科学数据而设计。IBM Watsonx 的三个组件--watsonx.ai、watsonx.data 和 watsonx.governance --共同打造了一个端到端、值得信赖的人工智能平台,可以加速旨在解决业务问题的人工智能项目。它为构建、训练和部署机器学习模型提供了强大的工具,并能轻松连接各种数据源。

IBM Watsonx 概览

其友好的用户界面和协作功能简化了开发流程,有助于高效的模型管理和部署。无论是计算机视觉、预测分析、自然语言处理还是其他人工智能应用,IBM Watsonx 都能提供推动创新所需的工具和支持。

IBM Watsonx 的主要功能

IBM Watsonx 由三个主要组件组成:watsonx.ai、watsonx.data 和 watsonx.governance。每个组件都针对人工智能和数据管理的不同方面提供功能。让我们来详细了解一下它们。

Watsonx.ai

Watsonx.ai 为人工智能开发提供了强大的工具,可访问 IBM 支持的自定义模型、第三方模型(如Llama 3)以及 IBM 自己的 Granite 模型。它包括用于实验人工智能提示的提示实验室(Prompt Lab)、用于利用标注数据提高模型性能的调整工作室(Tuning Studio)以及用于简化生成式人工智能应用开发的流程引擎(Flows Engine)。此外,它还提供了用于实现人工智能模型生命周期自动化以及连接各种 API 和库的综合工具。

Watsonx.data

Watsonx.data 通过 IBM Storage Fusion HCI 集成支持云和内部部署。其用户友好型控制台提供跨环境的集中数据访问,并通过普通 SQL 使数据探索变得简单。它利用 Presto 和 Spark 等高效查询引擎优化工作负载,利用人工智能驱动的语义层加速数据洞察,包括一个用于人工智能相关性的向量数据库,并支持开放数据格式以轻松共享分析和人工智能数据。

Watsonx.governance

Watsonx.governance 可自动识别监管变化并执行政策,使合规变得更容易。它将要求与内部风险数据联系起来,并提供最新的人工智能情况说明书。该平台通过警报和工具来检测偏差和漂移等问题,从而帮助管理风险。它还能自动监控和记录人工智能生命周期,通过模型清单组织人工智能开发,并通过用户友好的仪表板和报告工具加强协作。

如何使用 IBM Watsonx 训练YOLOv8

您可以使用 IBM Watsonx 加快YOLOv8 模型训练工作流程。

先决条件

创建watsonx.ai项目需要IBM Cloud 帐户,加载数据集也需要Kaggle帐户。

步骤 1:设置环境

首先,您需要设置一个 IBM 帐户来使用 Jupyter Notebook。使用您的 IBM 云帐户登录watsonx.ai

然后,创建一个watsonx.ai 项目和一个Jupyter Notebook

完成此操作后,笔记本环境就会打开,供您加载数据集。您可以使用本教程中的代码来完成一个简单的物体检测模型训练任务。

第 2 步:安装并导入相关库

接下来,您可以安装并导入必要的Python 库。

安装

# Install the required packages
pip install torch torchvision torchaudio
pip install opencv-contrib-python-headless
pip install ultralytics==8.0.196

有关安装过程的详细说明和最佳实践,请查阅我们的Ultralytics 安装指南。在安装YOLOv8 所需的软件包时,如果遇到任何困难,请查阅我们的常见问题指南,了解解决方案和技巧。

然后,就可以导入所需的软件包了。

导入相关库

# Import ultralytics
import ultralytics

ultralytics.checks()

# Import packages to retrieve and display image files

步骤 3:加载数据

在本教程中,我们将使用 Kaggle 上的海洋垃圾数据集。利用该数据集,我们将定制训练一个YOLOv8 模型,以检测水下图像中的垃圾和生物物体并对其进行分类。

我们可以使用 Kaggle API 将数据集直接加载到笔记本中。首先,创建一个免费的 Kaggle 账户。创建账户后,您需要生成一个 API 密钥。在Kaggle API 文档的 "API 凭据 "部分可以找到生成密钥的方法。

将你的 Kaggle 用户名和 API 密钥复制并粘贴到以下代码中。然后运行代码,安装 API 并将数据集加载到 Watsonx 中。

安装

# Install kaggle
pip install kaggle

安装 Kaggle 后,我们就可以将数据集加载到 Watsonx 中。

加载数据

# Replace "username" string with your username
os.environ["KAGGLE_USERNAME"] = "username"
# Replace "apiKey" string with your key
os.environ["KAGGLE_KEY"] = "apiKey"

# Load dataset
os.system("kaggle datasets download atiqishrak/trash-dataset-icra19 --unzip")

# Store working directory path as work_dir
work_dir = os.getcwd()

# Print work_dir path
print(os.getcwd())

# Print work_dir contents
print(os.listdir(f"{work_dir}"))

# Print trash_ICRA19 subdirectory contents
print(os.listdir(f"{work_dir}/trash_ICRA19"))

加载数据集后,我们打印并保存了工作目录。我们还打印了工作目录的内容,以确认 "trash_ICRA19 "数据集已正确加载。

如果在目录内容中看到 "trash_ICRA19",则表示加载成功。你应该看到三个文件/文件夹:a config.yaml 文件,一个 videos_for_testing 目录,以及一个 dataset 目录。我们将忽略 videos_for_testing 目录,所以请随意删除它。

我们将使用 config.yaml 文件和数据集目录中的内容来训练我们的物体检测模型。下面是海洋垃圾数据集中的一个样本图像。

带边箱的海洋垃圾

步骤 4:预处理数据

幸运的是,海洋垃圾数据集中的所有标签都已经格式化为YOLO .txt 文件。不过,我们需要重新安排图像和标签目录的结构,以帮助我们的模型处理图像和标签。现在,我们加载的数据集目录是这样的结构:

加载的数据集目录

但是,YOLO 模型默认情况下需要将图像和标签分别放在 train/val/test 分割的子目录中。我们需要将目录重组为以下结构:

Yolo 目录结构

要重组数据集目录,我们可以运行以下脚本:

预处理数据

# Function to reorganize dir
def organize_files(directory):
    for subdir in ["train", "test", "val"]:
        subdir_path = os.path.join(directory, subdir)
        if not os.path.exists(subdir_path):
            continue

        images_dir = os.path.join(subdir_path, "images")
        labels_dir = os.path.join(subdir_path, "labels")

        # Create image and label subdirs if non-existent
        os.makedirs(images_dir, exist_ok=True)
        os.makedirs(labels_dir, exist_ok=True)

        # Move images and labels to respective subdirs
        for filename in os.listdir(subdir_path):
            if filename.endswith(".txt"):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(labels_dir, filename))
            elif filename.endswith(".jpg") or filename.endswith(".png") or filename.endswith(".jpeg"):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(images_dir, filename))
            # Delete .xml files
            elif filename.endswith(".xml"):
                os.remove(os.path.join(subdir_path, filename))


if __name__ == "__main__":
    directory = f"{work_dir}/trash_ICRA19/dataset"
    organize_files(directory)

接下来,我们需要修改数据集的 .yaml 文件。这是我们将在 .yaml 文件中使用的设置。类 ID 编号从 0 开始:

path: /path/to/dataset/directory # root directory for dataset
train: train/images # train images subdirectory
val: train/images # validation images subdirectory
test: test/images # test images subdirectory

# Classes
names:
    0: plastic
    1: bio
    2: rov

运行以下脚本删除 config.yaml 的当前内容,并用上述内容替换,以反映新的数据集目录结构。请务必将第 4 行根目录路径中的 work_dir 部分替换为我们之前获取的工作目录路径。保留 train、val 和 test 子目录定义。此外,不要更改代码第 23 行中的 {work_dir}。

编辑 .yaml 文件

# Contents of new confg.yaml file
def update_yaml_file(file_path):
    data = {
        "path": "work_dir/trash_ICRA19/dataset",
        "train": "train/images",
        "val": "train/images",
        "test": "test/images",
        "names": {0: "plastic", 1: "bio", 2: "rov"},
    }

    # Ensures the "names" list appears after the sub/directories
    names_data = data.pop("names")
    with open(file_path, "w") as yaml_file:
        yaml.dump(data, yaml_file)
        yaml_file.write("\n")
        yaml.dump({"names": names_data}, yaml_file)


if __name__ == "__main__":
    file_path = f"{work_dir}/trash_ICRA19/config.yaml"  # .yaml file path
    update_yaml_file(file_path)
    print(f"{file_path} updated successfully.")

步骤 5:训练YOLOv8 模型

运行以下命令行代码来微调预训练的默认YOLOv8 模型。

训练YOLOv8 模型

!yolo task=detect mode=train data={work_dir}/trash_ICRA19/config.yaml model=yolov8s.pt epochs=2 batch=32 lr0=.04 plots=True

下面我们来看看模型训练命令中的参数:

  • 任务:指定使用指定YOLO 模型和数据集的计算机视觉任务。
  • 模式:表示加载指定模型和数据的目的。由于我们正在训练一个模型,因此将其设置为 "训练"。之后,当我们测试模型的性能时,将其设置为 "预测"。
  • epochs:这限定了YOLOv8 通过整个数据集的次数。
  • 批次:数值规定了训练批次的大小。批次是模型在更新参数前处理的图像数量。
  • lr0:指定模型的初始学习率。
  • plots:指示YOLO 生成并保存模型的训练和评估指标图。

要详细了解模型训练过程和最佳实践,请参阅YOLOv8 模型训练指南。本指南将帮助您从实验中获得最大收益,并确保您有效使用YOLOv8 。

步骤 6:测试模型

现在,我们可以运行推理来测试微调模型的性能:

测试YOLOv8 模型

!yolo task=detect mode=predict source={work_dir}/trash_ICRA19/dataset/test/images model={work_dir}/runs/detect/train/weights/best.pt conf=0.5 iou=.5 save=True save_txt=True

这个简短的脚本会为测试集中的每幅图像生成预测标签,并生成新的输出图像文件,在原始图像上叠加预测边界框。

每幅图像的预测 .txt 标签通过 save_txt=True 参数,并通过 save=True 争论。
参数 conf=0.5 通知模型忽略置信度低于 50% 的所有预测。

最后、 iou=.5 指示模型忽略重叠 50% 或更多的同类方框。这有助于减少同一对象可能产生的重复方框。
我们可以加载带有预测边界框叠加的图像,以查看我们的模型在少量图像上的表现。

显示屏预测

# Show the first ten images from the preceding prediction task
for pred_dir in glob.glob(f"{work_dir}/runs/detect/predict/*.jpg")[:10]:
    img = Image.open(pred_dir)
    display(img)

上面的代码显示了测试集中的十张图片及其预测边界框,并附有类别名称标签和置信度。

步骤 7:评估模型

我们可以为每个类别生成模型精确度和召回率的可视化结果。这些可视化结果保存在 train 文件夹下的主目录中。精度得分显示在 P_curve.png 中:

精度置信度曲线

从图中可以看出,随着模型预测置信度的提高,精度也呈指数增长。不过,在两个历时之后,模型精度尚未达到某个置信度水平。

召回曲线图(R_curve.png)显示了反向趋势:

召回置信度曲线

与精确度不同的是,召回率的变化方向正好相反,低置信度实例的召回率更高,而高置信度实例的召回率更低。这恰好说明了分类模型在精确度和召回率之间的权衡。

步骤 8:计算交叉点大于联合点

您可以通过计算同一对象的预测边界框与地面实况边界框之间的 IoU 来衡量预测精度。更多详情,请查看IBM 的培训教程YOLOv8

摘要

我们探索了 IBM Watsonx 的主要功能,以及如何使用 IBM Watsonx 训练YOLOv8 模型。我们还了解了 IBM Watsonx 如何通过用于模型构建、数据管理和合规性的高级工具来增强您的人工智能工作流程。

有关使用的更多详情,请访问IBM Watsonx 官方文档

此外,请务必查看Ultralytics 集成指南页面,了解更多不同的精彩集成。

常见问题

如何使用 IBM Watsonx 训练YOLOv8 模型?

要使用 IBM Watsonx 训练YOLOv8 模型,请按照以下步骤操作:

  1. 设置环境:创建一个 IBM 云账户并设置一个 Watsonx.ai 项目。使用 Jupyter Notebook 作为您的编码环境。
  2. 安装图书馆:安装必要的库,如 torch, opencvultralytics.
  3. 加载数据:使用 Kaggle API 将数据集载入 Watsonx。
  4. 预处理数据:将数据集组织到所需的目录结构中,并更新 .yaml 配置文件。
  5. 培训模型:使用YOLO 命令行界面使用特定参数训练模型,例如 epochs, batch sizelearning rate.
  6. 测试和评估:运行推理以测试模型,并使用精度和召回率等指标评估其性能。

有关详细说明,请参阅我们的YOLOv8 型号培训指南

用于人工智能模型训练的 IBM Watsonx 有哪些主要功能?

IBM Watsonx 为人工智能模型训练提供了几项关键功能:

  • Watsonx.ai:提供人工智能开发工具,包括访问 IBM 支持的自定义模型和第三方模型(如 Llama 3)。它包括用于全面人工智能生命周期管理的 Prompt Lab、Tuning Studio 和 Flows Engine。
  • Watsonx.data支持云和内部部署,提供集中式数据访问、Presto 和 Spark 等高效查询引擎以及人工智能驱动的语义层。
  • Watsonx.governance:自动合规、通过警报管理风险,并提供检测偏差和漂移等问题的工具。它还包括用于协作的仪表盘和报告工具。

更多信息,请访问IBM Watsonx 官方文档

为什么要使用 IBM Watsonx 训练Ultralytics YOLOv8 模型?

IBM Watsonx 是训练Ultralytics YOLOv8 模型的绝佳选择,因为它拥有一套全面的工具,可以简化人工智能生命周期。主要优势包括

  • 可扩展性:利用 IBM 云服务轻松扩展模型培训。
  • 集成:与各种数据源和应用程序接口无缝集成。
  • 用户友好界面:协作式直观界面:简化开发流程。
  • 高级工具:使用 Prompt Lab、Tuning Studio 和 Flows Engine 等功能强大的工具来提高模型性能。

了解更多有关 Ultralytics YOLOv8以及如何使用 IBM Watsonx 在我们的集成指南中训练模型。

如何对数据集进行预处理,以便在 IBM Watsonx 上进行YOLOv8 训练?

预处理数据集,以便在 IBM Watsonx 上进行YOLOv8 训练:

  1. 整理目录:确保数据集遵循YOLO 的目录结构,并在 train/val/test 分区中为图像和标签建立单独的子目录。
  2. 更新 .yaml 文件:修改 .yaml 配置文件,以反映新的目录结构和类名。
  3. 运行预处理脚本:使用Python 脚本重组数据集并更新 .yaml 文件。

下面是一个整理数据集的示例脚本:

import os
import shutil


def organize_files(directory):
    for subdir in ["train", "test", "val"]:
        subdir_path = os.path.join(directory, subdir)
        if not os.path.exists(subdir_path):
            continue

        images_dir = os.path.join(subdir_path, "images")
        labels_dir = os.path.join(subdir_path, "labels")

        os.makedirs(images_dir, exist_ok=True)
        os.makedirs(labels_dir, exist_ok=True)

        for filename in os.listdir(subdir_path):
            if filename.endswith(".txt"):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(labels_dir, filename))
            elif filename.endswith(".jpg") or filename.endswith(".png") or filename.endswith(".jpeg"):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(images_dir, filename))


if __name__ == "__main__":
    directory = f"{work_dir}/trash_ICRA19/dataset"
    organize_files(directory)

更多详情,请参阅我们的数据预处理指南

在 IBM Watsonx 上训练YOLOv8 模型的前提条件是什么?

在开始在 IBM Watsonx 上训练YOLOv8 模型之前,请确保具备以下前提条件:

  • IBM 云帐户:在 IBM Cloud 上创建账户,以访问 Watsonx.ai。
  • Kaggle 账户:要加载数据集,您需要一个 Kaggle 账户和一个 API 密钥。
  • Jupyter Notebook:在 Watsonx.ai 中设置 Jupyter Notebook 环境,用于编码和模型训练。

有关设置环境的更多信息,请访问我们的Ultralytics 安装指南


📅 Created 1 month ago ✏️ Updated 10 days ago

评论