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]"
# Optionally install W&B for logging
pip install wandb使用方法
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形式)。このファイルには、トレーニングおよび検証データのパス、およびデータセット固有のその他の設定を指定する必要があります。 | |
space | dict, optional | Ray Tune用のハイパーパラメータ探索空間を定義する辞書。各キーはハイパーパラメータ名に対応し、値はチューニング中に探索する値の範囲を指定します。指定しない場合、YOLO26は様々なハイパーパラメータを含むデフォルトの探索空間を使用します。 | |
grace_period | int, optional | The grace period in epochs for the ASHA scheduler in Ray Tune. The scheduler will not terminate any trial before this number of epochs, allowing the model to have some minimum training before making a decision on early stopping. | 10 |
gpu_per_trial | int, optional | チューニング中に試行ごとに割り当てるGPUの数。これは、特にマルチGPU環境でのGPU使用量を管理するのに役立ちます。指定しない場合、チューナーは利用可能なすべてのGPUを使用します。 | None |
iterations | int, optional | チューニング中に実行する最大試行回数。このパラメータは、テストされるハイパーパラメータの組み合わせの総数を制御し、チューニングプロセスが永久に続かないようにします。 | 10 |
search_alg | str or Searcher, optional | 使用するRay Tuneの探索戦略。Rayの検索オブジェクトを直接渡すか、optuna、hyperopt、bayesopt、bohb、hebo、nevergrad、zoopt、ax、randomなどのサポートされている文字列を使用できます。文字列ベースの検索器は自動的にデフォルトのタスクメトリクスとmode="max"を使用します。指定しない場合、Ray Tuneはデフォルトのランダム探索戦略であるBasicVariantGeneratorを使用します。 | None |
**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) | モデル内のクラス予測精度をバランスさせるための分類損失成分の重み。 |
dfl | tune.uniform(0.4, 12.0) | 精密なバウンディングボックスの位置合わせを強調するためのDistribution Focal Loss成分の重み。 |
hsv_h | tune.uniform(0.0, 0.1) | モデルの汎化を助けるために色の多様性を導入する色相(Hue)の拡張範囲。 |
hsv_s | tune.uniform(0.0, 0.9) | 頑健性を向上させるために色の強度を変化させる彩度(Saturation)の拡張範囲。 |
hsv_v | tune.uniform(0.0, 0.9) | 様々な照明条件下でのモデルのパフォーマンスを向上させる明度(Value/Brightness)の拡張範囲。 |
degrees | tune.uniform(0.0, 45.0) | 回転された物体の認識を改善する、度単位での回転(Rotation)の拡張範囲。 |
translate | tune.uniform(0.0, 0.9) | 画像を水平および垂直方向にシフトさせる平行移動(Translation)の拡張範囲。 |
scale | tune.uniform(0.0, 0.95) | 様々な距離にある物体をシミュレートするスケーリング(Scaling)の拡張範囲。 |
shear | tune.uniform(0.0, 10.0) | 遠近感のシフトをシミュレートする、度単位でのシアリング(Shear)の拡張範囲。 |
perspective | tune.uniform(0.0, 0.001) | 3D視点の変化をシミュレートするパースペクティブ(Perspective)の拡張範囲。 |
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つのトレーニングサンプルに統合するモザイク(Mosaic)の拡張確率。 |
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) | インスタンスの多様性を高めるために画像間で物体を転送するCopy-pasteの拡張確率。 |
close_mosaic | tune.randint(0.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に対して、キー"lr0"と値tune.uniform(1e-5, 1e-2)を持つ辞書を使用してカスタム探索空間を提供します。最後に、エポック数などの追加のトレーニング引数をepochs=50としてチューンメソッドに直接渡します。
探索アルゴリズムの例
Ray Tuneの探索戦略は名前で選択できます。文字列ベースの探索アルゴリズムの場合、Ultralyticsは自動的に現在のタスクのデフォルトの最適化メトリクスとmode="max"を使用します。search_algが提供されない場合、Ray Tuneはデフォルトのランダム探索戦略であるBasicVariantGeneratorを使用します。
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で中断されたハイパーパラメータチューニングセッションの再開
You can resume an interrupted Ray Tune session by passing resume=True. You can optionally pass the directory name used by Ray Tune under runs/{task} to resume. Otherwise, it would resume the last interrupted session. You don't need to provide the iterations and space again, but you need to provide the rest of the training arguments again including data and 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を使用してYOLO26モデルのハイパーパラメータをチューニングするにはどうすればよいですか?
Ray Tuneを使用してUltralytics YOLO26モデルのハイパーパラメータをチューニングするには、以下の手順に従ってください:
-
必要なパッケージのインストール:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging -
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のドキュメントをご覧ください。
Ray TuneでYOLO26をチューニングする際のデフォルトのハイパーパラメータは何ですか?
Ultralytics YOLO26は、Ray Tuneでのチューニングに以下のデフォルトハイパーパラメータを使用します:
| パラメータ | 値の範囲 | 説明 |
|---|---|---|
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) | Weight decay |
warmup_epochs | tune.uniform(0.0, 5.0) | Warmup epochs |
box | tune.uniform(1.0, 20.0) | Box loss weight |
cls | tune.uniform(0.1, 4.0) | Class loss weight |
dfl | tune.uniform(0.4, 12.0) | DFL loss weight |
hsv_h | tune.uniform(0.0, 0.1) | Hue augmentation range |
translate | tune.uniform(0.0, 0.9) | Translation augmentation range |
これらのハイパーパラメータは、特定のニーズに合わせてカスタマイズ可能です。リストの全詳細については、Hyperparameter Tuningガイドを参照してください。
Weights & BiasesをYOLO26モデルのチューニングに統合するにはどうすればよいですか?
Ultralytics YOLO26のチューニングプロセスにWeights & Biases (W&B)を統合するには、以下の手順に従います:
-
W&Bをインストールする:
pip install wandb -
チューニングスクリプトを修正する:
import wandb from ultralytics import YOLO wandb.init(project="YOLO-Tuning", entity="your-entity") # Load YOLO model model = YOLO("yolo26n.pt") # Tune hyperparameters result_grid = model.tune(data="coco8.yaml", use_ray=True)
この設定により、チューニングプロセスの監視、ハイパーパラメータ構成の追跡、およびW&B上での結果の可視化が可能になります。
なぜYOLO26のハイパーパラメータ最適化にRay Tuneを使用すべきなのですか?
Ray Tuneには、ハイパーパラメータ最適化において多くの利点があります:
- 高度な探索戦略: Bayesian OptimizationやHyperOptのようなアルゴリズムを利用して、効率的なパラメータ探索を行います。
- 並列処理: 複数の試行の並列実行をサポートしており、チューニングプロセスを大幅に高速化します。
- 早期停止: ASHAのような戦略を採用し、パフォーマンスの低い試行を早期に終了させることで、計算リソースを節約します。
Ray TuneはUltralytics YOLO26とシームレスに統合され、ハイパーパラメータを効果的に調整するための使いやすいインターフェースを提供します。開始方法については、Hyperparameter Tuningガイドを確認してください。
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)これにより、チューニングプロセス中に探索される初期学習率やモメンタムなどのハイパーパラメータの範囲がカスタマイズされます。高度な設定については、Custom Search Space Exampleセクションを参照してください。