Ultralytics YOLO ハイパーパラメータチューニングガイド
はじめに
ハイパーパラメータのチューニングは、単発の設定作業ではなく、精度、特異度、再現率といった機械学習モデルの性能指標を最適化するための反復的なプロセスです。Ultralytics YOLOの場合、これらのハイパーパラメータには、学習率から、層の数や使用する活性化関数の種類といったアーキテクチャの詳細までが含まれます。Ultralytics 、設定可能なハイパーパラメータとリアルタイムの指標追跡機能を備えたクラウドトレーニングもサポートしています。
見る: より良いモデルパフォーマンスのためにハイパーパラメータを調整する方法 🚀
ハイパーパラメータとは何ですか?
ハイパーパラメータは、アルゴリズムの高度な構造設定です。これらはトレーニングフェーズの前に設定され、トレーニング中は一定のままです。Ultralytics YOLOで一般的に調整されるハイパーパラメータを以下に示します。
- 学習率
lr0: 最小値に向かって移動する際の各反復でのステップサイズを決定します 損失関数. - バッチサイズ
batch: 順伝播で同時に処理される画像の数。 - エポック数
epochs: エポックとは、すべてのトレーニング例に対する完全な順伝播および逆伝播のことです。 - アーキテクチャの詳細: チャネル数、レイヤー数、活性化関数の種類など。

