Ray TuneとYOLO26を使用した効率的なハイパーパラメータチューニング#
ハイパーパラメータチューニングは、最適なハイパーパラメータセットを発見することでモデルのパフォーマンスを最大化するために不可欠です。これには、異なるハイパーパラメータで試行を実行し、各試行のパフォーマンスを評価することが含まれます。
Ultralytics YOLO26とRay Tuneによるチューニングの加速#
Ultralytics YOLO26 は、ハイパーパラメータチューニングのために Ray Tune を統合し、YOLO26 モデルのハイパーパラメータの最適化を効率化します。Ray Tune を使用することで、高度な探索戦略、並列処理、早期終了を活用し、チューニングプロセスを迅速化できます。
Ray Tune#
Ray Tune は、効率性と柔軟性を追求して設計されたハイパーパラメータチューニングライブラリです。さまざまな探索戦略、並列処理、早期終了戦略をサポートしており、Ultralytics YOLO26 をはじめとする一般的な機械学習フレームワークとシームレスに統合します。
Weights & Biasesとの統合#
また、YOLO26 では、チューニングプロセスの監視のために Weights & Biases とのオプションの統合も可能です。
インストール#
必要なパッケージをインストールするには、以下を実行してください。
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]" optuna
# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=True使用方法#
from ultralytics import YOLO
# Load a YOLO26n model
model = YOLO("yolo26n.pt")
# Start tuning hyperparameters for YOLO26n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)tune() メソッドのパラメータ#
YOLO26 の tune() メソッドは、Ray Tune を使用したハイパーパラメータチューニングのための使いやすいインターフェースを提供します。チューニングプロセスをカスタマイズできるいくつかの引数を受け取ります。各パラメータの詳細な説明は以下の通りです。
| パラメータ | タイプ | 説明 | デフォルト値 |
|---|---|---|---|
data | str | チューナーを実行するデータセットの YAML。トレーニングおよびバリデーションデータのパスや、その他のデータセット固有の設定を指定します。分類の場合は、データセットディレクトリまたは組み込みのデータセット名(例:imagenet10)を指定します。 | |
space | dict, optional | Ray Tuneのハイパーパラメータ探索空間を定義する辞書。各キーはハイパーパラメータ名に対応し、値はチューニング中に探索する値の範囲を指定します。指定しない場合、YOLO26はさまざまなハイパーパラメータを含むデフォルトの探索空間を使用します。 | |
grace_period | int, optional | Ray Tune における ASHA scheduler の epochs での猶予期間です。スケジューラーはこのエポック数に達するまでトライアルを終了せず、早期停止の判断を下す前にモデルが最小限のトレーニングを行えるようにします。 | 10 |
gpu_per_trial | int, optional | 各試行に Ray が割り当てる GPU の数です。GPU トレーニングを使用するにはこれを明示的に設定してください。省略した場合、試行には GPU リソースが割り当てられません。 | None |
iterations | int, optional | チューニング中に実行する最大試行回数。このパラメータは、テストされるハイパーパラメータの組み合わせの総数を制御し、チューニングプロセスが無限に実行されないようにするのに役立ちます。 | 300 |
search_alg | str or Searcher, optional | 使用する Ray Tune の探索戦略です。Ray のサーチャーオブジェクトを直接渡すか、optuna、hyperopt、bayesopt、bohb、hebo、nevergrad、zoopt、ax、random などのサポートされている文字列を使用できます。文字列ベースのサーチャーは、デフォルトのタスクメトリックと mode="max" を自動的に使用します。デフォルトでは、並列処理に対応した提案機能を持つ Optuna 多変量 TPE が使用されます。 | "optuna" |
**train_args | dict, optional | チューニング中に train() メソッドに渡す追加の引数。これらの引数には、トレーニングのエポック数、バッチサイズ、およびその他のトレーニング固有の設定が含まれます。 | {} |
これらのパラメータをカスタマイズすることで、特定のニーズや利用可能な計算リソースに合わせてハイパーパラメータ最適化プロセスを微調整できます。
デフォルトの探索空間の説明#
次の表は、Ray Tune を使用した YOLO26 のハイパーパラメータチューニングにおけるデフォルトの探索空間パラメータの一覧です。各パラメータには、tune.uniform() によって定義された特定の値の範囲があります。
| パラメータ | 範囲 | 説明 |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | 最適化中のステップサイズを制御する初期学習率。値を大きくするとトレーニングは高速化されますが、不安定になる可能性があります。 |
lrf | tune.uniform(0.01, 1.0) | トレーニング終了時に学習率がどれだけ減少するかを決定する最終学習率係数。 |
momentum | tune.uniform(0.7, 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(1.0, 20.0) | モデル内の位置合わせ精度をバランスさせるための境界ボックス損失成分の重み。 |
cls | tune.uniform(0.1, 4.0) | モデル内のクラス予測精度をバランスさせるための分類損失成分の重み。 |
cls_pw | tune.uniform(0.0, 1.0) | クラス重み付けの累乗です。無効(0.0)から完全な逆頻度重み付け(1.0)まで設定できます。 |
dfl | tune.uniform(0.4, 12.0) | 正確なBBoxのローカライゼーションを重視した、BBoxの距離回帰コンポーネントの重み。 |
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.95) | 異なる距離にある物体をシミュレートするスケーリング拡張範囲。 |
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) | 対称的な物体に有用な水平反転拡張確率。 |
bgr | tune.uniform(0.0, 1.0) | 色不変性の向上を助けるBGRチャンネルスワップ拡張確率。 |
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) | flip モードでは画像にコピーされる対象オブジェクトの割合であり、mixup モードではそれを実行する確率でもあります。 |
close_mosaic | tune.randint(0, 11) | 完了前にトレーニングを安定させるために、最後のNエポックでモザイクを無効にします。 |
カスタム探索空間の例#
この例では、Ray TuneとYOLO26を使用したハイパーパラメータチューニングのためにカスタム探索空間を使用する方法を示します。カスタム探索空間を提供することで、特定のハイパーパラメータに焦点を当てたチューニングを行うことができます。
from ray import tune
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
# Run Ray Tune on the model
result_grid = model.tune(
data="coco8.yaml",
space={"lr0": tune.uniform(1e-5, 1e-2)},
epochs=50,
use_ray=True,
)上記のコードスニペットでは、「yolo26n.pt」の事前学習済み重みを使用して YOLO モデルを作成しています。次に、tune() メソッドを呼び出し、「coco8.yaml」を指定してデータセット構成を設定します。キーを「lr0」、値を tune.uniform(1e-5, 1e-2) とする辞書を使用して、初期学習率 lr0 のカスタム検索スペースを指定します。最後に、エポック数などの追加のトレーニング引数を epochs=50 として tune メソッドに直接渡します。
探索アルゴリズムの例#
名前で Ray Tune の探索戦略を選択できます。文字列ベースの探索アルゴリズムの場合、Ultralytics は現在のタスクのデフォルトの最適化メトリックと mode="max" を自動的に使用します。search_alg が提供されていない場合、Ultralytics は並列処理に対応した提案機能を持つ Optuna 多変量 TPE を使用します。
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
result_grid = model.tune(
data="coco8.yaml",
epochs=50,
search_alg="optuna",
use_ray=True,
)サーチャーのサンプラーをカスタマイズしたり、メトリックと最適化モードをオーバーライドしたりする必要がある場合は、文字列の代わりにインスタンス化されたRay Tuneサーチャーオブジェクトを渡してください。
from ray.tune.search.optuna import OptunaSearch
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
# Define a searcher
searcher = OptunaSearch(
metric="metrics/mAP50-95(B)",
mode="max",
)
result_grid = model.tune(
data="coco8.yaml",
epochs=50,
search_alg=searcher,
use_ray=True,
)Ray Tuneで中断されたハイパーパラメータチューニングセッションを再開する#
resume=True を渡すことで、中断された Ray Tune セッションを再開できます。再開するには、必要に応じて Ray Tune が使用しているディレクトリ name を runs/{task} のもとで渡すことができます。それ以外の場合は、最後に中断されたセッションが再開されます。iterations と space を再度提供する必要はありませんが、data や epochs を含む残りのトレーニング引数は再度提供する必要があります。
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.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でハイパーパラメータチューニング実験を実行した後、得られた結果に対してさまざまな分析を行いたい場合があります。このガイドでは、これらの結果を処理および分析するための一般的なワークフローについて説明します。
ディレクトリからチューニング実験結果を読み込む#
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 の結果の分析に関するドキュメントページを参照して詳細を確認してください。
よくある質問 (FAQ)#
Ray Tuneを使用してUltralytics YOLO26モデルのハイパーパラメータをチューニングするには、以下の手順に従ってください。
-
必要なパッケージをインストールする:
pip install -U ultralytics "ray[tune]" optuna pip install wandb # optional for logging yolo settings wandb=True -
YOLO26モデルを読み込んでチューニングを開始する:
from ultralytics import YOLO # Load a YOLO26 model model = YOLO("yolo26n.pt") # Start tuning with the COCO8 dataset result_grid = model.tune(data="coco8.yaml", use_ray=True)
これは、Ray Tune の高度な探索戦略と並列処理を利用して、モデルのハイパーパラメータを効率的に最適化します。詳細については、Ray Tune のドキュメントをご確認ください。
-
Ultralytics YOLO26は、Ray Tuneでのチューニングに以下のデフォルトのハイパーパラメータを使用します。
パラメータ 値の範囲 説明 lr0tune.uniform(1e-5, 1e-2)初期学習率 lrftune.uniform(0.01, 1.0)最終学習率係数 momentumtune.uniform(0.7, 0.98)モメンタム weight_decaytune.uniform(0.0, 0.001)ウェイトディケイ warmup_epochstune.uniform(0.0, 5.0)ウォームアップエポック数 boxtune.uniform(1.0, 20.0)ボックス損失の重み clstune.uniform(0.1, 4.0)クラス損失の重み cls_pwtune.uniform(0.0, 1.0)クラス重み付けの累乗 dfltune.uniform(0.4, 12.0)BBox距離損失の重み hsv_htune.uniform(0.0, 0.1)色相増強の範囲 translatetune.uniform(0.0, 0.9)平行移動増強の範囲 これらのハイパーパラメータは、特定のニーズに合わせてカスタマイズできます。完全なリストと詳細については、ハイパーパラメータチューニングガイドを参照してください。
Ultralytics YOLO26のチューニングプロセスにWeights & Biases (W&B)を統合するには:
-
W&Bをインストールする:
pip install wandb wandb login yolo settings wandb=True -
チューナーを実行します:
from ultralytics import YOLO # Load YOLO model model = YOLO("yolo26n.pt") # Each Ray trial creates its own W&B run in this project result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)
この設定により、チューニングプロセスの監視、ハイパーパラメータ構成の追跡、およびW&Bでの結果の視覚化が可能になります。
-
Ray Tuneはハイパーパラメータ最適化において多くの利点を提供します:
- 高度な探索戦略: ベイズ最適化や HyperOpt などのアルゴリズムを利用して、効率的なパラメータ探索を行います。
- 並列処理: 複数の試行の並列実行をサポートし、チューニングプロセスを大幅に高速化します。
- 早期停止: ASHAのような戦略を採用して、パフォーマンスの低い試行を早期に終了させ、計算リソースを節約します。
Ray Tune は Ultralytics YOLO26 とシームレスに統合されており、ハイパーパラメータを効果的にチューニングするための使いやすいインターフェースを提供します。始めるには、ハイパーパラメータチューニングガイドをご覧ください。
Ray TuneでYOLO26ハイパーパラメータチューニングのカスタム検索スペースを定義するには:
from ray import tune from ultralytics import YOLO model = YOLO("yolo26n.pt") search_space = {"lr0": tune.uniform(1e-5, 1e-2), "momentum": tune.uniform(0.7, 0.98)} result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)これにより、チューニングプロセス中に探索される初期学習率やモメンタムなどのハイパーパラメータの範囲をカスタマイズできます。高度な設定については、カスタム探索空間の例セクションを参照してください。