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の場合、コンパイラの最適化を強化し、推論レイテンシの削減とコンパイル時間の増加を実現します。 |
half | bool | False | FP16(半精度)量子化を有効にし、モデルサイズを縮小してサポートされているハードウェアでの推論を高速化します。INT8量子化やCPUのみのエクスポートとは互換性がありません。ONNXなど、一部のフォーマットでのみ利用可能です(以下を参照)。 |
int8 | bool | False | INT8量子化を有効にし、モデルをさらに圧縮して推論を高速化します。精度への影響は最小限で、主にエッジデバイス向けです。TensorRT 11以降はModelOptによる明示的なQ/DQ量子化を使用し、TensorRT 7-10はキャリブレーターを用いたPTQを使用します。 |
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 | 'coco8.yaml' | INT8量子化キャリブレーションに不可欠なデータセット構成ファイルへのパスです。INT8が有効で指定されていない場合、coco8.yaml がキャリブレーションのフォールバックとして使用されます。 |
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, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, half, int8, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, int8, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn_model/ | ✅ | imgsz, batch, name, int8, data, fraction, device |
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", int8=True, data="coco8.yaml")INT8 quantization can be applied to various formats, such as ONNX, TensorRT, OpenVINO, CoreML, and Rockchip RKNN. For optimal quantization results, provide a representative dataset using the data parameter.
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))。half:FP16量子化を有効にし、モデルサイズを縮小して推論を高速化する可能性があります。optimize:モバイルや制約のある環境向けの特定の最適化を適用します。int8:INT8量子化を有効にします。エッジAIデプロイメントにおいて非常に有益です。
特定のハードウェアプラットフォームへのデプロイメントでは、NVIDIA GPU用のTensorRT、Appleデバイス用のCoreML、またはGoogle Coralデバイス用のEdge TPUといった専用のエクスポートフォーマットの使用を検討してください。
Link to this sectionエクスポートされたYOLOモデルにおいて、出力テンソルは何を表していますか?#
YOLOモデルをONNXやTensorRTなどのフォーマットにエクスポートする場合、出力テンソルの構造はモデルのタスクに依存します。これらの出力を理解することは、カスタムの推論実装にとって重要です。
検出モデル(例:yolo26n.pt)の場合、出力は通常 (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 sectionWhy is output0 FP32 when exporting with half=True and end2end=True?#
half=True(または int8=True)でエクスポートする場合、モデルサイズを縮小してパフォーマンスを向上させるために、ほとんどのテンソルは低精度に変換されます。しかし、end2end=True が有効な場合、後処理(クラスインデックスを含む)はエクスポートされたグラフに直接組み込まれます。
output0 テンソルにはクラスインデックスが含まれており、これらは内部的に浮動小数点値として表現されています。FP16は、限られた仮数精度のために2048を超える整数値を確実に表現できません。潜在的な精度損失や不正確なクラスIDを回避するため、output0 は意図的にFP32のままにされています。
この動作は想定されるものであり、クラスインデックスの忠実度を保持する必要がある低精度または量子化されたエクスポートにも適用されます。
完全なFP16出力を必要とする場合は、end2end=False でエクスポートし、外部で後処理を実行してください。