コンテンツへスキップ

モデル・トレーニングUltralytics YOLO

Ultralytics YOLO エコシステムと統合

はじめに

ディープ・ラーニング・モデルのトレーニングには、データを与え、正確な予測を行えるようにパラメータを調整することが含まれる。Ultralytics YOLOv8 の Train モードは、最新のハードウェア機能をフルに活用し、物体検出モデルの効果的かつ効率的なトレーニングのために設計されています。このガイドでは、YOLOv8'の堅牢な機能セットを使用して独自のモデルのトレーニングを開始するために必要なすべての詳細をカバーすることを目的としています。



見るんだ: Google ColabのカスタムデータセットでYOLOv8 モデルをトレーニングする方法。

トレーニングにUltralytics YOLO を選ぶ理由

YOLOv8 「トレイン」モードを選ぶ説得力のある理由がここにある:

  • 効率:シングルGPUのセットアップでも、複数のGPUにまたがるスケーリングでも、ハードウェアを最大限に活用できます。
  • 汎用性:COCO、VOC、ImageNetのような入手しやすいデータセットだけでなく、カスタムデータセットでも学習できます。
  • ユーザーフレンドリー:シンプルかつパワフルなCLI およびPython インターフェースにより、わかりやすいトレーニング体験を提供します。
  • ハイパーパラメータの柔軟性:モデルの性能を微調整するためのカスタマイズ可能な幅広いハイパーパラメータ。

トレイン・モードの主な特徴

以下は、YOLOv8 「トレイン」モードの特筆すべき特徴である:

  • データセットの自動ダウンロード:COCO、VOC、ImageNetなどの標準データセットは、初回使用時に自動的にダウンロードされます。
  • マルチGPUサポート:複数のGPUでシームレスにトレーニング作業を拡張し、プロセスを迅速化します。
  • ハイパーパラメータの設定:YAML 設定ファイルまたはCLI 引数を通してハイパーパラメータを変更するオプション。
  • 可視化とモニタリング:トレーニングメトリクスをリアルタイムで追跡し、学習プロセスを可視化することで、より良い洞察を得ることができます。

チップ

  • YOLOv8 COCO、VOC、ImageNet、その他多くのデータセットは、初回使用時に自動的にダウンロードされる。 yolo train data=coco.yaml

使用例

COCO8データセットを用いて、画像サイズ640で100エポック、YOLOv8n 。学習装置は device 引数を渡す。引数が渡されない場合 device=0 が使用されます。 device='cpu' が使用される。トレーニング引数の全リストは下記の「引数」セクションを参照。

シングルGPUとCPUのトレーニング例

デバイスは自動的に決定される。GPUが利用可能であればそれが使用され、そうでなければCPUでトレーニングが開始される。

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.yaml")  # build a new model from YAML
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolov8n.yaml").load("yolov8n.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco8.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

マルチGPUトレーニング

マルチGPUトレーニングでは、トレーニング負荷を複数のGPUに分散させることで、利用可能なハードウェアリソースをより効率的に活用することができます。この機能はPython APIとコマンドラインインターフェースの両方から利用できます。マルチGPUトレーニングを有効にするには、使用したいGPUデバイスIDを指定します。

マルチGPUトレーニングの例

2つのGPU、CUDAデバイス0と1でトレーニングするには、以下のコマンドを使用します。必要に応じてGPUを追加してください。

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

Apple M1およびM2 MPSトレーニング

Ultralytics YOLO モデルに統合されたApple M1およびM2チップのサポートにより、強力なMetal Performance Shaders(MPS)フレームワークを利用するデバイス上でモデルをトレーニングすることが可能になりました。MPSは、Appleのカスタムシリコン上で計算と画像処理タスクを実行する高性能な方法を提供します。

Apple M1およびM2チップのトレーニングを有効にするには、トレーニングプロセスを開始する際に、デバイスとして'mps'を指定する必要があります。以下は、Python 、コマンドラインから行う方法の例です:

MPSトレーニングの例

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=mps

M1/M2チップの計算能力を活用しながら、トレーニングタスクをより効率的に処理することができます。より詳細なガイダンスと高度な設定オプションについては、PyTorch MPSのドキュメントを参照してください。

