Ultralytics YOLO によるモデルトレーニング#
はじめに#
ディープラーニングモデルのトレーニングでは、データを与えてパラメータを調整し、正確な予測を行えるようにします。Ultralytics YOLO26 のトレーニングモードは、最新のハードウェア機能をフルに活用し、物体検出モデルを効果的かつ効率的にトレーニングできるように設計されています。本ガイドでは、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 プラットフォームを通じて、クラウド GPU 上でトレーニングを実行できます。
トレーニングモードの主な機能#
YOLO26 のトレーニングモードの主な機能は次のとおりです。
- データセットの自動ダウンロード: ダウンロードソースを含むデータセット設定は、初回の使用時に自動的にダウンロードされます(例:
yolo train data=coco8.yaml)。サポートされているフォーマットとデータセットについては、データセット概要をご覧ください。 - マルチ GPU サポート: 複数の GPU 間でトレーニングプロセスをシームレスに拡張し、処理を迅速化します。
- ハイパーパラメータ設定: YAML 設定ファイルまたは CLI 引数を介してハイパーパラメータを変更するオプションを提供します。
- 可視化とモニタリング: トレーニングメトリクスのリアルタイム追跡と学習プロセスの可視化により、詳細なインサイトを得ることができます。
使用例#
COCO8 データセットで YOLO26n を 100 エポック、画像サイズ 640 でトレーニングします。トレーニングデバイスは device 引数を使用して指定できます。引数が渡されない場合、GPU が利用可能な場合は 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])torch>=2.4 の公式 PyTorch ホイールを使用している場合、Windows 環境ではマルチ GPU トレーニングは機能しません。Ultralytics は torch.distributed.run を通じて DDP を起動します。そのランデブー手順では、PyTorch 2.4 以降でデフォルトで libuv バックエンドを使用する TCPStore が構築されますが、公式の Windows ホイールは libuv なしでビルドされています。そのため、トレーニングは直ちに終了します。
RuntimeError: use_libuv was requested but PyTorch was built without libuv support
USE_LIBUV=0 を設定してもこの問題は解決しません。これは、ランデブーが直接 TCPStore を構築し、そのコードパスが変数を読み取らないためです。複数の GPU を使用するには Linux または WSL2 でトレーニングを行うか、Windows で device=0 を使用して単一の GPU でトレーニングを行ってください。
複数のデバイスを指定すると(例: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 integration guideを参照してください。
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 integration guideを参照してください。
アイドル GPU トレーニング#
アイドル 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 シリコンチップのサポートにより、強力な Metal Performance Shaders (MPS) フレームワークを利用するデバイスでモデルをトレーニングできるようになりました。MPS は、Apple のカスタムシリコン上で計算および画像処理タスクを実行するための高性能な方法を提供します。
Apple シリコンチップでのトレーニングを有効にするには、トレーニングプロセスを開始する際にデバイスとして「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 は最後に保存されたモデルから重みを読み込み、オプティマイザの状態、学習率スケジューラー、およびエポック数も復元します。これにより、中断したところからトレーニングプロセスをシームレスに継続できます。
train メソッドを呼び出す際に resume 引数を True に設定し、部分的にトレーニングされたモデルの重みが含まれる .pt ファイルへのパスを指定することで、Ultralytics YOLO で簡単にトレーニングを再開できます。
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 | トレーニングエポックの合計数です。各エポックは、データセット全体を1回処理することを表します。この値を調整すると、トレーニング時間とモデル性能に影響する可能性があります。 |
time | float | None | トレーニング時間の上限を時間単位で指定します。設定すると、epochs引数より優先され、指定した時間が経過した後にトレーニングを自動停止できます。時間が制限されたトレーニングシナリオで便利です。 |
patience | int | 100 | 検証メトリクスが改善しない状態で、トレーニングを早期停止するまで待機するエポック数です。性能が頭打ちになった時点でトレーニングを停止し、過学習を防ぎます。 |
batch | intまたはfloat | 16 | バッチサイズです。整数で設定するモード(例: batch=16)、GPUメモリの60%を使用する自動モード(batch=-1)、指定した使用率を使用する自動モード(batch=0.70)の3つのモードがあります。 |
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 | データ読み込みに使用するワーカースレッド数です(Multi-GPUトレーニングの場合はRANKあたり)。データの前処理とモデルへの供給速度に影響し、特に複数GPU構成で有用です。 |
project | str | None | トレーニング出力を保存するプロジェクトディレクトリの名前です。異なる実験を整理して保存できます。 |
name | str | None | トレーニング実行の名前です。プロジェクトフォルダー内にサブディレクトリを作成するために使用し、そこにトレーニングログと出力を保存します。 |
exist_ok | bool | False | Trueの場合、既存のproject/nameディレクトリを上書きできます。以前の出力を手動で削除せずに反復実験を行う場合に便利です。 |
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、またはトレーニング反復回数に基づいてAdamWまたはMuSGDを選択する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またはstr | True | トレーニングの精度を設定します。Trueまたは"fp16"ではFP16、対応するCUDAデバイス上の"bf16"ではBF16、Falseまたは"fp32"ではFP32を使用します。 |
quantize | intまたはstr | None | INT8量子化対応トレーニング(QAT)用に 8 (または "int8" )を設定します。これにより、フェイク量子化をループ内に組み込んでファインチューニングが行われ、重みがINT8エクスポートに耐えられるようになります。量子化対応トレーニングを参照してください。 |
fraction | float、int、またはlist | 1.0 | データセットのサブセットを比率または件数、あるいは[train, val, test]のリストで指定します。1は分割全体、1を超える整数は画像数を意味します。オプションのtestエントリのみ、0/0.0でなしを指定できます。2要素のリストではtestを全体のまま維持します。 |
profile | bool | False | トレーニング中のONNXおよびTensorRTの速度プロファイリングを有効にします。モデルのデプロイ最適化に便利です。 |
freeze | intまたはlist | None | モデルの最初のN層、またはインデックスやモジュール名で指定した特定の層(先頭のmodel.を除く23.cv2)を凍結し、トレーニング可能なパラメーター数を削減します。ファインチューニングや転移学習に便利です。 |
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 | ウォームアップ段階におけるバイアスパラメーターの学習率です。初期エポックのモデル学習を安定させます。デフォルトのoptimizer='auto'では自動的に0.0に設定されるため、使用するにはオプティマイザーを明示的に指定してください。 |
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 | ボックス距離回帰項の重みです。検出ヘッドがreg_max > 1を使用する場合は分布フォーカル損失(DFL)、DFLを使用しないYOLO26(reg_max: 1)では正規化されたボックス距離に対するL1損失です。 |
pose | float | 12.0 | 姿勢推定用にトレーニングされたモデルにおける姿勢損失の重みです。姿勢キーポイントを正確に予測することへの重点度に影響します。 |
kobj | float | 1.0 | 姿勢推定モデルにおけるキーポイントobjectness損失の重みです。検出信頼度と姿勢精度のバランスを取ります。 |
rle | float | 1.0 | 姿勢推定モデルにおける残差対数尤度推定損失の重みです。キーポイント位置特定の精度に影響します。 |
angle | float | 1.0 | OBBモデルにおける角度損失の重みです。Oriented Bounding Boxesの角度予測の精度に影響します。 |
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 | トレーニング中の検証を有効にし、別のデータセットでモデル性能を定期的に評価できるようにします。 |
nms | bool、オプション | None | エポックの検証、チェックポイントの選択、および早期終了に使用される推論ヘッドを選択します。None または True は NMS 付きの多対1を使用し、False は利用可能な場合に NMS フリーヘッドを使用します。どちらのヘッドも学習損失を保持します。 |
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 | None | トレーニング中の畳み込み処理に channels_last (NHWC) メモリフォーマットを使用します。None は、処理速度の低下が測定された Windows を除き、PyTorch 1.11 以降の CUDA 環境で自動的にこれを有効にします。False はこれを無効にし、True は明示的にこれを要求します。PyTorch 1.10 以前、CPU、および MPS ではデフォルトで NCHW のままとなります。 |
max_det | int | 300 | トレーニングおよび検証中の1画像あたりの最大検出数です。detect、segment、pose、OBBの場合、デフォルトの300は、トレーニングまたは検証データのラベル付きオブジェクト数が300を超える場合にのみ、その最大数まで増加します。その他の値は固定され、制限を超えると警告がトリガーされます。 |
batch 引数は、次の 3 つの方法で設定できます。
- 固定バッチサイズ: 整数値(例:
batch=16)を設定し、バッチあたりの画像数を直接指定します。 - 自動モード(GPU メモリの 60%):
batch=-1を使用して、CUDA メモリ使用量が約 60% になるようにバッチサイズを自動的に調整します。 - 利用率の割合を指定した自動モード: 割合の値(例:
batch=0.70)を設定し、指定された GPU メモリ使用量の割合に基づいてバッチサイズを調整します。 - OOM 自動リトライ: 最初のエポック中に CUDA のメモリ不足エラーが発生した場合、トレーナーは自動的にバッチサイズを半分にして再試行します(最大 3 回まで)。これはシングル GPU トレーニングのみに適用され、マルチ GPU (DDP) トレーニングでは即座にエラーが発生します。
- 適合するサイズが見つからない場合: 使用可能なプロファイルを生成できる候補バッチサイズがない場合、AutoBatchは関係のないデフォルト値に暗黙的にフォールバックせず、明確な
RuntimeErrorを発生させます。
拡張設定とハイパーパラメータ#
トレーニングデータに変動性を導入してモデルが未見のデータに対してより良く汎化できるようにすることで、YOLO モデルの堅牢性とパフォーマンスを向上させるために拡張技術は不可欠です。次の表では、各拡張引数の目的と効果について説明します。
| 引数 | 型 | デフォルト | サポートされるタスク | 範囲 | 説明 |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect、segment、semantic、depth、classify、pose、obb | 0.0 - 1.0 | 画像の色相をカラーホイールの一部の割合だけ調整し、色の変動性を導入します。異なる照明条件に対するモデルの汎化に役立ちます。classifyの場合、これはauto_augment=Noneのときにのみ適用されます。 |
hsv_s | float | 0.7 | detect、segment、semantic、depth、classify、pose、obb | 0.0 - 1.0 | 画像の彩度を一定の割合だけ変更し、色の強度に影響を与えます。異なる環境条件のシミュレーションに役立ちます。classifyの場合、これはauto_augment=Noneのときにのみ適用されます。 |
hsv_v | float | 0.4 | detect、segment、semantic、depth、classify、pose、obb | 0.0 - 1.0 | 画像の値(明るさ)を一定の割合だけ変更し、さまざまな照明条件でモデルが適切に動作できるようにします。classifyの場合、これはauto_augment=Noneのときにのみ適用されます。 |
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 | tuple | 0.5 | detect、segment、semantic、depth、classify、pose、obb | 0 - 1、または明示的な(min, max)タプル(classifyには非対応) | ゲイン係数によって画像をスケーリングし、カメラから異なる距離にあるオブジェクトをシミュレートします。 |
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、obb | 0.0 - 1.0 | 貼り付け対象となるオブジェクトの割合です。flipはそれらを画像内で反転させ、mixupはその値を画像間適用確率としても使用します。 |
copy_paste_mode | str | flip | segment、obb | - | 使用する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、depth、pose、obb | - | 高度なデータ拡張用のカスタムAlbumentations変換です(Python APIのみ)。特殊なデータ拡張のニーズに対応する変換オブジェクトのリストを受け入れます。 |
これらの設定は、データセットと特定のタスクの要件に合わせて調整できます。さまざまな値を試すことで、最高のモデルパフォーマンスをもたらす最適な拡張戦略を見つけることができます。
トレーニング拡張操作の詳細については、リファレンスセクションを参照してください。
ログ記録#
トレーニングの指標、プロット、チェックポイントは常に実行ディレクトリに書き込まれ、Ultralyticsはそれらをインストールして有効にした任意の実験トラッカー(Comet、ClearML、TensorBoard、MLflow、Weights & Biases、DVCLive)にもストリーミングします。各ロガーはUltralytics settings(例: yolo settings tensorboard=True)を通じて切り替えられます。最も一般的な3つの設定を以下に示します。
Comet#
Cometは、データサイエンティストや開発者が実験やモデルを追跡、比較、説明、最適化できるプラットフォームです。リアルタイムメトリクス、コード差分、ハイパーパラメータ追跡などの機能を提供します。
Comet を使用するには:
# pip install comet_ml
import comet_ml
comet_ml.init()Web サイトで 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#
はい。Ultralytics プラットフォームクラウドトレーニングには、開始するための無料クレジットが含まれています。データセットをアップロードし、モデルと GPU を選択して、ブラウザから直接トレーニングを行います。
Ultralytics YOLO26 を使用して物体検出モデルをトレーニングするには、Python API または CLI を使用できます。以下は両方の例です。
シングル GPU および CPU トレーニングの例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 のトレーニングモードの主な機能は次のとおりです。
- データセットの自動ダウンロード: COCO、VOC、ImageNet などの標準的なデータセットを自動的にダウンロードします。
- マルチ GPU サポート: 複数の GPU 間でトレーニングを拡張し、処理を高速化します。
- ハイパーパラメータ設定: YAML ファイルまたは CLI 引数を介してハイパーパラメータをカスタマイズします。
- 可視化とモニタリング: 詳細なインサイトを得るためのトレーニングメトリクスのリアルタイム追跡。
これらの機能により、ニーズに合わせて効率的かつカスタマイズ可能なトレーニングが可能になります。詳細については、トレーニングモードの主な機能セクションを参照してください。
中断したセッションからトレーニングを再開するには、
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に増やします。トレーニングログで計算されたクラスの重みを確認して、重みの分布を検証できます。はい、Ultralytics YOLO26 は、Metal Performance Shaders(MPS)フレームワークを利用して、Apple シリコンチップでのトレーニングをサポートしています。トレーニングデバイスとして 'mps' を指定してください。
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 では、引数を使用して、バッチサイズ、学習率、エポックなどのさまざまなトレーニング設定を構成できます。以下に簡単な概要を示します。
引数 デフォルト 説明 modelNoneトレーニング用モデルファイルのパス。 dataNoneトレーニング用データセット YAML(例: coco8.yaml)、または分類用のデータセットディレクトリまたは名前(例:imagenet10)。epochs100トレーニングエポックの総数。 batch16バッチサイズ。整数または自動モードとして調整可能です。 imgsz640トレーニングのターゲット画像サイズ。 deviceNonecpu、0、0,1、またはmpsのようなトレーニング用の計算デバイス。saveTrueトレーニングのチェックポイントと最終的なモデルの重みの保存を有効にします。 トレーニング設定に関する詳細なガイドについては、トレーニング設定のセクションを確認してください。