Ultralytics YOLO27: ウェイティングリストに登録してください。
Get Started

YOLO26の学習レシピ#

はじめに#

このガイドでは、COCO上の公式YOLO26事前学習済みチェックポイントの作成に使用した、正確な学習レシピを説明します。ここに示すハイパーパラメーターはすべて、エポックごとの学習ログと実行時のコードリビジョンとともに、公開済みの.ptの重みにすでに組み込まれており、すべてプログラムから確認できます。

公式チェックポイントに使用された内容を把握することで、アーキテクチャだけでなく、性能を形作った学習率スケジュール、データ拡張パイプライン、損失の重みも理解でき、ファインチューニング時の判断に役立ちます。どのデータ拡張を維持するか、どの損失関数の重みを調整するか、データセットのサイズにどのオプティマイザー設定が適しているかを判断しやすくなります。

全体像については論文をご覧ください

このページでは、公開済みチェックポイントに記録されたハイパーパラメーターを説明します。アーキテクチャ、損失とラベル割り当ての変更、アブレーションを含むその根拠については、Ultralytics YOLO26: 統合型リアルタイムエンドツーエンドビジョンモデルをご覧ください。

学習の概要#

すべてのYOLO26ベースモデルは2段階で学習されました。まずObjects365v1で150エポックの事前学習を行い、続いてCOCOでファインチューニングを実施しました。両段階とも640x640の解像度でMuSGDオプティマイザーとバッチサイズ128を使用しました。ランダムな重みからCOCOで学習されたYOLO26チェックポイントはありません。そのため、ほとんどのサイズではCOCO段階が短く、COCO段階のハイパーパラメーターは進化的探索によって決定されました。すべてのモデルサイズの完全な学習ログと指標は公開済みチェックポイント内に保存され、Ultralytics Platform上にグラフとして表示されています。

すべてのサイズで共通する主な設計上の選択は次のとおりです。

  • COCO段階の前に、すべてのサイズでObjects365による事前学習を実施
  • one-to-manyとone-to-oneの両方で教師信号を与えるデュアルヘッド学習。推論ではデフォルトでNMSを使用し、nms=Falseを指定するとNMSフリーヘッドが選択されます
  • 重み行列(2D線形重みと4D畳み込みフィルター。4Dフィルターは2Dに再整形)にMuon風の直交化更新を適用し、SGDと組み合わせる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.ptyolo26n-objv1-150.pt
yolo26s.ptyolo26s-objv1-150.pt
yolo26m.ptyolo26m-objv1-150.pt
yolo26l.ptyolo26l-objv1-150.pt
yolo26x.ptyolo26x-objv1-150.pt

事前学習では、探索で見つけた値ではなく、主にデフォルト設定を使用しました。lr0、lrf、momentum、weight_decay、box、clsはdefault.yamlと同じ値で、warmup_epochs、close_mosaic、dflは上書きされています。Xでのwarmup_epochs、データ拡張の強度、表の後に記載されている内部MuSGDおよびヘッドの重みを除き、設定はすべてのサイズで共通です。

設定値
dataObjects365v1
epochs150
imgsz640
batch128
optimizerMuSGD
lr0 / lrf0.01 / 0.01
momentum0.937
weight_decay0.0005
warmup_epochs1(Xでは2)
close_mosaic8
box / cls / dfl7.5 / 0.5 / 6.0
データ拡張NSMLX
mosaic1.01.01.01.01.0
mixup0.00.050.150.150.2
copy_paste0.10.150.40.50.6
scale0.50.90.90.90.9

これらの表には、事前学習に影響する設定が記載されていますが、設定全体ではありません。チェックポイントには100を超える引数が記録されています。正式な一覧については、以下に示すようにtrain_argsを出力してください。

上級者向け: 内部事前学習パラメーター

事前学習では、内部学習パラメーターで説明されているものと同様の実験ブランチ用パラメーターも変化させました。すべてのサイズでcls_wは1.0でした。

設定NSMLX
muon_w0.450.50.450.450.5
sgd_w0.550.50.550.550.6
o2m0.10.10.11.01.0
Objects365の重みから開始

ステージ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モデルがほかのモデルと異なる点に注目してください。

設定NSMLX
optimizerMuSGDMuSGDMuSGDMuSGDMuSGD
lr00.00540.000380.000380.000380.00038
lrf0.04950.8820.8820.8820.882
momentum0.9470.9480.9480.9480.948
weight_decay0.000640.000270.000270.000270.00027
warmup_epochs0.980.990.990.990.99
epochs24570806040
batch128128128128128
imgsz640640640640640
学習率の戦略

