YOLO Vision 2026:

Ultralytics YOLOを使用したモデルのエクスポート#

Ultralytics YOLO ecosystem and integrations

はじめに#

モデルのトレーニングの最終目標は、実世界のアプリケーションにデプロイすることです。Ultralytics YOLO26のエクスポートモードでは、トレーニング済みモデルをさまざまなフォーマットにエクスポートするための多彩なオプションを提供しており、多様なプラットフォームやデバイスへのデプロイを可能にします。この包括的なガイドでは、モデルエクスポートのニュアンスを説明し、最大限の互換性とパフォーマンスを達成する方法を紹介します。



Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀

なぜYOLO26のエクスポートモードを選ぶのか?#

  • 汎用性: ONNXTensorRTCoreMLなど、複数のフォーマットへのエクスポートに対応しています。
  • パフォーマンス: TensorRTを使用すると最大5倍のGPU高速化、ONNXまたはOpenVINOを使用すると最大3倍のCPU高速化を実現できます。
  • 互換性: モデルを数多くのハードウェアおよびソフトウェア環境で普遍的にデプロイできるようにします。
  • 使いやすさ: シンプルなCLIとPython APIにより、迅速かつ簡単にモデルをエクスポートできます。

エクスポートモードの主な機能#

注目すべき機能の一部を以下に示します:

  • ワンクリックエクスポート: さまざまなフォーマットにエクスポートするためのシンプルなコマンド。
  • バッチエクスポート: バッチ推論が可能なモデルのエクスポート。
  • 推論の最適化: エクスポートされたモデルは、推論時間の短縮に向けて最適化されます。
  • チュートリアルビデオ: スムーズなエクスポート体験のための詳細なガイドとチュートリアル。
ヒント
  • ONNXまたはOpenVINOにエクスポートすると、最大3倍のCPU高速化を実現できます。
  • TensorRTにエクスポートすると、最大5倍のGPU高速化を実現できます。

使用例#

YOLO26nモデルをONNXやTensorRTなどの異なるフォーマットにエクスポートします。エクスポート引数の全リストについては、以下の引数セクションを参照してください。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

引数#

この表は、YOLOモデルをさまざまなフォーマットにエクスポートするために利用可能な設定とオプションを詳細に示しています。これらの設定は、エクスポートされたモデルのパフォーマンス、サイズ、およびさまざまなプラットフォームや環境間での互換性を最適化するために不可欠です。適切な設定を行うことで、モデルが最適な効率で目的のアプリケーションにデプロイされる準備が整います。

