Ultralytics YOLO Hyperparameter Tuning ガイド#
Ultralytics YOLOにおけるハイパーパラメータチューニングは、学習率、損失の重み、データ拡張の強さなどの設定を自動的かつ反復的に探索し、精度、適合率、再現率などの機械学習モデルのパフォーマンス指標を最大化するプロセスです。これらの値を手動でテストする代わりに、Ultralytics YOLOは遺伝的アルゴリズムを使用してハイパーパラメータ空間を探索し、多数の短いトレーニング実行を通じて候補となる構成を変異および評価します。
Watch: How to Tune Hyperparameters for Better Model Performance 🚀
ハイパーパラメータとは何か?#
ハイパーパラメータとは、アルゴリズムに対する高レベルな構造的設定のことです。これらはトレーニングフェーズの前に設定され、トレーニング中には固定されます。Ultralytics YOLOで一般的にチューニングされるハイパーパラメータを以下に示します:
- Learning Rate
lr0: 損失関数の最小値に向かって移動する際の水準(各反復でのステップサイズ)を決定します。 - Batch Size
batch: フォワードパスで同時に処理される画像の数です。 - Number of Epochs
epochs: エポックとは、すべてのトレーニングサンプルの1回の完全な順方向および逆方向のパスのことです。 - アーキテクチャの仕様: チャネル数、層の数、活性化関数の種類など。
YOLO26で使用されるデータ拡張ハイパーパラメータの完全なリストについては、configurations pageを参照してください。
遺伝的アルゴリズムによる進化と突然変異#
Ultralytics YOLOは、ハイパーパラメータを最適化するためにgenetic algorithmsを使用します。遺伝的アルゴリズムは、自然選択と遺伝のメカニズムからインスピレーションを得ています。
- 交叉(Crossover): 各反復では、これまでに得られた最高の適合度を持つ最大9つの構成から遺伝子を組み合わせます。その際、適合度で重み付けされた親の選択を行い、BLX-α交叉を使用します。
- 突然変異(Mutation): 再結合された候補に対し、各ハイパーパラメータに(パラメータごとに0.5の確率で)対数正規乗算因子を適用して摂動を与えます。突然変異の強さ(シグマ)は、最初の300反復にわたって0.2から0.1へ線形に減衰するため、アルゴリズムは初期段階では広く探索を行い、収束するにつれて精緻化していきます。反復1では交叉する親が存在しないため、デフォルトのトレーニングハイパーパラメータをベースラインとして使用します。
ハイパーパラメータチューニングの準備#
チューニングプロセスを開始する前に、以下の点を確認することが重要です:
- 指標の特定: モデルのパフォーマンスを評価するために使用する指標を決定します。AP50、F1スコアなどが該当します。
- チューニング予算の設定: 割り当てるコンピューティングリソースの量を定義します。ハイパーパラメータチューニングは、計算負荷が高くなる可能性があります。
チューニングループの仕組み#
各反復において、組み込みのチューナーは以下のループを繰り返します:
- ハイパーパラメータの初期化 — Ultralytics YOLOによって設定されたデフォルトのハイパーパラメータ、またはドメイン知識や以前の実験に基づく値といった、妥当なベースラインから開始します。
- ハイパーパラメータの変異 —
Tunerクラスは、_mutateメソッドを使用して、既存のセットから新しいハイパーパラメータのセットを自動的に生成します。 - モデルのトレーニング — 突然変異したハイパーパラメータを使用してトレーニングを行い、選択した指標でトレーニングのパフォーマンスを評価します。
- モデルの評価 — AP50、F1スコア、またはevaluation processを通じたカスタム指標などの指標を使用して、現在のハイパーパラメータが以前のものから改善されているかどうかを判断します。
- 結果のログ記録 — パフォーマンス指標とそれに対応するハイパーパラメータを将来の参照用に記録します。Ultralytics YOLOはこれらの結果を自動的にNDJSON形式で保存します。
- 繰り返し — 指定した反復回数に達するか、パフォーマンス指標が満足のいくものになるまで継続します。各反復は、以前の実行から得られた知識を基に構築されます。
反復回数と母集団サイズ#
組み込みチューナー (use_ray=False) を使用する場合、iterations は逐次試行の総数を制御します。各試行では、1つのハイパーパラメータ構成で1つのモデルをトレーニングします。たとえば、iterations=40 と epochs=50 のスケジュールでは、40個の候補の別個の集団を持つ1回の50エポックの実行ではなく、40回の独立した50エポックのトレーニング実行を行います。
組み込みの遺伝的アルゴリズムには、明示的な母集団サイズパラメータはありません。以前の試行が存在する場合、最高の適合度を持つ最大9つの構成を親としてサンプリングし、BLX-α交叉と突然変異を適用して、反復ごとに1つの候補を生成します。
並列試行またはより高度な探索戦略の場合は、use_ray=True を設定してRay Tuneを使用します。これにより、iterations が num_samples として渡されます。詳細については、Ray Tune integration guideを参照してください。
デフォルトの探索空間#
次の表に、YOLO26のハイパーパラメータチューニングのデフォルトの探索空間パラメータを示します。各パラメータには、タプル (min, max) によって定義された特定の値の範囲があります。
| パラメータ | タイプ | 値の範囲 | 説明 |
|---|---|---|---|
lr0 | float | (1e-5, 1e-2) | トレーニング開始時の初期学習率。低い値はトレーニングを安定させますが、収束は遅くなります |
lrf | float | (0.01, 1.0) | lr0の割合としての最終学習率係数。トレーニング中に学習率がどれだけ減少するかを制御します |
momentum | float | (0.7, 0.98) | SGDモーメンタム係数。高い値は勾配方向を一定に保つのに役立ち、収束を早めることができます |
weight_decay | float | (0.0, 0.001) | 過学習を防ぐためのL2正則化係数。大きい値ほど強い正則化を強制します |
warmup_epochs | float | (0.0, 5.0) | 線形学習率ウォームアップのエポック数。トレーニング初期の不安定さを防ぐのに役立ちます |
warmup_momentum | float | (0.0, 0.95) | ウォームアップフェーズ中の初期モーメンタム。最終的なモーメンタム値まで徐々に増加します |
box | float | (1.0, 20.0) | 全損失関数におけるバウンディングボックスの損失重み。ボックス回帰と分類のバランスを取ります |
cls | float | (0.1, 4.0) | 全損失関数における分類損失の重み。高い値は正しいクラス予測を強調します |
cls_pw | float | (0.0, 1.0) | クラス不均衡を扱うためのクラス重み付けのべき乗。高い値は、希少なクラスへの重みを増加させます |
dfl | float | (0.4, 12.0) | 全損失関数におけるDFL(Distribution Focal Loss)の重み。高い値は正確なバウンディングボックスの局所化を強調します |
hsv_h | float | (0.0, 0.1) | HSV色空間におけるランダム色相(hue)拡張範囲。モデルが色の変化に対して汎化するのを助けます |
hsv_s | float | (0.0, 0.9) | HSV空間におけるランダム彩度(saturation)拡張範囲。異なる照明条件をシミュレートします |
hsv_v | float | (0.0, 0.9) | ランダム明度(brightness)拡張範囲。モデルが異なる露出レベルを処理するのを助けます |
degrees | float | (0.0, 45.0) | 度単位での最大回転拡張。モデルが物体の向きに対して不変になるよう助けます |
translate | float | (0.0, 0.9) | 画像サイズに対する割合としての最大平行移動拡張。物体の位置に対する堅牢性を向上させます |
scale | float | (0.0, 0.95) | ランダムスケーリング拡張範囲。モデルが異なるサイズの物体を検出するのを助けます |
shear | float | (0.0, 10.0) | 度単位での最大シア(せん断)拡張。トレーニング画像に透視投影に近い歪みを加えます |
perspective | float | (0.0, 0.001) | ランダムパースペクティブ(透視)拡張範囲。異なる視角をシミュレートします |
flipud | float | (0.0, 1.0) | トレーニング中に画像を垂直に反転させる確率。頭上や航空画像に有用です |
fliplr | float | (0.0, 1.0) | 画像を水平に反転させる確率。モデルが物体の向きに対して不変になるよう助けます |
bgr | float | (0.0, 1.0) | 色チャンネルを入れ替えるBGR拡張を使用する確率。色不変性の向上に役立つ場合があります |
mosaic | float | (0.0, 1.0) | 4枚の画像を結合するモザイク拡張を使用する確率。特に小さな物体の検出に有用です |
mixup | float | (0.0, 1.0) | 2枚の画像をブレンドするミックスアップ拡張を使用する確率。モデルの堅牢性を向上させる可能性があります |
cutmix | float | (0.0, 1.0) | カットミックス拡張を使用する確率。局所的な特徴を維持しつつ、画像の領域を組み合わせます |
copy_paste | float | (0.0, 1.0) | コピーペースト拡張を使用する確率。インスタンスセグメンテーションのパフォーマンス向上に寄与します |
close_mosaic | float | (0.0, 10.0) | 完了前にトレーニングを安定させるため、最後のNエポックでモザイクを無効にします |
カスタム探索空間の例#
探索空間を定義し、model.tune() メソッドを使用して Tuner クラスを利用し、COCO8上でAdamWオプティマイザーを使用して30エポックの間YOLO26nのハイパーパラメータチューニングを実行する方法は次のとおりです。チューニングを高速化するため、最終エポック以外でのプロット、チェックポイント作成、および検証はスキップします。
この例はデモンストレーション目的です。短時間や小規模なチューニングから得られたハイパーパラメータは、実環境のトレーニングには適さないことがほとんどです。実際には、信頼性が高く移植可能な結果を確保するために、データセット、エポック数、データ拡張など、本格的なトレーニングに近い設定でチューニングを行う必要があります。クイックチューニングは、汎化できない、より速い収束や短期的な検証スコアの向上にパラメータを偏らせる可能性があります。
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo26n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-2),
"degrees": (0.0, 45.0),
}
# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
data="coco8.yaml",
epochs=30,
iterations=300,
optimizer="AdamW",
space=search_space,
plots=False,
save=False,
val=False,
)中断されたハイパーパラメータチューニングセッションの再開#
resume=Trueを指定することで、中断されたハイパーパラメータチューニングセッションを再開できます。オプションとして、再開のためにruns/{task}の下で使用されたディレクトリnameを指定することもできます。そうしない場合は、最後に中断されたセッションが再開されます。また、data、epochs、iterations、spaceを含む、以前のすべてのトレーニング引数を指定する必要があります。
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo26n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-2),
"degrees": (0.0, 45.0),
}
# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)
# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)結果#
ハイパーパラメータチューニングプロセスが完了すると、チューニング結果をまとめた複数のファイルとディレクトリが生成されます。各内容を以下に説明します:
ファイル構成#
結果のディレクトリ構造は次のようになります。train1/ などのトレーニングディレクトリには、個々のチューニングの反復(つまり、1セットのハイパーパラメータでトレーニングされた1つのモデル)が含まれています。tune/ ディレクトリには、個々のモデルトレーニングすべてのチューニング結果が含まれています。
runs/
└── detect/
├── train1/
├── train2/
├── ...
└── tune/
├── best_hyperparameters.yaml
├── tune_fitness.png
├── tune_results.ndjson
├── tune_scatter_plots.png
└── weights/
├── last.pt
└── best.ptファイルの説明#
best_hyperparameters.yaml#
このYAMLファイルには、チューニングプロセス中に見つかった最適なパフォーマンスを示すハイパーパラメータが含まれています。このファイルを使用して、最適化された設定で将来のトレーニングを初期化できます。
-
形式: YAML
-
用途: ハイパーパラメータの結果
-
例:
# 558/900 iterations complete ✅ (45536.81s) # Results saved to /usr/src/ultralytics/runs/detect/tune # Best fitness=0.64297 observed at iteration 498 # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297} # Best fitness model is /usr/src/ultralytics/runs/detect/train498 # Best fitness hyperparameters are printed below. lr0: 0.00269 lrf: 0.00288 momentum: 0.73375 weight_decay: 0.00015 warmup_epochs: 1.22935 warmup_momentum: 0.1525 box: 18.27875 cls: 1.32899 dfl: 0.56016 hsv_h: 0.01148 hsv_s: 0.53554 hsv_v: 0.13636 degrees: 0.0 translate: 0.12431 scale: 0.07643 shear: 0.0 perspective: 0.0 flipud: 0.0 fliplr: 0.08631 mosaic: 0.42551 mixup: 0.0 copy_paste: 0.0
tune_fitness.png#
これは、適合度と反復回数をプロットしたグラフです。遺伝的アルゴリズムが時間の経過とともにどのように機能したかを可視化するのに役立ちます。
- 形式: PNG
- 用途: パフォーマンスの可視化
このプロットには以下が含まれます:
- データセットごとの反復回数につき1つのマーカー。単一データセットの実行では反復ごとに1つの点が示され、マルチデータセットの実行では反復ごとにデータセットにつき1つの点が示されます。
- 反復ごとのトップレベルの適応度値に対してガウス平滑化 (
sigma=3) として計算された、点線の「平滑化平均」線。
tune_results.ndjson#
各チューニング反復の詳細な結果を含むNDJSONファイルです。各行は、集計された適合度、チューニングされたハイパーパラメータ、およびデータセットごとの指標を含む1つのJSONオブジェクトです。単一データセットとマルチデータセットのチューニングでは、同じファイル形式が使用されます。
- 形式: NDJSON
- 用途: 反復ごとの結果追跡
- 例:
可読性を高めるために、整形された例を次に示します。実際の .ndjson ファイルでは、各オブジェクトは1行に格納されます。
{
"iteration": 1,
"fitness": 0.48628,
"hyperparameters": {
"lr0": 0.01,
"lrf": 0.01,
"momentum": 0.937,
"weight_decay": 0.0005
},
"datasets": {
"coco8": {
"metrics/precision(B)": 0.65666,
"metrics/recall(B)": 0.85,
"metrics/mAP50(B)": 0.85086,
"metrics/mAP50-95(B)": 0.64104,
"val/box_loss": 1.57958,
"val/cls_loss": 1.04986,
"val/dfl_loss": 1.32641,
"fitness": 0.64104
},
"coco8-grayscale": {
"metrics/precision(B)": 0.6582,
"metrics/recall(B)": 0.51667,
"metrics/mAP50(B)": 0.59106,
"metrics/mAP50-95(B)": 0.33152,
"val/box_loss": 1.95424,
"val/cls_loss": 1.64059,
"val/dfl_loss": 1.70226,
"fitness": 0.33152
}
},
"save_dirs": {
"coco8": "runs/detect/coco8",
"coco8-grayscale": "runs/detect/coco8-grayscale"
}
}トップレベルの fitness は、データセットごとの fitness 値の算術平均です。単一データセットのチューニングの場合、datasets dictには1つのエントリがあり、その fitness はトップレベルの fitness と等しくなります。完了した反復ごとに1つのJSONオブジェクトが記録されます。実際の save_dirs パスは絶対パスですが、可読性を高めるために上記では省略されています。
tune_scatter_plots.png#
このファイルには、tune_results.ndjson から生成された散布図が含まれており、さまざまなハイパーパラメータとパフォーマンス指標の関係を視覚化するのに役立ちます。デフォルト値が0であるハイパーパラメータ(たとえば、以下の degrees と shear)は、乗算による変異係数がゼロに近い値から拡大する余地が非常に少ないため、初期シードからゆっくりとしか進化しない場合があります。
- 形式: PNG
- 用途: 探索的データ分析
weights/#
このディレクトリには、ハイパーパラメータチューニングプロセス中の最後および最良の反復のために保存されたPyTorchモデルが含まれています。
last.pt: last.ptは、トレーニングの最終エポックからの重みです。best.pt: 最良の適応度スコアを達成した反復のbest.ptの重みです。
これらの結果を使用することで、将来のモデルトレーニングや分析において、より情報に基づいた意思決定が可能になります。
結論#
Ultralytics YOLOにおけるハイパーパラメータチューニングは、起動が簡単であると同時に内部では強力であり、遺伝的アルゴリズムにおけるBLX-α交叉と対数正規突然変異を組み合わせています。このガイドで説明されているループに従うことで、より優れたパフォーマンスに向けてモデルを体系的にチューニングし、その結果得られるbest_hyperparameters.yamlを再利用して将来のトレーニング実行を初期化できます。並行試行やより高度な探索アルゴリズムにわたってチューニングをスケールさせるには、Ray Tune integration guideを引き続き参照するか、cloud trainingを介してUltralytics Platform上で設定可能なハイパーパラメータとリアルタイムのメトリクス追跡を備えた管理ジョブを実行してください。
詳細な洞察を得るには、Tuner クラスのソースコードを探索してください。質問や機能リクエストがある場合は、GitHubまたはDiscordでお気軽にお問い合わせください。
よくある質問 (FAQ)#
ハイパーパラメータチューニング中にUltralytics YOLOのlearning rateを最適化するにはどうすればよいですか?#
lr0 パラメータで初期値を設定します(一般的な値は 0.001 から 0.01 の範囲です)。チューニングにそこから変異させて最適値を見つけさせます。model.tune() メソッドを使用してこれを自動化できます。例:
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo26n.pt")
# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)詳細については、Ultralytics YOLO configuration pageを確認してください。
YOLO26でハイパーパラメータチューニングに遺伝的アルゴリズムを使用する利点は何ですか?#
Ultralytics YOLO26における遺伝的アルゴリズムは、ハイパーパラメータ空間を探索するための堅牢な手法を提供し、高度に最適化されたモデルパフォーマンスを実現します。主な利点は以下の通りです:
- 効率的な探索: BLX-α交叉は最も適応度の高い親から遺伝子を組み合わせ、対数正規変異は結果を攪乱することで新しい候補を発見します。
- 局所的最適解の回避: ランダム性を導入することで、局所的最適解を回避し、より優れた大域的最適化を確実にします。
- パフォーマンスメトリクス: タスク固有の適応度スコア(検出の場合は mAP50-95)に基づいて適応します。
遺伝的アルゴリズムがハイパーパラメータをどのように最適化できるかを確認するには、hyperparameter evolution guideをご覧ください。
Ultralytics YOLOのハイパーパラメータチューニングプロセスにはどれくらいの時間がかかりますか?#
Ultralytics YOLOのハイパーパラメータチューニングにかかる時間は、データセットのサイズ、モデルアーキテクチャの複雑さ、イテレーション数、利用可能な計算リソースなど、いくつかの要因に大きく依存します。例えば、COCO8のようなデータセットでYOLO26nを30エポック調整する場合、ハードウェアにもよりますが、数時間から数日かかることがあります。
Preparing for Hyperparameter Tuningで説明されているように、チューニング時間を効果的に管理するために、事前に明確なチューニング予算を定義してください。これは、リソースの割り当てと最適化の目標のバランスを取るのに役立ちます。
YOLOのハイパーパラメータチューニング中にモデルパフォーマンスを評価するには、どのメトリクスを使用すべきですか?#
YOLOのハイパーパラメータチューニング中にモデルパフォーマンスを評価する際は、いくつかの主要なメトリクスを使用できます:
- AP50: IoU閾値0.50における平均適合率(Average Precision)。
- F1スコア: 適合率と再現率の調和平均。
- Precision and Recall: 真陽性と偽陽性および偽陰性を識別する際のモデルのaccuracyを示す個別の指標。
これらの指標は、モデルのパフォーマンスのさまざまな側面を理解するのに役立ちます。包括的な概要については、Ultralytics YOLO performance metricsガイドを参照してください。
YOLO26の高度なハイパーパラメータ最適化にRay Tuneを使用できますか?#
はい、Ultralytics YOLO26は、高度なハイパーパラメータ最適化のためにRay Tuneと統合されています。Ray Tuneは、ベイズ最適化やHyperbandなどの洗練された検索アルゴリズムを提供し、チューニングプロセスを加速するための並列実行機能も備えています。
YOLO26でRay Tuneを使用するには、model.tune()メソッドの呼び出しでuse_ray=Trueパラメータを設定するだけです。詳細と例については、Ray Tune integration guideをご確認ください。