中断されたトレーニングの再開

以前に保存した状態から学習を再開することは、ディープラーニング・モデルを扱う上で非常に重要な機能です。これは、学習プロセスが予期せず中断された場合や、新しいデータまたはより多くのエポックでモデルの学習を続行したい場合など、さまざまなシナリオで便利です。

トレーニングが再開されると、Ultralytics YOLO 、最後に保存されたモデルの重みがロードされ、オプティマイザの状態、学習率スケジューラ、エポック数も復元されます。これにより、学習プロセスを中断したところからシームレスに継続することができます。

を設定することで、簡単にUltralytics YOLO でトレーニングを再開することができます。 resume 引数 True を呼び出すときに train メソッドへのパスを指定する。 .pt ファイルには、部分的に学習されたモデルの重みが含まれている。

以下は、Python 、コマンドラインを使って中断したトレーニングを再開する方法の例です:

履歴書トレーニングの例

from ultralytics import YOLO

# Load a model
model = YOLO("path/to/last.pt")  # load a partially trained model

# Resume training
results = model.train(resume=True)
# Resume an interrupted training
yolo train resume model=path/to/last.pt

セッティング resume=Trueその train 関数は、'path/to/last.pt'ファイルに保存されている状態を使用して、トレーニングを中断したところから続けます。もし resume 引数が省略されるか、または Falseその train 関数は新しいトレーニングセッションを開始する。

チェックポイントは、デフォルトでは毎エポック終了時に保存される。 save_period そのため、トレーニング走行を再開するには、少なくとも1エポックを完了する必要がある。

列車設定

YOLO モデルの学習設定は、学習プロセスで使用される様々なハイパーパラメータと設定を包含する。これらの設定はモデルのパフォーマンス、スピード、精度に影響を与える。主な学習設定には、バッチサイズ、学習率、モメンタム、ウェイト減衰が含まれる。さらに、オプティマイザ、損失関数、学習データセットの構成などの選択も学習プロセスに影響を与えます。パフォーマンスを最適化するためには、これらの設定を慎重にチューニングし、実験することが重要です。

