Ultralytics YOLO27:

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

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

你可以使用 IBM Watsonx 训练 Ultralytics YOLO26 模型。对于关注高效模型训练、针对特定任务进行微调,以及借助强大工具和易用设置提升模型性能的企业来说,这是一个不错的选择。在本指南中,我们将带你了解使用 IBM Watsonx 训练 YOLO26 的过程,内容涵盖从环境设置到评估训练后模型的全部步骤。让我们开始吧!

什么是 IBM Watsonx?#

Watsonx 是 IBM 面向商业生成式 AI和科学数据打造的云平台。IBM Watsonx 的三个组件——watsonx.aiwatsonx.datawatsonx.governance——共同构成一个端到端、值得信赖的 AI 平台,可加速旨在解决业务问题的 AI 项目。它提供用于构建、训练和部署机器学习模型的强大工具,并能轻松连接各种数据源。

IBM Watsonx AI platform architecture overview

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

IBM Watsonx 的主要功能#

IBM Watsonx 由三个主要组件构成:watsonx.aiwatsonx.datawatsonx.governance。每个组件都提供针对 AI 和数据管理不同方面的功能。下面让我们仔细了解它们。

Watsonx.ai#

Watsonx.ai 提供强大的 AI 开发工具,并支持访问 IBM 支持的自定义模型、第三方模型(如 Llama 3)以及 IBM 自有的 Granite 模型。它包含用于试验 AI 提示词的 Prompt Lab、用于使用标注数据提升模型性能的 Tuning Studio,以及用于简化生成式 AI 应用开发的 Flows Engine。此外,它还提供用于自动化 AI 模型生命周期以及连接各种 API 和库的综合工具。

Watsonx.data#

Watsonx.data 通过 IBM Storage Fusion HCI 集成支持云端和本地部署。其易用的控制台提供跨环境的集中式数据访问,并通过通用 SQL 简化数据探索。它利用 Presto 和 Spark 等高效查询引擎优化工作负载,通过 AI 驱动的语义层加速数据洞察,包含用于提升 AI 相关性的向量数据库,并支持开放数据格式,以便轻松共享分析数据和 AI 数据。

Watsonx.governance#

Watsonx.governance 通过自动识别法规变化和执行策略来简化合规流程。它将要求关联到内部风险数据,并提供最新的 AI 事实表。该平台通过警报和用于检测偏差与漂移等问题的工具帮助管理风险。它还会自动执行 AI 生命周期的监控和文档记录,利用模型清单组织 AI 开发,并通过易用的仪表板和报告工具增强协作。

如何使用 IBM Watsonx 训练 YOLO26#

你可以使用 IBM Watsonx 加速 YOLO26 模型训练工作流。

前置条件#

你需要一个 IBM Cloud 账户来创建 watsonx.ai 项目,还需要一个 Kaggle 账户来加载数据集。

第 1 步:设置环境#

首先,你需要设置 IBM 账户才能使用 Jupyter Notebook。使用 IBM Cloud 账户登录 watsonx.ai

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

完成后,将打开一个 Notebook 环境供你加载数据集。你可以使用本教程中的代码来完成一个简单的目标检测模型训练任务。

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

接下来,你可以安装并导入所需的 Python 库。

安装
# Install the required packages
pip install torch torchvision torchaudio
pip install ultralytics-opencv-headless

有关安装流程的详细说明和最佳实践,请参阅我们的 Ultralytics 安装指南。在为 YOLO26 安装所需软件包时,如果遇到任何困难,请参阅我们的常见问题指南以获取解决方案和建议。

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

导入相关库
import ultralytics

ultralytics.checks()

第 3 步:加载数据#

在本教程中,我们将使用 Kaggle 上提供的海洋垃圾数据集。借助该数据集,我们将自定义训练一个 YOLO26 模型,用于检测和分类水下图像中的垃圾和生物目标。

我们可以使用 Kaggle API 将数据集直接加载到 Notebook 中。首先,创建一个免费的 Kaggle 账户。创建账户后,你需要生成 API 密钥。你可以在 Kaggle API 文档的“API credentials”部分找到生成密钥的说明。

将你的 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",则表示它已成功加载。你应该会看到三个文件/文件夹:一个 config.yaml 文件、一个 videos_for_testing 目录和一个 dataset 目录。我们将忽略 videos_for_testing 目录,因此你可以放心将其删除。

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

Marine Litter with Bounding Box

第 4 步:预处理数据#

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

Loaded Dataset Directory

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

