Ultralytics YOLOによるモデルトレーニング#
はじめに#
ディープラーニングモデルのトレーニングには、データを入力し、正確な予測を行えるようにパラメータを調整する作業が含まれます。Ultralytics YOLO26のtrainモードは、最新のハードウェア機能をフルに活用し、物体検出モデルの効果的かつ効率的なトレーニングを行うために設計されています。このガイドでは、YOLO26の強力な機能セットを使用して独自のモデルのトレーニングを開始するために必要なすべての詳細を網羅しています。まだUltralyticsをインストールしていない場合は、クイックスタートガイドから始めてください。
Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.
なぜトレーニングにUltralytics YOLOを選ぶのか?#
YOLO26のトレーニングモードを選択すべき有力な理由は以下の通りです。
- 効率性: シングルGPU構成であっても、複数のGPUにスケーリングする場合でも、ハードウェアの能力を最大限に活用できます。
- 汎用性: COCO、VOC、ImageNetなどのすぐに利用できるデータセットに加え、カスタムデータセットを使用したトレーニングが可能です。
- ユーザーフレンドリー: シンプルでありながら強力なCLIおよびPythonインターフェースにより、直感的なトレーニング体験を提供します。
- ハイパーパラメータの柔軟性: モデルのパフォーマンスを微調整するための、カスタマイズ可能な幅広いハイパーパラメータ。より詳細な制御を行うには、トレーナー自体をカスタマイズすることができます。
- クラウドトレーニング: リアルタイムのメトリクスと自動チェックポイント機能を備えたUltralytics Platformを介して、クラウドGPU上でトレーニングを実行します。
トレーニングモードの主要機能#
以下は、YOLO26のトレーニングモードの注目すべき機能です。
- データセットの自動ダウンロード: ダウンロード元が設定されたデータセット構成は、初回使用時に自動的にダウンロードされます(例:
yolo train data=coco8.yaml)。サポートされているフォーマットとデータセットについては、データセットの概要をご覧ください。 - マルチGPUサポート: 複数のGPU間でトレーニングをシームレスにスケールアップし、処理を高速化できます。
- ハイパーパラメータ設定: YAML設定ファイルまたはCLI引数を介してハイパーパラメータを変更するオプションを提供します。
- 視覚化とモニタリング: トレーニングメトリクスのリアルタイム追跡や学習プロセスの視覚化により、より詳細な洞察を得られます。
使用例#
COCO8データセットでYOLO26nを画像サイズ640で100エポックトレーニングします。トレーニングデバイスは device 引数を使用して指定できます。引数が渡されない場合、利用可能な場合はGPU device=0 が使用され、そうでない場合は device='cpu' が使用されます。トレーニング引数の完全なリストについては、以下の「引数」セクションをご覧ください。
Windowsでは、スクリプトとしてトレーニングを起動したときに RuntimeError が発生する場合があります。これを解決するには、トレーニングコードの前に if __name__ == "__main__": ブロックを追加してください。
デバイスは自動的に決定されます。GPUが利用可能な場合はそれが使用され(デフォルトはCUDAデバイス0)、そうでない場合はCPUでトレーニングが開始されます。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.yaml") # build a new model from YAML
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)マルチGPUトレーニング#
マルチGPUトレーニングでは、トレーニング負荷を複数のGPUに分散させることで、利用可能なハードウェアリソースをより効率的に活用できます。この機能はPython APIとコマンドラインインターフェースの両方で利用可能です。マルチGPUトレーニングを有効にするには、使用するGPUデバイスIDを指定してください。
2つのGPU(CUDAデバイス0および1)でトレーニングするには、以下のコマンドを使用します。必要に応じてGPUを追加して拡張してください。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.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])
# Train the model with the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])複数のデバイスを指定した場合(例: device=[0, 1] )、Ultralyticsは内部で新しいトレーナーインスタンスを生成し、裏で torch.distributed.run を実行します。これは、標準的なCLIの使用方法や変更されていないPythonスクリプトに対してシームレスに機能します。
ただし、スクリプトにカスタムコンポーネント(カスタムトレーナー、バリデータ、データセット、または拡張パイプラインなど)が含まれている場合、これらのオブジェクトを自動的にシリアライズしてDDPサブプロセスに転送することはできません。この場合、 torch.distributed.run を使用してスクリプトを直接起動する必要があります。
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyAMD GPUトレーニングでは、標準の device=0 または device=cuda:0 構文を使用してPyTorch ROCmビルドを使用します。インストールおよび現在のMIGraphX、DirectML、Ryzen AI NPUのサポート状況については、AMD統合ガイドをご覧ください。
Intel GPUトレーニングでは、 device=xpu:0 、またはXCCLを提供するPyTorchビルドを使用した複数のXPU IDを使用します。
Huawei Ascend NPU トレーニング#
Ultralyticsでは、torch_npuを介したHuawei Ascend NPUでのトレーニングと検証をサポートしています。Ascend Extension for PyTorch installation guideに従って相互に互換性のあるCANN、PyTorch、およびtorch_npuのバージョンをインストールし、Ultralyticsを開始する前にCANN環境をソースとして読み込んでください。
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on one Ascend NPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# Train across two Ascend NPUs with HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")AMP、検証、チェックポイント、再開を含む標準的なトレーニング機能は、アクティブなNPUを使用します。AutoBatchは単一NPUトレーニングで使用でき、複数のNPU IDはHCCLを介して分散トレーニングを起動します。トレーニング後のモデルのエクスポートとデプロイについては、Huawei Ascend統合ガイドをご覧ください。
アイドルGPUトレーニング#
アイドルGPUトレーニングは、マルチGPUシステムにおいて最も利用率の低いGPUを自動的に選択し、手動選択の手間を省きながらリソース使用を最適化します。この機能は、利用率メトリクスとVRAMの空き状況に基づいて利用可能なGPUを特定します。
トレーニングに最もアイドル状態のGPUを自動的に選択して使用するには、 -1 デバイスパラメータを使用します。これは、共有コンピューティング環境や複数のユーザーがいるサーバーで特に便利です。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train using the single most idle GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# Train using the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])自動選択アルゴリズムは、以下のGPUを優先します。
- 現在の利用率のパーセンテージが低いもの
- 利用可能なメモリ(空きVRAM)が多いもの
- 温度と消費電力が低いもの
この機能は、共有コンピューティング環境や、異なるモデルで複数のトレーニングジョブを実行する場合に特に価値があります。システムの状態変化に自動的に適応し、手動操作なしで最適なリソース割り当てを保証します。
Apple Silicon MPSトレーニング#
Ultralytics YOLOモデルにApple Siliconチップのサポートが統合されたことで、強力なMetal Performance Shaders (MPS)フレームワークを利用するデバイスでモデルをトレーニングできるようになりました。MPSは、Appleのカスタムシリコン上で計算および画像処理タスクを実行するための高性能な手段を提供します。
Apple Siliconチップ上でトレーニングを有効にするには、トレーニング開始時にデバイスとして'mps'を指定する必要があります。以下は、Pythonおよびコマンドラインでこれを行う方法の例です。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Appleシリコンチップの計算能力を活用することで、トレーニングタスクのより効率的な処理が可能になります。詳細なガイダンスと高度な設定オプションについては、PyTorch MPSドキュメントを参照してください。
中断されたトレーニングの再開#
以前に保存された状態からトレーニングを再開することは、ディープラーニングモデルを扱う上で極めて重要な機能です。これは、トレーニングプロセスが予期せず中断された場合や、新しいデータでモデルのトレーニングを継続したい場合、あるいはエポック数を増やしたい場合など、さまざまな場面で役立ちます。
トレーニングが再開されると、Ultralytics YOLOは最後に保存されたモデルから重みを読み込み、オプティマイザの状態、学習率スケジューラ、およびエポック数も復元します。これにより、中断したところからトレーニングプロセスをシームレスに継続できます。
Ultralytics YOLOでは、trainメソッドを呼び出す際にresume引数にTrueを設定し、部分的にトレーニングされたモデルウェイトを含む.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=True を設定することにより、 train 関数は 'path/to/last.pt' ファイルに保存された状態を使用して、中断したところからトレーニングを続行します。 resume 引数が省略されるか False に設定されている場合、 train 関数は新しいトレーニングセッションを開始します。
チェックポイントはデフォルトですべてのエポックの終わりに、または save_period 引数を使用して固定間隔で保存されるため、トレーニング実行を再開するには少なくとも1エポックを完了する必要があることに注意してください。
トレーニング設定#
YOLOモデルのトレーニング設定には、トレーニングプロセス中に使用されるさまざまなハイパーパラメータと構成が含まれます。これらの設定は、モデルのパフォーマンス、速度、および精度に影響を与えます。主なトレーニング設定には、バッチサイズ、学習率、モメンタム、重み減衰が含まれます。さらに、オプティマイザ、損失関数、およびトレーニングデータセットの構成の選択がトレーニングプロセスに影響を与える可能性があります。パフォーマンスを最適化するためには、これらの設定の慎重な調整と実験が不可欠です。
MuSGDオプティマイザー#
YOLO26では、MuSGDは標準的なSGD更新とMuonスタイルの直交化更新を組み合わせたハイブリッドオプティマイザーです。
これはYOLO26の長時間トレーニングや大規模データセットに対して推奨され、直交化されたMuon更新が最適化の安定化を助けます。
2Dの線形ウェイトと4Dの畳み込みフィルター(2Dにリシェイプされたもの)のみがSGDと共にMuonスタイルのアップデートを受け、バッチ正規化ウェイトやバイアス項などの他のすべてのパラメータは標準のSGDのまま残ります。
optimizer=auto が使用される場合、Ultralyticsは長時間のトレーニング(通常は反復回数が10000を超える場合)に対して自動的に MuSGD を選択します。短時間の実行では、トレーナーは AdamW にフォールバックします。
使用例:
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDultralytics/optim/muon.py の実装と、 BaseTrainer.build_optimizer のオプティマイザ自動選択ロジックを参照してください。
| 引数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
model | str | None | トレーニング用のモデルファイルを指定します。.pt の事前学習済みモデルまたは .yaml の設定ファイルのいずれかへのパスを受け入れます。モデル構造の定義や重みの初期化に不可欠です。 |
data | str | None | データセット YAML(例:coco8.yaml)へのパス。トレーニングおよび検証データのパス、クラス名、およびクラス数を指定します。分類の場合は、代わりにデータセットディレクトリまたは組み込みのデータセット名(例:imagenet10)を指定します。 |
epochs | int | 100 | トレーニングのエポックの総数。各エポックは、データセット全体の完全なパスを表します。この値を調整すると、トレーニングの期間とモデルのパフォーマンスに影響を与える可能性があります。 |
time | float | None | 時間単位での最大トレーニング時間。設定した場合、これは epochs 引数をオーバーライドし、指定された時間の経過後にトレーニングが自動的に停止するようにします。時間制限のあるトレーニングシナリオに役立ちます。 |
patience | int | 100 | トレーニングを早期終了する前に、検証メトリクスが改善しない状態で待機するエポック数。パフォーマンスが頭打ちになったときにトレーニングを停止することで、過学習を防ぐのに役立ちます。 |
batch | int または float | 16 | バッチサイズ。3つのモードがあります:整数として設定(例:batch=16)、GPUメモリ使用率60%の自動モード(batch=-1)、または指定された使用率の割合による自動モード(batch=0.70)。 |
imgsz | int | 640 | トレーニングのターゲット画像サイズ。画像は指定された値と同じ辺を持つ正方形にリサイズされ(rect=False の場合)、YOLOモデルのアスペクト比は維持されますが、RT-DETRでは維持されません。モデルの精度と計算量に影響を与えます。 |
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)、Appleシリコン用MPS(device=mps)、Huawei Ascend NPU(device=npu:0 または device=npu:0,1)、あるいはアイドル状態のGPU(device=-1)または複数のアイドル状態のGPU(device=[-1,-1])の自動選択。 |
workers | int | 8 | データローディング用のワーカースレッド数(マルチGPUトレーニングの場合は RANK あたり)。データの前処理とモデルへの供給速度に影響を与え、特にマルチGPUのセットアップで役立ちます。 |
project | str | None | トレーニング出力が保存されるプロジェクトディレクトリの名前です。異なる実験を整理して保存できます。 |
name | str | None | トレーニングランの名前です。プロジェクトフォルダ内にサブディレクトリを作成し、トレーニングログと出力を保存するために使用されます。 |
exist_ok | bool | False | Trueの場合、既存のプロジェクト/名前ディレクトリの上書きを許可します。以前の出力を手動で消去する必要なく、反復的な実験を行うのに便利です。 |
save_dir | str | None | 実行出力が保存される正確なディレクトリを指定し、project/name の組み合わせをオーバーライドします。パスは自動インクリメントなしでそのまま使用されるため、連続した実行で同じディレクトリが再利用されます。 |
pretrained | bool または str | True | 事前学習済みの重みからトレーニングを開始するかどうかを決定します。ブール値、またはロードする重みへの文字列パスを指定できます。pretrained=False は、モデルアーキテクチャを維持しながら、ランダムに初期化された重みからトレーニングを行います。 |
cls_remap | bool | True | データセット間でファインチューニングを行う際、クラス名が一致する場所で事前学習済み分類ヘッドの行を新しいモデルにコピーします。これにより、クラス数が異なる場合や異なるクラス順序で一致する場合でも、オーバーラップするクラスは学習済みのバイアスを保持し、ヘッドの幅が変更されていない場合は重みも保持します。 |
optimizer | str | 'auto' | トレーニング用のオプティマイザーの選択。オプションには、モデル設定に基づいて自動選択するための SGD、MuSGD、Adam、Adamax、AdamW、NAdam、RAdam、RMSProp、または auto が含まれます。収束速度と安定性に影響を与えます。 |
seed | int | 0 | トレーニングの乱数シードを設定し、同じ設定での実行において結果の再現性を保証します。 |
deterministic | bool | True | 決定論的アルゴリズムの使用を強制し、再現性を保証しますが、非決定論的アルゴリズムの制限によりパフォーマンスや速度に影響を与える可能性があります。 |
verbose | bool | True | トレーニング中の詳細な出力を有効にし、進捗バー、エポックごとの指標、および追加のトレーニング情報をコンソールに表示します。 |
single_cls | bool | False | トレーニング中、マルチクラスデータセット内のすべてのクラスを単一のクラスとして扱います。二値分類タスクや、分類よりも物体の存在に焦点を当てる場合に有効です。 |
classes | list[int] | None | トレーニングに使用するクラスIDのリストを指定します。トレーニング中に特定のクラスのみを抽出して焦点を当てる場合に便利です。 |
rect | bool | False | 最小パディング戦略を有効にします。バッチ内の画像は共通のサイズに到達するように最小限にパディングされ、最長辺は imgsz と等しくなります。効率と速度を向上させることができますが、モデルの精度に影響を与える可能性があります。 |
multi_scale | float | 0.0 | 各バッチの imgsz を +/- multi_scale(例:0.25 -> 0.75x から 1.25x)でランダムに変動させ、モデルのストライドの倍数に丸めます。0.0 はマルチスケールトレーニングを無効にします。 |
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オプティマイザーのbeta1。現在の更新への過去の勾配の取り込みに影響を与えます。 |
weight_decay | float | 0.0005 | L2正則化項。過学習を防ぐために大きな重みにペナルティを課します。 |
warmup_epochs | float | 3.0 | 学習率ウォームアップを行うエポック数。トレーニング初期に学習率を低い値から初期学習率まで徐々に増加させ、学習を安定させます。 |
warmup_momentum | float | 0.8 | ウォームアップフェーズの初期モメンタム。ウォームアップ期間中に設定されたモメンタムまで徐々に調整されます。 |
warmup_bias_lr | float | 0.1 | ウォームアップフェーズ中のバイアスパラメータに対する学習率。初期エポックでのモデル学習の安定化を助けます。 |
distill_model | str | None | 知識蒸留のためのティーチャーモデルチェックポイント(例:yolo26x.pt)へのパス。設定した場合、スチューデントモデルは凍結されたティーチャーに誘導された追加の蒸留損失でトレーニングされます。 |
dis | float | 6.0 | 標準的な検出損失に追加される蒸留損失の重みです。値を大きくすると、ティーチャーによる特徴ガイダンスの影響が強まります。 |
box | float | 7.5 | 損失関数におけるボックス損失コンポーネントの重み。予測されたバウンディングボックスの座標を正確に予測することにどれだけ重点を置くかに影響を与えます。 |
cls | float | 0.5 | 全損失関数における分類損失の重み。他の成分に対する、正しいクラス予測の重要性に影響します。 |
cls_pw | float | 0.0 | 逆クラス頻度を使用してクラスの不均衡に対処するための、クラス重み付けの累乗。0.0 はクラスの重み付けを無効にし、1.0 は完全な逆頻度重み付けを適用します。0から1の値は部分的な重み付けを提供します。 |
dfl | float | 1.5 | Distribution focal loss (DFL) の重み。バウンディングボックスの境界までの距離を回帰するローカライゼーション項目です。 |
pose | float | 12.0 | 姿勢推定のためにトレーニングされたモデルにおける姿勢損失の重み。姿勢キーポイントの正確な予測に対する重点に影響します。 |
kobj | float | 1.0 | 姿勢推定モデルにおけるキーポイント物体性損失(keypoint objectness loss)の重み。検出の信頼性と姿勢精度のバランスをとります。 |
rle | float | 1.0 | 姿勢推定モデルにおける残差対数尤度推定損失(residual log-likelihood estimation loss)の重み。キーポイント配置の精度に影響します。 |
angle | float | 1.0 | OBB モデルにおける角度損失の重み。指向性バウンディングボックスの角度予測の精度に影響します。 |
dlog | float | 1.0 | 深度推定モデルにおけるスケール不変対数(SILog)ロスの重みであり、深度精度を駆動する主要な項です。 |
dgrad | float | 0.5 | 深度推定モデルにおける勾配ロスの重みであり、深度エッジの誤差をペナルティし、よりシャープな表面境界を促します。 |
dlam | float | 1.0 | 深度推定モデルにおけるSILog損失の分散フォーカスファクター。1.0 は損失を完全にスケール不変にし、0.0 はそれを通常のlog-RMSEに縮小します。 |
nbs | int | 64 | 損失正規化のための名目バッチサイズ。 |
overlap_mask | bool | True | 物体マスクをトレーニングのために単一のマスクにマージするか、各物体ごとに分離したままにするかを決定します。重なりがある場合、マージ中に小さいマスクがより大きいマスクの上に重ねられます。 |
mask_ratio | int | 4 | セグメンテーションマスクのダウンサンプル比率。トレーニング中に使用されるマスクの解像度に影響します。 |
dropout | float | 0.0 | 分類タスクにおける正則化のためのドロップアウト率。トレーニング中にユニットをランダムに省略することで過学習を防ぎます。 |
val | bool | True | トレーニング中のバリデーションを有効にし、別のデータセットでモデルパフォーマンスを定期的に評価できるようにします。 |
plots | bool | True | トレーニングおよびバリデーションの指標、ならびに予測例のプロットを生成して保存し、モデルのパフォーマンスと学習の進捗状況を視覚的に把握できるようにします。 |
compile | bool または str | False | PyTorch 2.x torch.compile グラフコンパイルを backend='inductor' で有効にします。 True → "default" 、 False →無効、または "default" 、 "reduce-overhead" 、 "max-autotune-no-cudagraphs" などの文字列モードを受け入れます。サポートされていない場合は、警告を出してeagerにフォールバックします。 |
channels_last | bool | False | トレーニング中の畳み込みに channels_last (NHWC) メモリフォーマットを使用し、結果を変えずに CUDA Tensor Core GPU を高速化します。CPU や MPS では利点がないため、自動的に無視されます。 |
max_det | int | 300 | トレーニングのバリデーションフェーズ中に保持される最大物体数を指定します。 |
batch 引数は3つの方法で設定できます:
- 固定バッチサイズ: 整数値を設定し(例:
batch=16)、バッチあたりの画像数を直接指定します。 - 自動モード(60% GPUメモリ):
batch=-1を使用して、約60%のCUDAメモリ使用量になるようにバッチサイズを自動的に調整します。 - 使用率の割合による自動モード: 小数値(例:
batch=0.70)を設定し、指定されたGPUメモリ使用量の割合に基づいてバッチサイズを調整します。 - OOM 自動リトライ: 最初のエポック中に CUDA メモリ不足エラーが発生した場合、トレーナーは自動的にバッチサイズを半分にして(最大3回まで)リトライします。これは単一 GPU トレーニングにのみ適用されます。マルチ GPU (DDP) トレーニングの場合は直ちにエラーが発生します。
データ拡張設定とハイパーパラメータ#
データ拡張テクニックは、トレーニングデータに多様性を導入してモデルが未見のデータに対してより良く汎化するのを助けることで、YOLOモデルの頑健性とパフォーマンスを向上させるために不可欠です。次の表は、各データ拡張引数の目的と効果の概要を示しています:
| 引数 | タイプ | デフォルト | サポートされているタスク | 範囲 | 説明 |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 色相環の割合で画像の色相を調整し、色の多様性をもたらします。さまざまな照明条件下でモデルが汎化するのを助けます。 |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 画像の彩度を割合で変更し、色の強さに影響を与えます。さまざまな環境条件をシミュレートするのに役立ちます。 |
hsv_v | float | 0.4 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 画像の明度(明るさ)を割合で修正し、モデルがさまざまな照明下で良好に機能するように支援します。 |
degrees | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 180 | 画像を特定の角度範囲内でランダムに回転させ、さまざまな向きのオブジェクトを認識するモデルの能力を向上させます。 |
translate | float | 0.1 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | 画像を画像サイズの割合で水平および垂直に移動させ、部分的にしか見えないオブジェクトの検出学習を支援します。 |
scale | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0 - 1 | ゲイン係数によって画像を拡大縮小し、カメラからの距離が異なるオブジェクトをシミュレーションします。 |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | 画像を特定の角度でせん断(傾斜)させ、異なる角度から見たオブジェクトの効果を模倣します。 |
perspective | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 0.001 | 画像にランダムな遠近法変換を適用し、3D空間におけるオブジェクトを理解するモデルの能力を強化します。 |
flipud | float | 0 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 指定された確率で画像を上下反転させ、オブジェクトの特性に影響を与えることなくデータのバリエーションを増加させます。 |
fliplr | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 指定された確率で画像を左右反転させます。対称的なオブジェクトの学習やデータセットの多様性向上に役立ちます。 |
bgr | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | 指定された確率で画像のチャンネルをRGBからBGRに反転させます。誤ったチャンネル順序に対する堅牢性を高めるのに役立ちます。 |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | 4つのトレーニング画像を1つに結合し、異なるシーン構成やオブジェクトの相互作用をシミュレーションします。複雑なシーンの理解に非常に効果的です。 |
mixup | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | 2つの画像とそのラベルをブレンドして合成画像を作成します。ラベルノイズと視覚的バリエーションを導入することで、モデルの汎化能力を向上させます。 |
cutmix | float | 0 | detect, segment, pose, obb | 0.0 - 1.0 | 2つの画像の一部を組み合わせて、領域を明確に維持したまま部分的なブレンドを作成します。オクルージョン(遮蔽)のシナリオを作成することでモデルの堅牢性を強化します。 |
copy_paste | float | 0 | segment | 0.0 - 1.0 | 画像間でオブジェクトをコピー&ペーストして、オブジェクトのインスタンスを増加させます。 |
copy_paste_mode | str | flip | segment | - | 使用する copy-paste 戦略を指定します。オプションには 'flip' および 'mixup' が含まれます。 |
auto_augment | str | randaugment | classify | - | 事前定義されたデータ拡張ポリシー('randaugment'、'autoaugment'、または 'augmix')を適用し、視覚的な多様性を通じてモデルのパフォーマンスを向上させます。 |
erasing | float | 0.4 | classify | 0.0 - 1.0 | トレーニング中に画像領域をランダムに消去し、モデルがより明白でない特徴に注目するように促します。 |
augmentations | list | None | detect, segment, semantic, pose, obb | - | 高度なデータ拡張のためのカスタムAlbumentations変換(Python APIのみ)。特殊な拡張ニーズのために変換オブジェクトのリストを受け入れます。 |
これらの設定は、データセットと対象のタスクの特定の要件を満たすように調整できます。さまざまな値を試すことで、最高のモデルパフォーマンスにつながる最適な拡張戦略を見つける助けになります。
トレーニングデータ拡張操作の詳細については、リファレンスセクションをご覧ください。
ログ記録#
YOLO26モデルのトレーニングにおいて、時間の経過に伴うモデルのパフォーマンスを追跡することが役立つ場合があります。ここでロギングの出番となります。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#
TensorBoardは、TensorFlow用の視覚化ツールキットです。TensorFlowグラフの視覚化、グラフの実行に関する定量的メトリクスのプロット、そこを通過する画像などの追加データの表示を行うことができます。
Google ColabでTensorBoardを使用するには:
load_ext tensorboard
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryTensorBoardをローカルで使用するには、以下のコマンドを実行し、 localhost:6006 で結果を表示します。
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryこれによりTensorBoardが読み込まれ、トレーニングログが保存されているディレクトリにアクセスします。
ロガーの設定が完了したら、モデルのトレーニングに進むことができます。すべてのトレーニングメトリクスは選択したプラットフォームに自動的に記録され、これらのログにアクセスしてモデルのパフォーマンスを長期的に監視し、異なるモデルを比較し、改善点を特定できます。
次のステップ#
ホールドアウトデータに対してトレーニング済みモデルを検証して現実世界での精度を確認し、その後ONNX、TensorRT、または他のデプロイ形式にエクスポートします。COCO8ではなく独自のデータでトレーニングしますか?まずデータセットガイドを使用してフォーマットしてください。
よくある質問 (FAQ)#
ローカルのGPUなしでトレーニングできますか?#
はい。Ultralytics Platformクラウドトレーニングには、開始するための無料クレジットが含まれています。データセットをアップロードし、モデルとGPUを選択して、ブラウザから直接トレーニングを行います。
Ultralytics YOLO26を使用して物体検出モデルをトレーニングするにはどうすればよいですか?#
Ultralytics YOLO26を使用してオブジェクト検出モデルをトレーニングするには、Python APIまたはCLIを使用できます。以下に両方の例を示します:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)詳細については、トレーニング設定セクションを参照してください。
Ultralytics YOLO26のトレーニングモードの主な機能は何ですか?#
Ultralytics YOLO26のトレーニングモードの主な機能は以下の通りです:
- 自動データセットダウンロード: COCO、VOC、ImageNetなどの標準データセットを自動的にダウンロードします。
- マルチGPUサポート: 複数のGPUでトレーニングをスケールさせて、処理を高速化します。
- ハイパーパラメータ設定: YAMLファイルまたはCLI引数を介してハイパーパラメータをカスタマイズします。
- 視覚化と監視: 洞察を深めるためのトレーニングメトリクスのリアルタイム追跡。
これらの機能により、トレーニングが効率的になり、ニーズに合わせてカスタマイズ可能になります。詳細については、Trainモードの主な機能セクションをご覧ください。
Ultralytics YOLO26で中断されたセッションからトレーニングを再開する方法は?#
中断されたセッションからトレーニングを再開するには、 resume 引数を True に設定し、最後に保存されたチェックポイントへのパスを指定します。
from ultralytics import YOLO
# Load the partially trained model
model = YOLO("path/to/last.pt")
# Resume training
results = model.train(resume=True)詳細については、中断されたトレーニングの再開に関するセクションを確認してください。
不均衡なデータセットでモデルをトレーニングする方法は?#
クラスの不均衡は、トレーニングデータ内の他のクラスに比べて特定のクラスのサンプル数が大幅に少ない場合に発生します。これにより、モデルの稀なクラスに対するパフォーマンスが低下する可能性があります。Ultralytics YOLOは、この問題に対処するために cls_pw 引数を介したクラス重み付けをサポートしています。
cls_pw 引数は、逆クラス頻度に基づいてクラス重み付けの累乗を制御します:
cls_pw=0.0(デフォルト): クラス重み付けを無効にしますcls_pw=1.0: 完全な逆頻度重み付けを適用します0.0から1.0の間の値: 中程度の不均衡に対する部分的な重み付けを提供します
クラスの重みは (1.0 / class_counts) ^ cls_pw として計算され、平均が1.0になるように正規化されます。
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n.pt")
# Train with full class weighting for severely imbalanced data
results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0)
# Or use partial weighting (0.25) for moderate imbalance
results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)中程度に不均衡なデータセットの場合は cls_pw=0.25 から始め、稀なクラスのパフォーマンスがまだ低い場合は 1.0 に増やします。トレーニングログで計算されたクラスの重みを確認して、重みの分布を確認できます。
AppleシリコンチップでYOLO26モデルをトレーニングできますか?#
はい、Ultralytics YOLO26はMetal Performance Shaders (MPS) フレームワークを利用してAppleシリコンチップでのトレーニングをサポートしています。トレーニングデバイスとして 'mps' を指定してください。
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n.pt")
# Train the model on Apple silicon chip (M1/M2/M3/M4)
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")詳細については、AppleシリコンMPSトレーニングセクションを参照してください。
一般的なトレーニング設定にはどのようなものがあり、どのように構成しますか?#
Ultralytics YOLO26では、バッチサイズ、学習率、エポックなどのさまざまなトレーニング設定を引数を介して構成できます。概要は以下の通りです:
| 引数 | デフォルト | 説明 |
|---|---|---|
model | None | トレーニングに使用するモデルファイルへのパス。 |
data | None | データセットYAMLへのパス(例: coco8.yaml)、または分類用のデータセットディレクトリや名前(例: imagenet10)。 |
epochs | 100 | トレーニングエポックの総数。 |
batch | 16 | バッチサイズ。整数または自動モードで調整可能。 |
imgsz | 640 | トレーニングのターゲット画像サイズ。 |
device | None | cpu 、 0 、 0,1 、または mps などのトレーニング用の計算デバイス。 |
save | True | トレーニングチェックポイントと最終的なモデル重みの保存を有効にする。 |
トレーニング設定に関する詳細なガイドについては、トレーニング設定セクションを確認してください。