ONNX (Open Neural Network Exchange)
オープンニューラルネットワーク交換(ONNX)形式を確認します。高速なクロスプラットフォームデプロイメントとハードウェア最適化のために、Ultralytics YOLO26をONNXへエクスポートする方法を学びます。
**ONNX(オープンニューラルネットワーク交換)**は、機械学習モデルを表現するために設計されたオープンソース形式であり、さまざまなAIフレームワークやツール間の相互運用性を実現します。深層学習向けの汎用トランスレーターとして機能し、開発者はPyTorch、TensorFlow、Scikit-learnなどの1つのフレームワークでモデルを構築し、推論に最適化された別の環境へシームレスにデプロイできます。共通のオペレーターセットと標準ファイル形式を定義することで、ONNXは、研究から本番環境へモデルを移行する際に従来必要とされていた複雑なカスタム変換スクリプトを不要にします。この柔軟性は、強力なクラウドGPUでトレーニングを行いながら、エッジデバイス、モバイル端末、Webブラウザーなど多様なハードウェアをデプロイ先とする現代のAIワークフローにおいて重要です。
現代のAIにおけるONNXの役割#
急速に進化する人工知能の分野では、研究者やエンジニアが開発ライフサイクルの段階ごとに異なるツールを使用することがよくあります。データサイエンティストは実験やトレーニングにおけるPyTorchの柔軟性を好む一方で、本番環境のエンジニアはデプロイ用にTensorRTやOpenVINOの最適化された性能を必要とします。標準的な交換形式がなければ、これらのエコシステム間でモデルを移行することは困難で、エラーも発生しやすくなります。
ONNXは、計算グラフの共通定義を提供することで、このギャップを埋めます。モデルをONNXにエクスポートすると、ネットワーク構造(レイヤー、接続)とパラメーター(重み、バイアス)をフレームワークに依存しない方法で取得した形式にシリアライズされます。これにより、ONNX Runtimeなど、ハードウェアアクセラレーションに特化して調整された推論エンジンが、Linux、Windows、macOS、Android、iOSなど複数のプラットフォーム上でモデルを効率的に実行できます。
ONNXを使用する主なメリット#
オープンニューラルネットワーク交換形式を採用することで、AIプロジェクトにいくつかの戦略的なメリットがもたらされます。
- フレームワークの相互運用性: 開発者は、単一のエコシステムに固定されることなく、フレームワークを切り替えられます。使いやすいUltralytics Python APIを使用してモデルをトレーニングし、C++アプリケーションやWebベースのJavaScript環境で使用できるようにエクスポートできます。
- ハードウェア最適化: 多くのハードウェアメーカーは、ONNXと連携する専用の実行プロバイダーを提供しています。つまり、1つの
.onnxファイルを、OpenVINOやCoreMLなどのツールを使用して、NVIDIA GPU、Intel CPU、モバイルNPU(ニューラルプロセッシングユニット)上でアクセラレーションできます。 - 高速な推論: ONNX Runtimeは、ノード融合や定数畳み込みなどのグラフ最適化を適用し、推論レイテンシを大幅に短縮できます。これは、自動運転車や高速製造ラインなどのリアルタイムアプリケーションに不可欠です。
- デプロイの簡素化: トレーニングフレームワークごとに個別のデプロイパイプラインを維持する代わりに、エンジニアリングチームは納品形式としてONNXを標準化し、ModelOpsプロセスを効率化できます。
実世界での利用例#
ONNXは汎用性が高いため、さまざまな業界で広く利用されています。ここでは、その応用例を2つ紹介します。
1. モバイルデバイスでのエッジAI#
リアルタイムの作物状態モニタリング向けに設計されたモバイルアプリケーションを考えてみます。モデルは、植物画像の大規模なデータセットを使用して、強力なクラウドサーバー上でトレーニングされる場合があります。しかし、アプリは農家のスマートフォン上でオフライン動作する必要があります。トレーニング済みモデルをONNXにエクスポートすることで、開発者はONNX Runtime Mobileを使用してモデルをモバイルアプリに統合できます。これにより、インターネット接続がなくても、スマートフォンのプロセッサーで物体検出をローカルに実行し、害虫や病気を即座に特定できます。
2. クロスプラットフォームWeb推論#
Eコマースでは、「バーチャル試着」機能が姿勢推定を使用して、ユーザーのWebカメラ映像に衣服を重ね合わせることがあります。このモデルのトレーニングはPythonで行われる場合がありますが、デプロイ先はWebブラウザーです。ONNXを使用すると、モデルを変換し、ONNX Runtime Webを介してユーザーのブラウザー上で直接実行できます。これにより、クライアントのデバイス性能(WebGLまたはWebAssembly)を活用してコンピュータービジョンタスクを実行し、動画データがユーザーのコンピューターから外部へ送信されないため、スムーズでプライバシーを保護した体験を実現できます。
関連用語との比較#
ONNXと他のモデル形式およびツールとの違いを理解しておくと役立ちます。
- TensorRTとの比較: ONNXが交換形式であるのに対し、TensorRTはNVIDIA GPU専用の推論エンジン兼オプティマイザーです。一般的なワークフローでは、まずモデルをONNXにエクスポートし、次にそのONNXファイルをTensorRTに解析させて、NVIDIAハードウェア上で最大のスループットを実現します。
- TensorFlow SavedModelとの比較: SavedModelはTensorFlowのネイティブシリアライズ形式です。Googleエコシステム内では堅牢ですが、ONNXほど広く互換性があるわけではありません。より幅広いプラットフォームをサポートするために、SavedModelをONNXに変換するツールがよく利用されます。
- CoreMLとの比較: CoreMLは、Appleのオンデバイス機械学習向けフレームワークです。両者は異なるものですが、iPhoneやiPad上で効率的に実行するために、モデルをPyTorchからONNXへ、さらにONNXからCoreMLへ(または直接)変換することがよくあります。
UltralyticsでONNXにエクスポートする#
Ultralyticsエコシステムでは、YOLO26などの最先端モデルをONNX形式に変換するプロセスが簡素化されています。エクスポート機能はライブラリに直接組み込まれており、複雑なグラフ走査とオペレーターのマッピングを自動的に処理します。
次の例では、デプロイ用に事前トレーニング済みのUltralytics YOLO26モデルをONNX形式へエクスポートする方法を示します。
from ultralytics import YOLO
# Load the YOLO26n model (Nano version recommended for edge deployment)
model = YOLO("yolo26n.pt")
# Export the model to ONNX format
# The 'dynamic' argument enables variable input sizes
path = model.export(format="onnx", dynamic=True)
print(f"Model exported successfully to: {path}")エクスポート後、この.onnxファイルは、Ultralytics Platformでの管理に利用したり、ONNX Runtimeを使用してエッジデバイスに直接デプロイしたりできます。これにより、ほぼあらゆる環境で高性能なコンピュータービジョンを利用できるようになります。









