Skip to content

使用IBM Watsonx训练YOLO11模型的逐步指南

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

您可以使用IBM Watsonx训练Ultralytics YOLO11模型。对于那些对高效模型训练、特定任务的微调以及使用强大的工具和用户友好的设置来提升模型性能感兴趣的企业来说,这是一个不错的选择。在本指南中,我们将带您了解使用IBM Watsonx训练YOLO11的过程,涵盖从设置环境到评估训练模型的所有内容。让我们开始吧!

什么是IBM Watsonx?

Watsonx 是IBM的基于云的平台,专为商业生成式AI和科学数据设计。IBM Watsonx的三个组件——watsonx.ai、watsonx.data和watsonx.governance——共同创建了一个端到端的可信AI平台,可以加速旨在解决商业问题的AI项目。它提供了强大的工具,用于构建、训练和部署机器学习模型,并使其易于连接到各种数据源。

IBM Watsonx概览

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

IBM Watsonx的关键功能

IBM Watsonx由三个主要组件组成:watsonx.ai、watsonx.data和watsonx.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训练YOLO11

您可以使用IBM Watsonx加速您的YOLO11模型训练工作流程。

前提条件

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

步骤1:设置您的环境

首先,您需要设置一个IBM账户以使用Jupyter Notebook。使用您的IBM Cloud账户登录watsonx.ai

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

完成这些步骤后,将为您打开一个Notebook环境,以便您加载数据集。您可以使用本教程中的代码来处理一个简单的对象检测模型训练任务。

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

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

安装

# 安装所需的包
pip install torch torchvision torchaudio
pip install opencv-contrib-python-headless
pip install ultralytics==8.0.196

有关安装过程的详细说明和最佳实践,请查看我们的Ultralytics安装指南。在安装YOLO11所需包时,如果遇到任何困难,请参考我们的常见问题指南以获取解决方案和提示。

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

导入相关库

# 导入ultralytics
import ultralytics

ultralytics.checks()

# 导入用于检索和显示图像文件的包

步骤3:加载数据

在本教程中,我们将使用Kaggle上提供的海洋垃圾数据集。通过此数据集,我们将自定义训练一个YOLO11模型,以检测和分类水下图像中的垃圾和生物物体。

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

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

安装

# 安装kaggle
pip install kaggle

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

加载数据

# 将"username"字符串替换为您的用户名
os.environ["KAGGLE_USERNAME"] = "username"
# 将"apiKey"字符串替换为您的密钥
os.environ["KAGGLE_KEY"] = "apiKey"

# 加载数据集
os.system("kaggle datasets download atiqishrak/trash-dataset-icra19 --unzip")

# 将工作目录路径存储为work_dir
work_dir = os.getcwd()

# 打印work_dir路径
print(os.getcwd())

# 打印work_dir内容
print(os.listdir(f"{work_dir}"))

# 打印trash_ICRA19子目录内容
print(os.listdir(f"{work_dir}/trash_ICRA19"))

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

如果在目录内容中看到“trash_ICRA19”,则表示已成功加载。您应该看到三个文件/文件夹:一个config.yaml文件、一个videos_for_testing目录和一个dataset目录。我们将忽略videos_for_testing目录,因此可以随意删除它。

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

带有边界框的海洋垃圾

步骤4:预处理数据

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

加载的数据集目录

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

Yolo Directory Structure

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

预处理数据

# 重新组织目录的函数
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))
            # 删除 .xml 文件
            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 # 数据集的根目录
train: train/images # 训练图像子目录
val: train/images # 验证图像子目录
test: test/images # 测试图像子目录

# 类别
names:
    0: plastic
    1: bio
    2: rov

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

编辑 .yaml 文件

# 新 confg.yaml 文件的内容
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"},
    }

    # 确保 "names" 列表出现在子目录之后
    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 文件路径
    update_yaml_file(file_path)
    print(f"{file_path} 更新成功。")

第五步:训练 YOLO11 模型

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

训练 YOLO11 模型

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

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

  • task:指定您使用指定 YOLO 模型和数据集的计算机视觉任务。
  • mode:表示您加载指定模型和数据的目的。由于我们正在训练模型,因此设置为 "train"。稍后,当我们测试模型的性能时,我们将设置为 "predict"。
  • epochs:这限定了 YOLO11 将遍历我们整个数据集的次数。
  • batch:数值规定了训练批量大小。批量是模型在更新其参数之前处理的图像数量。
  • lr0:指定模型的初始学习率
  • plots:指示 YOLO 生成并保存我们模型的训练和评估指标图。 要深入了解模型训练过程和最佳实践,请参阅YOLO11 模型训练指南。本指南将帮助您充分利用实验,并确保您有效地使用 YOLO11。

第六步:测试模型

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

测试 YOLO11 模型

!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

这个简短的脚本为测试集中的每张图像生成预测标签,并生成新的输出图像文件,这些文件在原始图像上覆盖了预测的边界框

通过 save_txt=True 参数保存每张图像的预测 .txt 标签,通过 save=True 参数生成带有边界框覆盖的输出图像。参数 conf=0.5 告知模型忽略所有置信度低于 50% 的预测。

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

显示预测结果

# 显示前十个预测任务的图像
for pred_dir in glob.glob(f"{work_dir}/runs/detect/predict/*.jpg")[:10]:
    img = Image.open(pred_dir)
    display(img)

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

第七步:评估模型

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

Precision Confidence Curve

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

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

Recall Confidence Curve

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

第八步:计算交并比

您可以通过计算同一对象的预测边界框和真实边界框之间的 IoU 来衡量预测的准确性。更多详情请参阅IBM 关于训练 YOLO11 的教程

总结

我们探索了 IBM Watsonx 的关键功能,以及如何使用 IBM Watsonx 训练 YOLO11 模型。我们还看到了 IBM Watsonx 如何通过先进的模型构建、数据管理和合规工具来增强您的 AI 工作流程。

有关更多使用细节,请访问IBM Watsonx 官方文档

此外,请务必查看Ultralytics 集成指南页面,了解更多关于不同激动人心的集成。

常见问题

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

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

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

IBM Watsonx 在 AI 模型训练中的关键特性是什么?

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 来训练 Ultralytics YOLO11 模型?

IBM Watsonx 是训练 Ultralytics YOLO11 模型的绝佳选择,因为它提供了一套全面工具,简化了 AI 生命周期。主要优势包括:

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

了解更多关于 Ultralytics YOLO11 以及如何使用 IBM Watsonx 训练模型的信息,请参阅我们的 集成指南

如何在 IBM Watsonx 上为 YOLO11 训练预处理我的数据集?

要在 IBM Watsonx 上为 YOLO11 训练预处理您的数据集:

  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 上训练 YOLO11 模型的前提条件是什么?

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

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

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


📅 Created 2 months ago ✏️ Updated 13 days ago

Comments