YOLO26トレーニングレシピ#
はじめに#
このガイドでは、COCO上で公式のYOLO26事前学習済みチェックポイントを生成するために使用した正確なトレーニングレシピを説明します。ここに示すすべてのハイパーパラメータは、エポックごとのトレーニングログおよび実行時のコードリビジョンとともに、リリース済みの.pt重みにすでに組み込まれており、すべてをプログラムから検査できます。
公式チェックポイントに何が投入されたのかを知ることは、アーキテクチャだけでなく、性能を形作った学習率スケジュール、データ拡張パイプライン、損失の重みも含めて、ファインチューニング時のより良い判断に役立ちます。どのデータ拡張を維持するか、どの損失関数の重みを調整するか、データセットのサイズに最適なオプティマイザー設定は何かを判断できます。
このページでは、リリース済みチェックポイントに記録されたハイパーパラメータを扱います。アーキテクチャ、損失とラベル割り当ての変更、アブレーションなど、その背景にある考え方については、Ultralytics YOLO26: Unified Real-Time End-to-End Vision Modelsをお読みください。
トレーニングの概要#
すべてのYOLO26ベースモデルは、2段階でトレーニングされました。まず**Objects365v1で150エポックの事前学習を行い、その後COCOでファインチューニングしました。両段階とも、640x640の解像度、MuSGDオプティマイザー、バッチサイズ128**で実行されました。YOLO26のチェックポイントは、ランダムな重みからCOCO上で直接トレーニングされていません。そのため、ほとんどのサイズではCOCO段階が短く、COCO段階のハイパーパラメータは進化的探索によって決定されました。すべてのモデルサイズの完全なトレーニングログとメトリクスはリリース済みチェックポイント内に保存され、Ultralytics Platform上でチャートとして表示されます。
すべてのサイズに共通する主な設計上の選択:
- COCO段階の前に、すべてのサイズで**Objects365による事前学習**を実施
- **デュアルヘッドトレーニング**では1対多と1対1の両方の教師あり学習を行い、推論ではデフォルトでNMSを使用し、
nms=FalseでNMSフリーのヘッドを選択します - 重み行列(2D線形重みおよび2Dにリシェイプされた4D畳み込みフィルター)に対するSGDとMuon方式の直交化更新を組み合わせた**MuSGDオプティマイザー**
- 最終エポックでは強力なモザイク拡張(~0.9-1.0の確率)を無効化(事前学習では
close_mosaic=8、COCOではclose_mosaic=10) - 異なるサイズの物体に対応するための積極的なスケール拡張(0.5-0.95)
- ほとんどのサイズで回転・せん断を最小限に抑え、幾何学的な歪みを低減
ステージ1: Objects365による事前学習#
すべてのYOLO26 COCOチェックポイントは、同じサイズのObjects365v1チェックポイントからファインチューニングされました。これらの事前学習済み重みも公開されており、Objects365データセットページで説明しています。各COCOチェックポイントでは、.ptファイルに埋め込まれたトレーニング設定内で開始時の重みを指定しています。以下のYOLO26チェックポイントのトレーニング引数を検査するセクションでは、その読み取り方法を示します:
| COCOチェックポイント | 開始時の重み |
|---|---|
yolo26n.pt | yolo26n-objv1-150.pt |
yolo26s.pt | yolo26s-objv1-150.pt |
yolo26m.pt | yolo26m-objv1-150.pt |
yolo26l.pt | yolo26l-objv1-150.pt |
yolo26x.pt | yolo26x-objv1-150.pt |
事前学習では、探索によって得た値ではなく、主にデフォルト設定を使用しました。lr0、lrf、momentum、weight_decay、box、clsはdefault.yamlと一致し、warmup_epochs、close_mosaic、dflは上書きされました。warmup_epochs(Xの場合)、拡張の強度、表の後に記載する内部MuSGDおよびヘッドの重みを除き、設定はすべてのサイズで共通です:
| 設定 | 値 |
|---|---|
data | Objects365v1 |
epochs | 150 |
imgsz | 640 |
batch | 128 |
optimizer | MuSGD |
lr0 / lrf | 0.01 / 0.01 |
momentum | 0.937 |
weight_decay | 0.0005 |
warmup_epochs | 1(Xでは2) |
close_mosaic | 8 |
box / cls / dfl | 7.5 / 0.5 / 6.0 |
| 拡張 | N | S | M | L | X |
|---|---|---|---|---|---|
mosaic | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
mixup | 0.0 | 0.05 | 0.15 | 0.15 | 0.2 |
copy_paste | 0.1 | 0.15 | 0.4 | 0.5 | 0.6 |
scale | 0.5 | 0.9 | 0.9 | 0.9 | 0.9 |
これらの表では、事前学習に影響する設定を扱っており、完全な設定は網羅していません。チェックポイントには100を超える引数が記録されているため、正確な一覧については、以下に示すようにtrain_argsを出力してください。
上級: 事前学習の内部パラメータ
事前学習では、内部トレーニングパラメータで説明しているものと同種の実験ブランチパラメータも変化させました。cls_wはすべてのサイズで1.0でした。
| 設定 | N | S | M | L | X |
|---|---|---|---|---|---|
muon_w | 0.45 | 0.5 | 0.45 | 0.45 | 0.5 |
sgd_w | 0.55 | 0.5 | 0.55 | 0.55 | 0.6 |
o2m | 0.1 | 0.1 | 0.1 | 1.0 | 1.0 |
ステージ1を再利用するために、Objects365データセットは必要ありません。事前学習済みチェックポイントは、他のUltralyticsアセットと同様に自動的にダウンロードされるため、それらを独自のデータセットでファインチューニングできます:
from ultralytics import YOLO
model = YOLO("yolo26s-objv1-150.pt")
results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)代わりにCOCO段階を再実行するには、同じ重みから開始し、以下の表からそのサイズに対応するステージ2のオプティマイザー、損失、拡張の値を渡してください。これらの表には、warmup_momentum、warmup_bias_lr、perspective、flipud、cutmixなど、デフォルトではない小規模な引数は含まれていないため、正確な設定についてはチェックポイントからtrain_argsを出力してください。内部パラメータはリリース済みパッケージでは拒否されるため、実験ブランチが必要です。
YOLO26チェックポイントのトレーニング引数を検査する#
すべてのUltralyticsチェックポイントには、生成に使用した完全なトレーニング設定が保存されているため、このページの各数値を自分で検証できます:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
print(model.ckpt["train_args"])出力には100を超えるエントリから成る完全な設定が一覧表示され、このページで説明しているすべてのレシピ値が含まれます。yolo26n.ptの抜粋:
batch: 128
...
box: 5.62767
...
close_mosaic: 10
cls: 0.56099
...
dfl: 9.03871
...
epochs: 245
...
lr0: 0.0054
lrf: 0.04952
...
optimizer: MuSGDこれは、公式リリースでも独自のファインチューニング済みモデルでも、任意の.ptチェックポイントで機能します。設定可能なトレーニング引数の完全な一覧については、トレーニング設定リファレンスを参照してください。
トレーニング曲線を表示する#
保存されるのはtrain_argsだけではありません。すべてのチェックポイントには、生成時の実行におけるエポックごとの完全なresults.csvと、最終的な検証メトリクスも保存されています。公式YOLO26チェックポイントの曲線はUltralytics Platformで公開されており、任意の.ptファイルをプロジェクトにドラッグ&ドロップして同じデータをチャート化できます。メタデータはファイルから自動的に解析されます。
各チェックポイントには、そのチェックポイントを生成した段階が記録されています。そのため、COCOの曲線はyolo26s.ptに、150エポックのObjects365の曲線はyolo26s-objv1-150.ptに保存されています。
コードリビジョンを確認する#
ckpt["git"]にはチェックポイントを生成したコミットが記録されており、これらのコミットはUltralyticsリポジトリの公開実験ブランチに存在します。そのため、正確なトレーニングコードをチェックアウトできます:
from ultralytics import YOLO
print(YOLO("yolo26n.pt").ckpt["git"])
# {'root': ..., 'branch': 'exp-main', 'commit': 'cb13d5f9cfbd6f299da3620c625f81d721dc2849', ...}git fetch origin cb13d5f9cfbd6f299da3620c625f81d721dc2849
git checkout cb13d5f9cfbd6f299da3620c625f81d721dc2849実験ブランチには、mainに取り込まれなかった作業も含まれています。たとえば、設定可能なo2mやcls_wなどです。以下で説明するハイパーパラメータを使用してmainでトレーニングしてもビット単位で同一にはなりませんが、公開済みメトリクスとの差は無視できる範囲に収まります。
モデルサイズ別YOLO26トレーニングハイパーパラメータ#
これらは、上記のObjects365の重みに適用するステージ2の値です。以下の表では、レシピをオプティマイザーとスケジュール、損失の重み、拡張のカテゴリ別に整理しています。すべての値は、リリース済みチェックポイントに埋め込まれたtrain_argsから直接取得しています。
オプティマイザーと学習率#
これらのオプティマイザーとスケジュール設定により、各サイズのCOCOファインチューニングを実行しました。Nモデルが他のモデルと異なる点に注目してください:
| 設定 | N | S | M | L | X |
|---|---|---|---|---|---|
optimizer | MuSGD | MuSGD | MuSGD | MuSGD | MuSGD |
lr0 | 0.0054 | 0.00038 | 0.00038 | 0.00038 | 0.00038 |
lrf | 0.0495 | 0.882 | 0.882 | 0.882 | 0.882 |
momentum | 0.947 | 0.948 | 0.948 | 0.948 | 0.948 |
weight_decay | 0.00064 | 0.00027 | 0.00027 | 0.00027 | 0.00027 |
warmup_epochs | 0.98 | 0.99 | 0.99 | 0.99 | 0.99 |
epochs | 245 | 70 | 80 | 60 | 40 |
batch | 128 | 128 | 128 | 128 | 128 |
imgsz | 640 | 640 | 640 | 640 | 640 |
Nモデルでは、初期学習率を高く設定し、急速に減衰させました(lrf=0.0495)。一方、S/M/L/Xモデルでは、初期LRを大幅に低く設定し、より緩やかなスケジュールを使用しました(lrf=0.882)。これは、小さいモデルと大きいモデルで収束の動態が異なることを反映しています。小さいモデルが効果的に学習するには、より積極的な更新が必要です。
損失の重み#
損失の重みは、検出損失の3つの要素、すなわちバウンディングボックスIoU回帰(box)、分類(cls)、ボックス距離回帰項(dfl)のバランスを取ります。DFLを使用しないYOLO26では、dflのゲインを分布焦点損失ではなく、正規化されたボックス距離に対するL1損失の重み付けに転用している点に注意してください:
| 設定 | N | S | M | L | X |
|---|---|---|---|---|---|
box | 5.63 | 9.83 | 9.83 | 9.83 | 9.83 |
cls | 0.56 | 0.65 | 0.65 | 0.65 | 0.65 |
dfl | 9.04 | 0.96 | 0.96 | 0.96 | 0.96 |
Nモデルではdflの距離回帰項を重視し、S/M/L/XモデルではIoUベースのボックス回帰に重点を移しています。分類損失は、すべてのサイズで比較的一貫しています。
拡張パイプライン#
各手法の詳しい説明については、YOLOデータ拡張ガイドを参照してください。
| 設定 | N | S | M | L | X |
|---|---|---|---|---|---|
mosaic | 0.909 | 0.992 | 0.992 | 0.992 | 0.992 |
mixup | 0.012 | 0.05 | 0.427 | 0.427 | 0.427 |
copy_paste | 0.075 | 0.404 | 0.304 | 0.404 | 0.404 |
scale | 0.562 | 0.9 | 0.95 | 0.95 | 0.95 |
fliplr | 0.606 | 0.304 | 0.304 | 0.304 | 0.304 |
degrees | 1.11 | ~0 | ~0 | ~0 | ~0 |
shear | 1.46 | ~0 | ~0 | ~0 | ~0 |
translate | 0.071 | 0.275 | 0.275 | 0.275 | 0.275 |
hsv_h | 0.014 | 0.013 | 0.013 | 0.013 | 0.013 |
hsv_s | 0.645 | 0.353 | 0.353 | 0.353 | 0.353 |
hsv_v | 0.566 | 0.194 | 0.194 | 0.194 | 0.194 |
bgr | 0.106 | 0.0 | 0.0 | 0.0 | 0.0 |
~0として示されている値は、実際のチェックポイントでは0.01未満です(たとえば、Sモデルのdegrees=0.00012)。この拡張は実質的に無効になっています。
大きいモデルでは、全体的により積極的な拡張(より高いmixupとスケール)を使用します。これは、容量が大きく、強力な正則化のメリットを得られるためです。Nモデルは、意味のある回転、せん断、BGR拡張を使用する唯一のサイズです。
内部トレーニングパラメータ#
上級: パイプラインの内部パラメータ
チェックポイントには、実験トレーニングブランチで使用されたパラメータも含まれていますが、default.yamlではユーザーが設定可能な項目として公開されていません:
| 設定 | 説明 | N | S | M | L | X |
|---|---|---|---|---|---|---|
muon_w | MuSGDにおけるMuon更新の重み | 0.528 | 0.436 | 0.436 | 0.436 | 0.436 |
sgd_w | MuSGDにおけるSGD更新の重み | 0.674 | 0.479 | 0.479 | 0.479 | 0.479 |
cls_w | 内部分類の重み | 2.74 | 3.48 | 3.48 | 3.48 | 3.48 |
o2m | One-to-manyヘッドの損失の重み | 1.0 | 0.705 | 0.705 | 0.705 | 0.705 |
topk | Top-kラベル割り当て | 8 | 5 | 5 | 5 | 5 |
ファインチューニング時の意味については、これらのパラメータに関するFAQ項目を参照してください。
独自のデータセットでYOLO26をファインチューニングする#
独自のデータセットでYOLO26をファインチューニングする際に、事前学習レシピ全体を再現する必要はありません。事前学習済み重みには、COCOトレーニングで得られた拡張と最適化に関する知識がすでに組み込まれています。より一般的なトレーニングのベストプラクティスについては、モデルをトレーニングする際のヒントを参照してください。
デフォルト設定でファインチューニングする#
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)デフォルト設定でのファインチューニングは、強力なベースラインになります。特定の理由がある場合にのみ、ハイパーパラメータを調整してください。
YOLO26のハイパーパラメータを調整するタイミング#
小規模データセット(< 1,000枚):
- 拡張の強度を下げる:
mosaic=0.5、mixup=0.0、copy_paste=0.0 - 明示的なオプティマイザーを使用して学習率を下げる:
optimizer=AdamW、lr0=0.001 - patienceを設定してエポック数を減らす:
epochs=50、patience=20 - バックボーンレイヤーの凍結を検討する:
freeze=10
大規模データセット(> 50,000枚):
- 事前学習レシピにより近い設定にする
- より長い実行では
optimizer=MuSGDを検討する - 拡張を増やす:
mosaic=1.0、mixup=0.3、scale=0.9
ドメイン固有の画像(航空、医療、水中):
- 縦方向の向きが変化する場合は
flipud=0.5を増やす - 物体が任意の回転で現れる場合は
degreesを増やす - 照明条件がCOCOと大きく異なる場合は、
hsv_sとhsv_vを調整する
ハイパーパラメータの自動最適化については、ハイパーパラメータチューニングガイドを参照してください。
モデルサイズを選択する#
| モデル | 適した用途 | バッチサイズの指針 |
|---|---|---|
| YOLO26n | エッジデバイス、モバイル、CPUでのリアルタイム処理 | コンシューマーGPUで大きなバッチ(64-128) |
| YOLO26s | 速度と精度のバランス | 中程度のバッチ(32-64) |
| YOLO26m | 中程度の計算リソースでより高い精度 | 小さなバッチ(16-32) |
| YOLO26l | GPUを利用できる場合に高い精度 | 小規模バッチ(8~16)またはマルチGPU |
| YOLO26x | 最高精度、サーバーへのデプロイ | 小規模バッチ(4~8)またはマルチGPU |
エクスポートとデプロイのオプションについては、エクスポートガイドおよびモデルのデプロイオプションをご覧ください。
まとめ#
YOLO26のチェックポイントには完全なトレーニングレシピが埋め込まれているため、各モデルサイズの背後にある正確なハイパーパラメーターを、いつでもtrain_argsを1回参照するだけで確認できます。まずデフォルト設定からファインチューニングを開始し、このページの表を使って意図的に調整したうえで、変更内容をすべてご自身の検証セットに対して確認してください。途中で疑問が生じた場合は、Ultralytics GitHubリポジトリまたはUltralytics Discordサーバーでコミュニティに質問してください。
FAQ#
torch.load()でチェックポイントを読み込み、train_argsキーにアクセスするか、Ultralytics APIでmodel.ckpt["train_args"]を使用してください。完全な例については、YOLO26チェックポイントのトレーニング引数の確認をご覧ください。すべてのサイズでObjects365の事前トレーニングを同じ150エポック実施しているため、COCOの回数はファインチューニング段階のみを対象としています。大きいモデルほど、これらのエポック数のうち少ない回数でCOCO上で収束します。Xは40、Nは245です。回数が厳密な単調増加になっていない(Sは70、Mは80)のは、サイズごとのハイパーパラメーター探索の結果として決まったためです。独自のデータセットでファインチューニングする場合、最適なエポック数はモデルサイズではなく、データセットの規模と複雑さによって異なります。早期停止(
patience)を使用して、適切な停止ポイントを自動的に見つけてください。これらはベースチェックポイントを生成した実験ブランチに由来し、再現性のために
train_argsに記録されています。default.yamlでユーザーが設定できる項目ではなく、リリース済みパッケージはこれらを読み取らないため、model.train()に渡すと無効な引数エラーが発生します。ファインチューニング時にこれらを設定する必要はありません。モデルサイズごとの値については、内部トレーニングパラメーターをご覧ください。いいえ。各COCOチェックポイントは、すでに150エポックのトレーニングを完了していた同じサイズのObjects365v1チェックポイントからファインチューニングされています。詳細は、ステージ1:Objects365の事前トレーニングおよびYOLO26論文で説明しています。公開された数値の基になった、COCOをゼロからトレーニングした実行結果はありません。そのため、ゼロからトレーニングした結果とこれらの数値を比較しても、同条件の比較にはなりません。
チェックポイント内に保存されており、Ultralytics Platform上でグラフ化できます。すべてのチェックポイントには、その実行におけるエポックごとの完全な
results.csvが保存されているため、.ptファイルをPlatformプロジェクトに追加するだけで、コードを記述せずに損失、mAPの推移、学習率をプロットできます。トレーニング曲線の表示をご覧ください。Objects365のステージには、yolo26*-objv1-150.ptチェックポイント内に独自のログがあります。公開されたメトリクスに近い結果にはなりますが、完全に同一にはなりません。同一の設定にするには、チェックポイントに記録されたコミットをチェックアウトし、そのブランチでトレーニングしてください。コードリビジョンの確認をご覧ください。