Link to this sectionUltralytics YOLOを使用したモデルのエクスポート#
Link to this sectionはじめに#
モデルのトレーニングの最終目標は、実世界のアプリケーションにデプロイすることです。Ultralytics YOLO26のエクスポートモードでは、トレーニング済みモデルをさまざまなフォーマットにエクスポートするための多彩なオプションを提供しており、多様なプラットフォームやデバイスへのデプロイを可能にします。この包括的なガイドでは、モデルエクスポートのニュアンスを説明し、最大限の互換性とパフォーマンスを達成する方法を紹介します。
Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀
Link to this sectionなぜYOLO26のエクスポートモードを選ぶのか?#
- 汎用性: ONNX、TensorRT、CoreMLなど、複数のフォーマットにエクスポート可能です。
- パフォーマンス: TensorRTで最大5倍のGPU高速化、ONNXまたはOpenVINOで最大3倍のCPU高速化を実現します。
- 互換性: モデルを数多くのハードウェアおよびソフトウェア環境で普遍的にデプロイできるようにします。
- 使いやすさ: シンプルなCLIとPython APIにより、迅速かつ簡単にモデルをエクスポートできます。
Link to this sectionエクスポートモードの主な機能#
注目すべき機能の一部を以下に示します:
- ワンクリックエクスポート: さまざまなフォーマットにエクスポートするためのシンプルなコマンド。
- バッチエクスポート: バッチ推論が可能なモデルのエクスポート。
- 推論の最適化: エクスポートされたモデルは、推論時間の短縮に向けて最適化されます。
- チュートリアルビデオ: スムーズなエクスポート体験のための詳細なガイドとチュートリアル。
Link to this section使用例#
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")Link to this section引数#
この表は、YOLOモデルをさまざまなフォーマットにエクスポートするために利用可能な設定とオプションを詳細に示しています。これらの設定は、エクスポートされたモデルのパフォーマンス、サイズ、およびさまざまなプラットフォームや環境間での互換性を最適化するために不可欠です。適切な設定を行うことで、モデルが最適な効率で目的のアプリケーションにデプロイされる準備が整います。
| 引数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
format | str | 'torchscript' | エクスポートされるモデルのターゲットフォーマット。'onnx'、'torchscript'、'engine' (TensorRT) などがあります。各フォーマットにより、異なるデプロイメント環境との互換性が有効になります。 |
imgsz | intまたはtuple | 640 | モデル入力に望ましい画像サイズ。正方形画像の場合は整数(例:640×640の場合は 640)、特定の寸法のタプル (height, width) を指定できます。 |
keras | bool | False | TensorFlow SavedModel用にKerasフォーマットへのエクスポートを有効にし、TensorFlow ServingおよびAPIとの互換性を提供します。 |
optimize | bool | False | TorchScriptにエクスポートする際にモバイルデバイス向けの最適化を適用し、モデルサイズの縮小と推論パフォーマンスの向上が見込めます。NCNNフォーマットやCUDAデバイスとは互換性がありません。DEEPXの場合、コンパイラの最適化を強化し、推論レイテンシの削減とコンパイル時間の増加を実現します。 |
quantize | int または str | None | 量子化精度:16(FP16、モデルサイズを削減し、サポートされているハードウェア上で推論を高速化できる場合があります)または 8(INT8/PTQ、精度への影響を最小限に抑えつつモデルをさらに圧縮。主にエッジデバイス向け。キャリブレーション用のdata/fractionが必要)。32/未設定はFP32です。ウェイト/アクティベーション精度の混在をサポートするエクスポート形式では、'w8a8'/'w16a16'/'w8a16'という表記も受け付けます。非推奨となったhalf/int8フラグを置き換えるものです(half=Trueは16へ、int8=Trueは8へ。これらは非推奨警告付きで現在も受け付けられます)。ターゲットフォーマットでサポートされている精度のみが許可されます(下記を参照)。 |
dynamic | bool | False | TorchScript、ONNX、OpenVINO、TensorRT、CoreMLのエクスポートにおいて動的な入力サイズを許可し、さまざまな画像寸法を扱う際の柔軟性を高めます。 |
simplify | bool | True | onnxslimを使用してONNXエクスポート用のモデルグラフを簡素化し、推論エンジンとのパフォーマンスと互換性を向上させます。 |
opset | int | None | 異なるONNXパーサーやランタイムとの互換性のためにONNX opsetバージョンを指定します。設定されていない場合は、サポートされている最新バージョンが使用されます。 |
workspace | float または None | None | TensorRT最適化のための最大ワークスペースサイズをGiB単位で設定し、メモリ使用量とパフォーマンスのバランスをとります。TensorRTによってデバイスの最大値まで自動割り当てさせるには None を使用します。 |
nms | bool | False | サポートされている場合に、エクスポートされたモデルにNMS(Non-Maximum Suppression)を追加します(エクスポートフォーマットを参照)。これにより、検出後の後処理効率が向上します。end2endモデルでは利用できません。 |
batch | int | 1 | エクスポートモデルのバッチ推論サイズ、またはエクスポートされたモデルが predict モードで同時に処理する画像の最大数を指定します。Edge TPUへのエクスポートでは、これは自動的に1に設定されます。 |
device | str | None | エクスポート用のデバイスを指定します。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をサポートしていません。 |
data | str | None | データセット設定ファイルへのパスであり、INT8量子化キャリブレーションに不可欠です。INT8が有効な状態で指定されていない場合、Ultralyticsは必要に応じてタスク固有のキャリブレーションデータセットを選択するか、モデルタスクのデフォルトデータセットを使用します。 |
fraction | float | 1.0 | INT8量子化キャリブレーションに使用するデータセットの割合を指定します。フルデータセットのサブセットでキャリブレーションを行えるため、実験やリソースが限られている場合に便利です。INT8が有効で指定されていない場合、フルデータセットが使用されます。 |
end2end | bool | None | NMSフリー推論をサポートするYOLOモデル(YOLO26、YOLOv10)のエンドツーエンドモードを上書きします。False に設定すると、これらのモデルを従来のNMSベースの後処理パイプラインと互換性のある形式でエクスポートできます。詳細はエンドツーエンド検出ガイドを参照してください。 |
これらのパラメータを調整することで、デプロイ環境、ハードウェアの制約、パフォーマンス目標といった特定の要件に合わせてエクスポートプロセスをカスタマイズできます。モデルサイズ、速度、精度の最適なバランスを実現するには、適切なフォーマットと設定を選択することが不可欠です。
Link to this sectionエクスポート形式#
利用可能なYOLO26エクスポートフォーマットは以下の表の通りです。format 引数(例:format='onnx' または format='engine')を使用して任意のフォーマットにエクスポートできます。エクスポートされたモデルに対して直接予測や検証を行うことも可能です(例:yolo predict model=yolo26n.onnx)。エクスポート完了後、モデルの使用例が表示されます。また、ローカルでのセットアップを行わずにUltralytics Platform上のブラウザから直接モデルをエクスポートすることも可能です。
| 形式 | format引数 | モデル | メタデータ | 引数 |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, quantize, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, quantize, dynamic, simplify, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, quantize, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, batch, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, quantize, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, quantize, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, quantize, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, quantize, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz, batch, name, quantize, data, fraction, device |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz、quantize、batch、data、fraction、device |
Link to this section量子化オプション#
quantize引数を使用して、エクスポートの精度を指定します。文字列値は大文字と小文字を区別しません。Ultralyticsはエクスポート前に受け入れ可能なエイリアスを正規化します:
| リクエスト値 | 正規化された値 | 意味 |
|---|---|---|
8, "8", "int8", "w8a8" | 8 | INT8の重みとアクティベーション |
16, "16", "fp16", "w16a16" | 16 | FP16の重みとアクティベーション |
32, "32", "fp32", "w32a32" | 32 | FP32エクスポート。quantizeを未設定のままにした場合と同じ精度です |
"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 (16) | INT8 (8) | W8A16 ("w8a16") | 注意点 |
|---|---|---|---|---|---|
| PyTorch | ✅ | N/A | N/A | N/A | ネイティブのトレーニング/チェックポイント形式。 |
| TorchScript | ✅ | ✅ GPUのみ | ❌ | ❌ | FP16のTorchScriptエクスポートには device=0 が必要です。CPUエクスポートはFP32になります。 |
| ONNX | ✅ | ✅ | ✅ | ❌ | INT8はONNX Runtimeの静的量子化とキャリブレーションデータを使用します。 |
| OpenVINO | ✅ | ✅ | ✅ | ❌ | INT8はNNCFの学習後量子化を使用します。 |
| TensorRT | ✅ | ✅ | ✅ | ❌ | INT8には代表的なキャリブレーションデータが必要です。 |
| CoreML | ✅ | ✅ | ✅ | ✅ | CoreMLのINT8は重み量子化です。W8A16はINT8の重みとFP16の活性化関数を使用します。 |
| TF SavedModel | ✅ | ❌ | ✅ | ❌ | INT8エクスポートはTensorFlowのキャリブレーションを使用します。 |
| TF GraphDef | ✅ | ❌ | ❌ | ❌ | エクスポート時の精度変換はありません。 |
| Edge TPU | ❌ | ❌ | ✅ 自動 | ❌ | Edge TPUにはINT8が必要です。未設定の場合は自動的に有効になります。 |
| PaddlePaddle | ✅ | ❌ | ❌ | ❌ | エクスポート時の精度変換はありません。 |
| MNN | ✅ | ✅ | ✅ | ❌ | INT8は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は個別のエクスポート形式ではなく、FP32モデルが実行時にGPUデリゲートを介してFP16で動作します。 |
For INT8 and W8A16 exports, provide representative calibration data with data, such as data="coco8.yaml", unless the target integration documents a default or auto-enabled behavior. The LiteRT "w8a32" (dynamic INT8) scheme needs no calibration data.
Link to this sectionよくある質問 (FAQ)#
Link to this sectionYOLO26モデルをONNXフォーマットにエクスポートするにはどうすればよいですか?#
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統合ガイドを参照してください。
Link to this sectionモデルエクスポートにTensorRTを使用する利点は何ですか?#
モデルエクスポートにTensorRTを使用すると、パフォーマンスが大幅に向上します。TensorRTにエクスポートされたYOLO26モデルは、最大5倍のGPU高速化を達成できるため、リアルタイム推論アプリケーションに最適です。
- 汎用性: 特定のハードウェアセットアップに合わせてモデルを最適化します。
- 速度: 高度な最適化を通じて、より高速な推論を実現します。
- 互換性: NVIDIAハードウェアとスムーズに統合します。
TensorRTの統合について詳しくは、TensorRT統合ガイドを参照してください。
Link to this sectionYOLO26モデルをエクスポートする際にINT8量子化を有効にするにはどうすればよいですか?#
INT8量子化は、特にエッジデバイスにおいてモデルを圧縮し、推論を高速化するための非常に優れた方法です。INT8量子化を有効にする方法は以下の通りです:
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # Load a model
model.export(format="onnx", quantize=8, data="coco8.yaml")INT8 quantization can be applied to formats such as ONNX, TensorRT, OpenVINO, CoreML, and Rockchip RKNN. For optimal quantization results, provide a representative dataset using the data parameter. See Quantization Options for accepted quantize values and supported formats.
Link to this sectionモデルをエクスポートする際、動的な入力サイズが重要なのはなぜですか?#
動的な入力サイズにより、エクスポートされたモデルはさまざまな画像寸法を扱うことができ、柔軟性が向上し、異なるユースケースに対して処理効率が最適化されます。ONNXやTensorRTのようなフォーマットにエクスポートする際、動的な入力サイズを有効にすることで、モデルが異なる入力形状にシームレスに適応できるようになります。
この機能を有効にするには、エクスポート時に dynamic=True フラグを使用します:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)動的な入力サイズ指定は、ビデオ処理や異なるソースからの画像を扱う場合など、入力寸法が変化する可能性のあるアプリケーションで特に便利です。
Link to this sectionモデルパフォーマンスを最適化するために考慮すべき主要なエクスポート引数は何ですか?#
モデルパフォーマンスを最適化するには、エクスポート引数を理解し、設定することが極めて重要です:
format:エクスポートされるモデルのターゲットフォーマット(例:onnx、torchscript、tensorflow)。imgsz:モデル入力に望ましい画像サイズ(例:640または(height, width))。quantize:量子化精度(8/"int8"、16/"fp16"、32/"fp32"、またはサポートされているフォーマットでのウェイトとアクティベーションの混合スキームである"w8a16"および"w8a32"(LiteRT動的INT8)など)。量子化オプションを参照してください。optimize:モバイルや制約のある環境向けの特定の最適化を適用します。
特定のハードウェアプラットフォームへのデプロイメントでは、NVIDIA GPU用のTensorRT、Appleデバイス用のCoreML、またはGoogle Coralデバイス用のEdge TPUといった専用のエクスポートフォーマットの使用を検討してください。
Link to this sectionエクスポートされたYOLOモデルにおいて、出力テンソルは何を表していますか?#
YOLOモデルをONNXやTensorRTなどのフォーマットにエクスポートする場合、出力テンソルの構造はモデルのタスクに依存します。これらの出力を理解することは、カスタムの推論実装にとって重要です。
YOLO26 detection models(例: yolo26n.pt)の場合、対応するフォーマットではエンドツーエンドのエクスポートがデフォルトで有効になっているため、出力は (batch_size, max_detections, 6) という形状になり、[x1, y1, x2, y2, confidence, class_id] の値が含まれます。デフォルトの max_det=300 では、一般的に (batch_size, 300, 6) となります。一部の制約のあるフォーマットでは、エンドツーエンドのオペレータがサポートされていない場合、自動的に従来の出力レイアウトにフォールバックします。
エンドツーエンドではない検出モデル、または end2end=False でエクスポートされたYOLO26モデルの場合、出力は通常 (batch_size, 4 + num_classes, num_predictions) という形状の単一テンソルとなり、チャンネルはボックス座標とクラスごとのスコアを表し、num_predictions はエクスポート時の入力解像度に依存します(動的な場合もあります)。
セグメンテーションモデル(例:yolo26n-seg.pt)の場合、通常2つの出力が得られます。最初のテンソルは (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推論例の例では、各モデルタイプに対してこれらの出力を処理する方法を示しています。
Link to this section公式のUltralytics C++推論APIはありますか?#
Ultralyticsは現在、YOLOモデル用の専用C++推論APIを提供していません。C++でのデプロイメントを行う場合は、モデルをONNX、TensorRT、TorchScript、MNNなどのランタイムフォーマットにエクスポートしてから、各ランタイムのネイティブC++ APIを使用してエクスポートされたアーティファクトを読み込んでください。
例えば、yolo export model=yolo26n.pt format=onnxで検出モデルをエクスポートしてONNX Runtime C++で.onnxファイルを実行するか、format=engineでエクスポートしてTensorRT C++アプリケーションからTensorRTエンジンを実行します。カスタムのC++ポストプロセッシングを使用する場合は、タスクおよびエクスポート設定に合わせて出力テンソルのレイアウトを調整してください。YOLO26のエンドツーエンド検出エクスポートは通常(batch, max_det, 6)を返しますが、非エンドツーエンドのエクスポートは外部でのポストプロセッシングが必要な生の予測テンソルを返します。
Link to this sectionWhy is output0 FP32 when exporting quantized models with end2end=True?#
quantize=16 (FP16) または quantize=8 (INT8) でエクスポートする場合、モデルサイズを縮小しパフォーマンスを向上させるために、ほとんどのテンソルは低精度に変換されます。しかし、end2end=Trueが有効な場合、ポストプロセッシング(クラスインデックスを含む)がエクスポートされたグラフに直接埋め込まれます。
output0 テンソルにはクラスインデックスが含まれており、これらは内部的に浮動小数点値として表現されています。FP16は、限られた仮数精度のために2048を超える整数値を確実に表現できません。潜在的な精度損失や不正確なクラスIDを回避するため、output0 は意図的にFP32のままにされています。
この動作は想定されるものであり、クラスインデックスの忠実度を保持する必要がある低精度または量子化されたエクスポートにも適用されます。
完全なFP16出力を必要とする場合は、end2end=False でエクスポートし、外部で後処理を実行してください。