Ultralytics YOLO27:

IBM Watsonxを使用したYOLO26モデルのトレーニング手順#

現在、スケーラブルなコンピュータービジョンソリューションが普及し、ビジュアルデータの扱い方が変わりつつあります。IBM Watsonxはその好例であり、AIモデルの開発、デプロイ、管理を簡素化する高度なAIおよびデータプラットフォームです。AIライフサイクル全体に対応する包括的なスイートと、IBM Cloudサービスとのシームレスな統合を提供します。

IBM Watsonxを使用してUltralytics YOLO26モデルをトレーニングできます。効率的なモデルのトレーニング、特定のタスク向けのファインチューニング、堅牢なツールと使いやすい環境によるモデルのパフォーマンス向上を目指す企業に適した選択肢です。このガイドでは、環境のセットアップからトレーニング済みモデルの評価まで、IBM Watsonxを使用したYOLO26のトレーニング手順を説明します。始めましょう。

IBM Watsonxとは#

Watsonxは、商用の生成AIと科学データ向けに設計されたIBMのクラウドベースプラットフォームです。IBM Watsonxの3つのコンポーネントであるwatsonx.aiwatsonx.datawatsonx.governanceが連携し、ビジネス上の課題解決を目的とするAIプロジェクトを加速できる、エンドツーエンドで信頼性の高いAIプラットフォームを構築します。AIモデルの構築、トレーニング、機械学習モデルのデプロイに役立つ強力なツールを提供し、さまざまなデータソースに簡単に接続できます。

IBM Watsonx AI platform architecture overview

使いやすいインターフェースとコラボレーション機能により、開発プロセスを効率化し、モデルの管理とデプロイを効率的に行えます。コンピュータービジョン、予測分析、自然言語処理、その他のAIアプリケーションにおいて、IBM Watsonxはイノベーションを推進するために必要なツールとサポートを提供します。

IBM Watsonxの主な機能#

IBM Watsonxは、watsonx.aiwatsonx.datawatsonx.governanceという3つの主要コンポーネントで構成されています。各コンポーネントは、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:環境をセットアップする#

まず、Jupyter Notebookを使用するためにIBMアカウントをセットアップします。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 ディレクトリの3つが表示されます。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)

上のコードは、テストセットから10枚の画像を表示し、予測されたバウンディングボックス、クラス名のラベル、信頼度を併せて示します。

ステップ7:モデルを評価する#

各クラスの適合率と再現率を可視化できます。これらの可視化結果は、トレーニング実行ディレクトリ({work_dir}/runs/detect/train/)に保存されます。適合率スコアはBoxP_curve.pngに表示されます。

Model precision-confidence evaluation curve

グラフは、予測に対するモデルの信頼度が高くなるにつれて、適合率が指数関数的に上昇することを示しています。ただし、2エポック後も、モデルの適合率はまだ特定の信頼度で横ばいになっていません。

再現率グラフ(BoxR_curve.png)は、反対の傾向を示します。

Model recall-confidence evaluation curve

適合率とは異なり、再現率は反対方向に変化し、信頼度が低いデータでは高く、信頼度が高いデータでは低くなります。これは、分類モデルにおける適合率と再現率のトレードオフを示す適切な例です。

ステップ8:Intersection Over Unionを計算する#

同じ物体について、予測されたバウンディングボックスと正解のバウンディングボックス間のIoUを計算することで、予測の精度を測定できます。詳しくは、IBMのYOLO26トレーニングチュートリアルを参照してください。

まとめ#

IBM Watsonxの主な機能と、IBM Watsonxを使用してYOLO26モデルをトレーニングする方法を確認しました。また、IBM Watsonxがモデル構築、データ管理、コンプライアンス対応の高度なツールによって、AIワークフローを強化できることも確認しました。

使用方法の詳細については、IBM Watsonx公式ドキュメントをご覧ください。

さまざまな魅力的な統合について詳しくは、Ultralytics統合ガイドページもご覧ください。

FAQ#

  • 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:IBMがサポートするカスタムモデルやLlama 3などのサードパーティモデルへのアクセスを含む、AI開発向けのツールを提供します。包括的なAIライフサイクル管理のために、Prompt Lab、Tuning Studio、Flows Engineを備えています。
    • 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. ディレクトリを整理する:train/val/testの分割内で画像とラベルを別々のサブディレクトリに配置するYOLOディレクトリ構造に、データセットを準拠させます。
    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アカウント: Watsonx.aiにアクセスするため、IBM Cloudのアカウントを作成してください。
    • Kaggleアカウント: データセットを読み込むには、KaggleアカウントとAPIキーが必要です。
    • Jupyter Notebook: コーディングとモデルのトレーニングを行うため、Watsonx.ai内にJupyter Notebook環境をセットアップしてください。

    環境のセットアップについて詳しくは、Ultralyticsインストールガイドをご覧ください。

コメント