Ultralytics YOLOによるモデルエクスポート
はじめに
モデルをトレーニングする最終的な目的は、実際のアプリケーションにデプロイすることです。Ultralytics YOLO26のエクスポートモードは、トレーニング済みモデルを様々なフォーマットにエクスポートするための多用途なオプションを提供しており、多様なプラットフォームやデバイスへのデプロイを可能にします。この包括的なガイドでは、モデルエクスポートのニュアンスを説明し、最大限の互換性とパフォーマンスを実現する方法を紹介します。
Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀
なぜYOLO26のエクスポートモードを選ぶのか?
- 多用途性: ONNX、TensorRT、CoreMLなど、複数のフォーマットへのエクスポートが可能です。
- パフォーマンス: TensorRTで最大5倍のGPU高速化、ONNXやOpenVINOで最大3倍のCPU高速化を実現できます。
- 互換性: モデルを多数のハードウェアおよびソフトウェア環境で普遍的にデプロイできるようにします。
- 使いやすさ: 簡単なCLIおよびPython APIで、迅速かつ直接的なモデルエクスポートが可能です。
エクスポートモードの主な機能
際立った機能の一部を以下に示します:
- ワンクリックエクスポート: 異なるフォーマットへエクスポートするためのシンプルなコマンドです。
- バッチエクスポート: バッチ推論が可能なモデルをエクスポートします。
- 最適化された推論: エクスポートされたモデルは、より高速な推論時間のために最適化されます。
- チュートリアル動画: スムーズなエクスポート体験のための詳細なガイドとチュートリアルです。
使用例
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モデルを異なるフォーマットにエクスポートするために利用可能な構成とオプションを詳細に示しています。これらの設定は、エクスポートされたモデルのパフォーマンス、サイズ、および様々なプラットフォームや環境間での互換性を最適化するために重要です。適切な設定により、モデルが意図したアプリケーションにおいて最適な効率でデプロイできるようになります。
| 引数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
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で使用する場合、学習後量子化(PTQ)を実行します。 |
dynamic | bool | False | TorchScript, ONNX, OpenVINO, TensorRT, CoreMLエクスポートに対して動的な入力サイズを許可し、異なる画像寸法を扱う柔軟性を高めます。TensorRTでINT8を使用する場合は自動的に True に設定されます。 |
simplify | bool | True | onnxslimを使用してONNXエクスポートのモデルグラフを簡素化し、推論エンジンとのパフォーマンスと互換性を向上させる可能性があります。 |
opset | int | None | 異なるONNXパーサーおよびランタイムとの互換性のために、ONNX opsetバージョンを指定します。設定されていない場合は、最新のサポートされているバージョンが使用されます。 |
workspace | float または None | None | TensorRT 最適化における最大ワークスペースサイズをGiB単位で設定し、メモリ使用量とパフォーマンスのバランスを調整します。None を使用すると、デバイスの最大値まで TensorRT によって自動割り当てされます。 |
nms | bool | False | サポートされている場合(エクスポート形式を参照)、エクスポートされたモデルに Non-Maximum Suppression (NMS) を追加し、検出のポストプロセッシング効率を向上させます。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 を使用します。 |
data | str | 'coco8.yaml' | データセット構成ファイルへのパスで、INT8 量子化キャリブレーションに不可欠です。INT8 を有効にして指定されていない場合、キャリブレーションのフォールバックとして coco8.yaml が使用されます。 |
fraction | float | 1.0 | INT8 量子化キャリブレーションに使用するデータセットの割合を指定します。フルデータセットの一部を使用してキャリブレーションを行うことができ、実験時やリソースが限られている場合に便利です。INT8 を有効にして指定されていない場合は、フルデータセットが使用されます。 |
end2end | bool | None | NMS 不要の推論をサポートする YOLO モデル(YOLO26、YOLOv10)のエンドツーエンドモードを上書きします。False に設定すると、従来の NMS ベースのポストプロセッシングパイプラインと互換性のある形式でこれらのモデルをエクスポートできます。詳細は エンドツーエンド検出ガイド を参照してください。 |
これらのパラメータを調整することで、デプロイ環境、ハードウェア制約、パフォーマンス目標といった特定の要件に合わせてエクスポートプロセスをカスタマイズできます。適切なフォーマットと設定を選択することは、モデルのサイズ、速度、および精度の最適なバランスを実現するために不可欠です。
エクスポートフォーマット
利用可能な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, dynamic, simplify, opset, nms, batch, 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, 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 |
FAQ
YOLO26モデルをONNXフォーマットにエクスポートするにはどうすればよいですか?
YOLO26モデルのONNXフォーマットへのエクスポートは、Ultralyticsを使用すれば簡単です。モデルエクスポートのために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を使用すると、大幅なパフォーマンス向上が得られます。TensorRTにエクスポートされたYOLO26モデルは、最大5倍のGPU高速化を実現でき、リアルタイム推論アプリケーションに最適です。
- 多用途性: 特定のハードウェア構成に合わせてモデルを最適化します。
- 速度: 高度な最適化を通じて、より高速な推論を実現します。
- 互換性: NVIDIAハードウェアとスムーズに統合します。
TensorRTの統合の詳細については、TensorRT統合ガイドを参照してください。
YOLO26モデルのエクスポート時にINT8量子化を有効にするにはどうすればよいですか?
INT8量子化は、特にエッジデバイスにおいてモデルを圧縮し、推論を高速化する優れた方法です。INT8量子化を有効にする方法は以下の通りです:
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # Load a model
model.export(format="engine", int8=True)INT8 quantization can be applied to various formats, such as TensorRT, OpenVINO, and CoreML. For optimal quantization results, provide a representative dataset using the data parameter.
モデルエクスポート時に動的な入力サイズが重要なのはなぜですか?
動的な入力サイズを使用すると、エクスポートされたモデルが多様な画像サイズを扱えるようになり、柔軟性が向上し、異なるユースケースでの処理効率が最適化されます。ONNXやTensorRTなどのフォーマットにエクスポートする際、動的な入力サイズを有効にすると、モデルが様々な入力形状にシームレスに適応できるようになります。
この機能を有効にするには、エクスポート中にdynamic=Trueフラグを使用してください:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)動的な入力サイズ設定は、ビデオ処理や異なるソースからの画像を扱う場合など、入力サイズが変化する可能性のあるアプリケーションにおいて特に有用です。
モデルのパフォーマンスを最適化するために考慮すべき重要なエクスポート引数は何ですか?
エクスポート引数を理解し構成することは、モデルのパフォーマンスを最適化するために重要です:
format:エクスポートされたモデルのターゲットフォーマット(例:onnx、torchscript、tensorflow)。imgsz:モデル入力用の希望する画像サイズ(例:640または(height, width))。half:FP16量子化を有効にし、モデルサイズを削減し、推論を高速化する可能性があります。optimize:モバイル環境や制約のある環境向けの特定の最適化を適用します。int8:INT8量子化を有効にし、エッジAIデプロイメントに非常に有益です。
特定のハードウェアプラットフォームへのデプロイには、NVIDIA GPU用のTensorRT、Appleデバイス用のCoreML、Google Coralデバイス用のEdge TPUなど、専用のエクスポートフォーマットの使用を検討してください。
エクスポートされたYOLOモデルにおいて、出力テンソルは何を表していますか?
YOLOモデルをONNXやTensorRTなどのフォーマットにエクスポートする場合、出力テンソルの構造はモデルのタスクに依存します。これらの出力を理解することは、カスタム推論実装にとって重要です。
検出モデル(例: yolo26n.pt)の場合、出力は通常(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推論の例にある例は、各モデルタイプに対してこれらの出力を処理する方法を示しています。
Why 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でエクスポートし、外部で後処理を実行してください。