議論 デフォルト 説明
model None トレーニング用のモデルファイルを指定します。ファイルへのパスを指定します。 .pt 訓練済みモデルまたは .yaml 設定ファイル。モデル構造の定義や重みの初期化に不可欠。
data None データセット設定ファイルへのパス(例. coco8.yaml).このファイルには、学習データと検証データへのパス、クラス名、クラス数など、データセット固有のパラメータが含まれる。
epochs 100 学習エポックの総数。各エポックはデータセット全体のフルパスを意味する。この値を調整することで、トレーニング期間とモデルのパフォーマンスに影響を与えることができます。
time None 最大トレーニング時間(時間単位)。設定すると epochs 引数を指定することで、指定した期間後にトレーニングを自動的に停止することができます。時間に制約のあるトレーニングシナリオに便利です。
patience 100 学習を早期に停止する前に、検証メトリクスに改善が見られない場合のエポック数。性能が頭打ちになったときに学習を停止することで、オーバーフィッティングを防ぐことができます。
batch 16 Batch size, with three modes: set as an integer (e.g., batch=16), auto mode for 60% GPU memory utilization (batch=-1), or auto mode with specified utilization fraction (batch=0.70).
imgsz 640 トレーニングのターゲット画像サイズ。すべての画像は、モデルに入力される前にこの次元にリサイズされます。モデルの精度と計算の複雑さに影響します。
save True トレーニングのチェックポイントと最終的なモデルの重みを保存できるようにします。トレーニングの再開やモデルのデプロイに便利です。
save_period -1 モデルのチェックポイントを保存する頻度をエポックで指定します。値を-1にすると、この機能は無効になります。長いトレーニングセッション中に中間モデルを保存するのに便利です。
cache False データセット画像をメモリ上にキャッシュできるようにする (True/ram)、ディスク上(disk)、または無効にする(False).メモリ使用量の増加と引き換えに、ディスクI/Oを削減することでトレーニング速度を向上させる。
device None トレーニング用の計算デバイスを指定します。device=0)、マルチGPU(device=0,1)、CPU(device=cpu)、またはアップル・シリコン用のMPS(device=mps).
workers 8 データロードのためのワーカースレッド数(1スレッドあたり RANK マルチGPUトレーニングの場合)。データの前処理とモデルへの投入速度に影響し、特にマルチGPUセットアップで有用。
project None トレーニング出力が保存されるプロジェクトディレクトリの名前。異なる実験を整理して保存できるようにする。
name None トレーニング実行の名前。プロジェクトフォルダ内にサブディレクトリを作成し、そこにトレーニングログと出力を保存します。
exist_ok False Trueの場合、既存のproject/nameディレクトリを上書きできる。以前の出力を手動で消去する必要がなく、繰り返し実験するのに便利です。
pretrained True 事前に訓練されたモデルから学習を開始するかどうかを決定します。ブール値または特定のモデルへの文字列パスを指定し、そこから重みを読み込みます。トレーニングの効率とモデルのパフォーマンスを向上させます。
optimizer 'auto' トレーニング用オプティマイザーの選択。オプション SGD, Adam, AdamW, NAdam, RAdam, RMSProp など、あるいは auto モデル構成に基づく自動選択。収束速度と安定性に影響。
verbose False トレーニング中の冗長出力を有効にし、詳細なログと進捗状況を提供します。デバッグやトレーニングプロセスの監視に便利です。
seed 0 トレーニング用のランダムシードを設定し、同じコンフィギュレーションで実行した場合の結果の再現性を確保します。
deterministic True 決定論的アルゴリズムの使用を強制し、再現性を確保するが、非決定論的アルゴリズムの制限により、パフォーマンスとスピードに影響を与える可能性がある。
single_cls False マルチクラスデータセットのすべてのクラスを1つのクラスとして扱う。バイナリ分類タスクや、分類よりもオブジェクトの存在に注目する場合に便利。
rect False 最小限のパディングのためにバッチ構成を最適化し、矩形学習を可能にする。効率とスピードが向上しますが、モデルの精度に影響を与える可能性があります。
cos_lr False コサイン学習率スケジューラを利用し、エポックにわたってコサイン曲線に従って学習率を調整する。より良い収束のための学習率管理に役立つ。
close_mosaic 10 トレーニング完了前に安定させるため、最後のNエポックでのモザイクデータ増大を無効にする。0に設定するとこの機能は無効になる。
resume False 最後に保存したチェックポイントからトレーニングを再開。モデルの重み、オプティマイザの状態、エポックカウントを自動的にロードし、シームレスにトレーニングを継続。
amp True 自動混合精度(AMP)トレーニングが可能になり、メモリ使用量を削減し、精度への影響を最小限に抑えながらトレーニングを高速化できる可能性があります。
fraction 1.0 学習に使用するデータセットの割合を指定します。実験やリソースが限られている場合に便利です。
profile False トレーニング中のONNX とTensorRT 速度のプロファイリングを可能にし、モデル展開の最適化に役立つ。
freeze None モデルの最初のN層、またはインデックスで指定した層をフリーズし、学習可能なパラメータの数を減らす。微調整や転移学習に役立つ。
lr0 0.01 初期学習率 SGD=1E-2, Adam=1E-3) .この値を調整することは、最適化プロセスにとって非常に重要であり、モデルの重みの更新速度に影響する。
lrf 0.01 初期学習率に対する最終学習率の割合 = (lr0 * lrf)をスケジューラと組み合わせて使用し、時間経過とともに学習率を調整する。
momentum 0.937 SGDの場合はモメンタム係数、Adamオプティマイザの場合はβ1で、過去の勾配を現在の更新に反映させる。
weight_decay 0.0005 L2正則化項は、オーバーフィッティングを防ぐために大きな重みにペナルティを与える。
warmup_epochs 3.0 学習率のウォームアップのためのエポック数。低い値から初期学習率まで徐々に学習率を上げていき、早い段階で学習を安定させる。
warmup_momentum 0.8 ウォームアップ期の初期モメンタムは、ウォームアップ期間中に設定されたモメンタムに徐々に調整される。
warmup_bias_lr 0.1 ウォームアップフェーズにおけるバイアスパラメータの学習率は、初期エポックにおけるモデル学習を安定させるのに役立つ。
box 7.5 バウンディングボックスの座標を正確に予測することにどの程度重点を置くかに影響する。
cls 0.5 全損失関数における分類損失の重みで、他のコンポーネントに対する正しいクラス予測の重要性に影響する。
dfl 1.5 分布フォーカルロスの重み。YOLO の特定のバージョンで、細かい分類に使用される。
pose 12.0 ポーズ推定用に学習されたモデルにおけるポーズロスの重み。ポーズキーポイントを正確に予測することに重点が置かれていることが影響している。
kobj 2.0 ポーズ推定モデルにおけるキーポイントのオブジェクトネス損失の重み、検出信頼度とポーズ精度のバランス。
label_smoothing 0.0 ラベルスムージングを適用し、ハードラベルをターゲットラベルとラベル上の一様分布の混合に柔らかくすることで、汎化を改善することができる。
nbs 64 ロスを正規化するための公称バッチサイズ。
overlap_mask True インスタンスのセグメンテーションタスクに適用されます。
mask_ratio 4 セグメンテーションマスクのダウンサンプル比。トレーニング時に使用するマスクの解像度に影響する。
dropout 0.0 分類タスクにおける正則化のためのドロップアウト率。トレーニング中にユニットをランダムに省略することでオーバーフィッティングを防ぐ。
val True トレーニング中に検証を有効にし、別のデータセットでモデルの性能を定期的に評価できるようにする。
plots False 予測例だけでなく、訓練と検証のメトリクスのプロットを生成して保存し、モデルのパフォーマンスと学習の進行に関する視覚的な洞察を提供します。

