コンテンツへスキップ

Ultralytics YOLO ハイパーパラメータ調整ガイド

はじめに

ハイパーパラメータのチューニングは、単に1回限りの設定ではなく、精度、精度、想起などの機械学習モデルの性能指標を最適化することを目的とした反復プロセスである。Ultralytics YOLO の文脈では、これらのハイパーパラメータは、学習率から、層の数や使用する活性化関数の種類などのアーキテクチャの詳細まで、多岐にわたる。

ハイパーパラメータとは何か?

ハイパーパラメータは、アルゴリズムのハイレベルで構造的な設定である。これらは学習フェーズの前に設定され、学習フェーズ中は一定である。以下は、Ultralytics YOLO でよく調整されるハイパーパラメータです:

  • 学習率 lr0:損失関数の最小値に向かって移動しながら、各反復のステップサイズを決定します。
  • バッチサイズ batch:フォワードパスで同時に処理される画像の数。
  • エポック数 epochs:エポックとは、すべての学習例を完全に前進・後退させることである。
  • アーキテクチャの仕様:チャンネル数、層数、活性化関数の種類など。

ハイパーパラメーターのチューニング

YOLOv8 で使用されるオーグメンテーション・ハイパーパラメータの完全なリストについては、コンフィギュレーション・ページを参照のこと。

遺伝的進化と突然変異

Ultralytics YOLO は遺伝的アルゴリズムを使ってハイパーパラメータを最適化する。遺伝的アルゴリズムは、自然淘汰と遺伝学のメカニズムに着想を得ている。

  • 突然変異:Ultralytics YOLO の文脈では、突然変異は、既存のハイパーパラメータに小さなランダムな変更を加え、評価のための新しい候補を生成することによって、ハイパーパラメータ空間を局所的に探索するのに役立つ。
  • クロスオーバー:クロスオーバーは一般的な遺伝的アルゴリズム技法であるが、Ultralytics YOLO では現在、ハイパーパラメータのチューニングには使用されていない。主に、新しいハイパーパラメータセットを生成するための突然変異に焦点が当てられている。

ハイパーパラメータのチューニングの準備

チューニング・プロセスを始める前に、重要なことがある:

  1. 測定基準を特定する:モデルのパフォーマンスを評価するために使用する指標を決定します。これは、AP50、F1スコア、または他のものである可能性があります。
  2. チューニング予算の設定:どれだけの計算リソースを割り当てるかを定義する。ハイパーパラメータのチューニングは計算量が多くなることがあります。

ステップ

ハイパーパラメータの初期化

初期ハイパーパラメータの妥当なセットから始める。これは、Ultralytics YOLO によって設定されたデフォルトのハイパーパラメータでもよいし、ドメイン知識や過去の実験に基づいたものでもよい。

ハイパーパラメータの変更

を使用する。 _mutate メソッドを使って、既存のハイパーパラメータの集合に基づいて新しいハイパーパラメータの集合を生成する。

鉄道模型

変異させたハイパーパラメータのセットを用いて学習を行う。その後、トレーニングのパフォーマンスが評価される。

モデルの評価

モデルのパフォーマンスを評価するために、AP50、F1スコア、またはカスタムメトリクスのようなメトリクスを使用します。

ログ結果

将来の参考のために、パフォーマンス・メトリクスと対応するハイパーパラメータの両方を記録しておくことは非常に重要である。

リピート

このプロセスは、設定された反復回数に達するか、パフォーマンス指標が満足のいくものになるまで繰り返される。

使用例

の使い方は以下の通り。 model.tune() メソッドを利用する。 Tuner YOLOv8n クラスは、COCO8上で、AdamWオプティマイザを用いて30エポックのハイパーパラメータチューニングを行い、チューニングの高速化のために最終エポック以外のプロット、チェックポイント、検証をスキップする。

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO('yolov8n.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)

結果

ハイパーパラメータのチューニング・プロセスが正常に完了すると、チューニングの結果をカプセル化したいくつかのファイルとディレクトリが得られます。以下、それぞれについて説明します:

ファイル構成

結果のディレクトリ構造はこうなる。トレーニング・ディレクトリ 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
    

ベストフィットネス.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
  • 使い方探索的データ分析

ハイパーパラメータ・チューニング散布図

ウェイト

このディレクトリには、ハイパーパラメータ・チューニング・プロセスの最後の反復と最良の反復のために保存されたPyTorch モデルが含まれます。

  • last.pt:last.ptはトレーニングの最後のエポックからの重みである。
  • best.pt:最高のフィットネススコアを達成した反復のbest.pt重み。

これらの結果を使用することで、今後のモデルのトレーニングや分析において、より多くの情報に基づいた決定を下すことができます。これらの成果物を自由に参照し、あなたのモデルがどの程度うまくいったか、またどのようにすればさらに改善できるかを理解してください。

結論

Ultralytics YOLO のハイパーパラメータ・チューニング・プロセスは、突然変異に焦点を当てた遺伝的アルゴリズム・ベースのアプローチのおかげで、簡素化されていながら強力である。このガイドに概説されているステップに従うことで、より良いパフォーマンスを達成するためにモデルを体系的にチューニングすることができます。

さらに読む

  1. ウィキペディアでのハイパーパラメータ最適化
  2. YOLOv5 ハイパーパラメータ進化ガイド
  3. レイチューンとハイパーパラメータの効率的なチューニングYOLOv8

より深い洞察については Tuner クラスのソースコードと付属のドキュメントを提供しています。ご質問、機能リクエスト、その他サポートが必要な場合は、お気軽に下記までご連絡ください。 ギットハブ または ディスコード.



作成日:2023-11-12 更新日:2024-03-03
作成者:glenn-jocher(7)

コメント