レイチューンとハイパーパラメータの効率的なチューニングYOLOv8
ハイパーパラメータのチューニングは、最適なハイパーパラメータのセットを発見することによって、モデルの性能を最高にするために不可欠である。これには、異なるハイパーパラメータで試行を実行し、各試行のパフォーマンスを評価することが含まれます。
Ultralytics YOLOv8 とRay Tuneでチューニングを加速させる
Ultralytics YOLOv8Ray Tune は、ハイパーパラメータのチューニングのために Ray Tune を組み込んでおり、YOLOv8 モデルのハイパーパラメータの最適化を効率化します。Ray Tuneを使用すると、高度な検索ストラテジー、並列処理、早期停止を利用して、チューニングプロセスを迅速化することができます。
レイ・チューン
Ray Tuneは、効率性と柔軟性のために設計されたハイパーパラメータチューニングライブラリです。様々な探索戦略、並列性、早期停止戦略をサポートし、Ultralytics YOLOv8 を含む一般的な機械学習フレームワークとシームレスに統合します。
との統合Weights & Biases
YOLOv8 また、オプションで Weights & Biasesとの統合も可能です。
インストール
必要なパッケージをインストールするには
インストール
使用方法
使用方法
tune()
メソッド・パラメーター
について tune()
YOLOv8 メソッドは、Ray Tune によるハイパーパラメータのチューニングのための使いやすいインターフェイスを提供します。チューニングプロセスをカスタマイズできるいくつかの引数を受け取ります。以下は各パラメータの詳細な説明です:
パラメータ | タイプ | 説明 | デフォルト値 |
---|---|---|---|
data |
str |
チューナーを実行するデータセット設定ファイル(YAML形式)。このファイルには、学習データと検証データのパス、およびその他のデータセット固有の設定を指定します。 | |
space |
dict, optional |
Ray Tune のハイパーパラメータ探索空間を定義する辞書。各キーはハイパーパラメータ名に対応し、値はチューニング中に探索する値の範囲を指定します。提供されない場合、YOLOv8 は、さまざまなハイパーパラメータを持つデフォルトの検索空間を使用します。 | |
grace_period |
int, optional |
Ray Tune におけるASHA スケジューラの猶予時間(エポック)。スケジューラはこのエポック数より前にトライアルを終了することはなく、モデルが早期停止を決定する前に最低限の学習を行うことができます。 | 10 |
gpu_per_trial |
int, optional |
チューニング中にトライアルごとに割り当てるGPUの数。これは、特にマルチ GPU 環境での GPU 使用を管理するのに役立ちます。指定しない場合、チューナーは利用可能なすべてのGPUを使用します。 | なし |
iterations |
int, optional |
チューニング中に実行する試行の最大数。このパラメータは、テストされるハイパーパラメータの組み合わせの総数を制御するのに役立ち、チューニングプロセスが無限に実行されないようにします。 | 10 |
**train_args |
dict, optional |
に渡す追加引数。 train() メソッドに渡すことができる。これらの引数には、学習エポック数、バッチサイズ、その他の学習固有の設定などが含まれる。 |
{} |
これらのパラメータをカスタマイズすることで、特定のニーズと利用可能な計算リソースに合わせて、ハイパーパラメータ最適化プロセスを微調整することができます。
デフォルトの検索スペース
次の表は、YOLOv8 with Ray Tune でハイパーパラメータをチューニングするためのデフォルトのサーチスペースパラメータの一覧です。各パラメータは tune.uniform()
.
パラメータ | 値の範囲 | 説明 |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
初期学習率 |
lrf |
tune.uniform(0.01, 1.0) |
最終学習率係数 |
momentum |
tune.uniform(0.6, 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(0.02, 0.2) |
ボックスロス重量 |
cls |
tune.uniform(0.2, 4.0) |
減量クラス |
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.9) |
補強範囲の拡大 |
shear |
tune.uniform(0.0, 10.0) |
剪断増大範囲(度) |
perspective |
tune.uniform(0.0, 0.001) |
パースペクティブ拡張範囲 |
flipud |
tune.uniform(0.0, 1.0) |
垂直フリップ増加確率 |
fliplr |
tune.uniform(0.0, 1.0) |
水平フリップ増加確率 |
mosaic |
tune.uniform(0.0, 1.0) |
モザイク補強確率 |
mixup |
tune.uniform(0.0, 1.0) |
混合補強確率 |
copy_paste |
tune.uniform(0.0, 1.0) |
コピペ補強確率 |
カスタム検索スペースの例
この例では、Ray Tune とYOLOv8 を使って、ハイパーパラメータのチューニングにカスタム探索空間を使用する方法を示します。カスタム検索空間を提供することで、関心のある特定のハイパーパラメータにチューニングプロセスを集中させることができます。
使用方法
上のコード・スニペットでは、"yolov8n.pt "という事前学習された重みでYOLO 。そして tune()
メソッドで、データセットの設定を "coco8.yaml "で指定する。初期学習率のためのカスタム探索空間を提供する。 lr0
キー "lr0 "と値 "lr0 "を持つ辞書を使う。 tune.uniform(1e-5, 1e-1)
.最後に、エポック数のような追加のトレーニング引数を、次のようにチューニングメソッドに直接渡します。 epochs=50
.
レイ・チューンの結果を処理する
Ray Tune でハイパーパラメータのチューニング実験を行った後、得られた結果について様々な分析を行いたい場合があります。このガイドでは、これらの結果を処理・分析するための一般的なワークフローを紹介します。
ディレクトリからのチューニング実験結果の読み込み
を使ったチューニング実験を行った後、次のように述べた。 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()
基本的な実験レベルの分析
トライアルの結果の概要を把握できます。トライアル中にエラーがなかったかどうか、すぐに確認することができます。
基本的なトライアルレベルの分析
個々のトライアルのハイパーパラメータ構成と、最後に報告されたメトリクスにアクセスします。
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
臨床試験で報告されたメトリクスの全履歴をプロットする
各試験で報告されたメトリクスの履歴をプロットして、メトリクスの経時変化を見ることができます。
import matplotlib.pyplot as plt
for result in 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()
概要
このドキュメントでは、Ultralytics を使用して Ray Tune で実行された実験結果を解析するための一般的なワークフローについて説明します。主なステップには、ディレクトリからの実験結果のロード、基本的な実験レベルおよびトライアルレベルの解析の実行、メトリクスのプロットなどがあります。
ハイパーパラメーターのチューニング実験を最大限に活用するために、Ray Tuneの「Analyze Results(結果の分析)」ドキュメントページをさらに詳しくご覧ください。