コンテンツへスキップ

レイチューンとハイパーパラメータの効率的なチューニングYOLOv8

ハイパーパラメーターの調整は、ハイパーパラメーターの最適なセットを検出することで、モデルのパフォーマンスのピークを達成するために不可欠です。これには、さまざまなハイパーパラメーターで試行を実行し、各試行のパフォーマンスを評価することが含まれます。

Ultralytics YOLOv8 とRay Tuneでチューニングを加速させる

Ultralytics YOLOv8Ray Tune は、ハイパーパラメータのチューニングのために Ray Tune を組み込んでおり、YOLOv8 モデルのハイパーパラメータの最適化を効率化します。Ray Tuneを使用すると、高度な検索ストラテジー、並列処理、早期停止を利用して、チューニングプロセスを迅速化することができます。

レイ・チューン

レイ・チューンの概要

Ray Tuneは、効率性と柔軟性のために設計されたハイパーパラメータチューニングライブラリです。様々な探索戦略、並列性、早期停止戦略をサポートし、Ultralytics YOLOv8 を含む一般的な機械学習フレームワークとシームレスに統合します。

との統合Weights & Biases

YOLOv8 また、オプションで Weights & Biasesとの統合も可能です。

インストール

必要なパッケージをインストールするには

インストール

# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"

# Optionally install W&B for logging
pip install wandb

使用方法

使用方法

from ultralytics import YOLO

# Load a YOLOv8n model
model = YOLO("yolov8n.pt")

# Start tuning hyperparameters for YOLOv8n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)

tune() メソッド・パラメーター

について tune() YOLOv8 メソッドは、Ray Tune によるハイパーパラメータのチューニングのための使いやすいインターフェイスを提供します。チューニングプロセスをカスタマイズできるいくつかの引数を受け取ります。以下は各パラメータの詳細な説明です:

パラメータ タイプ 説明 デフォルト値
data str チューナーを実行するデータセット設定ファイル(YAML形式)。このファイルには、学習データと検証データのパス、およびその他のデータセット固有の設定を指定します。
space dict, optional Ray Tune のハイパーパラメータ探索空間を定義する辞書。各キーはハイパーパラメータ名に対応し、値はチューニング中に探索する値の範囲を指定します。提供されない場合、YOLOv8 は、さまざまなハイパーパラメータを持つデフォルトの検索空間を使用します。
grace_period int, optional Ray Tune におけるASHA スケジューラの猶予時間(エポック)。スケジューラはこのエポック数より前にトライアルを終了することはなく、モデルが早期停止を決定する前に最低限の学習を行うことができます。 10
gpu_per_trial int, optional チューニング中にトライアルごとに割り当てるGPUの数。これは、特にマルチGPU 環境で、GPU の使用を管理するのに役立ちます。指定しない場合、チューナーは利用可能なすべての GPU を使用します。 なし
iterations int, optional チューニング中に実行する試行の最大数。このパラメータは、テストされるハイパーパラメータの組み合わせの総数を制御するのに役立ち、チューニングプロセスが無限に実行されないようにします。 10
**train_args dict, optional に渡す追加引数。 train() メソッドに渡すことができる。これらの引数には、学習エポック数、バッチサイズ、その他の学習固有の設定などが含まれる。 {}

これらのパラメータをカスタマイズすることで、特定のニーズと利用可能な計算リソースに合わせて、ハイパーパラメータ最適化プロセスを微調整することができます。

デフォルトの検索スペース

次の表は、YOLOv8 with Ray Tune でハイパーパラメータをチューニングするためのデフォルトのサーチスペースパラメータの一覧です。各パラメータは tune.uniform().

