Ultralytics YOLO ハイパーパラメータチューニングガイド
はじめに
ハイパーパラメータ調整は、一度限りの設定ではなく、精度、適合率、再現率などの機械学習モデルのパフォーマンス指標を最適化することを目的とした反復的なプロセスです。Ultralytics YOLOのコンテキストでは、これらのハイパーパラメータは、学習率から、レイヤー数や使用される活性化関数の種類などのアーキテクチャの詳細にまで及ぶ可能性があります。
見る: より良いモデルパフォーマンスのためにハイパーパラメータを調整する方法 🚀
ハイパーパラメータとは何ですか?
ハイパーパラメータは、アルゴリズムの高度な構造設定です。これらはトレーニングフェーズの前に設定され、トレーニング中は一定のままです。Ultralytics YOLOで一般的に調整されるハイパーパラメータを以下に示します。
- 学習率
lr0
: 最小値に向かって移動する際の各反復でのステップサイズを決定します 損失関数. - バッチサイズ
batch
: 順伝播で同時に処理される画像の数。 - エポック数
epochs
: エポックとは、すべてのトレーニング例に対する完全な順伝播および逆伝播のことです。 - アーキテクチャの詳細: チャネル数、レイヤー数、活性化関数の種類など。
YOLO11で使用される拡張ハイパーパラメータの完全なリストについては、構成ページを参照してください。
遺伝的進化と突然変異
Ultralytics YOLOは、ハイパーパラメータを最適化するために遺伝的アルゴリズムを使用します。遺伝的アルゴリズムは、自然選択と遺伝のメカニズムに触発されています。
- Mutation(突然変異): Ultralytics YOLOのコンテキストでは、mutationは、既存のハイパーパラメータに小さなランダムな変更を適用して評価用の新しい候補を生成することにより、ハイパーパラメータ空間をローカルで検索するのに役立ちます。
- クロスオーバー: クロスオーバーは一般的な遺伝的アルゴリズムの手法ですが、Ultralytics YOLOのハイパーパラメータ調整には現在使用されていません。主な焦点は、新しいハイパーパラメータセットを生成するための突然変異に当てられています。
ハイパーパラメータ調整の準備
チューニングプロセスを開始する前に、以下の点が重要です。
- メトリクスを特定する: モデルのパフォーマンスを評価するために使用するメトリクスを決定します。AP50、F1スコアなどがあります。
- チューニング予算を設定: 割り当てる計算リソースの量を定義します。ハイパーパラメータのチューニングは、計算負荷が高くなる可能性があります。
関連するステップ
ハイパーパラメータの初期化
まず、妥当な初期ハイパーパラメータのセットから始めます。これは、Ultralytics YOLOによって設定されたデフォルトのハイパーパラメータであるか、ドメイン知識または以前の実験に基づいたものである可能性があります。
ハイパーパラメータの変更
以下を使用します _mutate
メソッドを使用して、既存のセットに基づいて新しいハイパーパラメータのセットを生成します。 Tuner クラス このプロセスを自動的に処理します。
モデルのトレーニング
トレーニングは、変更されたハイパーパラメータのセットを使用して実行されます。トレーニングのパフォーマンスは、選択した指標を使用して評価されます。
モデルの評価
AP50、F1スコア、またはカスタムメトリクスなどのメトリクスを使用して、モデルのパフォーマンスを評価します。評価プロセスは、現在のハイパーパラメータが以前のものよりも優れているかどうかを判断するのに役立ちます。
結果のログ
パフォーマンス指標と対応するハイパーパラメータの両方を、将来の参照のために記録することが重要です。Ultralytics YOLOは、これらの結果をCSV形式で自動的に保存します。
リピート
このプロセスは、設定された反復回数に達するか、パフォーマンスメトリクスが満足のいくものになるまで繰り返されます。各反復は、以前の実行から得られた知識に基づいて構築されます。
デフォルトの探索空間の説明
次の表に、YOLO11のハイパーパラメータチューニングのデフォルトの探索空間パラメータを示します。各パラメータには、タプルで定義された特定の値の範囲があります。 (min, max)
.
パラメータ | 種類 | 値の範囲 | 説明 |
---|---|---|---|
lr0 |
float |
(1e-5, 1e-1) |
学習開始時の初期学習率。低い値ほど学習は安定しますが、収束は遅くなります。 |
lrf |
float |
(0.01, 1.0) |
最終学習率の係数は、lr0の割合として表されます。トレーニング中に学習率がどの程度低下するかを制御します。 |
momentum |
float |
(0.6, 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 |
(0.02, 0.2) |
損失関数全体におけるバウンディングボックスの損失の重み。ボックス回帰と分類のバランスを取ります。 |
cls |
float |
(0.2, 4.0) |
総損失関数における分類損失の重み。値が大きいほど、正しいクラス予測が重視されます。 |
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.9) |
ランダムなスケーリング拡張範囲。モデルが異なるサイズのオブジェクトを検出できるようにします。 |
shear |
float |
(0.0, 10.0) |
最大シア拡張角度(度)。トレーニング画像に遠近感のような歪みを加えます。 |
perspective |
float |
(0.0, 0.001) |
ランダムな遠近感拡張範囲。さまざまな視角をシミュレートします。 |
flipud |
float |
(0.0, 1.0) |
トレーニング中に画像を垂直方向に反転させる確率。オーバーヘッド/航空写真に役立ちます。 |
fliplr |
float |
(0.0, 1.0) |
水平方向の画像反転の確率。モデルがオブジェクトの方向に対して不変になるのに役立ちます |
mosaic |
float |
(0.0, 1.0) |
モザイクオーギュメンテーションを使用する確率。これは4つの画像を組み合わせるもので、特に小さなオブジェクトの検出に役立ちます。 |
mixup |
float |
(0.0, 1.0) |
2つの画像をブレンドするmixup拡張を使用する確率。モデルの堅牢性を向上させることができます |
copy_paste |
float |
(0.0, 1.0) |
コピーペースト拡張を使用する確率。インスタンスセグメンテーションのパフォーマンスを向上させるのに役立ちます |
カスタム探索空間の例
検索空間を定義し、それを使用する方法を以下に示します。 model.tune()
を利用するメソッド Tuner
AdamWオプティマイザを使用し、30エポックのCOCO8でYOLO11nのハイパーパラメータ調整を行うためのクラス。高速なチューニングのために、プロット、チェックポイント、および最終エポック以外の検証をスキップします。
例
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo11n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-1),
"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("yolo11n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-1),
"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
├── best_fitness.png
├── tune_results.csv
├── 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
best_fitness.png
これは、フィットネス(通常はAP50のようなパフォーマンスメトリック)を反復回数に対してプロットしたものです。これにより、遺伝的アルゴリズムが時間の経過とともにどれだけうまく機能したかを視覚化できます。
- 形式: PNG
- 使用法: パフォーマンスの可視化
tune_results.csv
チューニング中の各イテレーションの詳細な結果を含むCSVファイル。ファイルの各行は1つのイテレーションを表し、適合度スコア、適合率、再現率、および使用されたハイパーパラメータなどのメトリクスが含まれています。
- 形式: CSV
- 使用法: 反復ごとの結果の追跡。
- 例:
fitness,lr0,lrf,momentum,weight_decay,warmup_epochs,warmup_momentum,box,cls,dfl,hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear,perspective,flipud,fliplr,mosaic,mixup,copy_paste 0.05021,0.01,0.01,0.937,0.0005,3.0,0.8,7.5,0.5,1.5,0.015,0.7,0.4,0.0,0.1,0.5,0.0,0.0,0.0,0.5,1.0,0.0,0.0 0.07217,0.01003,0.00967,0.93897,0.00049,2.79757,0.81075,7.5,0.50746,1.44826,0.01503,0.72948,0.40658,0.0,0.0987,0.4922,0.0,0.0,0.0,0.49729,1.0,0.0,0.0 0.06584,0.01003,0.00855,0.91009,0.00073,3.42176,0.95,8.64301,0.54594,1.72261,0.01503,0.59179,0.40658,0.0,0.0987,0.46955,0.0,0.0,0.0,0.49729,0.80187,0.0,0.0
tune_scatter_plots.png
このファイルには、から生成された散布図が含まれています tune_results.csv
は、異なるハイパーパラメータとパフォーマンス指標の間の関係を視覚化するのに役立ちます。0に初期化されたハイパーパラメータ(など)は調整されないことに注意してください。 degrees
および shear
下記。
- 形式: PNG
- 使用法: 探索的データ分析
weights/
このディレクトリには、ハイパーパラメータチューニングプロセス中の最後および最高のイテレーションのために保存されたPyTorchモデルが含まれています。
last.pt
:last.ptは、トレーニングの最後のepochからの重みです。best.pt
:最高の適合率を達成したイテレーションのbest.ptの重み。
これらの結果を使用して、将来のモデルのトレーニングと分析について、より多くの情報に基づいた意思決定を行うことができます。モデルのパフォーマンスや、さらに改善する方法を理解するために、これらのアーティファクトを参考にしてください。
結論
Ultralytics 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("yolo11n.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の設定ページをご確認ください。
YOLO11 でのハイパーパラメータ調整に遺伝的アルゴリズムを使用する利点は何ですか?
Ultralytics YOLO11における遺伝的アルゴリズムは、ハイパーパラメータ空間を探索するための堅牢な手法を提供し、高度に最適化されたモデルパフォーマンスにつながります。主な利点は次のとおりです。
- 効率的な検索: 突然変異などの遺伝的アルゴリズムは、大規模なハイパーパラメータのセットを迅速に探索できます。
- ローカルミニマムの回避: ランダム性を導入することで、ローカルミニマムの回避に役立ち、より良いグローバル最適化を保証します。
- パフォーマンス指標: AP50やF1スコアなどのパフォーマンス指標に基づいて調整されます。
遺伝的アルゴリズムがハイパーパラメータをどのように最適化できるかを確認するには、ハイパーパラメータの進化ガイドをご覧ください。
Ultralytics YOLOのハイパーパラメータ調整プロセスにはどのくらいの時間がかかりますか?
Ultralytics YOLOを使用したハイパーパラメータ調整に必要な時間は、データセットのサイズ、モデルアーキテクチャの複雑さ、反復回数、利用可能な計算リソースなど、いくつかの要因に大きく左右されます。たとえば、COCO8のようなデータセットでYOLO11nを30エポック調整するには、ハードウェアによっては数時間から数日かかる場合があります。
チューニング時間を効果的に管理するには、事前に明確なチューニング予算を定義します(内部セクションリンク)。これは、リソース配分と最適化目標のバランスを取るのに役立ちます。
YOLO でハイパーパラメータを調整する際、モデルの性能を評価するためにどのような指標を使用すべきですか?
YOLOにおけるハイパーパラメータ調整中にモデルの性能を評価する際には、いくつかの重要な指標を利用できます。
- AP50: IoU閾値0.50における平均適合率。
- F1スコア: 適合率と再現率の調和平均。
- 適合率と再現率: 真陽性、偽陽性、偽陰性を識別するモデルの精度を示す個々の指標。
これらの指標は、モデルのパフォーマンスのさまざまな側面を理解するのに役立ちます。包括的な概要については、Ultralytics YOLO パフォーマンス指標ガイドを参照してください。
YOLO11で高度なハイパーパラメータ最適化のためにRay Tuneを使用できますか?
はい、Ultralytics YOLO11は、高度なハイパーパラメータ最適化のためにRay Tuneと統合されています。Ray Tuneは、ベイズ最適化やHyperbandなどの高度な検索アルゴリズムと、チューニングプロセスを高速化するための並列実行機能を提供します。
YOLO11でRay Tuneを使用するには、単に以下を設定します。 use_ray=True
あなたの環境におけるパラメータ model.tune()
メソッド呼び出し。詳細と例については、以下を参照してください。 Ray Tune 統合ガイド.