モデル・トレーニングUltralytics YOLO
はじめに
ディープラーニング・モデルのトレーニングには、データを与え、正確な予測ができるようにパラメータを調整することが含まれる。Ultralytics YOLO11 の Train モードは、最新のハードウェア機能をフルに活用した、効果的かつ効率的な物体検出モデルのトレーニングのために設計されています。このガイドでは、YOLO11'の堅牢な機能セットを使用して独自のモデルのトレーニングを開始するために必要なすべての詳細をカバーすることを目的としています。
見るんだ: Google ColabのカスタムデータセットでYOLO モデルをトレーニングする方法。
トレーニングにUltralytics YOLO を選ぶ理由
YOLO11 「トレイン」モードを選ぶ説得力のある理由をいくつか挙げてみよう:
- 効率:シングルGPU のセットアップでも、複数のGPUにまたがるスケーリングでも、ハードウェアを最大限に活用できます。
- 汎用性:COCO、VOC、ImageNetのような入手しやすいデータセットに加え、カスタムデータセットでも学習できます。
- ユーザーフレンドリー:シンプルかつパワフルなCLI およびPython インターフェースにより、わかりやすいトレーニング体験を提供します。
- ハイパーパラメータの柔軟性:モデルの性能を微調整するためのカスタマイズ可能な幅広いハイパーパラメータ。
トレイン・モードの主な特徴
以下は、YOLO11 「トレイン」モードの特筆すべき特徴である:
- データセットの自動ダウンロード:COCO、VOC、ImageNetなどの標準データセットは、初回使用時に自動的にダウンロードされます。
- マルチGPU サポート:複数のGPUでシームレスにトレーニングの規模を拡大し、プロセスを迅速化します。
- ハイパーパラメータの設定:YAML 設定ファイルまたはCLI 引数を通してハイパーパラメータを変更するオプション。
- 可視化とモニタリング:トレーニングメトリクスをリアルタイムで追跡し、学習プロセスを可視化することで、より良い洞察を得ることができます。
チップ
- YOLO11 COCO、VOC、ImageNet、その他多くのデータセットは、初回使用時に自動的にダウンロードされる。
yolo train data=coco.yaml
使用例
COCO8データセットでYOLO11nを100回トレーニングする。 時代 画像サイズ640で。トレーニング装置は device
引数を渡す。引数が渡されない場合GPU device=0
が使用されます。 device='cpu'
が使用される。トレーニング引数の全リストは下記の「引数」セクションを参照。
Windowsマルチプロセッシングエラー
Windowsでは RuntimeError
スクリプトとしてトレーニングを開始するときにを追加します。 if __name__ == "__main__":
ブロックをトレーニング・コードの前に置いて解決する。
シングルGPU 、CPU トレーニング例
デバイスは自動的に決定される。GPU が利用可能であればそれが使用され、そうでなければCPU からトレーニングが開始される。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.yaml") # build a new model from YAML
model = YOLO("yolo11n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo11n.yaml").load("yolo11n.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=yolo11n.yaml epochs=100 imgsz=640
# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolo11n.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=yolo11n.yaml pretrained=yolo11n.pt epochs=100 imgsz=640
マルチGPU トレーニング
マルチGPU トレーニングは、トレーニング負荷を複数のGPUに分散することで、利用可能なハードウェアリソースをより効率的に利用することができます。この機能はPython API とコマンドライン・インターフェースの両方から利用可能です。マルチGPU トレーニングを有効にするには、使用したいGPU デバイス ID を指定します。
マルチGPU トレーニング例
2つのGPU、CUDA デバイス0と1でトレーニングするには、以下のコマンドを使用します。必要に応じてGPUを追加してください。
アップル・シリコンMPS トレーニング
Ultralytics YOLO モデルに統合されたAppleシリコンチップのサポートにより、強力なMetal Performance Shaders (MPS) フレームワークを利用するデバイス上でモデルをトレーニングすることが可能になりました。MPS は、アップルのカスタムシリコン上で計算と画像処理タスクを実行する高性能な方法を提供します。
Appleのシリコンチップでトレーニングを有効にするには、トレーニングプロセスを開始する際に、デバイスとして「mps 」を指定する必要があります。以下は、Python 、コマンドラインから行う方法の例です:
MPS トレーニング例
アップルのシリコンチップの計算能力を活用しながら、トレーニングタスクをより効率的に処理することができます。より詳細なガイダンスと高度な設定オプションについては、PyTorch MPS ドキュメントを参照してください。
中断していたトレーニングの再開
以前に保存した状態から学習を再開することは、ディープラーニング・モデルを扱う上で非常に重要な機能です。これは、学習プロセスが予期せず中断された場合や、新しいデータまたはより多くのエポックでモデルの学習を続行したい場合など、さまざまなシナリオで便利です。
トレーニングが再開されると、Ultralytics YOLO 、最後に保存されたモデルの重みがロードされ、オプティマイザの状態、学習率スケジューラ、エポック数も復元されます。これにより、学習プロセスを中断したところからシームレスに継続することができます。
を設定することで、Ultralytics YOLO のトレーニングを簡単に再開することができます。 resume
引数 True
を呼び出すときに train
メソッドへのパスを指定する。 .pt
ファイルには、部分的に学習されたモデルの重みが含まれている。
以下は、Python 、コマンドラインを使って中断したトレーニングを再開する方法の例です:
履歴書トレーニングの例
セッティング resume=True
その train
関数は、'path/to/last.pt'ファイルに保存されている状態を使用して、トレーニングを中断したところから継続します。もし resume
引数が省略されるか、または False
その train
関数は新しいトレーニングセッションを開始する。
チェックポイントは、デフォルトでは毎エポック終了時に保存される。 save_period
そのため、トレーニング走行を再開するには、少なくとも1エポックを完了する必要がある。
列車設定
YOLO モデルの学習設定は、学習プロセスで使用される様々なハイパーパラメータと設定を包含する。これらの設定はモデルのパフォーマンス、スピード、精度に影響を与える。主要な学習設定には、バッチサイズ、学習率、モメンタム、ウェイト減衰が含まれる。さらに、オプティマイザ、損失関数、学習データセットの構成などの選択も学習プロセスに影響を与えます。パフォーマンスを最適化するためには、これらの設定を慎重にチューニングし、実験することが重要です。
議論 | タイプ | デフォルト | 説明 |
---|---|---|---|
model |
str |
None |
トレーニング用のモデルファイルを指定します。ファイルへのパスを指定します。 .pt 訓練済みモデルまたは .yaml 設定ファイル。モデル構造の定義や重みの初期化に不可欠。 |
data |
str |
None |
データセット設定ファイルへのパス(例. coco8.yaml ).このファイルにはデータセット固有のパラメータが含まれる。 検証データクラス名、クラス数 |
epochs |
int |
100 |
学習エポックの総数。各エポックはデータセット全体に対するフルパスを表す。この値を調整することで、トレーニング期間とモデルのパフォーマンスに影響を与えることができる。 |
time |
float |
None |
最大トレーニング時間(時間単位)。設定すると epochs 引数を指定することで、指定した期間後にトレーニングを自動的に停止することができます。時間に制約のあるトレーニングシナリオに便利です。 |
patience |
int |
100 |
学習を早期に停止する前に、検証メトリクスに改善が見られない場合のエポック数。性能が頭打ちになったときに学習を停止することで、オーバーフィッティングを防ぐことができます。 |
batch |
int |
16 |
バッチサイズ3つのモードがある、 batch=16 )、GPU メモリ使用率60%の自動モード(batch=-1 )、または利用率を指定した自動モード(batch=0.70 ). |
imgsz |
int または list |
640 |
トレーニングのターゲット画像サイズ。すべての画像は、モデルに入力される前にこの次元にリサイズされます。モデルの精度と計算の複雑さに影響します。 |
save |
bool |
True |
トレーニングのチェックポイントと最終的なモデルの重みを保存できるようにします。トレーニングの再開やモデルのデプロイに便利です。 |
save_period |
int |
-1 |
モデルのチェックポイントを保存する頻度をエポックで指定します。値を-1にすると、この機能は無効になります。長いトレーニングセッション中に中間モデルを保存するのに便利です。 |
cache |
bool |
False |
データセット画像をメモリ上にキャッシュできるようにする (True /ram )、ディスク上(disk )、または無効にする(False ).メモリ使用量の増加と引き換えに、ディスクI/Oを削減することでトレーニング速度を向上させる。 |
device |
int または str または list |
None |
トレーニングに使用する計算デバイスを指定します: シングルGPU (device=0 )、マルチGPU(device=0,1 )、CPU (device=cpu )、またはアップル・シリコン用のMPS (device=mps ). |
workers |
int |
8 |
データロードのためのワーカースレッド数(1スレッドあたり RANK マルチGPU トレーニングの場合)。データの前処理とモデルへの投入速度に影響し、特にマルチGPU セットアップで有用。 |
project |
str |
None |
トレーニング出力が保存されるプロジェクトディレクトリの名前。異なる実験を整理して保存できるようにする。 |
name |
str |
None |
トレーニング実行の名前。プロジェクトフォルダ内にサブディレクトリを作成し、そこにトレーニングログと出力を保存します。 |
exist_ok |
bool |
False |
Trueの場合、既存のproject/nameディレクトリを上書きできる。以前の出力を手動で消去する必要がなく、繰り返し実験するのに便利です。 |
pretrained |
bool または str |
True |
事前に訓練されたモデルから学習を開始するかどうかを決定します。ブール値または特定のモデルへの文字列パスを指定し、そこから重みを読み込みます。トレーニングの効率とモデルのパフォーマンスを向上させます。 |
optimizer |
str |
'auto' |
トレーニング用オプティマイザーの選択。オプション SGD , Adam , AdamW , NAdam , RAdam , RMSProp など、あるいは auto モデル構成に基づく自動選択。収束速度と安定性に影響します。 |
seed |
int |
0 |
トレーニング用のランダムシードを設定し、同じコンフィギュレーションで実行した場合の結果の再現性を確保します。 |
deterministic |
bool |
True |
決定論的アルゴリズムの使用を強制し、再現性を確保するが、非決定論的アルゴリズムの制限により、パフォーマンスとスピードに影響を与える可能性がある。 |
single_cls |
bool |
False |
マルチクラスデータセットのすべてのクラスを1つのクラスとして扱う。バイナリ分類タスクや、分類よりもオブジェクトの存在に注目する場合に便利。 |
classes |
list[int] |
None |
トレーニングするクラスIDのリストを指定します。トレーニング中に特定のクラスだけを絞り込んでフォーカスするのに便利です。 |
rect |
bool |
False |
最小限のパディングのためにバッチ構成を最適化し、矩形学習を可能にする。効率とスピードが向上しますが、モデルの精度に影響を与える可能性があります。 |
multi_scale |
bool |
False |
増減によるマルチスケールトレーニングが可能 imgsz 倍まで 0.5 トレーニング中に複数回のトレーニングにより、モデルの精度が向上します。 imgsz 推論中 |
cos_lr |
bool |
False |
コサイン学習率スケジューラを利用し、エポックにわたってコサイン曲線に従って学習率を調整する。より良い収束のための学習率管理に役立つ。 |
close_mosaic |
int |
10 |
トレーニング完了前に安定させるため、最後のNエポックでのモザイクデータ増大を無効にする。0に設定するとこの機能は無効になる。 |
resume |
bool |
False |
最後に保存したチェックポイントからトレーニングを再開。モデルの重み、オプティマイザの状態、エポックカウントを自動的にロードし、シームレスにトレーニングを継続。 |
amp |
bool |
True |
自動混合精度(AMP)トレーニングが可能になり、メモリ使用量を削減し、精度への影響を最小限に抑えながらトレーニングを高速化できる可能性があります。 |
fraction |
float |
1.0 |
学習に使用するデータセットの割合を指定します。実験やリソースが限られている場合に便利です。 |
profile |
bool |
False |
トレーニング中のONNX とTensorRT 速度のプロファイリングを可能にし、モデル展開の最適化に役立つ。 |
freeze |
int または list |
None |
モデルの最初のN層、またはインデックスで指定した層をフリーズし、学習可能なパラメータの数を減らす。微調整や転移学習に役立つ。 |
lr0 |
float |
0.01 |
初期学習率 SGD=1E-2 , Adam=1E-3 ).この値を調整することは最適化プロセスにとって重要であり、モデルの重みの更新速度に影響する。 |
lrf |
float |
0.01 |
初期学習率に対する最終学習率の割合 = (lr0 * lrf )をスケジューラと組み合わせて使用し、時間経過とともに学習率を調整する。 |
momentum |
float |
0.937 |
SGDの場合はモメンタム係数、Adamオプティマイザの場合はβ1。過去の勾配を現在の更新に反映させる。 |
weight_decay |
float |
0.0005 |
L2正則化項は、オーバーフィッティングを防ぐために大きな重みにペナルティを与える。 |
warmup_epochs |
float |
3.0 |
学習率のウォームアップのためのエポック数。低い値から初期学習率まで徐々に学習率を上げていき、早い段階で学習を安定させる。 |
warmup_momentum |
float |
0.8 |
ウォームアップ期の初期モメンタムは、ウォームアップ期間中に設定されたモメンタムに徐々に調整される。 |
warmup_bias_lr |
float |
0.1 |
ウォームアップフェーズにおけるバイアスパラメータの学習率は、初期エポックにおけるモデル学習を安定させるのに役立つ。 |
box |
float |
7.5 |
バウンディングボックスの座標を正確に予測することにどの程度重点を置くかに影響する。 |
cls |
float |
0.5 |
全損失関数における分類損失の重みで、他のコンポーネントに対する正しいクラス予測の重要性に影響する。 |
dfl |
float |
1.5 |
分布フォーカルロスの重み。YOLO の特定のバージョンで、細かい分類に使用される。 |
pose |
float |
12.0 |
ポーズ推定用に学習されたモデルにおけるポーズロスの重み。ポーズキーポイントを正確に予測することに重点が置かれていることが影響している。 |
kobj |
float |
2.0 |
ポーズ推定モデルにおけるキーポイントのオブジェクトネス損失の重み、検出信頼度とポーズ精度のバランス。 |
nbs |
int |
64 |
ロスを正規化するための公称バッチサイズ。 |
overlap_mask |
bool |
True |
オブジェクトのマスクをトレーニング用に1つのマスクにマージするか、オブジェクトごとに別々にするかを決定します。オーバーラップの場合、小さいマスクはマージ時に大きいマスクの上に重ねられます。 |
mask_ratio |
int |
4 |
セグメンテーションマスクのダウンサンプル比。トレーニング時に使用するマスクの解像度に影響する。 |
dropout |
float |
0.0 |
分類タスクにおける正則化のためのドロップアウト率。トレーニング中にユニットをランダムに省略することでオーバーフィッティングを防ぐ。 |
val |
bool |
True |
トレーニング中に検証を有効にし、別のデータセットでモデルの性能を定期的に評価できるようにする。 |
plots |
bool |
False |
予測例だけでなく、訓練と検証のメトリクスのプロットを生成して保存することで、モデルのパフォーマンスと学習の進行に関する視覚的な洞察を提供します。 |
バッチサイズ設定に関する注意事項
について batch
引数は3つの方法で設定できる:
- 固定バッチサイズ:整数値を設定する(例.
batch=16
)、バッチあたりの画像数を直接指定する。 - オートモード (60%GPU メモリー):用途
batch=-1
を使用して、CUDA メモリ使用率が約 60% になるようにバッチサイズを自動的に調整します。 - 利用率によるオートモード:端数値を設定する(例.
batch=0.70
) を使って、GPU メモリ使用量の指定された割合に基づいてバッチサイズを調整する。
オーグメンテーションの設定とハイパーパラメータ
オーグメンテーション技術は、学習データに可変性を導入することで、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 |
オブジェクトのインスタンスを増やしたり、オブジェクトのオクルージョンを学習したりするのに便利です。セグメンテーションラベルが必要です。 |
copy_paste_mode |
str |
'flip' |
- | のオプションの中からコピーペースト増強法を選択する。"flip" , "mixup" ). |
auto_augment |
str |
'randaugment' |
- | 事前に定義された補強ポリシー(randaugment , autoaugment , augmix )、視覚的特徴を多様化することで分類タスクを最適化する。 |
erasing |
float |
0.4 |
0.0 - 0.9 |
分類トレーニング中に画像の一部をランダムに消去し、モデルが認識のためにあまり目立たない特徴に集中するよう促す。 |
crop_fraction |
float |
1.0 |
0.1 - 1.0 |
中心の特徴を強調し、オブジェクトのスケールに適応し、背景の乱れを軽減するために、分類画像をそのサイズのほんの一部に切り取ります。 |
これらの設定は、データセットと手元のタスクの特定の要件を満たすように調整することができます。異なる値で実験することで、最良のモデル性能につながる最適なオーグメンテーション戦略を見つけることができます。
インフォメーション
トレーニング補強作戦の詳細については、参考セクションを参照のこと。
ロギング
YOLO11 モデルをトレーニングする際、時間の経過とともにモデルのパフォーマンスを追跡することに価値があるかもしれません。そこでロギングが活躍します。Ultralytics YOLO 、以下の3種類のロガーをサポートしています。 Comet, ClearMLおよびTensorBoardです。
ロガーを使用するには、上のコードスニペットのドロップダウンメニューから選択し、実行します。選択したロガーがインストールされ、初期化されます。
Comet
Cometは、データサイエンティストや開発者が実験やモデルを追跡、比較、説明、最適化できるプラットフォームです。リアルタイムのメトリクス、コードの差分、ハイパーパラメータのトラッキングなどの機能を提供します。
Comet を使用する:
ウェブサイトからComet のアカウントにサインインし、APIキーを取得することを忘れずに。これを環境変数やスクリプトに追加して、実験のログを取る必要があります。
ClearML
ClearMLは、実験のトラッキングを自動化し、リソースの効率的な共有を支援するオープンソースのプラットフォームである。チームがML作業をより効率的に管理、実行、再現できるように設計されている。
ClearML を使用する:
このスクリプトを実行した後、ブラウザでClearML アカウントにサインインし、セッションを認証する必要があります。
テンソルボード
TensorBoardは、以下のための可視化ツールキットです。 TensorFlow.これにより、TensorFlow グラフを視覚化したり、グラフの実行に関する定量的なメトリクスをプロットしたり、グラフを通過する画像などの追加データを表示したりすることができます。
TensorBoard をGoogle Colab:
TensorBoardをローカルで使用するには、以下のコマンドを実行し、結果をhttp://localhost:6006/。
これにより、TensorBoardがロードされ、トレーニングログが保存されているディレクトリに移動します。
ロガーを設定した後、モデルのトレーニングを進めることができます。すべてのトレーニングメトリクスは、選択したプラットフォームに自動的に記録され、これらのログにアクセスして、時間の経過とともにモデルのパフォーマンスを監視し、異なるモデルを比較し、改善すべき領域を特定することができます。
よくあるご質問
Ultralytics YOLO11 を使った物体検出モデルの学習方法は?
Ultralytics YOLO11 を使って物体検出モデルを学習するには、Python API またはCLI のどちらかを使うことができる。 以下に両方の例を示す:
シングルGPU 、CPU トレーニング例
詳細については、列車設定のセクションを参照してください。
Ultralytics YOLO11 「トレインモード」の主な特徴は?
Ultralytics YOLO11 「トレイン」モードの主な特徴は以下の通り:
- データセットの自動ダウンロードCOCO、VOC、ImageNetなどの標準データセットを自動的にダウンロードします。
- マルチGPU サポート:複数のGPUでトレーニングをスケールさせ、より高速な処理を実現。
- ハイパーパラメータの設定:YAML ファイルまたはCLI 引数でハイパーパラメータをカスタマイズ。
- 可視化とモニタリング:より良い洞察のためのトレーニングメトリクスのリアルタイムトラッキング。
これらの機能により、トレーニングを効率的に行い、ニーズに合わせてカスタマイズすることができます。詳細については、トレインモードの主な機能のセクションをご覧ください。
Ultralytics YOLO11 で中断したセッションからトレーニングを再開するにはどうすればよいですか?
中断したセッションからトレーニングを再開するには resume
引数 True
を選択し、最後に保存したチェックポイントへのパスを指定する。
履歴書トレーニングの例
詳しくは「中断されたトレーニングの再開」のセクションをご覧ください。
YOLO11 、アップルのシリコンチップでモデルをトレーニングできますか?
はい、Ultralytics YOLO11 は、Metal Performance Shaders (MPS) フレームワークを利用したAppleシリコンチップでのトレーニングをサポートしています。トレーニングデバイスとして「mps 」を指定してください。
MPS トレーニング例
詳細については、Apple SiliconMPS Trainingセクションを参照してください。
一般的なトレーニングの設定とその方法は?
Ultralytics YOLO11 では、バッチ・サイズ、学習率、エポック数など、様々な学習設定を引数で設定することができる。以下はその概要である:
議論 | デフォルト | 説明 |
---|---|---|
model |
None |
トレーニング用モデルファイルへのパス。 |
data |
None |
データセット設定ファイルへのパス(例. coco8.yaml ). |
epochs |
100 |
トレーニングエポックの総数。 |
batch |
16 |
バッチサイズは、整数または自動モードとして調整可能。 |
imgsz |
640 |
トレーニングのターゲット画像サイズ。 |
device |
None |
トレーニング用の計算機 cpu , 0 , 0,1 あるいは mps . |
save |
True |
トレーニングのチェックポイントと最終的なモデルの重みを保存できるようにします。 |
トレーニング設定の詳細については、トレーニング設定のセクションをご覧ください。