Ray TuneとYOLO11による効率的なハイパーパラメータチューニング
ハイパーパラメータ調整は、最適なハイパーパラメータのセットを見つけることにより、モデルのパフォーマンスを最大限に引き出すために不可欠です。これには、異なるハイパーパラメータで試行を繰り返し、各試行のパフォーマンスを評価することが含まれます。
Ultralytics YOLO11とRay Tuneによる高速チューニング
Ultralytics YOLO11は、ハイパーパラメータ調整にRay Tuneを組み込んでおり、YOLO11モデルのハイパーパラメータの最適化を効率化します。Ray Tuneを使用すると、高度な検索戦略、並列処理、および早期停止を利用して、調整プロセスを迅速化できます。
Ray Tune
Ray Tuneは、効率性と柔軟性を重視して設計されたハイパーパラメータチューニングライブラリです。多様な探索戦略、並列処理、早期停止戦略をサポートし、Ultralytics YOLO11を含む一般的な機械学習フレームワークとシームレスに統合できます。
Weights & Biases との統合
YOLO11では、チューニングプロセスを監視するために、オプションで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 YOLO11n model
model = YOLO("yolo11n.pt")
# Start tuning hyperparameters for YOLO11n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)
tune()
メソッドのパラメータ
The tune()
YOLO11のメソッドは、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を使用します。 | None |
iterations |
int, optional |
チューニング中に実行する試行の最大数。このパラメーターは、テストされるハイパーパラメーターの組み合わせの総数を制御し、チューニングプロセスがいつまでも実行されないようにするのに役立ちます。 | 10 |
**train_args |
dict, optional |
に渡す追加の引数 train() チューニング中のメソッド。これらの引数には、トレーニングエポック数などの設定が含まれます。 バッチサイズ)、およびその他のトレーニング固有の構成。 |
{} |
これらのパラメータをカスタマイズすることで、特定のニーズや利用可能な計算リソースに合わせて、ハイパーパラメータ最適化プロセスを微調整できます。
デフォルトの探索空間の説明
次の表に、Ray Tuneを使用したYOLO11のハイパーパラメータチューニングのデフォルトの探索空間パラメータを示します。各パラメータには、によって定義された特定の値の範囲があります。 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) |
Translation拡張は、画像を水平方向および垂直方向にシフトさせる範囲を指定します。 |
scale |
tune.uniform(0.0, 0.9) |
異なる距離にある物体をシミュレートするスケーリング拡張の範囲。 |
shear |
tune.uniform(0.0, 10.0) |
パースペクティブシフトをシミュレートする、度単位でのシア拡張範囲。 |
perspective |
tune.uniform(0.0, 0.001) |
3D視点の変化をシミュレートするパースペクティブ拡張の範囲。 |
flipud |
tune.uniform(0.0, 1.0) |
データセットの多様性を高める、垂直方向の反転拡張の確率。 |
fliplr |
tune.uniform(0.0, 1.0) |
左右対称のオブジェクトに役立つ、水平方向の反転拡張の確率。 |
mosaic |
tune.uniform(0.0, 1.0) |
4つの画像を1つのトレーニングサンプルに結合するモザイク拡張の確率。 |
mixup |
tune.uniform(0.0, 1.0) |
2つの画像とそのラベルをブレンドするMixupオーグメンテーション確率。 |
cutmix |
tune.uniform(0.0, 1.0) |
局所的な特徴を維持しながら画像領域を結合し、部分的に遮られたオブジェクトの検出を改善するCutmix拡張の確率。 |
copy_paste |
tune.uniform(0.0, 1.0) |
インスタンスの多様性を高めるために、イメージ間でオブジェクトを転送するコピー&ペースト拡張の確率。 |
カスタム探索空間の例
この例では、Ray TuneとYOLO11を使用して、ハイパーパラメータチューニングにカスタムの探索空間を使用する方法を示します。カスタムの探索空間を提供することで、関心のある特定のハイパーパラメータにチューニングプロセスを集中させることができます。
使用法
from ray import tune
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.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,
)
上記のコードスニペットでは、"yolo11n.pt"の事前学習済み重みを使用してYOLOモデルを作成します。次に、 tune()
メソッド。「coco8.yaml」でデータセット構成を指定します。初期学習率のカスタム検索スペースを提供します。 lr0
キー「lr0」と値を持つ辞書を使用する tune.uniform(1e-5, 1e-1)
。最後に、エポック数などの追加のトレーニング引数を、tuneメソッドに直接渡します。 epochs=50
.
Ray Tuneで中断されたハイパーパラメータ調整セッションを再開する
中断されたRay Tuneセッションを渡すことで再開できます。 resume=True
オプションでディレクトリを渡すことができます。 name
Ray Tuneで使用 runs/{task}
再開するには、以下のようにします。そうでない場合、最後に中断されたセッションが再開されます。以前のトレーニング引数を指定する必要はありません。 iterations
および space
再度実行する必要がありますが、トレーニング引数の残りの部分( data
および epochs
.
使用 resume=True
with model.tune()
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.pt")
# Resume previous run
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)
# Resume Ray Tune run with name 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)
Ray Tuneの結果の処理
Ray Tune を使用してハイパーパラメータチューニング実験を実行した後、取得した結果に対してさまざまな分析を実行したい場合があります。このガイドでは、これらの結果を処理および分析するための一般的なワークフローについて説明します。
ディレクトリから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 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モデルのハイパーパラメータを調整するには、次の手順に従います。
-
必要なパッケージをインストール:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
YOLO11モデルをロードしてチューニングを開始します:
from ultralytics import YOLO # Load a YOLO11 model model = YOLO("yolo11n.pt") # Start tuning with the COCO8 dataset result_grid = model.tune(data="coco8.yaml", use_ray=True)
これは、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) |
Weight decay(荷重減衰) |
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) |
平行移動拡張範囲 |
これらのハイパーパラメータは、特定のニーズに合わせてカスタマイズできます。完全なリストと詳細については、ハイパーパラメータ調整ガイドを参照してください。
Weights & BiasesをYOLO11モデルのチューニングと統合するにはどうすればよいですか?
Weights & Biases (W&B) を Ultralytics YOLO11 チューニング プロセスと統合するには:
-
W&Bをインストール:
pip install wandb
-
チューニングスクリプトを変更:
import wandb from ultralytics import YOLO wandb.init(project="YOLO-Tuning", entity="your-entity") # Load YOLO model model = YOLO("yolo11n.pt") # Tune hyperparameters result_grid = model.tune(data="coco8.yaml", use_ray=True)
この設定により、チューニングプロセスを監視し、ハイパーパラメータ構成を追跡し、W&Bで結果を視覚化できます。
YOLO11でハイパーパラメータ最適化のためにRay Tuneを使用すべきなのはなぜですか?
Ray Tuneは、ハイパーパラメータ最適化に数多くの利点をもたらします。
- 高度な検索戦略: ベイズ最適化やHyperOptなどのアルゴリズムを利用して、効率的なパラメータ探索を実現します。
- 並列処理: 複数のトライアルの並列実行をサポートし、チューニングプロセスを大幅に高速化します。
- 早期停止: ASHAなどの戦略を採用して、パフォーマンスの低いトライアルを早期に終了させ、計算リソースを節約します。
Ray Tune は Ultralytics 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)
これにより、初期学習率やモメンタムなどのハイパーパラメータの範囲をカスタマイズして、チューニングプロセス中に探索できます。高度な構成については、カスタム検索空間の例セクションを参照してください。