Note on Batch-size Settings

について batch argument can be configured in three ways:

  • Fixed Batch Size: Set an integer value (e.g., batch=16), specifying the number of images per batch directly.
  • Auto Mode (60% GPU Memory): Use batch=-1 to automatically adjust batch size for approximately 60% CUDA memory utilization.
  • Auto Mode with Utilization Fraction: Set a fraction value (e.g., batch=0.70) to adjust batch size based on the specified fraction of GPU memory usage.

オーグメンテーションの設定とハイパーパラメータ

オーグメンテーション技術は、学習データに可変性を導入することで、YOLO モデルのロバスト性とパフォーマンスを向上させ、モデルが未知のデータに対してより良く汎化できるようにするために不可欠です。以下の表は、それぞれのオーグメンテーションの目的と効果の概要です:

議論 タイプ デフォルト レンジ 説明
hsv_h float 0.015 0.0 - 1.0 画像の色相をカラーホイールの数分の一だけ調整し、色のばらつきを導入します。異なる照明条件でのモデルの一般化を助けます。
hsv_s float 0.7 0.0 - 1.0 画像の彩度をほんの少し変化させ、色の濃さに影響を与えます。異なる環境条件をシミュレートするのに便利です。
hsv_v float 0.4 0.0 - 1.0 画像の値(明るさ)を小数で変更し、さまざまな照明条件下でモデルがうまく機能するようにします。
degrees float 0.0 -180 - +180 指定した度数の範囲内で画像をランダムに回転させ、さまざまな向きのオブジェクトを認識するモデルの能力を向上させます。
translate float 0.1 0.0 - 1.0 画像を水平方向と垂直方向に画像サイズの数分の一だけ平行移動させ、部分的に見える物体を検出する学習に役立てる。
scale float 0.5 >=0.0 ゲイン係数で画像をスケーリングし、カメラから異なる距離にある物体をシミュレートする。
shear float 0.0 -180 - +180 画像を指定した角度で切断し、物体を異なる角度から見たときの効果を模倣する。
perspective float 0.0 0.0 - 0.001 画像にランダムな透視変換を適用し、3D空間のオブジェクトを理解するモデルの能力を高める。
flipud float 0.0 0.0 - 1.0 指定された確率で画像を上下反転させ、オブジェクトの特性に影響を与えることなくデータのばらつきを大きくする。
fliplr float 0.5 0.0 - 1.0 左右対称のオブジェクトを学習したり、データセットの多様性を高めたりするのに役立つ。
bgr float 0.0 0.0 - 1.0 画像チャンネルを、指定した確率でRGBからBGRに反転させます。これは、誤ったチャンネル順序に対するロバスト性を高めるのに役立ちます。
mosaic float 1.0 0.0 - 1.0 4枚のトレーニング画像を1枚に合成し、異なるシーンの構成やオブジェクトの相互作用をシミュレート。複雑なシーンの理解に高い効果を発揮。
mixup float 0.0 0.0 - 1.0 2つの画像とそのラベルをブレンドし、合成画像を作成します。ラベルノイズや視覚的なばらつきを導入することで、モデルの汎化能力を高める。
copy_paste float 0.0 0.0 - 1.0 オブジェクトのインスタンスを増やしたり、オブジェクトのオクルージョンを学習したりするのに便利です。
auto_augment str randaugment - 事前に定義された補強ポリシー(randaugment, autoaugment, augmix)、視覚的特徴を多様化することで分類タスクを最適化する。
erasing float 0.4 0.0 - 0.9 分類トレーニング中に画像の一部をランダムに消去し、モデルが認識のためにあまり目立たない特徴に集中するよう促す。
crop_fraction float 1.0 0.1 - 1.0 中心の特徴を強調し、オブジェクトのスケールに適応し、背景の乱れを軽減するために、分類画像をそのサイズのほんの一部に切り取ります。

