Link to this sectionRay TuneとYOLO26を使用した効率的なハイパーパラメータチューニング#
ハイパーパラメータチューニングは、最適なハイパーパラメータセットを発見することでモデルのパフォーマンスを最大化するために不可欠です。これには、異なるハイパーパラメータで試行を実行し、各試行のパフォーマンスを評価することが含まれます。
Link to this sectionUltralytics YOLO26とRay Tuneによるチューニングの加速#
Ultralytics YOLO26は、ハイパーパラメータチューニングのためにRay Tuneを組み込んでおり、YOLO26モデルのハイパーパラメータ最適化を合理化します。Ray Tuneを使用することで、高度な探索戦略、並列処理、早期終了を活用してチューニングプロセスを迅速化できます。
Link to this sectionRay Tune#
Ray Tuneは、効率性と柔軟性を追求して設計されたハイパーパラメータチューニングライブラリです。さまざまな探索戦略、並列処理、早期終了戦略をサポートしており、Ultralytics YOLO26を含む一般的な機械学習フレームワークとシームレスに統合できます。
Link to this sectionWeights & Biasesとの統合#
YOLO26では、チューニングプロセスを監視するためにWeights & Biasesとの統合もオプションで可能です。
Link to this sectionインストール#
必要なパッケージをインストールするには、以下を実行してください。
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install W&B for logging
pip install wandbLink to this section使用方法#
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)Link to this sectiontune()メソッドのパラメータ#
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()メソッドに渡す追加の引数。これらの引数には、トレーニングエポック数、バッチサイズ、その他のトレーニング固有の設定を含めることができます。 | {} |
これらのパラメータをカスタマイズすることで、特定のニーズや利用可能な計算リソースに合わせてハイパーパラメータ最適化プロセスを微調整できます。
Link to this sectionデフォルトの探索空間の説明#
以下の表は、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) | モデルの汎化性能を向上させるために色の多様性をもたらす色相拡張範囲。 |
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) | インスタンスの多様性を高めるために画像間でオブジェクトを転送するCopy-paste拡張確率。 |
close_mosaic | tune.randint(0, 11) | 完了前にトレーニングを安定させるために、最後のNエポックでモザイクを無効にします。 |
Link to this sectionカスタム探索空間の例#
この例では、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,
)In the code snippet above, we create a YOLO model with the "yolo26n.pt" pretrained weights. Then, we call the tune() method, specifying the dataset configuration with "coco8.yaml". We provide a custom search space for the initial learning rate lr0 using a dictionary with the key "lr0" and the value tune.uniform(1e-5, 1e-2). Finally, we pass additional training arguments, such as the number of epochs directly to the tune method as epochs=50.
Link to this section探索アルゴリズムの例#
名前で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,
)Link to this sectionRay 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)Link to this sectionRay Tuneの結果を処理する#
Ray Tuneでハイパーパラメータチューニング実験を実行した後、得られた結果に対してさまざまな分析を行いたい場合があります。このガイドでは、これらの結果を処理および分析するための一般的なワークフローについて説明します。
Link to this sectionディレクトリからチューニング実験結果を読み込む#
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()Link to this section基本的な実験レベルの分析#
試行がどのように実行されたかの概要を取得します。試行中にエラーが発生したかどうかを素早く確認できます。
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")Link to this section基本的な試行レベルの分析#
個別の試行のハイパーパラメータ構成と、最後に報告されたメトリクスにアクセスします。
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")Link to this section試行の報告メトリクスの全履歴をプロットする#
各試行で報告されたメトリクスの履歴をプロットして、メトリクスが時間とともにどのように変化したかを確認できます。
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()Link to this section要約#
このガイドでは、Ultralyticsを使用してRay Tuneで実行した実験結果を分析するための一般的なワークフローを説明しました。主なステップには、ディレクトリからの実験結果の読み込み、基本的な実験レベルおよび試行レベルの分析の実行、そしてメトリクスのプロットが含まれます。
ハイパーパラメータチューニング実験を最大限に活用するために、Ray TuneのAnalyze Resultsドキュメントページを参照して詳細を調べてください。
Link to this sectionよくある質問 (FAQ)#
Link to this sectionRay 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 documentationをご確認ください。
Link to this sectionRay 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) | ウェイトディケイ |
warmup_epochs | tune.uniform(0.0, 5.0) | ウォームアップエポック数 |
box | tune.uniform(1.0, 20.0) | ボックス損失の重み |
cls | tune.uniform(0.1, 4.0) | クラス損失の重み |
dfl | tune.uniform(0.4, 12.0) | DFL損失の重み |
hsv_h | tune.uniform(0.0, 0.1) | 色相増強の範囲 |
translate | tune.uniform(0.0, 0.9) | 平行移動増強の範囲 |
これらのハイパーパラメータは、特定のニーズに合わせてカスタマイズ可能です。完全なリストと詳細については、Hyperparameter Tuningガイドを参照してください。
Link to this sectionYOLO26モデルのチューニングにWeights & Biasesを統合するにはどうすればよいですか?#
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での結果の視覚化が可能になります。
Link to this sectionYOLO26のハイパーパラメータ最適化にRay Tuneを使用すべき理由は何ですか?#
Ray Tuneはハイパーパラメータ最適化において多くの利点を提供します:
- 高度な検索戦略: Bayesian OptimizationやHyperOptのようなアルゴリズムを利用して、効率的なパラメータ検索を行います。
- 並列処理: 複数の試行の並列実行をサポートし、チューニングプロセスを大幅に高速化します。
- 早期停止: ASHAのような戦略を採用して、パフォーマンスの低い試行を早期に終了させ、計算リソースを節約します。
Ray TuneはUltralytics YOLO26とシームレスに統合され、ハイパーパラメータを効果的にチューニングするための使いやすいインターフェースを提供します。始めるには、Hyperparameter Tuningガイドをご覧ください。
Link to this sectionYOLO26ハイパーパラメータチューニングのカスタム検索スペースを定義するにはどうすればよいですか?#
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セクションを参照してください。