Meet YOLO26: next-gen vision AI.

Link to this sectionUltralytics YOLO26におけるエンドツーエンド検出の理解#

Link to this sectionはじめに#

YOLO26へのアップグレードを検討する際、YOLOv8YOLO11といった以前のモデルからの大きな変更点は、Non-Maximum Suppression(NMS)が削除されたことです。従来のYOLOモデルは数千もの重複する予測を出力するため、最終的な検出結果に絞り込むには個別のNMS後処理ステップが必要でした。これによってレイテンシが増加し、エクスポートグラフが複雑化するほか、ハードウェアプラットフォーム間で動作が一致しない可能性がありました。

YOLO26 takes a different approach. It outputs final detections directly from the model — no external filtering required. This is known as end-to-end object detection, and it's enabled by default in all YOLO26 models. The result is a simpler deployment pipeline, lower latency, and up to 43% faster inference on CPUs.

本ガイドでは、何が変更されたのか、コードの更新が必要かどうか、エンドツーエンド推論をサポートするエクスポートフォーマット、および古いYOLOモデルからスムーズに移行する方法について解説します。

このアーキテクチャ転換の背景にある動機の詳細については、YOLO26でNMSが削除された理由と、それがデプロイメントに与える影響についてのUltralyticsブログ記事を参照してください。

クイックサマリー
  • Ultralytics APIまたはCLIを使用する場合: 変更は不要です。モデル名をyolo26n.ptに変更するだけです。
  • Using custom inference code (ONNX Runtime, TensorRT, etc.)? Update your post-processing — detection output is now (N, 300, 6) in xyxy format, no NMS required. Other tasks append extra data (mask coefficients, keypoints, or angle).
  • エクスポートする場合: ほとんどのフォーマットはエンドツーエンドの出力をネイティブでサポートしています。ただし、一部のフォーマット(NCNN、RKNN、PaddlePaddle、ExecuTorch、IMX、Edge TPU、およびQNN)は、サポートされていない演算子の制約(例:torch.topk)により、自動的に従来の出力へフォールバックします。Hailo HEFワークフローはONNXからHailo専用のスクリプトでコンパイルされるため、使用するモデルの検出ヘッドとNMS設定を確認してください。

Link to this sectionエンドツーエンド検出の仕組み#

YOLO26はトレーニング中にデュアルヘッドアーキテクチャを使用します。両方のヘッドは同じバックボーンとネックを共有しますが、出力の生成方法が異なります。

ヘッド目的検出出力後処理
One-to-One(デフォルト)エンドツーエンド推論(N, 300, 6)信頼度しきい値のみ
One-to-Many従来のYOLO出力(N, nc + 4, 8400)NMSが必要

上記の形状は検出のためのものです。他のタスクでは、One-to-One出力に検出ごとの追加データが拡張されます。

タスクエンドツーエンド出力追加データ
検出(N, 300, 6)
インスタンスセグメンテーション(N, 300, 6 + nm) + proto (N, nm, H, W)nm マスク係数(デフォルト32)
Pose(N, 300, 57)17 キーポイント × 3 (x, y, 可視性)
OBB(N, 300, 7)回転角度

トレーニング中、両方のヘッドは同時に実行されます。One-to-Manyヘッドはよりリッチな学習シグナルを提供し、One-to-Oneヘッドはクリーンで重複のない予測を行うことを学習します。推論およびエクスポート中は、デフォルトでOne-to-Oneヘッドのみがアクティブになり、1画像あたり最大300個の検出結果を[x1, y1, x2, y2, confidence, class_id]の形式で出力します。

model.fuse()を呼び出すと、Conv層とBatchNorm層が統合されて推論が高速化されます。また、エンドツーエンドモデルではOne-to-Manyヘッドが削除され、モデルサイズとFLOPsが削減されます。デュアルヘッドアーキテクチャの詳細については、YOLO26モデルページを参照してください。

Link to this sectionコードを変更する必要はありますか?#

Link to this sectionUltralytics Python APIまたはCLIを使用する場合#

変更は不要です。 標準のUltralytics Python APIまたはCLIを使用している場合、すべてが自動的に動作します。予測検証、およびエクスポートは、エンドツーエンドモデルに標準対応しています。

Ultralytics APIではコードの変更は不要です
from ultralytics import YOLO

# Load a YOLO26 model
model = YOLO("yolo26n.pt")

# Predict — no NMS step, no code changes
results = model.predict("image.jpg")

Link to this sectionカスタム推論コードを使用する場合#

はい、出力フォーマットが異なります。 YOLOv8YOLO11向けにカスタム後処理ロジックを作成していた場合(例:ONNX RuntimeTensorRTで推論を実行する場合)、新しい出力形状を処理するように更新する必要があります。