引数タイプデフォルト説明
formatstr'torchscript''onnx''torchscript''engine'(TensorRT)などの、エクスポートされたモデルのターゲット形式。各形式により、さまざまなデプロイ環境との互換性が有効になります。
namestrNoneハードウェアターゲットを指定する必要があるフォーマット用のハードウェアターゲット名:Hailo アーキテクチャ('hailo8''hailo8l''hailo10h''hailo15h''hailo15l'。デフォルトは 'hailo8l')、Rockchip RKNN チップ(デフォルトは 'rk3588')、Huawei Ascend SoC(CANN の --soc_version。デフォルトは 'Ascend310B4')、または Qualcomm QNN HTP ターゲット(デフォルトは '73')。他のモードで使用される project / name の実行命名ペアとは異なります。
imgszint または tuple640モデル入力の希望する画像サイズ。正方形画像の場合は整数(例:640×640の場合は 640)、特定次元の場合はタプル (height, width) を指定できます。
kerasboolFalseTensorFlow SavedModel向けのKeras形式へのエクスポートを有効にし、TensorFlowのサービングおよびAPIとの互換性を提供します。
optimizeboolFalseDEEPXのコンパイラ最適化を強化し、推論レイテンシを削減しますが、コンパイル時間は増加します。
quantizeint または strNone量子化精度: 16(FP16、モデルサイズを縮小し、サポートされているハードウェアでの推論を高速化できる)または 8(INT8/PTQ、最小限の精度損失でモデルをさらに圧縮、主にエッジデバイス向け。data/fraction のキャリブレーションが必要)。32/未指定はFP32です。混合ウェイト/アクティベーション精度をサポートするエクスポートフォーマットは、'w8a8'/'w16a16'/'w8a16'/'w8a32' の表記も受け付けます。非推奨となった half/int8 フラグ(half=True16int8=True8、非推奨の警告付きで引き続き受け付けられます)に代わるものです。ターゲットフォーマットでサポートされている精度のみが許可されます(下記参照)。
dynamicboolFalseTorchScript、ONNX、OpenVINO、TensorRT、CoreMLのエクスポートにおいて動的な入力サイズを許可し、さまざまな画像寸法を扱う際の柔軟性を高めます。
simplifyboolTrue構築するエクスポートに対して onnxslim を用いて中間ONNXグラフを簡素化し(エクスポート形式を参照)、推論エンジンとのパフォーマンスと互換性を向上させる可能性があります。
opsetintNoneONNXグラフを構築するエクスポートのONNXオプセットバージョンを指定し(エクスポートフォーマットを参照)、さまざまなONNXパーサーやランタイムとの互換性を確保します。設定しない場合は、サポートされている最新のバージョンが使用されます。
workspacefloat または NoneNoneメモリ使用量とパフォーマンスのバランスを取るために、TensorRT最適化のための最大ワークスペースサイズをGiB単位で設定します。デバイスの最大値までTensorRTによる自動割り当てを行うには None を使用します。
nmsboolFalseサポートされている場合に、エクスポートされたモデルに非最大値抑制(NMS)を追加し(エクスポート形式を参照)、検出後の処理効率を向上させます。end2endモデルでは利用できません。CoreMLの場合、検出モデルでのみサポートされます。
conffloatNoneエクスポート時のNMSが生成される場所で使用される信頼度閾値です。nms=Trueのエクスポート、Hailoの非エンドツーエンドの検出エクスポート、および内部でnms=Trueを強制するIMXの検出、姿勢推定、セグメンテーションのエクスポートが対象です。未設定の場合のデフォルトは0.25ですが、IMXのエクスポートの場合はデフォルトで0.001になります。
ioufloat0.7エクスポート時のNMSが生成される場所で使用されるIoU閾値です。nms=Trueのエクスポート、Hailoの非エンドツーエンドの検出エクスポート、および内部でnms=Trueを強制するIMXの検出、姿勢推定、セグメンテーションのエクスポートが対象です。
max_detint300エクスポートされたモデルの出力に保持される検出の最大数です。CoreMLを除くすべてのフォーマットでのnms=Trueのエクスポート(CoreMLのNMSパイプラインには検出数の上限がありません)、NMS不要のエンドツーエンド検出エクスポート(YOLO26、YOLOv10、利用可能なアンカーの数に制限されます)、およびIMXの検出、姿勢推定、セグメンテーションのエクスポートに適用されます。
agnostic_nmsboolFalseCoreML 独自の NMS ステージを含め、標準の nms=True パイプラインを通じてエクスポート時の NMS が生成されるすべての場所でクラス非依存の NMS を有効にし、同一クラス内だけでなく異なるクラス間のスコアが低い重複ボックスを抑制します。このフラグに関係なくクラスアウェアのままであり、クラス非依存のオプションを持たない Hailo や IMX の独自生成された NMS 設定では無視されます。また、NMS フリーのエクスポート(YOLO26、YOLOv10)にも組み込まれており、そこでは異なるボックス間の IoU しきい値による抑制ではなく、同じ検出が複数のクラスラベル(IoU=1.0 の重複)の下で表示されるのを防ぐ役割のみを果たします。
batchint1エクスポートモデルのバッチ推論サイズ、または predict モードでエクスポートモデルが同時に処理する画像の最大数を指定します。Edge TPUのエクスポートの場合、これは自動的に1に設定されます。
devicestrNoneエクスポート用のデバイスを指定します:GPU(device=0)、CPU(device=cpu)、Appleシリコン用MPS(device=mps)、Huawei Ascend NPU(device=npu または device=npu:0)、またはNVIDIA Jetson用DLA(device=dla:0 または device=dla:1)。TensorRTのエクスポートは自動的にGPUを使用しますが、TensorRT 11.0はDLAをサポートしていません。
verboseboolTrueformat='engine' エクスポート中に TensorRT ビルダーのログを VERBOSE 重要度に引き上げます。他のエクスポートフォーマットでは無視されます。
datastrNoneINT8 量子化キャリブレーションに不可欠なデータセット YAML へのパス。分類の場合は代わりにデータセットディレクトリまたは組み込みのデータセット名をとります。INT8 が有効な状態で指定されていない場合、Ultralytics は必要に応じてタスク固有のキャリブレーションデータセットを選択するか、モデルタスクのデフォルトデータセットにフォールバックします。
splitstr'val'data から INT8 量子化キャリブレーションデータローダーを構築するために使用されるデータセットの分割('train''val'、または 'test')。
fractionfloat1.0INT8量子化キャリブレーションに使用するデータセットの割合を指定します。フルデータセットのサブセットでキャリブレーションを行えるため、実験やリソースが限られている場合に便利です。INT8が有効で指定されていない場合、フルデータセットが使用されます。
end2endboolNoneNMSフリー推論をサポートするYOLOモデル(YOLO26、YOLOv10)のエンドツーエンドモードをオーバーライドします。これを False に設定すると、従来のNMSベースの後処理パイプラインと互換性を持つようにこれらのモデルをエクスポートできます。詳細については、エンドツーエンド検出ガイドを参照してください。

