YOLO Vision 2026:

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

如今,可扩展的 computer vision solutions 越来越常见,并且正在改变我们处理视觉数据的方式。一个极好的例子是 IBM Watsonx,这是一个先进的 AI 和数据平台,简化了 AI 模型的开发、部署和管理。它为整个 AI 生命周期提供了完整的套件,并能与 IBM Cloud 服务无缝集成。

你可以使用 IBM Watsonx 训练 Ultralytics YOLO26 models。对于有兴趣进行高效 model training、针对特定任务微调,以及通过强大工具和简便设置来提升 model performance 的企业来说,这是一个不错的选择。在本指南中,我们将带你了解使用 IBM Watsonx 训练 YOLO26 的全过程,涵盖从设置环境到评估训练后模型的所有内容。让我们开始吧!

什么是 IBM Watsonx?#

Watsonx 是 IBM 推出的云平台,专为商业 generative AI 和科学数据而设计。IBM Watsonx 的三个组件 —— watsonx.aiwatsonx.datawatsonx.governance —— 共同构成了一个端到端的、值得信赖的 AI 平台,可以加速旨在解决业务问题的 AI 项目。它提供了强大的工具来构建、训练和 deploying machine learning models,并能轻松连接各种数据源。

IBM Watsonx AI platform architecture overview

其友好的用户界面和协作功能简化了开发流程,并有助于实现高效的模型管理与部署。无论是用于计算机视觉、预测分析、natural language processing 还是其他 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 数据表。该平台通过警报和检测诸如 bias and drift 等问题的工具来帮助管理风险。它还能够自动化监控和记录 AI 生命周期的过程,利用模型清单组织 AI 开发,并通过易用的仪表板和报告工具增强协作。

如何使用 IBM Watsonx 训练 YOLO26#

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

前提条件#

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

第 1 步:设置你的环境#

首先,你需要设置一个 IBM 账号来使用 Jupyter Notebook。使用你的 IBM Cloud 账号登录 watsonx.ai

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

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

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

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

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

有关安装过程的详细说明和最佳实践,请查阅我们的 Ultralytics Installation guide。在安装 YOLO26 所需的软件包时,如果遇到任何困难,请参考我们的 Common Issues guide 获取解决方案和提示。

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

导入相关库
# Import ultralytics
import ultralytics

ultralytics.checks()

# Import packages to retrieve and display image files

第 3 步:加载数据#

在本教程中,我们将使用 Kaggle 上提供的一个 marine litter dataset。利用这个数据集,我们将自定义训练一个 YOLO26 模型,以检测和分类水下图像中的垃圾和生物对象。

我们可以使用 Kaggle API 将数据集直接加载到 notebook 中。首先,创建一个免费的 Kaggle 账号。账号创建完成后,你需要生成一个 API 密钥。有关生成密钥的说明,可以在 Kaggle API documentation 的“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 文件和数据集目录的内容来训练我们的 object detection 模型。以下是我们海洋垃圾数据集中的一张样本图像。

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 task=detect mode=train data={work_dir}/trash_ICRA19/config.yaml model=yolo26n.pt epochs=2 batch=32 lr0=.04 plots=True

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

  • task:指定你正在使用指定的 YOLO 模型和数据集的 computer vision 任务。
  • mode:表示你加载指定模型和数据的目的。由于我们正在训练模型,因此将其设置为“train”。稍后,当我们测试模型性能时,会将其设置为“predict”。
  • epochs:这限定了 YOLO26 将通过我们整个数据集的次数。
  • batch:该数值规定了训练 batch sizes。批次是指模型在更新其参数之前处理的图像数量。
  • lr0:指定模型的初始 learning rate
  • plots:指示 YOLO 生成并保存我们模型训练和评估指标的绘图。

有关模型训练过程和最佳实践的详细了解,请参阅 YOLO26 Model Training guide。本指南将帮助你充分利用实验,并确保你有效地使用 YOLO26。

第 6 步:测试模型#

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

测试 YOLO26 模型
!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

这个简短的脚本会为测试集中的每张图像生成预测标签,还会生成新的输出图像文件,将预测的 bounding box 叠加在原始图像之上。

每张图像的预测 .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 步:评估模型#

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

Model precision-confidence evaluation curve

该图显示,随着模型对预测的置信度增加,准确率呈指数级增长。然而,在经过两个 epochs 后,模型准确率尚未在某个置信度水平上趋于平稳。

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

Model recall-confidence evaluation curve

与精确率不同,召回率向相反方向移动,在低置信度实例下显示出更高的召回率,而在高置信度实例下显示出更低的召回率。这是分类模型中精确率和召回率权衡的一个恰当例子。

步骤 8:计算 Intersection Over Union#

你可以通过计算同一对象的预测边界框与真实边界框之间的 IoU 来衡量预测 accuracy。查看 IBM's tutorial on training YOLO26 了解更多详细信息。

总结#

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

有关用法的更多详细信息,请访问 IBM Watsonx official documentation

另外,请务必查看 Ultralytics integration guide page,以了解更多关于各种激动人心的集成的信息。

常见问题解答#

我该如何使用 IBM Watsonx 训练 YOLO26 模型?#

要使用 IBM Watsonx 训练 YOLO26 模型,请遵循以下步骤:

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

有关详细说明,请参考我们的 YOLO26 Model Training guide

IBM Watsonx 用于 AI 模型训练的主要功能是什么?#

IBM Watsonx 为 AI 模型训练提供了几个主要功能:

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

有关更多信息,请访问 IBM Watsonx official documentation

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

IBM Watsonx 是训练 Ultralytics YOLO26 模型的绝佳选择,因为它拥有一套全面的工具,可以简化 AI 生命周期。主要好处包括:

  • 可扩展性:通过 IBM Cloud 服务轻松扩展你的模型训练。
  • 集成:与各种数据源和 API 无缝集成。
  • 用户友好的界面:通过协作且直观的界面简化开发过程。
  • 先进工具:可以使用 Prompt Lab、Tuning Studio 和 Flows Engine 等强大工具来提高模型性能。

了解有关 Ultralytics YOLO26 以及如何在我们的 integration guide 中使用 IBM Watsonx 训练模型的更多信息。

我该如何为在 IBM Watsonx 上进行 YOLO26 训练预处理我的数据集?#

要在 IBM Watsonx 上预处理用于 YOLO26 训练的数据集:

  1. 组织目录:确保你的数据集遵循 YOLO 目录结构,在 train/val/test 拆分中为图像和标签分别建立子目录。
  2. Update .yaml File:修改 .yaml 配置文件以反映新的目录结构和类别名称。
  3. Run Preprocessing Script:使用 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)

有关更多详细信息,请参考我们的 data preprocessing guide

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

在开始于 IBM Watsonx 上训练 YOLO26 模型之前,请确保你已满足以下先决条件:

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

有关设置环境的更多信息,请访问我们的 Ultralytics Installation guide

评论