Nモデルは、初期学習率を高く設定し、急激に減衰させました(lrf=0.0495)。一方、S/M/L/Xモデルでは、初期LRを大幅に低くし、より緩やかなスケジュールを使用しました(lrf=0.882)。これは、小型モデルと大型モデルで収束の動きが異なることを反映しています。小型モデルが効果的に学習するには、より積極的な更新が必要です。

損失の重み#

損失の重みは、検出損失の3つの要素、すなわちバウンディングボックスのIoU回帰(box)、分類(cls)、ボックス距離の回帰項(dfl)のバランスを調整します。DFLを使用しないYOLO26では、dflのゲインを分布焦点損失ではなく、正規化されたボックス距離に対するL1損失の重みとして再利用している点に注意してください。

設定NSMLX
box5.639.839.839.839.83
cls0.560.650.650.650.65
dfl9.040.960.960.960.96

Nモデルではdflの距離回帰項を優先する一方、S/M/L/XモデルではIoUベースのボックス回帰を重視します。分類損失は、すべてのサイズで比較的一貫しています。

データ拡張パイプライン#

各手法の詳細については、YOLOデータ拡張ガイドをご覧ください。

設定NSMLX
mosaic0.9090.9920.9920.9920.992
mixup0.0120.050.4270.4270.427
copy_paste0.0750.4040.3040.4040.404
scale0.5620.90.950.950.95
fliplr0.6060.3040.3040.3040.304
degrees1.11~0~0~0~0
shear1.46~0~0~0~0
translate0.0710.2750.2750.2750.275
hsv_h0.0140.0130.0130.0130.013
hsv_s0.6450.3530.3530.3530.353
hsv_v0.5660.1940.1940.1940.194
bgr0.1060.00.00.00.0

~0として表示されている値は、実際のチェックポイントでは0.01未満です(たとえば、Sモデルのdegrees=0.00012)。つまり、データ拡張は実質的に無効です。

大型モデルは容量が大きく、より強い正則化の効果を得られるため、全体としてより積極的なデータ拡張(MixUpとスケールの値が高い)を使用します。意味のある回転、シアー、BGR拡張を使用するのはNモデルだけです。

内部学習パラメーター#

上級者向け:内部パイプラインパラメーター

チェックポイントには、実験用学習ブランチで使用されたものの、default.yamlではユーザーが設定できる項目として公開されていないパラメーターも含まれています。

設定説明NSMLX
muon_wMuSGDにおけるMuon更新の重み0.5280.4360.4360.4360.436
sgd_wMuSGDにおけるSGD更新の重み0.6740.4790.4790.4790.479
cls_w内部分類の重み2.743.483.483.483.48
o2mOne-to-manyヘッドの損失の重み1.00.7050.7050.7050.705
topkTop-kラベル割り当て85555

ファインチューニング時にこれらのパラメーターが何を意味するかについては、これらのパラメーターに関する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)
YOLO26lGPUを利用できる環境で高い精度小さなバッチ(8~16)またはマルチGPU
YOLO26x最大限の精度、サーバーへのデプロイ小さなバッチ(4~8)またはマルチGPU

エクスポートとデプロイの方法については、エクスポートガイドとモデルのデプロイ方法をご覧ください。

結論#

YOLO26のチェックポイントには学習レシピ全体が埋め込まれているため、各モデルサイズで使用された正確なハイパーパラメーターは、train_argsを1回参照するだけで確認できます。デフォルト設定からファインチューニングを始め、このページの表を参考に慎重に調整し、変更のたびに独自の検証セットで確認してください。作業中に質問があれば、Ultralytics GitHubリポジトリまたはUltralytics Discordサーバーでコミュニティに問い合わせてください。

よくある質問#

  • torch.load()でチェックポイントを読み込み、train_argsキーにアクセスするか、Ultralytics APIでmodel.ckpt["train_args"]を使用します。詳しい例については、YOLO26チェックポイントの学習引数を確認するをご覧ください。

  • すべてのサイズでObjects365の事前学習を同じ150エポック実施しているため、COCOのエポック数が示すのはファインチューニングのステージだけです。大型モデルは、Nモデルが245エポックだったのに対し、Xモデルは40エポックと、より少ないエポック数でCOCO上の収束に達します。数値が厳密な単調増加にならない(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チェックポイントに個別に保存されています。

  • 公表されたメトリクスに近い結果は得られますが、完全には一致しません。同一の設定で再現するには、チェックポイントに記録されたコミットをチェックアウトし、そのブランチで学習してください。コードのリビジョンを確認するをご覧ください。

コメント