パラメータ 値の範囲 説明
lr0 tune.uniform(1e-5, 1e-1) 初期学習率
lrf tune.uniform(0.01, 1.0) 最終学習率係数
momentum tune.uniform(0.6, 0.98) 勢い
weight_decay tune.uniform(0.0, 0.001) 体重減少
warmup_epochs tune.uniform(0.0, 5.0) ウォームアップ・エポック
warmup_momentum tune.uniform(0.0, 0.95) ウォームアップの勢い
box tune.uniform(0.02, 0.2) ボックスロス重量
cls tune.uniform(0.2, 4.0) 減量クラス
hsv_h tune.uniform(0.0, 0.1) 色相増強範囲
hsv_s tune.uniform(0.0, 0.9) 飽和増大範囲
hsv_v tune.uniform(0.0, 0.9) 値(輝度)増強範囲
degrees tune.uniform(0.0, 45.0) 回転増大範囲(度)
translate tune.uniform(0.0, 0.9) 翻訳増強範囲
scale tune.uniform(0.0, 0.9) 補強範囲の拡大
shear tune.uniform(0.0, 10.0) 剪断増大範囲(度)
perspective tune.uniform(0.0, 0.001) パースペクティブ拡張範囲
flipud tune.uniform(0.0, 1.0) 垂直フリップ増加確率
fliplr tune.uniform(0.0, 1.0) 水平フリップ増加確率
mosaic tune.uniform(0.0, 1.0) モザイク補強確率
mixup tune.uniform(0.0, 1.0) 混合補強確率
copy_paste tune.uniform(0.0, 1.0) コピペ補強確率

カスタム検索スペースの例

この例では、Ray Tune とYOLOv8 を使って、ハイパーパラメータのチューニングにカスタム探索空間を使用する方法を示します。カスタム検索空間を提供することで、関心のある特定のハイパーパラメータにチューニングプロセスを集中させることができます。

使用方法

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.pt")

# Run Ray Tune on the model
result_grid = model.tune(
    data="coco8.yaml",
    space={"lr0": tune.uniform(1e-5, 1e-1)},
    epochs=50,
    use_ray=True,
)

上のコード・スニペットでは、"yolov8n.pt "という事前学習された重みでYOLO 。そして tune() メソッドで、データセットの設定を "coco8.yaml "で指定する。初期学習率のためのカスタム探索空間を提供する。 lr0 キー "lr0 "と値 "lr0 "を持つ辞書を使う。 tune.uniform(1e-5, 1e-1).最後に、エポック数のような追加のトレーニング引数を、次のようにチューニングメソッドに直接渡します。 epochs=50.

レイ・チューンの結果を処理する

Ray Tune でハイパーパラメータのチューニング実験を行った後、得られた結果について様々な分析を行いたい場合があります。このガイドでは、これらの結果を処理・分析するための一般的なワークフローを紹介します。

ディレクトリからのチューニング実験結果の読み込み

を使ったチューニング実験を行った後、次のように述べた。 tuner.fit()ディレクトリから結果をロードできます。これは、特に最初のトレーニングスクリプトが終了した後に分析を実行する場合に便利です。

experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")

restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()

基本的な実験レベルの分析

トライアルの結果の概要を把握できます。トライアル中にエラーがなかったかどうか、すぐに確認することができます。

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

基本的なトライアルレベルの分析

個々のトライアルのハイパーパラメータ構成と、最後に報告されたメトリクスにアクセスします。

for i, result in enumerate(result_grid):
    print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")

臨床試験で報告されたメトリクスの全履歴をプロットする

各試験で報告されたメトリクスの履歴をプロットして、メトリクスの経時変化を見ることができます。

import matplotlib.pyplot as plt