YOLO Directory Structure

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

预处理数据
# 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", ".png", ".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 的当前内容,并将其替换为反映新数据集目录结构的配置。该脚本会自动使用我们之前定义的 work_dir 变量,因此请确保它在执行前指向你的数据集,并保持 train、val 和 test 子目录定义不变。

编辑 .yaml 文件
# Contents of new config.yaml file
def update_yaml_file(file_path):
    data = {
        "path": f"{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 步:训练 YOLO26 模型#

运行以下命令行代码,对预训练的默认 YOLO26 模型进行微调。

训练 YOLO26 模型
!yolo detect train data={work_dir}/trash_ICRA19/config.yaml model=yolo26n.pt epochs=2 batch=32 lr0=.04 plots=True

下面详细介绍模型训练命令中的参数:

  • detect:你正在使用指定的 YOLO 模型和数据集的计算机视觉任务。
  • train:该模式表示加载指定的模型和数据的目的。稍后,当我们测试模型的性能时,我们将使用 predict
  • epochs:规定 YOLO26 遍历整个数据集的次数。
  • batch:该数值规定训练的批量大小。批次是指模型在更新参数之前处理的图像数量。
  • lr0:指定模型的初始学习率
  • plots:指示 YOLO 生成并保存模型训练和评估指标的图表。

如需详细了解模型训练流程和最佳实践,请参阅 YOLO26 模型训练指南。本指南将帮助你充分利用实验,并确保有效使用 YOLO26。

第 6 步:测试模型#

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

测试 YOLO26 模型
!yolo detect 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 步:评估模型#

我们可以生成模型针对每个类别的精确率和召回率可视化图。这些可视化结果保存在训练运行目录({work_dir}/runs/detect/train/)中。精确率分数显示在 BoxP_curve.png 中:

Model precision-confidence evaluation curve

图表显示,随着模型预测置信度的提高,精确率呈指数增长。不过,在经过两个训练周期后,模型精确率尚未在某个置信度水平趋于稳定。

召回率图表(BoxR_curve.png)显示出相反的趋势:

Model recall-confidence evaluation curve

与精确率不同,召回率朝相反方向变化:在置信度较低的实例中召回率更高,而在置信度较高的实例中召回率更低。这很好地体现了分类模型中精确率与召回率之间的权衡。

第 8 步:计算交并比#

你可以通过计算同一目标的预测边界框与真实边界框之间的 IoU 来衡量预测准确率。如需更多详细信息,请参阅 IBM 的 YOLO26 训练教程

总结#

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

如需进一步了解使用详情,请访问 IBM Watsonx 官方文档

此外,请务必查看 Ultralytics 集成指南页面,进一步了解各种精彩的集成方案。

常见问题#

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

    1. 设置环境:创建 IBM Cloud 账户并设置 Watsonx.ai 项目。使用 Jupyter Notebook 作为代码环境。
    2. 安装库:安装所需的库,例如 torchopencvultralytics
    3. 加载数据:使用 Kaggle API 将数据集加载到 Watsonx 中。
    4. 预处理数据:按照所需的目录结构组织数据集,并更新 .yaml 配置文件。
    5. 训练模型:使用 YOLO 命令行界面训练模型,并设置 epochsbatch sizelearning rate 等特定参数。
    6. 测试和评估:运行推理来测试模型,并使用精确率和召回率等指标评估其性能。

    如需详细说明,请参阅我们的 YOLO26 模型训练指南

  • IBM Watsonx 为 AI 模型训练提供多项主要功能:

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

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

  • IBM Watsonx 提供全面的工具套件,可简化 AI 生命周期,因此是训练 Ultralytics YOLO26 模型的绝佳选择。主要优势包括:

    • 可扩展性:借助 IBM Cloud 服务轻松扩展模型训练规模。
    • 集成能力:与各种数据源和 API 无缝集成。
    • 易用界面:通过协作式直观界面简化开发流程。
    • 高级工具:使用 Prompt Lab、Tuning Studio 和 Flows Engine 等强大工具提升模型性能。

    在我们的集成指南中,进一步了解 Ultralytics YOLO26 以及如何使用 IBM Watsonx 训练模型。

  • 要为在 IBM Watsonx 上训练 YOLO26 预处理数据集,请执行以下操作:

    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", ".png", ".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 上开始训练 YOLO26 模型之前,请确保你具备以下前提条件:

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

    如需详细了解如何设置环境,请参阅我们的 Ultralytics 安装指南

评论