これらの設定は、データセットと手元のタスクの特定の要件を満たすように調整することができます。異なる値で実験することで、最良のモデル性能につながる最適なオーグメンテーション戦略を見つけることができます。

インフォメーション

トレーニング補強作戦の詳細については、参考セクションを参照のこと。

ロギング

YOLOv8 モデルのトレーニングにおいて、時間の経過とともにモデルのパフォーマンスを追跡することは価値があると思われるかもしれない。ここでロギングが活躍する。Ultralytics'YOLO は、Comet 、ClearML 、TensorBoard の3種類のロガーをサポートしている。

ロガーを使用するには、上のコードスニペットのドロップダウンメニューから選択し、実行します。選択したロガーがインストールされ、初期化されます。

Comet

Cometは、データサイエンティストや開発者が実験やモデルを追跡、比較、説明、最適化できるプラットフォームです。リアルタイムのメトリクス、コードの差分、ハイパーパラメータのトラッキングなどの機能を提供します。

Comet を使用する:

例

# pip install comet_ml
import comet_ml

comet_ml.init()

ウェブサイトからComet のアカウントにサインインし、APIキーを取得することを忘れずに。これを環境変数やスクリプトに追加して、実験のログを取る必要があります。

ClearML

ClearMLは、実験のトラッキングを自動化し、リソースの効率的な共有を支援するオープンソースのプラットフォームである。チームがML作業をより効率的に管理、実行、再現できるように設計されている。

ClearML を使用する:

例

# pip install clearml
import clearml

clearml.browser_login()

このスクリプトを実行した後、ブラウザでClearML アカウントにサインインし、セッションを認証する必要があります。

テンソルボード

TensorBoardは、TensorFlow 用の可視化ツールキットです。これにより、TensorFlow グラフを視覚化したり、グラフの実行に関する定量的なメトリクスをプロットしたり、グラフを通過する画像などの追加データを表示したりできる。

TensorBoard をGoogle Colab:

例

load_ext tensorboard
tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

TensorBoardをローカルで使用するには、以下のコマンドを実行し、結果をhttp://localhost:6006/。

例

tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

これにより、TensorBoardがロードされ、トレーニングログが保存されているディレクトリに移動します。

ロガーを設定した後、モデルのトレーニングを進めることができます。すべてのトレーニングメトリクスは、選択したプラットフォームに自動的に記録され、これらのログにアクセスして、時間の経過とともにモデルのパフォーマンスを監視し、異なるモデルを比較し、改善すべき領域を特定することができます。



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (14), dependabot (1), fcakyon (1), Laughing-q (2), Burhan-Q (1)

コメント