YOLO26で使用されるデータ拡張ハイパーパラメータの全リストについては、設定ページを参照してください。
遺伝的進化と突然変異
Ultralytics YOLOは、ハイパーパラメータを最適化するために遺伝的アルゴリズムを使用します。遺伝的アルゴリズムは、自然選択と遺伝のメカニズムに触発されています。
- 交配:各反復では、適応度加重による親個体の選択を伴うBLX-α交配法を用いて、これまでに確認された適応度が最も高い最大9つの構成から遺伝子を組み合わせる。
- 突然変異:再結合された候補値に対し、各ハイパーパラメータに(パラメータごとに確率0.5で)対数正規分布に従う乗数係数を適用して擾乱を加える。突然変異の強さであるシグマは、最初の300回の反復において0.2から0.1へと線形に減衰するため、アルゴリズムは初期段階で広範囲に探索を行い、収束に向けて徐々に探索範囲を絞り込んでいく。 反復1では交配を行う親が存在しないため、デフォルトの学習ハイパーパラメータを基準値として使用する。
ハイパーパラメータ調整の準備
チューニングプロセスを開始する前に、以下の点が重要です。
- メトリクスの特定: モデルの性能を評価するために使用するメトリクスを決定します。これはAP50、F1スコア、またはその他のメトリクスである可能性があります。
- チューニング予算を設定: 割り当てる計算リソースの量を定義します。ハイパーパラメータのチューニングは、計算負荷が高くなる可能性があります。
関連するステップ
ハイパーパラメータの初期化
まず、妥当な初期ハイパーパラメータのセットから始めます。これは、Ultralytics YOLOによって設定されたデフォルトのハイパーパラメータであるか、ドメイン知識または以前の実験に基づいたものである可能性があります。
ハイパーパラメータの変更
以下を使用します _mutate メソッドを使用して、既存のセットに基づいて新しいハイパーパラメータのセットを生成します。 Tuner クラス このプロセスを自動的に処理します。
モデルのトレーニング
トレーニングは、変更されたハイパーパラメータのセットを使用して実行されます。トレーニングのパフォーマンスは、選択した指標を使用して評価されます。
モデルの評価
AP50、F1スコア、またはカスタムメトリクスなどの指標を使用して、モデルの性能を評価します。評価プロセスは、現在のハイパーパラメータが以前のものよりも優れているかどうかを判断するのに役立ちます。
結果のログ
将来参照できるように、パフォーマンス指標と対応するハイパーパラメータの両方を記録しておくことが重要です。Ultralytics YOLO これらの結果をYOLO 。
リピート
このプロセスは、設定された反復回数に達するか、パフォーマンスメトリクスが満足のいくものになるまで繰り返されます。各反復は、以前の実行から得られた知識に基づいて構築されます。
デフォルトの探索空間の説明
以下の表は、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) の重み。値が高いほど、より正確なバウンディングボックスのlocalizationが強調されます。 |
hsv_h | float | (0.0, 0.1) | HSV色空間におけるランダムな色相拡張範囲。モデルが色の変化に対応できるよう汎化性能を高めます。 |
hsv_s | float | (0.0, 0.9) | HSV空間におけるランダムな彩度拡張範囲。さまざまな照明条件をシミュレートします。 |
hsv_v | float | (0.0, 0.9) | ランダムな明度(輝度)拡張範囲。モデルが異なる露出レベルに対応できるようにします。 |
degrees | float | (0.0, 45.0) | 最大回転拡張角度(度)。モデルがオブジェクトの向きに影響されにくくします。 |
translate | float | (0.0, 0.9) | 画像サイズに対する最大並進拡張の割合。オブジェクトの位置に対するロバスト性を向上させます。 |
scale | float | (0.0, 0.95) | ランダムスケーリング拡張範囲。モデルが異なるサイズのオブジェクトをdetectするのに役立ちます。 |
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つの画像をブレンドするmixup拡張を使用する確率。モデルの堅牢性を向上させることができます |
cutmix | float | (0.0, 1.0) | カットミックス拡張法の適用確率。局所的な特徴を維持しつつ画像領域を結合する |
copy_paste | float | (0.0, 1.0) | コピーペースト拡張を使用する確率。インスタンスセグメンテーションのパフォーマンスを向上させるのに役立ちます |
close_mosaic | float | (0.0, 10.0) | 完了前にトレーニングを安定させるため、最後のNエポックでモザイクを無効にします。 |
カスタム探索空間の例
検索空間を定義し、それを使用する方法を以下に示します。 model.tune() を利用するメソッド Tuner YOLO26nをCOCO8で30エポック、AdamWオプティマイザを使用し、最終エポック以外のプロット、チェックポイント、検証をスキップして高速チューニングを行うためのハイパーパラメータチューニングクラス。
警告
この例はデモンストレーションのみを目的としています。短期間または小規模なチューニング実行から導き出されたハイパーパラメータは、実際のトレーニングには最適ではないことがほとんどです。実際には、信頼性が高く転用可能な結果を保証するために、同等のデータセット、エポック、拡張を含む本格的なトレーニングと同様の設定でチューニングを実行する必要があります。クイックチューニングは、より速い収束や、汎用性のない短期的な検証結果の向上にパラメータを偏らせる可能性があります。
例
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オプションでディレクトリを渡すことができます。 name で使用 runs/{task} 再開するには、以下のようにします。そうでない場合、最後に中断されたセッションが再開されます。また、以前のトレーニング引数をすべて指定する必要があります。 data, epochs, iterations および space.
使用 resume=True with model.tune()
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つのマーカーが表示されるため、単一データセットの実行では1回の反復につき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は、トレーニングの最後のepochからの重みです。best.pt:最高の適合率を達成したイテレーションのbest.ptの重み。
これらの結果を使用して、将来のモデルのトレーニングと分析について、より多くの情報に基づいた意思決定を行うことができます。モデルのパフォーマンスや、さらに改善する方法を理解するために、これらのアーティファクトを参考にしてください。
結論
YOLO ハイパーパラメータのチューニングプロセスは、BLX-αクロスオーバーと対数正規分布に基づく突然変異を組み合わせた遺伝的アルゴリズムに基づくアプローチにより、シンプルでありながら強力なYOLO 。このガイドで説明されている手順に従うことで、モデルを体系的にチューニングし、より高いパフォーマンスを実現することができます。
参考資料
より深い洞察を得るには、以下をご覧ください。 Tuner class ソースコードと関連ドキュメント。ご質問、機能リクエスト、またはさらなるサポートが必要な場合は、お気軽にお問い合わせください。 GitHub または Discord.
よくある質問
ハイパーパラメータ調整中に、Ultralytics YOLO の学習率を最適化するにはどうすればよいですか?
Ultralytics YOLOの学習率を最適化するには、まずを使用して初期学習率を設定します。 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の設定ページをご確認ください。
YOLO26のハイパーパラメータチューニングに遺伝的アルゴリズムを使用する利点は何ですか?
Ultralytics YOLO26における遺伝的アルゴリズムは、ハイパーパラメータ空間を探索するための堅牢な手法を提供し、高度に最適化されたモデル性能を実現します。主な利点は以下の通りです。
- 効率的な探索:BLX-αクロスオーバーは、適応度の高い親個体から遺伝子を組み合わせ、対数正規分布に従う突然変異によってその結果に変化を加えることで、新たな候補を発見する。
- ローカルミニマムの回避: ランダム性を導入することで、ローカルミニマムの回避に役立ち、より良いグローバル最適化を保証します。
- 性能指標:これらは、タスク固有の適合度スコア(検出の場合、mAP50)に基づいて調整されます。
遺伝的アルゴリズムがハイパーパラメータをどのように最適化できるかを確認するには、ハイパーパラメータの進化ガイドをご覧ください。
Ultralytics YOLOのハイパーパラメータ調整プロセスにはどのくらいの時間がかかりますか?
Ultralytics YOLOでのハイパーパラメータチューニングにかかる時間は、データセットのサイズ、モデルアーキテクチャの複雑さ、イテレーション数、利用可能な計算リソースなど、いくつかの要因に大きく依存します。例えば、COCO8のようなデータセットでYOLO26nを30エポックチューニングする場合、ハードウェアによっては数時間から数日かかることがあります。
チューニング時間を効果的に管理するには、事前に明確なチューニング予算を定義します(内部セクションリンク)。これは、リソース配分と最適化目標のバランスを取るのに役立ちます。
YOLO でハイパーパラメータを調整する際、モデルの性能を評価するためにどのような指標を使用すべきですか?
YOLOにおけるハイパーパラメータ調整中にモデルの性能を評価する際には、いくつかの重要な指標を利用できます。
- AP50: IoUの閾値0.50における平均適合率。
- F1スコア: 適合率と再現率の調和平均。
- 適合率と再現率: 真陽性、偽陽性、偽陰性を識別するモデルの精度を示す個々の指標。
これらの指標は、モデルのパフォーマンスのさまざまな側面を理解するのに役立ちます。包括的な概要については、Ultralytics YOLO パフォーマンス指標ガイドを参照してください。
YOLO26でRay Tuneを使用して高度なハイパーパラメータ最適化を行うことはできますか?
はい、Ultralytics YOLO26はRay Tuneと統合されており、高度なハイパーパラメータ最適化が可能です。Ray Tuneは、ベイズ最適化やハイパーバンドのような洗練された探索アルゴリズムを提供し、チューニングプロセスを高速化するための並列実行機能も備えています。
YOLO26でRay Tuneを使用するには、単に use_ray=True あなたの環境におけるパラメータ model.tune() メソッド呼び出し。詳細と例については、以下を参照してください。 Ray Tune 統合ガイド.