Ultralytics YOLOによるモデルのエクスポート#
はじめに#
モデルをトレーニングする最終的な目的は、実際のアプリケーションにデプロイすることです。Ultralytics YOLO26のExportモードでは、トレーニング済みモデルをさまざまな形式にエクスポートするための多様なオプションが用意されており、さまざまなプラットフォームやデバイスでデプロイできるようになります。この包括的なガイドでは、モデルのエクスポートの詳細を解説し、互換性とパフォーマンスを最大限に高める方法を紹介します。
予定されているエクスポートのサポートについては、未リリースの YOLO27 プレビューを参照してください。
Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀
YOLO26のExportモードを選ぶ理由#
- 汎用性: ONNX、TensorRT、CoreMLなど、複数の形式にエクスポートできます。
- パフォーマンス: TensorRTで最大5倍のGPU高速化、ONNXまたはOpenVINOで3倍のCPU高速化を実現できます。
- 互換性: 多数のハードウェアおよびソフトウェア環境で、モデルを幅広くデプロイできるようにします。
- 使いやすさ: シンプルなCLIとPython APIにより、モデルを迅速かつ簡単にエクスポートできます。
Exportモードの主な機能#
主な機能は次のとおりです。
- ワンクリックエクスポート: さまざまな形式にエクスポートするためのシンプルなコマンドです。
- バッチエクスポート: バッチ推論に対応したモデルをエクスポートできます。
- 最適化された推論: エクスポートされたモデルは、より短い推論時間を実現するよう最適化されます。
- チュートリアル動画: スムーズなエクスポートを実現するための詳しいガイドとチュートリアルです。
使用例#
YOLO26nモデルをONNXやTensorRTなどの別の形式にエクスポートします。エクスポート引数の完全な一覧については、以下のArgumentsセクションを参照してください。
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)などを指定できます。各形式は異なるデプロイ環境との互換性を実現します。 |
name | str | None | ハードウェアターゲットを必要とする形式のターゲット名です。Hailoアーキテクチャ('hailo8'、'hailo8l'、'hailo10h'、'hailo15h'、'hailo15l'、デフォルトは'hailo8l')、Rockchip RKNNチップ(デフォルトは'rk3588')、Huawei Ascend SoC(CANNの--soc_version、デフォルトは'Ascend310B4')、またはQualcomm QNN HTPターゲット(デフォルトは'73')を指定できます。他のモードで使用されるproject/nameの実行名ペアとは異なります。 |
imgsz | intまたはtuple | 640 | モデル入力に使用する希望画像サイズです。正方形画像の場合は整数(例: 640×640の場合は640)、特定のサイズの場合はタプル(height, width)を指定できます。指定しない場合、エクスポートでは読み込まれたチェックポイントに記録されたトレーニングサイズを再利用します。公式YOLO26チェックポイントでは、depthに768、classifyに224、OBBに1024、その他のタスクに640が記録されます。ファインチューニングでは、トレーニングに使用したimgszが記録されます。YAMLから構築したモデルにはトレーニングサイズの記録がなく、640を使用します。 |
keras | bool | False | TensorFlow SavedModel向けにKeras形式へのエクスポートを有効にし、TensorFlow ServingおよびAPIとの互換性を提供します。 |
optimize | bool | False | DEEPX向けのコンパイラ最適化を強化し、コンパイル時間を増加させる代わりに推論レイテンシを短縮します。 |
quantize | intまたはstr | None | 量子化精度: 16 (FP16、モデルサイズを縮小し、対応ハードウェアでの推論を高速化可能) または 8 (INT8/PTQ、最小限の精度損失でモデルをさらに圧縮し、主としてエッジデバイス向け。校正 data/fraction が必要); 32 / 未設定は FP32 です。quantize=8 でトレーニングされたチェックポイントは常に INT8 をエクスポートします: onnx および engine は校正なしで保持する範囲からエクスポートし、他のフォーマットや精度は拒否されます。重みとアクティベーションの混合精度をサポートするエクスポートフォーマットは、'w8a8'/'w16a16'/'w8a16'/'w8a32' 表記も受け付けます。非推奨となった half/int8 フラグ (half=True → 16、int8=True → 8、非推奨の警告付きで引き続き受け付けられます) に代わるものです。ターゲットフォーマットでサポートされている精度のみが許可されます (下記参照)。 |
dynamic | bool | False | TorchScript、ONNX、OpenVINO、TensorRT、CoreMLへのエクスポートで動的な入力サイズを有効にし、さまざまな画像サイズを柔軟に処理できるようにします。 |
simplify | bool | True | 中間ONNXグラフを構築するエクスポートで、onnxslimを使用してグラフを簡略化します(Export Formatsを参照)。推論エンジンのパフォーマンスと互換性が向上する場合があります。 |
opset | int | None | ONNXグラフを構築するエクスポートのONNX opsetバージョンを指定します(Export Formatsを参照)。さまざまなONNXパーサーおよびランタイムとの互換性を確保します。設定しない場合は、サポートされる最新バージョンを使用します。 |
workspace | floatまたはNone | None | TensorRT最適化に使用するワークスペースの最大サイズをGiB単位で設定し、メモリ使用量とパフォーマンスのバランスを取ります。Noneを使用すると、TensorRTがデバイスの最大値まで自動的に割り当てます。 |
nms | bool、オプション | None | None は外部 NMS 用の生の多対1予測をエクスポートし、True はサポートされている場合に NMS を埋め込み、False は利用可能な場合に NMS フリーヘッドを選択します。CoreML の埋め込み NMS は、静的形状での検出、セグメンテーション、および姿勢推定をサポートしています。End-to-End Detection guide を参照してください。 |
conf | float | None | エクスポート時のNMSが生成される箇所で使用する信頼度しきい値です。nms=Trueエクスポート、Hailoの非エンドツーエンド検出エクスポート、IMXの検出・ポーズ・セグメントエクスポートが該当し、後者では内部的にnms=Trueが強制されます。未設定時のデフォルトは0.25です。 |
iou | float | 0.7 | エクスポート時のNMSが生成される箇所で使用するIoUしきい値です。nms=Trueエクスポート、Hailoの非エンドツーエンド検出エクスポート、IMXの検出・ポーズ・セグメントエクスポートが該当し、後者では内部的にnms=Trueが強制されます。 |
max_det | int | 300 | エクスポートされたモデルの出力で保持される検出の最大数です。CoreML検出(ネイティブのNMSパイプラインに検出上限がないもの)およびNMS不要のエンドツーエンド検出エクスポート(YOLO26、YOLOv10、利用可能なアンカーの数に制限されるもの)、ならびにIMXのdetect、pose、segmentエクスポートを除く、すべてのフォーマットにおける nms=True のエクスポートに適用されます。 |
agnostic_nms | bool | False | 標準のnms=Trueパイプラインでエクスポート時のNMSが生成される箇所で、クラス非依存NMSを有効にします。CoreML独自のNMSステージも含め、同じクラス内だけでなく異なるクラス間でもスコアの低い重複ボックスを抑制します。HailoまたはIMX独自の生成NMS設定では使用されません。これらにはクラス非依存オプションがなく、このフラグにかかわらずクラスを考慮します。また、NMSなしのエンドツーエンドエクスポート(YOLO26、YOLOv10)にも組み込まれますが、同じ検出が複数のクラスラベルで出現すること(IoU=1.0の重複)だけを防ぎ、異なるボックス間のIoUしきい値抑制は行いません。 |
batch | int | 1 | エクスポートモデルのバッチ推論サイズ、またはpredictモードでエクスポート済みモデルが同時に処理する画像数の最大値を指定します。Edge TPUエクスポートでは自動的に1に設定されます。 |
device | str | None | エクスポートに使用するデバイスを指定します。GPU(device=0)、CPU(device=cpu)、Apple silicon用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に対応していません。 |
verbose | bool | False | format='engine'エクスポート中、TensorRTビルダーのログレベルをVERBOSEに設定します。その他のエクスポート形式では無視されます。 |
data | str | None | データセット YAML へのパス。INT8 量子化キャリブレーションに不可欠です。一方、分類ではデータセットディレクトリまたは組み込みのデータセット名を使用します。INT8 が有効な状態で指定されていない場合、Ultralytics は必要に応じてタスク固有のキャリブレーションデータセットを選択するか、モデルタスクのデフォルトデータセットにフォールバックします。quantize=8 でトレーニングされたチェックポイントは独自の INT8 範囲を保持しており、キャリブレーションデータを必要としません。 |
split | str | 'val' | dataからINT8量子化キャリブレーション用データローダーを構築するために使用するデータセット分割('train'、'val'、または'test')。 |
fraction | float、int、またはlist | 1.0 | INT8キャリブレーションに使用するデータセットのサブセットです。比率、画像数、または[train, val, test]の値を指定します。1は分割全体を意味し、1を超える整数は画像数を意味します。オプションのテストエントリのみ、0/0.0を指定してなしを意味できます。2要素のリストではtestが全体のままになります。 |
これらのパラメーターを調整すると、デプロイ環境、ハードウェアの制約、パフォーマンス目標など、特定の要件に合わせてエクスポートプロセスをカスタマイズできます。モデルサイズ、速度、精度の最適なバランスを実現するには、適切な形式と設定を選択することが重要です。
エクスポート形式#
利用可能なYOLO26のエクスポート形式を以下の表に示します。format引数を使用して、format='onnx'やformat='engine'など、任意の形式にエクスポートできます。エクスポート済みモデルで直接predictまたはvalidateを実行することもできます(yolo predict model=yolo26n.onnx)。エクスポート完了後、モデル用の使用例が表示されます。ローカル環境を構築せず、Ultralytics Platformのブラウザーからモデルを直接エクスポートすることもできます。
| 形式 | format 引数 | モデル | メタデータ | 引数 |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz、quantize、dynamic、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、opset、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、opset、nms、batch、data、fraction、device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz、opset、batch、device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz、quantize、opset、data、fraction、device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz、batch、device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz、batch、dynamic、quantize、simplify、opset、nms、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、simplify、opset、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、simplify、opset、data、optimize、device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz、batch、name、quantize、simplify、opset、data、fraction、device |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz、quantize、batch、data、fraction、device |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz、name、quantize、data、fraction、simplify、conf、iou |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz、batch、name、quantize、opset、simplify、nms |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz、batch、quantize |
nms=None は、外部 NMS の場合は生出力をデフォルトとします。nms=False を設定して利用可能な NMS なしのヘッドを選択します。サポートされていないフォーマットは、ネイティブ出力パスにフォールバックします。上記の nms エントリは、nms=True を使用して NMS を埋め込むことができるフォーマットを特定します。
ほとんどのフォーマットでは、ultralytics と一緒にインストールされないパッケージが必要です。不足しているパッケージがある場合、エクスポートは実行時に uv または pip でインストールし、Edge TPU コンパイラや IMX 用の Java などのシステムパッケージについては Linux 上で apt でインストールします。コンテナイメージ、CI ジョブ、本番サービスなどで環境を固定するために、YOLO_AUTOINSTALL=False を設定します。その場合でも、エクスポートは不足しているパッケージを確認して報告しますが、環境を変更せずにそのままにし、パッケージがインストールされるまで失敗します。
export YOLO_AUTOINSTALL=False量子化オプション#
quantize引数を使用して、エクスポート精度を指定します。文字列値では大文字と小文字が区別されず、Ultralyticsはエクスポート前に受け付けたエイリアスを正規の値に変換します。
| 指定値 | 正規値 | 意味 |
|---|---|---|
8、"8"、"int8"、"w8a8" | 8 | INT8の重みとアクティベーション |
16、"16"、"fp16"、"w16a16" | 16 | FP16の重みとアクティベーション |
32、"32"、"fp32"、"w32a32" | 32 | FP32エクスポート。CoreML NMS ML Programsを除き、未設定の場合と同じです。CoreML NMS ML ProgramsではデフォルトでFP16になります。 |
"w8a16" | "w8a16" | INT8の重みと16ビットのアクティベーション(FP16。LiteRTではINT16) |
"w8a32" | "w8a32" | INT8の重みとFP32のアクティベーション(LiteRT動的INT8。キャリブレーションは不要) |
従来のhalf=Trueおよびint8=Trueフラグも、非推奨警告付きで引き続き受け付けられ、quantize=16およびquantize=8に転送されます。
すべてのエクスポート形式がすべての精度に対応しているわけではありません。明示的なquantizeの指定では、その精度でエクスポートされるか、エクスポート前に失敗します。
| 形式 | FP32 (32/unset) | FP16 (16) | INT8 (8) | W8A16 ("w8a16") | 注記 |
|---|---|---|---|---|---|
| PyTorch | ✅ | 該当なし | 該当なし | 該当なし | ネイティブのトレーニング/チェックポイント形式です。 |
| TorchScript | ✅ | ✅ GPUのみ | ❌ | ❌ | FP16 TorchScriptエクスポートにはdevice=0が必要です。CPUエクスポートはFP32です。 |
| ONNX | ✅ | ✅ | ✅ | ❌ | INT8では、ONNX Runtimeの静的量子化とキャリブレーションデータを使用します。 |
| OpenVINO | ✅ | ✅ | ✅ | ❌ | INT8では、NNCFのトレーニング後量子化を使用します。 |
| TensorRT | ✅ | ✅ | ✅ | ❌ | INT8には代表的なキャリブレーションデータが必要です。 |
| CoreML | ✅¹ | ✅ | ✅ | ✅ | CoreML INT8は重みの量子化です。W8A16では、INT8の重みとFP16のアクティベーションを使用します。¹ NMS ML Programsが未設定の場合、デフォルトで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のアクティベーション)ではキャリブレーションデータを使用します。また、動的INT8(キャリブレーション不要)の"w8a32"もサポートしています。quantize=16は個別のエクスポートではありません。GPUデリゲートを介して、FP32モデルがランタイムでFP16として実行されます。 |
| Hailo | ❌ | ❌ | ✅ 自動 | ❌ | HailoエクスポートにはINT8が必要であり、未設定の場合は自動的に有効になります。 |
| Huawei Ascend | ❌ | ✅ 自動 | ❌ | ❌ | Ascend AI Coreの畳み込みはFP16/INT8入力のみを受け付けるため、ATCはFP16をコンパイルします。未設定の場合は自動的に有効になります。 |
| Core AI | ✅ | ✅ | ❌ | ❌ | デフォルトのFP32、またはquantize=16を持つFP16の.aimodelアセットが使用され、INT8のパスはありません。 |
INT8およびW8A16エクスポートでは、dataを使用して、data="coco8.yaml"などの代表的なキャリブレーションデータを指定してください。ただし、対象の統合ガイドにデフォルトまたは自動有効化の動作が記載されている場合を除きます。LiteRTの"w8a32"(動的INT8)方式ではキャリブレーションデータは不要です。
量子化認識トレーニング#
上記のINT8エクスポートは学習後量子化(PTQ)であり、dataでの1回のキャリブレーションパスで範囲を観測します。一方、量子化認識学習(QAT)は、ループ内に擬似量子化を組み込んでファインチューニングを行うことでINT8に耐性のある重みを学習し、キャリブレーション単体では失われる精度を回復します。trainにquantize=8を渡して事前学習済みチェックポイントをファインチューニングし、通常どおりにエクスポートします。
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(
data="coco.yaml",
quantize=8,
epochs=5,
batch=64,
optimizer="AdamW",
lr0=0.00001,
lrf=0.1,
warmup_epochs=0.5,
cos_lr=True,
mosaic=0.0,
)
model.export(format="engine", quantize=8) # ranges travel with the checkpoint, no calibration data needed事前学習済みチェックポイントをファインチューニングする際は、小さな学習率を使用してください。QATは初期段階で精度を低下させる可能性があり、学習後量子化に対する利点はモデル、データセット、学習予算に依存します。エクスポートされたモデルを元のチェックポイントおよび学習後量子化されたエクスポートの両方に対して検証してください。トレーニング中の疑似量子化スコアは、デプロイ時の精度を確立するものではありません。
QATの価値は、エクスポートバックエンド独自のキャリブレーションがモデルをどれほどうまく処理できるかに依存します。以下の値は、imgsz=640およびバッチサイズ1のTensorRT 10.16エンジンで測定されたCOCO val2017におけるmAP50-95であり、各QATチェックポイントはepochs=20 patience=3で学習されました。
| モデル | FP32エンジン | PTQ INT8エンジン | QAT INT8エンジン |
|---|---|---|---|
yolo26n | 0.4032 | 0.3934 | 0.3935 |
yolo26s | 0.4794 | 0.4412 | 0.4711 |
yolo26m | 0.5269 | 0.4696 | 0.5137 |
yolo26l | 0.5440 | 0.4889 | 0.5307 |
yolo26x | 0.5701 | 0.5138 | 0.5527 |
QATのコストは全範囲にわたってFP32に対して0.008から0.017のmAP50-95であるのに対し、学習後量子化のコストはyolo26nで0.010、より大きなモデルでは0.038から0.057です。したがって、キャリブレーションがすでにうまく機能する最小のモデルではQATの効果はほとんどなく、残りのモデルでは0.030から0.044の効果があります。別のデータセット、エクスポート形式、またはTensorRTのバージョンでは異なる数値が予想されるため、ご自身の環境で測定してください。
QATモデルにはcompile=Falseが必要です。ModelOptの量子化モジュールはtorch.compileをサポートしていません。
INT8の精度低下を抑えるため、ヘッドの最終出力畳み込み層は意図的にfloatのまま残され、TensorRTは量子化されていない層に対してFP16の混合精度を有効にします。QATは初回使用時に自動インストールされるNVIDIA TensorRT Model Optimizerを通じて実行され、生成されたチェックポイントの読み込みにはTensorRT Model Optimizerのインストールが必要です。それらの範囲はチェックポイントとともに移行し、onnxおよびengineの各エクスポートはそれらをQ/DQノードとして出力します。一方、他のフォーマットは代わりにキャリブレーションを読み取り、QATチェックポイントを拒否します。
次のステップ#
デプロイ先の統合ガイドを確認してください。エクスポートしたモデルの実行方法については、ONNX、TensorRT、CoreMLなどのガイドが完全な統合一覧に掲載されています。
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モデルは、GPUで最大5倍の高速化を実現できるため、リアルタイム推論アプリケーションに適しています。
- 汎用性: 特定のハードウェア構成向けにモデルを最適化できます。
- 速度: 高度な最適化により、より高速な推論を実現できます。
- 互換性: 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")INT8量子化は、ONNX、TensorRT、OpenVINO、CoreML、Rockchip RKNNなどの形式に適用できます。最適な量子化結果を得るには、
dataパラメーターを使用して代表的なデータセットを指定してください。受け入れ可能なquantizeの値とサポート対象形式については、量子化オプションを参照してください。動的入力サイズを使用すると、エクスポートしたモデルでさまざまな画像サイズを処理できるため、柔軟性が向上し、用途ごとの処理効率を最適化できます。ONNXやTensorRTなどの形式にエクスポートする際に動的入力サイズを有効にすると、モデルが異なる入力形状にシームレスに適応できます。
この機能を有効にするには、エクスポート時に
dynamic=Trueフラグを使用します。例from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="onnx", dynamic=True)動的入力サイズは、動画処理や異なるソースからの画像の処理など、入力サイズが変化する可能性のあるアプリケーションで特に役立ちます。
エクスポート引数を理解して設定することは、モデルのパフォーマンスを最適化するうえで重要です。
format:エクスポートするモデルの対象形式です(例:onnx、torchscript、saved_model)。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)をnms=Falseでエクスポートした場合、サポートされているフォーマットでは(batch_size, max_detections, 6)のような形状を持ち[x1, y1, x2, y2, confidence, class_id]の値を持つNMS不要の出力が生成されます。デフォルトのmax_det=300では、これは通常(batch_size, 300, 6)になります。一部の制約されたフォーマットでは、エンドツーエンド演算子がサポートされていない場合、自動的に従来の出力レイアウトにフォールバックします。デフォルト(
nms=None)では、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++でデプロイする場合は、モデルをONNX、TensorRT、TorchScript、MNNなどのランタイム形式にエクスポートし、そのランタイムのネイティブC++ APIでエクスポートしたアーティファクトを読み込んでください。
たとえば、
yolo export model=yolo26n.pt format=onnxで検出モデルをエクスポートして.onnxファイルをONNX Runtime C++で実行するか、format=engineでエクスポートしてTensorRT C++アプリケーションからTensorRTエンジンを実行します。カスタムC++後処理を使用する場合は、タスクおよびエクスポート設定に合わせて出力テンソルレイアウトを一致させてください。デフォルトのYOLO26検出エクスポートは、外部NMSを必要とする生予測テンソルを返します。nms=Falseでエクスポートすると(batch, max_det, 6)の形状を持つNMS不要の検出が得られ、nms=TrueでエクスポートするとサポートされているフォーマットにNMSを埋め込むことができます。quantize=16(FP16)またはquantize=8(INT8)を使用してエクスポートすると、モデルサイズを削減してパフォーマンスを向上させるため、ほとんどのテンソルが低精度に変換されます。ただし、nms=Falseを有効にすると、後処理(クラスインデックスを含む)がエクスポートされたグラフに直接組み込まれます。output0テンソルにはクラスインデックスが含まれており、内部では浮動小数点値として表現されます。FP16は仮数の精度が限られているため、2048を超える整数値を正確に表現できません。精度の損失やクラスIDの誤りを防ぐため、output0は意図的にFP32のまま維持されます。この動作は想定どおりであり、クラスインデックスの忠実性を維持する必要がある低精度または量子化エクスポートにも適用されます。
完全なFP16出力が必要な場合は、
nms=Noneを使用してエクスポートし、後処理を外部で実行してください。