はじめに
Edge AIパイプラインツールのWeDXをGitHubに公開したら、ONNXモデルについて整理する必要があったので、この機会で整理しておきます。
ONNXとは
- Open Neural Network eXchangeの略です。
- ディープラーニングや機械学習モデルのような人工知能モデル(以下、AIモデル)を表現するためのフォーマットです。
- Microsoftさんとパートナー コミュニティによって作成されました。(GitHub - onnx)
- ONNXは日本語で「オニキス」と発音することが多いです。
- ONNXフォーマットで作られたモデルのことをONNXモデルで呼ばれたりします。
ONNXが必要な理由
一つのAIモデルだけで業務利用に達するレベルにはいかないので複数のAIモデルを組み合わせることで精度高く表現できます。ここで複数のAIモデルはPyTorch, TensorFlow, scikit-learnなどの各種フレームワークで学習したモデルのことです。
様々なフレームワークのAIモデルは該当するプラットフォームで推論するのが一般的であり、フレームワークとハードウェア(クラウドまたはエッジ)と組み合わせを最適化するのはハドル高くなりがちです。
ONNXを使うと異なるフレームワーク間で学習したモデルを運用できますし、ハードウェアのサポートによって最適化されます。
ONNXモデルの取得方法
ONNX Model Zoo
GitHubのONNX Model Zooで学習済みモデルのONNXモデルをApacheライセンス(無料?)でダウンロードできます。
とりあえず、ここで自分がほしいAIモデルをダウンロードして手軽くスタートしても良いと思います。
ONNXモデル変換
別の形式で作成された既存のAIモデルをONNXモデルに変換します。
変換するにはフレームワークでネイティブサポートされていると変換コマンドで変換できます。サポートしてないフレームワークについては関連変換ツールがほぼ用意されているのでそのツール経由で変換できます。
SaaSサービスによるONNXモデル作成
Azure Custom VisionのようなクラウドでAIモデルを作成できるSaaS(Software as a Service)サービスからONNXモデルを作成できます。自分のドメインに合わせてONNXモデルを作成できますし、無料でプランも用意されています。
PaaSサービスによるONNXモデル作成
本格的にAIモデルを作成することになるとAzure Machine LearningのようなPaaS(Platform as a service)サービスを使うことになります。好きなフレームワークを使ってONNXモデルを作成できます。
おまけ
ONNX Runtime
ONNXモデルの推論エンジンで公開されてどんどん機能とサポート領域が広がっています。
推論環境をONNX Runtimeで構築したら、異なるフレームワークで作成されたAIモデルをONNXモデルに変換しておけば、そのままONNX Runtimeで推論できます。
ONNX RuntimeはNvidia CUDAのようなハードウェアアクセラレーションの種類によってインストール方法が異なります。
ONNXモデルの視覚化ツール
Netronというツールを使用するとONNXモデルをグラフで表示することができますので必須ツールでも言えるでしょう。