コンテンツへスキップ

レイチューンとハイパーパラメータの効率的なチューニングYOLOv8

ハイパーパラメータのチューニングは、最適なハイパーパラメータのセットを発見することによって、モデルの性能を最高にするために不可欠である。これには、異なるハイパーパラメータで試行を実行し、各試行のパフォーマンスを評価することが含まれます。

Ultralytics YOLOv8 とRay Tuneでチューニングを加速させる

Ultralytics YOLOv8Ray Tune は、ハイパーパラメータのチューニングのために Ray Tune を組み込んでおり、YOLOv8 モデルのハイパーパラメータの最適化を効率化します。Ray Tuneを使用すると、高度な検索ストラテジー、並列処理、早期停止を利用して、チューニングプロセスを迅速化することができます。

レイ・チューン

レイ・チューンの概要

Ray Tuneは、効率性と柔軟性のために設計されたハイパーパラメータチューニングライブラリです。様々な探索戦略、並列性、早期停止戦略をサポートし、Ultralytics YOLOv8 を含む一般的な機械学習フレームワークとシームレスに統合します。

との統合Weights & Biases

YOLOv8 また、オプションで Weights & Biasesとの統合も可能です。

インストール

必要なパッケージをインストールするには

インストール

# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"

# Optionally install W&B for logging
pip install wandb

使用方法

使用方法

from ultralytics import YOLO

# Load a YOLOv8n model
model = YOLO('yolov8n.pt')

# Start tuning hyperparameters for YOLOv8n training on the COCO8 dataset
result_grid = model.tune(data='coco8.yaml', use_ray=True)

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 を使って、ハイパーパラメータのチューニングにカスタム探索空間を使用する方法を示します。カスタム検索空間を提供することで、関心のある特定のハイパーパラメータにチューニングプロセスを集中させることができます。

使用方法

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.pt")

# Run Ray Tune on the model
result_grid = model.tune(data="coco8.yaml",
                         space={"lr0": tune.uniform(1e-5, 1e-1)},
                         epochs=50,
                         use_ray=True)

上のコード・スニペットでは、"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()

基本的な実験レベルの分析

トライアルの結果の概要を把握できます。トライアル中にエラーがなかったかどうか、すぐに確認することができます。

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

基本的なトライアルレベルの分析

個々のトライアルのハイパーパラメータ構成と、最後に報告されたメトリクスにアクセスします。

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(結果の分析)」ドキュメントページをさらに詳しくご覧ください。



作成日:2023-11-12 更新日:2024-05-06
作成者:glenn-jocher(5)

コメント