これらのパラメータを調整することで、デプロイ環境、ハードウェア制約、パフォーマンス目標などの特定の要件に合わせてエクスポートプロセスをカスタマイズできます。モデルサイズ、速度、精度の最適なバランスを実現するには、適切なフォーマットと設定を選択することが不可欠です。

エクスポート形式#

利用可能なYOLO26のエクスポートフォーマットを以下の表に示します。format 引数(つまり format='onnx' または format='engine')を使用して、任意のフォーマットにエクスポートできます。エクスポートされたモデルに対して直接予測や検証を行うこともできます(例:yolo predict model=yolo26n.onnx)。エクスポート完了後、モデルの使用例が表示されます。Ultralyticsプラットフォームでは、ローカルの設定なしでブラウザから直接モデルをエクスポートすることも可能です。

形式format 引数モデルメタデータ引数
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnximgszquantizedynamicsimplifyopsetnmsbatchdatafractiondevice
OpenVINOopenvinoyolo26n_openvino_model/imgszquantizedynamicnmsbatchdatafractiondevice
TensorRTengineyolo26n.engineimgszquantizedynamicsimplifyopsetworkspacenmsbatchdatafractiondevice
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgszkerasquantizeopsetnmsbatchdatafractiondevice
TF GraphDefpbyolo26n.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgszbatchdevice
MNNmnnyolo26n.mnnimgszbatchdynamicquantizesimplifyopsetnmsdevice
NCNNncnnyolo26n_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgszbatchnamequantizesimplifyopsetdatafractiondevice
ExecuTorchexecutorchyolo26n_executorch_model/imgszbatchdevice
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnximgszbatchnamequantizesimplifyopsetdatafractiondevice
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n_hailo_model/imgsznamequantizedatafractionsimplifyconfiou
Huawei Ascendascendyolo26n_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms

量子化オプション#

quantize 引数を使用してエクスポート精度を要求します。文字列値は大文字と小文字を区別せず、Ultralyticsはエクスポート前に受け入れられたエイリアスを標準化します:

リクエスト値正規化された値意味
8, "8", "int8", "w8a8"8INT8の重みとアクティベーション
16, "16", "fp16", "w16a16"16FP16の重みとアクティベーション
32, "32", "fp32", "w32a32"32FP32エクスポート。CoreML NMS ML Programs(デフォルトはFP16)を除き、設定なしの場合と同じです。
"w8a16""w8a16"16ビットのアクティベーションを持つINT8ウェイト(FP16、LiteRTではINT16)
"w8a32""w8a32"FP32のアクティベーションを持つINT8ウェイト(LiteRTの動的INT8、キャリブレーション不要)

レガシーな half=True および int8=True フラグは、非推奨の警告付きで引き続き受け付けられ、quantize=16 および quantize=8 に転送されます。

すべてのエクスポートフォーマットがあらゆる精度をサポートしているわけではありません。明示的な quantize の要求は、その精度で生成されるか、エクスポート前に失敗します:

形式FP32(32/未指定)FP16(16INT8(8W8A16("w8a16"注意点
PyTorchN/AN/AN/Aネイティブのトレーニング/チェックポイント形式。
TorchScript✅ GPUのみFP16 TorchScriptのエクスポートには device=0 が必要です。CPUエクスポートはFP32になります。
ONNXINT8はONNX Runtimeの静的量子化とキャリブレーションデータを使用します。
OpenVINOINT8はNNCFの学習後量子化を使用します。
TensorRTINT8には代表的なキャリブレーションデータが必要です。
CoreML✅¹CoreMLのINT8は重みの量子化です。W8A16はINT8の重みとFP16の活性化関数を使用します。¹設定されていないNMS ML ProgramsはデフォルトでFP16になります。
TF SavedModelINT8エクスポートはTensorFlowのキャリブレーションを使用します。
TF GraphDefエクスポート時の精度変換はありません。
Edge TPU✅ 自動Edge TPUにはINT8が必要です。未設定の場合は自動的に有効になります。
PaddlePaddleエクスポート時の精度変換はありません。
MNNINT8はMNN変換による重み量子化です。
NCNNモバイル/組み込みランタイム形式。
IMX500✅ 自動IMX500には量子化が必要です。未設定の場合は自動的にINT8が有効になります。
RKNN✅ チップ依存RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126BはFP16またはINT8をサポートし、RV1103/RV1106バリアントはINT8専用です。
ExecuTorchエクスポート時の精度変換はありません。
Axelera✅ 自動AxeleraエクスポートにはINT8が必要です。未設定の場合は自動的に有効になります。
DEEPX✅ 自動DEEPXエクスポートにはINT8が必要です。未設定の場合は自動的に有効になります。
Qualcomm QNN✅ 自動QNN HTPエクスポートは、16ビットの活性化関数を用いたINT8の重みに固定されます。
LiteRT静的INT8(8)および "w8a16"(int8ウェイト + int16アクティベーション)はキャリブレーションデータを使用します。また、"w8a32" の動的INT8(キャリブレーションなし)もサポートしています。quantize=16 は独立したエクスポートではなく、GPUデリゲートを介して実行時にFP32モデルがFP16で実行されます。
Huawei Ascend✅ 自動Ascend AI Core の畳み込みは FP16/INT8 入力のみを受け付けるため、ATC は FP16 としてコンパイルします。未設定の場合は自動で有効になります。

INT8およびW8A16のエクスポートでは、ターゲットの統合でデフォルトまたは自動有効化の動作が文書化されている場合を除き、data を使用して data="coco8.yaml" などの代表的なキャリブレーションデータを提供してください。LiteRTの "w8a32"(動的INT8)スキームにはキャリブレーションデータは必要ありません。

次のステップ#

エクスポートしたモデルの実行方法については、デプロイ先ターゲットの統合ガイド(ONNXTensorRTCoreMLなど)を総合統合リストから見つけてください。

よくある質問 (FAQ)#

  • Ultralyticsを使用すれば、YOLO26モデルをONNXフォーマットにエクスポートするのは簡単です。PythonとCLIの両方のエクスポート手法を提供しています。

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")  # load an official model
    model = YOLO("path/to/best.pt")  # load a custom-trained model
    
    # Export the model
    model.export(format="onnx")

    さまざまな入力サイズの処理などの高度なオプションを含むプロセスの詳細については、ONNX統合ガイドを参照してください。

  • モデルエクスポートにTensorRTを使用すると、パフォーマンスが大幅に向上します。TensorRTにエクスポートされたYOLO26モデルは、最大5倍のGPU高速化を達成できるため、リアルタイム推論アプリケーションに最適です。

    • 汎用性: 特定のハードウェアセットアップに合わせてモデルを最適化します。
    • 速度: 高度な最適化を通じて、より高速な推論を実現します。
    • 互換性: NVIDIAハードウェアとスムーズに統合します。

    TensorRTの統合の詳細については、TensorRT統合ガイドを参照してください。

  • INT8量子化は、特にエッジデバイスにおいてモデルを圧縮し、推論を高速化するための非常に優れた方法です。INT8量子化を有効にする方法は以下の通りです:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")  # Load a model
    model.export(format="onnx", quantize=8, data="coco8.yaml")

    ONNXTensorRTOpenVINOCoreMLRockchip RKNNなどのフォーマットに対してINT8量子化を適用できます。最適な量子化結果を得るには、dataパラメータを使用して代表的なデータセットを提供してください。受け入れられるquantizeの値とサポートされているフォーマットについては、Quantization Optionsを参照してください。

  • 動的入力サイズにより、エクスポートされたモデルがさまざまな画像ディメンションに対応できるようになり、柔軟性が向上し、さまざまなユースケースでの処理効率が最適化されます。ONNXTensorRTなどのフォーマットにエクスポートする場合、動的入力サイズを有効にすることで、モデルが異なる入力形状にシームレスに適応できるようになります。

    この機能を有効にするには、エクスポート中に dynamic=True フラグを使用します:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="onnx", dynamic=True)

    動的な入力サイズ指定は、ビデオ処理や異なるソースからの画像を扱う場合など、入力寸法が変化する可能性のあるアプリケーションで特に便利です。

  • モデルパフォーマンスを最適化するには、エクスポート引数を理解し、設定することが極めて重要です:

    • format: エクスポートするモデルのターゲットフォーマット(例: onnxtorchscripttensorflow)。
    • imgsz: モデル入力の希望する画像サイズ(例: 640 または (height, width))。
    • quantize: 量子化精度(例: 8/"int8"16/"fp16"32/"fp32"、またはサポートされているフォーマットでの混合ウェイト/アクティベーションスキーム "w8a16" および "w8a32"(LiteRT動的INT8))。量子化オプションを参照してください。
    • optimize: DEEPXエクスポートのコンパイラ最適化をより高く有効にします。

    特定のハードウェアプラットフォームへのデプロイでは、NVIDIA GPU用のTensorRT、Appleデバイス用のCoreML、Google Coralデバイス用のEdge TPUなど、特殊なエクスポートフォーマットの使用を検討してください。

  • YOLOモデルをONNXやTensorRTなどのフォーマットにエクスポートする場合、出力テンソルの構造はモデルのタスクに依存します。これらの出力を理解することは、カスタムの推論実装にとって重要です。

    YOLO26検出モデル(例:yolo26n.pt)の場合、エンドツーエンドのエクスポートをサポートするフォーマットではデフォルトで有効になっているため、出力は[x1, y1, x2, y2, confidence, class_id]の値を持つ(batch_size, max_detections, 6)のような形状になります。デフォルトのmax_det=300では、これが一般的に(batch_size, 300, 6)になります。一部の制約されたフォーマットでは、エンドツーエンドの演算子がサポートされていない場合、自動的に従来の出力レイアウトにフォールバックします。

    非エンドツーエンドの検出モデル、または end2end=False でエクスポートされたYOLO26モデルの場合、出力は通常、チャンネルがボックス座標とクラスごとのスコアを表す (batch_size, 4 + num_classes, num_predictions) のような形状の単一のテンソルであり、num_predictions はエクスポートの入力解像度に依存します(動的にすることも可能です)。

    セグメンテーションモデル(例: yolo26n-seg.pt)の場合、通常2つの出力が得られます。1つ目は (batch_size, 4 + num_classes + mask_dim, num_predictions) のような形状のテンソル(ボックス、クラススコア、マスク係数)、2つ目は係数と組み合わせてインスタンスマスクを生成するために使用されるマスクプロトタイプを含む (batch_size, mask_dim, proto_h, proto_w) のような形状のテンソルです。サイズはエクスポートの入力解像度に依存します(動的にすることも可能です)。

    ポーズモデル(例: yolo26n-pose.pt)の場合、出力テンソルは通常 (batch_size, 4 + num_classes + keypoint_dims, num_predictions) のような形状になり、keypoint_dims はポーズの仕様(例: キーポイントの数や信頼度が含まれているかどうか)に依存し、num_predictions はエクスポートの入力解像度に依存します(動的にすることも可能です)。

    ONNX推論の例の例は、各モデルタイプのこれらの出力を処理する方法を示しています。

  • Ultralyticsは現在、YOLOモデル用の専用のC++推論APIを提供していません。C++デプロイの場合は、モデルをONNXTensorRTTorchScriptMNNなどのランタイムフォーマットにエクスポートし、そのランタイムのネイティブC++ APIを使用してエクスポートされた成果物をロードしてください。

    たとえば、yolo export model=yolo26n.pt format=onnx で検出モデルをエクスポートして .onnx ファイルをONNX Runtime C++で実行するか、format=engine でエクスポートしてTensorRT C++アプリケーションからTensorRTエンジンを実行します。カスタムC++後処理を使用する場合は、タスクとエクスポート設定に合わせて出力テンソルレイアウトを一致させてください。YOLO26のエンドツーエンド検出エクスポートは通常 (batch, max_det, 6) を返しますが、非エンドツーエンドのエクスポートは外部の後処理を必要とする生の予測テンソルを返します。

  • quantize=16(FP16)または quantize=8(INT8)でエクスポートする場合、モデルサイズを縮小しパフォーマンスを向上させるために、ほとんどのテンソルが低精度に変換されます。ただし、end2end=True が有効になっている場合、後処理(クラスインデックスを含む)がエクスポートされたグラフに直接埋め込まれます。

    output0 テンソルにはクラスインデックスが含まれており、これらは内部的に浮動小数点値として表現されます。FP16は、仮数部の精度が限られているため、2048を超える整数値を信頼性の高い表現ができません。潜在的な精度の損失や誤ったクラスIDを防ぐために、output0 は意図的にFP32に維持されます。

    この動作は想定されるものであり、クラスインデックスの忠実度を保持する必要がある低精度または量子化されたエクスポートにも適用されます。

    完全なFP16出力が必要な場合は、end2end=False でエクスポートし、外部で後処理を実行してください。

コメント