レイチューンとYOLO11による効率的なハイパーパラメータ調整
ハイパーパラメータのチューニングは、最適なハイパーパラメータのセットを発見することによって、モデルの性能を最高にするために不可欠である。これには、異なるハイパーパラメータで試行を実行し、各試行のパフォーマンスを評価することが含まれます。
Ultralytics YOLO11とRay Tuneでチューニングを加速させる
Ultralytics YOLO11は、ハイパーパラメーターのチューニングにRay Tuneを組み込み、YOLO11モデルのハイパーパラメーターの最適化を効率化します。Ray Tuneでは、高度な探索戦略、並列処理、早期停止を利用して、チューニング・プロセスを迅速化することができます。
レイ・チューン
Ray Tuneは、効率性と柔軟性のために設計されたハイパーパラメータチューニングライブラリです。様々な探索戦略、並列性、早期停止戦略をサポートし、Ultralytics YOLO11を含む一般的な機械学習フレームワークとシームレスに統合できます。
との統合Weights & Biases
YOLO11は、オプションで Weights & Biasesとの統合も可能です。
インストール
必要なパッケージをインストールするには
インストール
使用方法
使用方法
tune()
メソッド・パラメータ
について tune()
メソッドは、Ray Tune によるハイパーパラメータのチューニングのための使いやすいインターフェイスを提供します。これは、チューニングプロセスをカスタマイズできるいくつかの引数を受け入れます。以下は各パラメータの詳細な説明です:
パラメータ | タイプ | 説明 | デフォルト値 |
---|---|---|---|
data | str | チューナーを実行するデータセット設定ファイル(YAML形式)。このファイルには、学習データと検証データのパス、およびその他のデータセット固有の設定を指定します。 | |
space | dict, optional | Ray Tune のハイパーパラメータ探索空間を定義する辞書。各キーはハイパーパラメータ名に対応し、値はチューニング中に探索する値の範囲を指定する。提供されない場合、YOLO11はさまざまなハイパーパラメータを持つデフォルトの検索空間を使用します。 | |
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() メソッドに渡すことができる。これらの引数には、学習エポック数などの設定を含めることができる、 バッチサイズなど、トレーニングに特化した構成になっている。 | {} |
これらのパラメータをカスタマイズすることで、特定のニーズと利用可能な計算リソースに合わせて、ハイパーパラメータ最適化プロセスを微調整することができます。
デフォルトの検索スペース
次の表は、YOLO11 の 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 と YOLO11 でハイパーパラメータのチューニングにカスタム検索空間を使用する方法を示します。カスタム検索空間を提供することで、関心のある特定のハイパーパラメータにチューニングプロセスを集中させることができます。
使用方法
上のコード・スニペットでは、"yolo11n.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()
基本的な実験レベルの分析
トライアルの結果の概要を把握できます。トライアル中にエラーがなかったかどうか、すぐに確認することができます。
基本的なトライアルレベルの分析
個々のトライアルのハイパーパラメータ構成と、最後に報告されたメトリクスにアクセスします。
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 i, result in enumerate(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を使用してYOLO11モデルのハイパーパラメータを調整するには?
Ray Tune を使用してUltralytics YOLO11 モデルのハイパーパラメータを調整するには、以下の手順に従います:
必要なパッケージをインストールする:
YOLO11モデルをロードし、チューニングを開始する:
これは、Ray Tuneの高度な検索ストラテジーと並列性を利用し、モデルのハイパーパラメータを効率的に最適化します。詳しくはRay Tuneのドキュメントをご覧ください。
Ray Tuneを使ったYOLO11のチューニングにおけるデフォルトのハイパーパラメータは?
Ultralytics YOLO11 は、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) | 翻訳増強範囲 |
これらのハイパーパラメータは、特定のニーズに合わせてカスタマイズすることができる。完全なリストと詳細については、ハイパーパラメータのチューニング・ガイドを参照してください。
YOLO11のチューニングにWeights & Biases 。
Weights & Biases (W&B) をUltralytics YOLO11 チューニング・プロセスに統合する:
W&Bを設置する:
チューニングスクリプトを修正する:
このセットアップにより、チューニング・プロセスをモニターし、ハイパーパラメータの設定を追跡し、W&Bで結果を視覚化することができる。
なぜYOLO11のハイパーパラメータ最適化にRay Tuneを使う必要があるのですか?
レイ・チューンは、ハイパーパラメータの最適化において多くの利点を提供する:
- 高度な検索戦略:ベイズ最適化やHyperOptなどのアルゴリズムを活用し、効率的なパラメータ検索を実現。
- 並列性:複数のトライアルの並列実行をサポートし、チューニングプロセスを大幅にスピードアップ。
- 早期停止:ASHAのような戦略を採用し、パフォーマンスの低い試験を早期に終了させ、計算資源を節約する。
Ray Tuneは、Ultralytics YOLO11とシームレスに統合され、ハイパーパラメーターを効率的にチューニングするための使いやすいインターフェースを提供します。まずは、Ray TuneとYOLO11による効率的なハイパーパラメータのチューニングガイドをご覧ください。
YOLO11のハイパーパラメータ・チューニングのために、カスタム探索空間を定義するにはどうすればよいですか?
Ray Tune を使って YOLO11 のハイパーパラメータ・チューニングのためのカスタム探索空間を定義する:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolo11n.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)
これは、チューニング・プロセス中に探索する初期学習率や運動量のようなハイパーパラメータの範囲をカスタマイズする。高度な設定については、カスタム探索空間の例のセクションを参照してください。