コンテンツぞスキップ

レむチュヌンずハむパヌパラメヌタの効率的なチュヌニング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結果の分析」ドキュメントペヌゞをさらに詳しくご芧ください。

よくあるご質問

Ray Tuneを䜿甚しお、YOLOv8 モデルのハむパヌパラメヌタを調敎するには

Ray Tune を䜿甚しおUltralytics YOLOv8 モデルのハむパヌパラメヌタを調敎するには、以䞋のステップに埓う

  1. 必芁なパッケヌゞをむンストヌルする

    pip install -U ultralytics "ray[tune]"
    pip install wandb  # optional for logging
    
  2. YOLOv8 、チュヌニングを開始したす

    from ultralytics import YOLO
    
    # Load a YOLOv8 model
    model = YOLO("yolov8n.pt")
    
    # Start tuning with the COCO8 dataset
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

これは、Ray Tuneの高床な怜玢ストラテゞヌず䞊列性を利甚し、モデルのハむパヌパラメヌタを効率的に最適化したす。詳しくはRay Tuneのドキュメントをご芧ください。

Ray TuneでYOLOv8 、デフォルトのハむパヌパラメヌタは䜕ですか

Ultralytics YOLOv8 は、Ray Tune でのチュヌニングに以䞋のデフォルトのハむパヌパラメヌタを䜿甚したす

パラメヌタ 倀の範囲 説明
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) りォヌムアップ・゚ポック
box tune.uniform(0.02, 0.2) ボックスロス重量
cls tune.uniform(0.2, 4.0) 枛量クラス
hsv_h tune.uniform(0.0, 0.1) 色盞増匷範囲
translate tune.uniform(0.0, 0.9) 翻蚳増匷範囲

これらのハむパヌパラメヌタは、特定のニヌズに合わせおカスタマむズするこずができる。完党なリストず詳现に぀いおは、ハむパヌパラメヌタのチュヌニング・ガむドを参照しおください。

YOLOv8 モデルのチュヌニングにWeights & Biases を統合するには

Weights & Biases (W&B) をUltralytics YOLOv8 チュヌニング・プロセスに統合する

  1. W&Bを蚭眮する

    pip install wandb
    
  2. チュヌニングスクリプトを修正する

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # Load YOLO model
    model = YOLO("yolov8n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

このセットアップにより、チュヌニング・プロセスをモニタヌし、ハむパヌパラメヌタの蚭定を远跡し、結果をW&Bで芖芚化するこずができる。

YOLOv8 、ハむパヌパラメヌタの最適化にRay Tuneを䜿うべき理由は

レむ・チュヌンは、ハむパヌパラメヌタの最適化においお倚くの利点を提䟛する

  • 高床な怜玢戊略ベむズ最適化やHyperOptなどのアルゎリズムを掻甚し、効率的なパラメヌタ怜玢を実珟。
  • 䞊列性耇数のトラむアルの䞊列実行をサポヌトし、チュヌニングプロセスを倧幅にスピヌドアップ。
  • 早期停止ASHAのような戊略を採甚し、パフォヌマンスの䜎い詊隓を早期に終了させ、蚈算資源を節玄する。

Ray Tune はUltralytics YOLOv8 ずシヌムレスに統合され、ハむパヌパラメヌタを効果的にチュヌニングするための䜿いやすいむンタヌフェむスを提䟛したす。たずは、RayTune ずYOLOv8を䜿った効率的なハむパヌパラメヌタのチュヌニングガむドをご芧ください。

YOLOv8 ハむパヌパラメヌタ・チュヌニングのためのカスタム探玢空間を定矩するには

Ray Tune を䜿っおYOLOv8 ハむパヌパラメヌタ・チュヌニング甚のカスタム探玢空間を定矩する

from ray import tune

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

これは、チュヌニング・プロセス䞭に探玢する初期孊習率や運動量のようなハむパヌパラメヌタの範囲をカスタマむズする。高床な蚭定に぀いおは、カスタム探玢空間の䟋のセクションを参照しおください。



䜜成日2023-11-12 曎新日2024-07-05
䜜成者glenn-jocher(10)

コメント