Ultralytics YOLO27: ウェイトリストに登録する
YOLOのライセンス
Ultralytics用語集に戻る

ONNX (Open Neural Network Exchange)

ONNXは、学習済みモデルを標準演算子のグラフとして保存するオープンフォーマットです。そのため、PyTorchで学習したモデルをさまざまなランタイムで実行できます。

ONNX(オープンニューラルネットワーク交換)は、機械学習モデル用のオープン標準ファイル形式です。.onnxファイルは、標準オペレーターの計算グラフと重みを組み合わせて学習済みモデルを保存するため、PyTorchなど、あるフレームワークでトレーニングしたモデルを、さまざまなランタイムや多様なハードウェアで実行できます。FacebookとMicrosoftは2017年9月にONNXを立ち上げました。2019年11月以降、Linux FoundationのAI部門であるLF AI & Dataの卒業プロジェクトとなっています。ONNXは通常、トレーニングからモデルデプロイへの受け渡しに使われます。エクスポートした1つのファイルを、ONNX Runtime、TensorRT、OpenVINO、および多くのエッジAIアクセラレーターのコンパイラーで使用できます。

ONNXファイルの内容#

ONNXモデルはProtocol Buffersでシリアライズされ、次の4つの要素を含みます。

  • グラフ: Conv、MatMul、Reluなどのオペレーターを呼び出すノードが、名前付きテンソルで接続されています。グラフの入力と出力にはデータ型と形状があり、各次元は固定値にも、可変バッチサイズなどのシンボリック値にもできます。
  • イニシャライザー: 学習済み重みです。Protocol Buffersでは単一ファイルの上限が2 GBのため、大きなモデルでは重みを.onnxファイルと同じ場所にある外部データファイルに保存します。
  • Opsetバージョン: オペレーターはopsetごとにバージョン管理されており、ランタイムはモデルのエクスポート時に使用したopsetをサポートしている必要があります。新しいopsetは、古いオペレーターを変更せずに新しいオペレーターを追加します。たとえば、opset 23ではAttentionオペレーターが追加されました。
  • メタデータ: プロデューサー名、モデルバージョン、クラス名などのカスタムなキーと値のペアです。

2つ目のオペレータードメインであるONNX-MLは、ツリーアンサンブルや線形分類器などの従来型モデルを対象としています。そのため、skl2onnxやonnxmltoolsなどのコンバーターを使って、scikit-learn、LightGBM、XGBoostのモデルを同じ形式にエクスポートできます。Netronなどのビューアーでは、グラフをノードごとに表示できます。実際には、ONNXは多くのトレーニングフレームワークと多数のランタイムの間に位置します。

ONNXモデルの実行#

Microsoftのオープンソース推論エンジンであるONNX Runtimeは、サーバー、デスクトップ、スマートフォン、ブラウザーでONNXファイルを実行します。モデルの読み込み時に、定数畳み込みや、畳み込みとその後に続くバッチ正規化の融合など、グラフの最適化を行います。その後、グラフの各部分を、使用するハードウェア向けの実行プロバイダーに渡します。たとえば、NVIDIAのGPUではCUDAまたはTensorRT、IntelハードウェアではOpenVINO、Windows GPUではDirectML、AppleデバイスではCore ML、QualcommのNPUではQNN、ブラウザーではWebGPUを使用します。Microsoftのローカル推論フレームワークであるWindows MLはONNX Runtime上で動作します。TensorRTやOpenVINOなどの他のエンジンは、ONNXファイルを読み込んで独自の形式にコンパイルします。

Ultralytics YOLO26はmodel.export(format="onnx")を使用してONNXにエクスポートされ、UltralyticsのTensorRTエクスポートは同じONNXファイルからエンジンを構築します。エクスポートしたファイルはPyTorchなしでONNX Runtime上で実行できます。

import onnxruntime as ort
from ultralytics import YOLO

# シンボリックなバッチ、高さ、幅の次元を指定してYOLO26nをONNXにエクスポートする
model = YOLO("yolo26n.pt")
onnx_path = model.export(format="onnx", dynamic=True)

# PyTorchもUltralyticsも不要なONNX Runtimeでグラフを読み込む
session = ort.InferenceSession(onnx_path, providers=["CPUExecutionProvider"])
for tensor in session.get_inputs() + session.get_outputs():
    print(tensor.name, tensor.shape)

