Ultralytics YOLOによるモデルのトレーニング#
はじめに#
ディープラーニングモデルのトレーニングでは、データをモデルに入力し、正確な予測ができるようにパラメーターを調整します。Ultralytics YOLO26のtrainモードは、最新のハードウェア性能を最大限に活用し、物体検出モデルを効果的かつ効率的にトレーニングできるよう設計されています。このガイドでは、YOLO26の堅牢な機能を使って独自のモデルをトレーニングするために必要な情報をすべて説明します。Ultralyticsをまだインストールしていない場合は、クイックスタートガイドから始めてください。
トレーニングの使用例については、未リリースのYOLO27プレビューをご覧ください。
視聴: Google Colab でカスタムデータセットを使って YOLO モデルをトレーニングする方法。
トレーニングにUltralytics YOLOを選ぶ理由#
YOLO26のtrainモードを選ぶべき理由をいくつかご紹介します。
- 効率性:単一GPU構成でも複数GPUに拡張する場合でも、ハードウェアを最大限に活用できます。
- 汎用性:COCO、VOC、ImageNetなどの既存データセットに加え、カスタムデータセットでもトレーニングできます。
- 使いやすさ:シンプルながら強力なCLIとPythonインターフェースにより、スムーズにトレーニングできます。
- ハイパーパラメーターの柔軟性:モデルの性能を微調整するために、幅広いハイパーパラメーターをカスタマイズできます。さらに細かく制御するには、トレーナー自体をカスタマイズできます。
- クラウドトレーニング:Ultralytics Platformを通じてクラウドGPUでトレーニングでき、リアルタイムの指標と自動チェックポイント保存を利用できます。
trainモードの主な機能#
YOLO26のtrainモードの主な機能は次のとおりです。
- データセットの自動ダウンロード:ダウンロード元が指定されたデータセット設定は、初回使用時に自動でダウンロードされます(例:
yolo train data=coco8.yaml)。対応する形式とデータセットについては、データセットの概要をご覧ください。 - マルチGPU対応:複数のGPUにトレーニングをシームレスに拡張して、処理を高速化できます。
- ハイパーパラメーターの設定:YAML設定ファイルまたはCLI引数を使って、ハイパーパラメーターを変更できます。
- 可視化とモニタリング:トレーニング指標をリアルタイムで追跡し、学習プロセスを可視化することで、より深い分析が可能になります。
使用例#
COCO8データセットでYOLO26nを、画像サイズ640、エポック数100でトレーニングします。トレーニングデバイスはdevice引数で指定できます。引数を指定しない場合、利用可能であればGPU device=0が使用され、そうでなければdevice='cpu'が使用されます。トレーニング引数の一覧は、以下のArgumentsセクションをご覧ください。
Windowsでは、スクリプトとしてトレーニングを起動するとRuntimeErrorが発生することがあります。解決するには、トレーニングコードの前にif __name__ == "__main__":ブロックを追加します。
デバイスは自動的に決定されます。GPUが利用可能な場合はGPU(デフォルトのCUDAデバイス0)が使用され、それ以外の場合はCPUでトレーニングが開始されます。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n.yaml") # YAMLから新しいモデルを構築します
model = YOLO("yolo26n.pt") # 事前トレーニング済みモデルを読み込みます(トレーニングにはこちらを推奨します)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # YAMLからモデルを構築し、重みを転送します
# モデルをトレーニングする
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)マルチGPUトレーニング#
マルチGPUトレーニングでは、複数のGPUにトレーニング負荷を分散し、利用可能なハードウェアリソースをより効率的に活用できます。この機能はPython APIとコマンドラインインターフェースの両方で利用できます。マルチGPUトレーニングを有効にするには、使用するGPUデバイスIDを指定します。
GPUを2台使用してトレーニングするには、CUDAデバイス0と1を指定して次のコマンドを実行します。必要に応じてGPUを追加してください。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n.pt") # 事前トレーニング済みモデルを読み込みます(トレーニングにはこちらを推奨します)
# GPUを2台使用してモデルをトレーニングします
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# 最もアイドル状態のGPUを2台使用してモデルをトレーニングします
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])torch>=2.4用の公式PyTorchホイールでは、Windows上でマルチGPUトレーニングを実行できません。Ultralyticsはtorch.distributed.runを通じてDDPを起動します。このランデブーステップではTCPStoreが構築されますが、PyTorch 2.4以降、デフォルトのバックエンドはlibuvになっており、公式Windowsホイールはlibuvなしでビルドされています。そのため、トレーニングは次のエラーで直ちに終了します。
RuntimeError: use_libuv was requested but PyTorch was built without libuv support
ランデブー処理がTCPStoreを直接構築し、そのコードパスでは変数を読み取らないため、USE_LIBUV=0を設定しても解決しません。複数の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ビルドを使用します。ROCmのインストール、マルチGPUトレーニング、AMPに関する注意事項、エクスポート済みモデルのMIGraphX推論については、AMD統合ガイドをご覧ください。
Intel GPUでのトレーニングではdevice=xpu:0を使用します。複数のXPU IDを使用する場合は、XCCLを提供するPyTorchビルドが必要です。
Huawei Ascend NPUでのトレーニング#
Ultralyticsはtorch_npuを通じて、Huawei Ascend NPUでのトレーニングと検証に対応しています。PyTorch用Ascend拡張機能のインストールガイドに従って、互換性のあるCANN、PyTorch、torch_npuの各バージョンをインストールし、Ultralyticsを起動する前にCANN環境を読み込んでください。
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Ascend NPUを1台使用してトレーニングします
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# HCCLを使用してAscend NPUを2台でトレーニングします
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を自動的に選択し、手動でGPUを選ばずにリソースの使用を最適化できます。この機能は、使用率の指標とVRAMの空き状況に基づいて、利用可能なGPUを特定します。
トレーニングに最もアイドル状態のGPUを自動選択して使用するには、-1デバイスパラメーターを使用します。共有コンピューティング環境や複数のユーザーが利用するサーバーで特に便利です。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n.pt") # 事前トレーニング済みモデルを読み込みます(トレーニングにはこちらを推奨します)
# 最もアイドル状態のGPUを1台使用してトレーニングします
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# 最もアイドル状態のGPUを2台使用してトレーニングします
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])自動選択アルゴリズムは、次の条件を優先します。
- 現在の使用率が低いGPU
- 利用可能なメモリ(空きVRAM)が多いGPU
この機能は、共有コンピューティング環境や、異なるモデルで複数のトレーニングジョブを実行する場合に特に有用です。システムの状況の変化に自動的に対応し、手動操作なしで最適なリソース割り当てを実現します。
Apple SiliconでのMPSトレーニング#
Ultralytics YOLOモデルにAppleシリコンチップのサポートが統合されたため、強力なMetal Performance Shaders(MPS)フレームワークを利用するデバイスでモデルをトレーニングできるようになりました。MPSは、Apple独自のシリコン上で計算や画像処理タスクを高性能に実行するためのフレームワークです。
Appleシリコンチップでトレーニングを有効にするには、トレーニングの開始時にデバイスとして「mps」を指定します。Pythonとコマンドラインでの指定例を以下に示します。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n.pt") # 事前トレーニング済みモデルを読み込みます(トレーニングにはこちらを推奨します)
# MPSを使用してモデルをトレーニングします
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Appleシリコンチップの計算能力を活用することで、トレーニングタスクをより効率的に処理できます。詳しいガイダンスと高度な設定オプションについては、PyTorch MPSドキュメントをご覧ください。
中断したトレーニングの再開#
深層学習モデルを扱う際、以前保存した状態からトレーニングを再開できることは重要な機能です。トレーニングプロセスが予期せず中断された場合や、新しいデータまたは追加のエポックでモデルのトレーニングを続けたい場合など、さまざまな状況で役立ちます。
トレーニングを再開すると、Ultralytics YOLOは最後に保存されたモデルの重みを読み込み、オプティマイザーの状態、学習率スケジューラー、エポック番号、データセットも復元します。これにより、中断したところからトレーニングプロセスをシームレスに続けることができます。チェックポイントのデータセットとは別のデータセットで続行するには、data=とともにresumeを明示的に渡します。
trainメソッドを呼び出す際に、resume引数をTrueに設定し、部分的にトレーニングされたモデルの重みを含む.ptファイルへのパスを指定すると、Ultralytics YOLOで簡単にトレーニングを再開できます。
以下は、Pythonとコマンドラインを使用して中断したトレーニングを再開する例です。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("path/to/last.pt") # 部分的にトレーニングされたモデルを読み込む
# トレーニングを再開する
results = model.train(resume=True)resume=Trueを設定すると、train関数は'path/to/last.pt'ファイルに保存された状態を使用して、中断したところからトレーニングを続けます。resume引数を省略するか、Falseに設定すると、train関数は新しいトレーニングセッションを開始します。
チェックポイントはデフォルトで各エポックの終了時に保存されます。また、save_period引数を使用して固定間隔で保存することもできます。そのため、トレーニングを再開するには、少なくとも1エポックを完了する必要があります。
トレーニング設定#
YOLOモデルのトレーニング設定には、トレーニングプロセス中に使用するさまざまなハイパーパラメーターと構成が含まれます。これらの設定は、モデルのパフォーマンス、速度、精度に影響します。主なトレーニング設定には、バッチサイズ、学習率、モメンタム、重み減衰があります。さらに、オプティマイザー、損失関数、トレーニングデータセットの構成も、トレーニングプロセスに影響する場合があります。パフォーマンスを最適化するには、これらの設定を慎重に調整し、実験することが重要です。
MuSGDオプティマイザー#
YOLO26では、MuSGDは標準的なSGDの更新とMuonスタイルの直交化更新を組み合わせたハイブリッドオプティマイザーです。
直交化されたMuon更新によって最適化の安定性を高められるため、YOLO26の長時間トレーニングや大規模なデータセットでの使用が推奨されます。
2Dの線形重みと、2Dに再整形された4Dの畳み込みフィルターのみが、SGDとともにMuonスタイルの更新を受けます。バッチ正規化の重みやバイアス項など、その他すべてのパラメーターには標準的なSGDが適用されます。
optimizer=autoを使用すると、Ultralyticsは長時間のトレーニング(通常、反復回数が10000を超える場合)にMuSGDを自動的に選択します。短時間のトレーニングでは、トレーナーはAdamWに切り替えます。autoモードでは、トレーナーが学習率も選択するため、ユーザーが指定したlr0は無視されます。これらの設定を手動で制御するには、optimizer=AdamW lr0=0.001などのオプティマイザーを明示的に選択します。
使用例:
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD実装についてはultralytics/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またはstr | 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)、Intel XPU(device=xpu:0)、またはアイドル状態の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を指定すると、トレーニング反復回数に基づいてAdamWまたはMuSGDが選択されます。収束速度と安定性に影響します。 |
seed | int | 0 | トレーニングの乱数シードを設定し、同じ構成で実行した場合に結果を再現できるようにします。 |
deterministic | bool | True | 決定論的アルゴリズムの使用を強制します。再現性を確保できますが、非決定論的アルゴリズムが制限されるため、性能や速度に影響する場合があります。 |
verbose | bool | True | トレーニング中の詳細な出力を有効にし、進行状況バー、エポックごとのメトリクス、その他のトレーニング情報をコンソールに表示します。 |
single_cls | bool | False | マルチクラスデータセットのすべてのクラスを、トレーニング中に単一のクラスとして扱います。二値分類タスクや、クラス分類よりも物体の有無に注目する場合に便利です。 |
classes | list[int] | None | トレーニング対象とするクラスIDのリストを指定します。トレーニング時に特定のクラスだけに絞り込む場合に便利です。 |
rect | bool | False | 最小パディング戦略を有効にします。バッチ内の画像は、最長辺が imgsz になる共通サイズに合わせて、最小限のパディングが適用されます。効率と速度が向上する可能性がありますが、モデルの精度に影響する場合があります。標準のYOLOトレーナーでは、この設定にかかわらず、detect、segment、pose、OBBの検証に rect=True が使用されます。 |
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、"bf16"は対応するCUDAデバイスで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)です。デフォルトのoptimizer='auto'では無視されます。使用するには、オプティマイザーを明示的に指定してください。 |
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 | 姿勢推定モデルにおけるキーポイントの物体らしさ損失の重みです。検出信頼度と姿勢精度のバランスを調整します。 |
rle | float | 1.0 | 姿勢推定モデルにおける残差対数尤度推定損失の重みです。キーポイントの位置特定精度に影響します。 |
angle | float | 1.0 | OBBモデルにおける角度損失の重みです。回転バウンディングボックスの角度予測の精度に影響します。 |
dlog | float | 1.0 | 深度推定モデルにおけるスケール不変対数(SILog)損失の重みです。深度精度を左右する主要な項です。 |
dgrad | float | 0.5 | 深度推定モデルにおける勾配損失の重みです。深度エッジの誤差にペナルティを課し、表面境界をより鮮明にします。 |
dlam | float | 1.0 | 深度推定モデルにおけるSILog損失の分散重視係数です。1.0では損失が完全なスケール不変となり、0.0では単純な対数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を使用するone-to-manyヘッドが使われ、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環境で自動的に有効になります。Windowsでは速度が低下することが確認されています。Falseでは無効になり、Trueでは明示的に有効化されます。CPUまたはMPSでのトレーニングは常にNCHWのままです(Trueは警告とともに無視されます)。 |
max_det | int | 300 | トレーニング中の検証における、画像あたりの最大検出数です。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, semantic, pose, obb | 0.0 - 1.0 | 2枚の画像の一部を組み合わせ、領域を区別したまま部分的にブレンドします。オクルージョンの状況を作り出すことで、モデルの堅牢性を高めます。 |
copy_paste | float | 0 | segment, semantic, obb | 0.0 - 1.0 | 貼り付け対象となるオブジェクトの割合です。flip は画像内でオブジェクトを反転させ、mixup は画像間で適用する確率としてもこの値を使用します。 |
copy_paste_mode | str | flip | segment, semantic, 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の設定から切り替えます(例:yolo settings tensorboard=True)。以下に、最も一般的な3つの設定例を示します。
Comet#
Cometは、データサイエンティストや開発者が実験とモデルを追跡、比較、説明、最適化できるプラットフォームです。リアルタイムメトリクス、コード差分、ハイパーパラメーターの追跡などの機能を提供します。
Cometを使用するには:
# pip install comet_ml
import comet_ml
comet_ml.login()CometのWebサイトでアカウントにサインインし、APIキーを取得してください。実験を記録するには、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ではなく独自のデータでトレーニングしますか?まずデータセットガイドに従ってフォーマットしてください。
よくある質問#
はい。Ultralytics Platformのクラウドトレーニングには、すぐに利用できる無料クレジットが含まれています。データセットをアップロードし、モデルとGPUを選択すれば、ブラウザーから直接トレーニングできます。
Ultralytics YOLO26を使用して物体検出モデルをトレーニングするには、Python APIまたはCLIを使用できます。以下にそれぞれの例を示します。
単一GPUおよびCPUでのトレーニング例from ultralytics import YOLO # モデルを読み込む model = YOLO("yolo26n.pt") # 事前トレーニング済みモデルを読み込みます(トレーニングにはこちらを推奨します) # モデルをトレーニングする 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 # 部分的にトレーニングされたモデルを読み込む model = YOLO("path/to/last.pt") # トレーニングを再開する 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 # 事前トレーニング済みモデルを読み込む model = YOLO("yolo26n.pt") # クラス不均衡が深刻なデータで、クラス重み付けを完全に適用してトレーニングする results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0) # または、中程度の不均衡に対して部分的な重み付け(0.25)を使用する 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 # 事前トレーニング済みモデルを読み込む model = YOLO("yolo26n.pt") # Appleシリコンチップ(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トレーニングチェックポイントと最終モデルの重みの保存を有効にします。 トレーニング設定の詳細なガイドについては、トレーニング設定のセクションを確認してください。