for result in result_grid:
    plt.plot(
        result.metrics_dataframe["training_iteration"],
        result.metrics_dataframe["mean_accuracy"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("Mean Accuracy")
plt.legend()
plt.show()

概要

このドキュメントでは、Ultralytics を使用して Ray Tune で実行された実験結果を解析するための一般的なワークフローについて説明します。主なステップには、ディレクトリからの実験結果のロード、基本的な実験レベルおよびトライアルレベルの解析の実行、メトリクスのプロットなどがあります。

ハイパーパラメーターのチューニング実験を最大限に活用するために、Ray Tuneの「Analyze Results(結果の分析)」ドキュメントページをさらに詳しくご覧ください。

よくあるご質問

Ray Tuneを使用して、YOLOv8 モデルのハイパーパラメータを調整するには?

Ray Tune を使用してUltralytics YOLOv8 モデルのハイパーパラメータを調整するには、以下のステップに従う:

  1. 必要なパッケージをインストールする:

    pip install -U ultralytics "ray[tune]"
    pip install wandb  # optional for logging
    
  2. YOLOv8 、チューニングを開始します:

    from ultralytics import YOLO
    
    # Load a YOLOv8 model
    model = YOLO("yolov8n.pt")
    
    # Start tuning with the COCO8 dataset
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

これは、Ray Tuneの高度な検索ストラテジーと並列性を利用し、モデルのハイパーパラメータを効率的に最適化します。詳しくはRay Tuneのドキュメントをご覧ください。

Ray TuneでYOLOv8 、デフォルトのハイパーパラメータは何ですか?

Ultralytics YOLOv8 は、Ray Tune でのチューニングに以下のデフォルトのハイパーパラメータを使用します:

パラメータ 値の範囲 説明
lr0 tune.uniform(1e-5, 1e-1) 初期学習率
lrf tune.uniform(0.01, 1.0) 最終学習率係数
momentum tune.uniform(0.6, 0.98) 勢い
weight_decay tune.uniform(0.0, 0.001) 体重減少
warmup_epochs tune.uniform(0.0, 5.0) ウォームアップ・エポック
box tune.uniform(0.02, 0.2) ボックスロス重量
cls tune.uniform(0.2, 4.0) 減量クラス
hsv_h tune.uniform(0.0, 0.1) 色相増強範囲
translate tune.uniform(0.0, 0.9) 翻訳増強範囲

これらのハイパーパラメータは、特定のニーズに合わせてカスタマイズすることができる。完全なリストと詳細については、ハイパーパラメータのチューニング・ガイドを参照してください。

YOLOv8 モデルのチューニングにWeights & Biases を統合するには?

Weights & Biases (W&B) をUltralytics YOLOv8 チューニング・プロセスに統合する:

  1. W&Bを設置する:

    pip install wandb
    
  2. チューニングスクリプトを修正する:

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # Load YOLO model
    model = YOLO("yolov8n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

このセットアップにより、チューニング・プロセスをモニターし、ハイパーパラメータの設定を追跡し、結果をW&Bで視覚化することができる。

YOLOv8 、ハイパーパラメータの最適化にRay Tuneを使うべき理由は?

レイ・チューンは、ハイパーパラメータの最適化において多くの利点を提供する:

  • 高度な検索戦略:ベイズ最適化やHyperOptなどのアルゴリズムを活用し、効率的なパラメータ検索を実現。
  • 並列性:複数のトライアルの並列実行をサポートし、チューニングプロセスを大幅にスピードアップ。
  • 早期停止:ASHAのような戦略を採用し、パフォーマンスの低い試験を早期に終了させ、計算資源を節約する。

Ray Tune はUltralytics YOLOv8 とシームレスに統合され、ハイパーパラメータを効果的にチューニングするための使いやすいインターフェイスを提供します。まずは、RayTune とYOLOv8を使った効率的なハイパーパラメータのチューニングガイドをご覧ください。

YOLOv8 ハイパーパラメータ・チューニングのためのカスタム探索空間を定義するには?

Ray Tune を使ってYOLOv8 ハイパーパラメータ・チューニング用のカスタム探索空間を定義する:

from ray import tune

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

これは、チューニング・プロセス中に探索する初期学習率や運動量のようなハイパーパラメータの範囲をカスタマイズする。高度な設定については、カスタム探索空間の例のセクションを参照してください。



作成日:2023-11-12 更新日:2024-07-05
作成者:glenn-jocher(10)

コメント