YOLOv8 / YOLO11YOLO26(エンドツーエンド)
検出出力(N, nc + 4, 8400)(N, 300, 6)
ボックス形式xywh (中心x, 中心y, 幅, 高さ)xyxy (左上x, 左上y, 右下x, 右下y)
レイアウトアンカーごとのボックス座標 + クラススコア[x1, y1, x2, y2, conf, class_id]
NMSが必要はいいいえ
後処理NMS + 信頼度フィルタ信頼度フィルタのみ

セグメンテーションポーズOBBの各タスクでは、YOLO26は各検出結果にタスク固有のデータを付加します。上記の出力形状テーブルを参照してください。

ここで Nバッチサイズnc はクラス数(例:COCOでは80)です。

エンドツーエンドモデルでは後処理が大幅に簡素化されます。例えばONNX Runtimeを使用する場合:

import onnxruntime as ort

# Load and run the exported end-to-end model
session = ort.InferenceSession("yolo26n.onnx")
output = session.run(None, {session.get_inputs()[0].name: input_tensor})

# End-to-end output: (batch, 300, 6) → [x1, y1, x2, y2, confidence, class_id]
detections = output[0][0]  # first image in batch
detections = detections[detections[:, 4] > conf_threshold]  # confidence filter — that's it!

Link to this sectionOne-to-Manyヘッドへの切り替え#

従来のYOLO出力フォーマットが必要な場合(例:既存のNMSベースの後処理コードを再利用する場合)、end2end=Falseを設定することで、いつでもOne-to-Manyヘッドに切り替えることができます。

従来のNMSベースの出力のためにOne-to-Manyヘッドを使用する
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Prediction with NMS (traditional behavior)
results = model.predict("image.jpg", end2end=False)

# Validation with NMS
metrics = model.val(data="coco.yaml", end2end=False)

# Export without end-to-end
model.export(format="onnx", end2end=False)

Link to this sectionエクスポートフォーマットの互換性#

ほとんどのエクスポートフォーマットは、ONNXTensorRTCoreMLOpenVINOTFLiteTF.jsMNNなど、エンドツーエンド推論をすぐにサポートしています。

以下のフォーマットはエンドツーエンドをサポートしておらず、自動的にOne-to-Manyヘッドにフォールバックします:NCNNRKNNPaddlePaddleExecuTorchIMXEdge TPUQualcomm QNN

エンドツーエンドがサポートされていない場合

これらのフォーマットのいずれかにエクスポートすると、Ultralyticsは自動的にOne-to-Manyヘッドに切り替え、警告をログに記録します。手動操作は不要です。つまり、YOLOv8YOLO11の場合と同様に、これらのフォーマットでは推論パイプラインにNMSが必要となります。

Hailo HEFの場合、コンパイル手順はONNXエクスポート後のmodel.export(format=...)外で行われます。正確な検出モデルに一致するHailo DFCログ、.allsモデルスクリプト、およびNMS JSONを使用してください。もしエンドツーエンドのYOLO26グラフがHailoツールチェーンでサポートされていない場合は、end2end=FalseでONNXモデルをエクスポートし、従来の検出ヘッドをコンパイルしてください。

TensorRT + INT8

TensorRTはエンドツーエンドをサポートしていますが、JetPack 6上のTensorRT 10.3.0でint8=Trueを指定してエクスポートする場合、自動的に無効化されます。

Link to this section精度と速度のトレードオフ#

エンドツーエンド検出は、精度への影響を最小限に抑えつつ、デプロイメントにおいて大きな利点をもたらします。

メトリクスエンドツーエンド (デフォルト)One-to-Many + NMS (end2end=False)
CPU推論速度最大43%高速化ベースライン
mAPへの影響~0.5 mAP低下YOLO11と同等または上回る
後処理信頼度フィルタのみフルNMSパイプライン
デプロイメントの複雑さ最小限NMSの実装が必要

ほとんどの実用的なアプリケーションにおいて、約0.5のmAPの差は無視できるほどであり、特に速度と簡潔さの向上を考慮すればなおさらです。最高精度が最優先事項である場合は、常にend2end=Falseを使用してOne-to-Manyヘッドにフォールバックできます。

全モデルサイズ(n, s, m, l, x)にわたる詳細なベンチマークについては、YOLO26パフォーマンスメトリクスを参照してください。

Link to this sectionYOLOv8またはYOLO11からの移行#

