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
# YOLO26nモデルを読み込む
model = YOLO("yolo26n.pt")
# COCO8データセットでYOLO26nのトレーニングのハイパーパラメータチューニングを開始する
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スケジューラーにおけるエポック単位の猶予期間です。スケジューラーは、このエポック数に達する前にトライアルを終了しません。これにより、早期停止を判断する前に、モデルが最低限のトレーニングを行えるようになります。 | 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()で定義されていますが、close_mosaicではtune.randint()を使用します。
| パラメーター | 範囲 | 説明 |
|---|---|---|
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
# YOLOモデルを定義
model = YOLO("yolo26n.pt")
# モデルでRay Tuneを実行する
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
# YOLOモデルを定義
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
# YOLOモデルを定義
model = YOLO("yolo26n.pt")
# 探索器を定義する
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セッションを再開できます。必要に応じて、再開するruns/{task}内でRay Tuneが使用したディレクトリnameを渡すこともできます。指定しない場合は、最後に中断されたセッションが再開されます。iterationsとspaceを再度指定する必要はありませんが、dataとepochsを含む残りのトレーニング引数は再度指定する必要があります。
from ultralytics import YOLO
# YOLOモデルを定義
model = YOLO("yolo26n.pt")
# 前回の実行を再開
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)
# 名前'tune_exp_2'のRay Tune実行を再開する
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の結果の分析ドキュメントをご覧ください。
よくある質問#
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 # YOLO26モデルを読み込みます model = YOLO("yolo26n.pt") # COCO8データセットでチューニングを開始する 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 # YOLOモデルを読み込む model = YOLO("yolo26n.pt") # 各Rayトライアルは、このプロジェクトで独自のW&B runを作成します 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)これにより、チューニングプロセス中に探索する初期学習率やモメンタムなどのハイパーパラメーターの範囲をカスタマイズできます。高度な設定については、カスタム探索空間の例セクションをご覧ください。