グラフの入力images(シンボリックなバッチ、高さ、幅の次元)と、生の予測出力output0が出力されます。これが、あらゆるONNXランタイムでモデルに入力を渡し、結果を読み取るために使用するシグネチャです。

  • ONNX Runtime: ONNXファイルを実行する推論エンジンです。Microsoft主導の別プロジェクトであり、一般に「ONNX」と略されることがあります。
  • TensorRT: NVIDIAのコンパイラです。ONNXファイルを、特定のGPUタイプとTensorRTバージョンに最適化されたエンジンに変換するため、チームは移植可能なソースとしてONNXファイルを保持し、ターゲットごとにエンジンを再構築します。
  • PyTorchフォーマット: .ptチェックポイントとsafetensorsファイルは、モデルを再構築するコード用の重みを保存します。TorchScriptとtorch.exportは、PyTorch独自のランタイム向けにグラフを記録します。
  • その他のデプロイフォーマット: OpenVINO IR、LiteRTの.tfliteファイル、Core MLパッケージ、量子化LLM向けのGGUFファイルは、それぞれ特定のランタイムを対象としています。AppleのcoremltoolsはPyTorchモデルを直接変換し、バージョン6でONNX入力を廃止しました。

実際のアプリケーション#

  • クロスプラットフォームアプリ: 1つのONNXファイルで、Linuxサーバー、Windows MLを介したWindowsアプリ、ONNX Runtime Mobileを介したAndroidおよびiOSアプリに対応できます。
  • ブラウザーでの推論: ONNX Runtime WebはWebGPUまたはWebAssemblyを使用してユーザーのデバイス上でモデルを実行するため、姿勢推定などの機能で使用するカメラフレームがブラウザーの外に出ることはありません。
  • エッジアクセラレーター: Hailo、Qualcomm、Rockchipなどのベンダーが提供するNPUツールチェーンは、入力としてONNXモデルを受け取り、チップ向けにコンパイルします。多くの場合、量子化してINT8に変換します。
  • 本番環境での古典的なモデル: ONNXに変換された勾配ブースティング木やscikit-learnパイプラインは、ONNX Runtimeを介してC#、Java、C++のサービスで実行でき、サービング経路にPythonインタープリターは不要です。

ソリューションを見る

スポーツにおけるコンピュータービジョン

スポーツにおけるコンピュータービジョン

Ultralytics YOLOが、選手やボールの追跡、パフォーマンス分析、コーチングへの知見、アスリートのリハビリを通じて、スポーツビジョンをどのように支えるかをご紹介します。
詳しく見る
航空画像向けコンピュータービジョン

航空画像向けコンピュータービジョン

Ultralytics YOLOを使用して、ドローンや航空画像をリアルタイムの知見に変換し、農業、水産養殖、自然保護、地理空間分析に活用できます。
詳しく見る
航空宇宙分野のコンピュータービジョン

航空宇宙分野のコンピュータービジョン

Ultralytics YOLOを活用して航空宇宙分野でコンピュータビジョンを導入し、航空機検査、滑走路上のFOD検出、空港の地上業務、複合材の欠陥検出に活用できます。
詳しく見る
セキュリティ分野のコンピュータービジョン

セキュリティ分野のコンピュータービジョン

Ultralytics YOLOモデルであらゆる施設を保護しましょう。ビジョンAIは、周辺監視、脅威検知、ナンバープレート認識、職場の安全管理を支援します。
詳しく見る
ロボティクス分野のコンピュータービジョン

ロボティクス分野のコンピュータービジョン

Ultralytics YOLOモデルで、よりスマートなマシンを実現しましょう。ロボティクスにおけるビジョンAIは、自律ナビゲーション、認識、物体追跡、リアルタイム制御を支援します。
詳しく見る
物流におけるコンピュータービジョン

物流におけるコンピュータービジョン

Ultralytics YOLOモデルで物流を効率化しましょう。ビジョンAIにより、荷物検査、仕分け、車両追跡、倉庫のリアルタイム安全監視を実現します。
詳しく見る
小売業におけるコンピュータービジョン

小売業におけるコンピュータービジョン

Ultralytics YOLOモデルで小売のあり方を変革しましょう。ビジョンAIにより、在庫追跡、棚の監視、行列管理、より高度な顧客インサイトを実現します。
詳しく見る
医療分野におけるコンピュータービジョン

医療分野におけるコンピュータービジョン

Ultralytics YOLOモデルで医療ソリューションを構築しましょう。医療分野のビジョンAIは、医用画像処理の高速化、より高度な診断、患者モニタリングを実現します。
詳しく見る
製造業におけるコンピュータービジョン

製造業におけるコンピュータービジョン

Ultralytics YOLOモデルで製造を最適化しましょう。ビジョンAIは、品質管理、欠陥検出、PPE準拠、組立ラインの自動化を推進します。
詳しく見る
自動車分野におけるコンピュータービジョン

自動車分野におけるコンピュータービジョン

Ultralytics YOLOモデルで自動車分野にコンピュータービジョンを導入しましょう。ビジョンAIは、道路の安全性、運転支援、車両の自動化を向上させ、よりスマートな道路を実現します。
詳しく見る
農業におけるコンピュータービジョン

農業におけるコンピュータービジョン

Ultralytics YOLOモデルでスマート農業にビジョンAIを導入しましょう。作物のモニタリング、家畜の追跡、精密農業を支援し、より高く効率的な収量を実現します。
詳しく見る

AIの未来を一緒に築きましょう!

機械学習の未来に向けた歩みを始めましょう