既存のプロジェクトをYOLO26にアップグレードする場合、スムーズな移行のために以下のチェックリストを確認してください。

  • Ultralytics API / CLIユーザー: 変更は不要です。モデル名をyolo26n.pt(またはyolo26n-seg.ptyolo26n-pose.ptyolo26n-obb.pt)に更新するだけです。
  • カスタム後処理コード: 新しい出力形状(検出用の(N, 300, 6)、およびセグメンテーションポーズOBB用のタスク固有データ)を処理するように更新してください。また、ボックス形式がxywhからxyxyに変更されていることにも注意してください。
  • エクスポートパイプライン: ターゲットフォーマットについては、上記のフォーマット互換性セクションを確認してください。
  • TensorRT + INT8: JetPack 6では、TensorRT 10.3.0はint8=Trueでエンドツーエンドを自動的に無効化します。エンドツーエンドを維持するには別のTensorRTバージョンを使用してください。
  • FP16エクスポート: すべての出力をFP16で行う必要がある場合は、end2end=Falseでエクスポートしてください。なぜoutput0がFP32のままなのかを参照してください。
  • iOS / CoreML: End-to-end is fully supported. If you need Xcode Preview support, use end2end=False with nms=True
  • エッジデバイス(NCNN, RKNN): これらのフォーマットは自動的にOne-to-Manyへフォールバックするため、デバイス上のパイプラインにNMSを含めてください。

Link to this sectionよくある質問 (FAQ)#

Link to this sectionend2end=Trueとnms=Trueを同時に使用できますか?#

No. These options are mutually exclusive. If you set nms=True on an end-to-end model during export, it will be automatically forced to nms=False with a warning. The end-to-end head already handles duplicate filtering internally, so external NMS is unnecessary.

ただし、end2end=Falsenms=Trueを組み合わせる構成は有効であり、伝統的なNMSをエクスポートグラフに組み込めます。これは、検出モデルを直接使用してXcodeのプレビュー機能を使えるようになるため、CoreMLエクスポートで役立ちます。

Link to this sectionエンドツーエンドモデルにおいて、max_detパラメータは何を制御しますか?#

max_detパラメータ(デフォルト: 300)は、one-to-oneヘッドが画像ごとに出力可能な検出数の最大値を設定します。推論時またはエクスポート時に調整可能です。

model.predict("image.jpg", max_det=100)  # fewer detections, slightly faster
model.export(format="onnx", max_det=500)  # more detections for dense scenes

デフォルトのYOLO26チェックポイントはmax_det=300で学習されていることに注意してください。この値を増やすことは可能ですが、one-to-oneヘッドは学習中に最大300個のクリーンな検出結果を出力するように最適化されているため、その制限を超える検出結果は品質が低下する可能性があります。画像あたり300個を超える検出が必要な場合は、より高いmax_det値で再学習することを検討してください。

Link to this sectionエクスポートしたONNXモデルの出力が (1, 300, 6) ですが、これは正しいですか?#

はい、それが検出における期待されるエンドツーエンドの出力形式です。batch size が1で、最大300個の検出結果があり、それぞれが [x1, y1, x2, y2, confidence, class_id] の6つの値で構成されます。信頼度閾値でフィルタリングするだけで完了し、NMSは不要です。

その他のタスクでは、出力形状が異なります。

タスク出力形状説明
検出(1, 300, 6)[x1, y1, x2, y2, conf, class_id]
セグメンテーション(1, 300, 38) + (1, 32, 160, 160)6つのボックス値 + 32個のマスク係数、およびプロトタイプマスクテンソル
Pose(姿勢推定)(1, 300, 57)6つのボックス値 + 17個のキーポイント × 3 (x, y, 可視性)
OBB(指向性バウンディングボックス)(1, 300, 7)6つのボックス値 + 1つの回転角度

Link to this sectionエクスポートしたモデルがエンドツーエンドかどうかを確認するにはどうすればよいですか?#

Ultralytics Python APIを使用するか、エクスポートされたONNXモデルのメタデータを直接確認することで調べることができます。

モデルがエンドツーエンドかどうかの確認
from ultralytics import YOLO

model = YOLO("yolo26n.onnx")
model.predict(verbose=False)  # run predict to setup predictor first
print(model.predictor.model.end2end)  # True if end-to-end is enabled

あるいは、出力形状を確認してください。エンドツーエンドの検出モデルは (1, 300, 6) を出力し、従来のモデルは (1, nc + 4, 8400) を出力します。その他のタスクの形状については、出力形状のFAQ を参照してください。

Link to this sectionインスタンスセグメンテーション、ポーズ推定、OBBタスクでエンドツーエンドはサポートされていますか?#

はい。YOLO26の検出スタイルタスクのバリエーションである detectioninstance segmentationpose estimation、および oriented object detection (OBB) は、デフォルトでエンドツーエンド推論をサポートしています。これらのタスクでも end2end=False によるフォールバックが利用可能です。

各タスクは、ベースとなる検出出力にタスク固有のデータを拡張します。

タスクモデルエンドツーエンド出力
検出yolo26n.pt(N, 300, 6)
インスタンスセグメンテーションyolo26n-seg.pt(N, 300, 38) + proto (N, 32, 160, 160)
Pose(姿勢推定)yolo26n-pose.pt(N, 300, 57)
OBB(指向性バウンディングボックス)yolo26n-obb.pt(N, 300, 7)

コメント