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です。トレーニングおよび検証データのパスと、その他のデータセット固有の設定を指定します。Classificationでは、代わりにデータセットディレクトリまたは組み込みデータセット名(例: imagenet10)を指定します。 | |
space | dict, optional | Ray Tuneのハイパーパラメータ探索空間を定義する辞書です。各キーはハイパーパラメータ名に対応し、値はチューニング中に探索する値の範囲を指定します。指定しない場合、YOLO26はさまざまなハイパーパラメータを含むデフォルトの探索空間を使用します。 | |
grace_period | int, optional | Ray TuneのASHAスケジューラーにおけるエポック単位の猶予期間です。スケジューラーはこのエポック数に達するまで試行を終了しないため、早期停止を判断する前にモデルが最低限のトレーニングを行えるようになります。 | 10 |
gpu_per_trial | int, optional | Rayが各試行に割り当てるGPU数です。GPUトレーニングを使用するには、この値を明示的に設定します。省略した場合、試行にはGPUリソースが割り当てられません。 | None |
iterations | int, optional | チューニング中に実行する試行の最大数です。このパラメータにより、テストするハイパーパラメータの組み合わせ総数を制御し、チューニングプロセスが無期限に実行されるのを防ぎます。 | 300 |
search_alg | str or Searcher, optional | 使用するRay Tuneの探索戦略です。Rayのsearcherオブジェクトを直接渡すか、optuna、hyperopt、bayesopt、bohb、hebo、nevergrad、zoopt、ax、randomなど、サポートされている文字列を使用できます。文字列ベースのsearcherは、デフォルトのタスクメトリックと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) | ボックス距離回帰成分の重みで、正確なバウンディングボックス位置特定を重視します。 |
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モデルを作成します。次に、データセット設定として"coco8.yaml"を指定して、tune()メソッドを呼び出します。キー"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,
)searcherのサンプラーをカスタマイズしたり、メトリックと最適化モードを上書きしたりする必要がある場合は、文字列の代わりにインスタンス化したRay Tune searcherオブジェクトを渡します。
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でハイパーパラメータチューニング実験を実行した後、取得した結果をさまざまな方法で分析することがあります。このガイドでは、これらの結果を処理および分析する一般的なワークフローを説明します。
ディレクトリからTune実験の結果を読み込む#
model.tune(use_ray=True) は Ray の ResultGrid を返し、実験を runs/{task}/tune 以下、または渡した name 以下に保存します。元のスクリプトが終了した後にそれらの結果を読み込むには、セッションを再開します。これにより保存されたトライアルが復元され、同じ ResultGrid が返されます:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)実験レベルの基本分析#
試行の実行結果の概要を取得します。試行中にエラーが発生したかどうかをすばやく確認できます。
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["metrics/mAP50-95(B)"],
label=f"Trial {i}",
)
plt.xlabel("Training Iterations")
plt.ylabel("mAP50-95")
plt.legend()
plt.show()まとめ#
このガイドでは、Ultralyticsを使用してRay Tuneで実行した実験結果を分析する一般的なワークフローを説明しました。主な手順は、ディレクトリから実験結果を読み込み、実験レベルと試行レベルの基本分析を行い、メトリックをプロットすることです。
Ray TuneのAnalyze Resultsドキュメントページを参照して、ハイパーパラメータチューニング実験を最大限に活用してください。
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)ボックス距離損失の重み hsv_htune.uniform(0.0, 0.1)色相の拡張範囲 translatetune.uniform(0.0, 0.9)平行移動の拡張範囲 これらのハイパーパラメータは、特定のニーズに合わせてカスタマイズできます。完全な一覧と詳細については、ハイパーパラメータチューニングガイドを参照してください。
Weights & Biases(W&B)をUltralytics YOLO26のチューニングプロセスに統合するには、次の手順を実行します。
-
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)これにより、チューニングプロセスで探索する初期学習率やモメンタムなどのハイパーパラメータの範囲をカスタマイズできます。高度な設定については、カスタム探索空間の例セクションを参照してください。