ONNX
Open Neural Network eXchange
DeepLearningモデルを表現するためのフォーマット
DLモデルをフレームワーク間で利用するもの
各フレームワークがONNXフォーマットでのモデルの保存・読み込みに対応してれば相互利用ができる
TensorFlowで作ったモデルをChainerで使える。みたいな
MicroSoftとFacebookの共同プロジェクトとして発足
元々はCaffe2とPyTorch間でのものとして開発されてた(?) ref
「おにきす」って読むらしい
仕様がシンプル
階層を持たないフラットなネットワーク記述
NNEFに比べると表現力が劣る
Protocol Buffers形式を採用している
HP
github
IRの仕様
https://github.com/onnx/onnx/blob/master/docs/IR.md
その実体
https://github.com/onnx/onnx/blob/master/onnx/onnx.proto3
ONNX Optimizer
https://github.com/onnx/onnx/blob/master/docs/Optimizer.md
Type Denotation
https://github.com/onnx/onnx/blob/master/docs/TypeDenotation.md
OperatorSet
ConvなどのOperatorをまとめて、バージョン付けしたもの
バージョンが有ることでopset v9からHogeが使えるようになりました、みたいな
defaultのもので足りなければ自分で定義できる
onnx/IR.md at v1.4.1 · onnx/onnx
バージョン違いを変換する
https://github.com/onnx/onnx/blob/v1.4.1/docs/OpsetVersionConverter.md
Value と Node がある ref
この辺を最初の方にもっと調べればよかった
静的単一代入
Loop と If がある
Netron
ONNXをvisualizeしてくれるviewer
ブラウザ上でも試せる
ONNX Runtime
https://github.com/microsoft/onnxruntime
ONNX形式のモデルの実行環境
C, C#, C++, Pythonなどの言語環境下で実行可能
https://qiita.com/lain21/items/4d68ee30b7fd497453d4
ONNX-Chainer
https://github.com/chainer/onnx-chainer
define-by-runなので実際にデータを渡してフォワード計算をするまでモデルが確定されない
ので、Chainオブジェクトと、そこに流し込む想定のデータの形式や型を渡す必要がある
https://qiita.com/mitmul/items/6a0c62be29b27b6b3fbe
https://tkat0.github.io/posts/read-onnxruntime/
https://qiita.com/mitmul/items/6a0c62be29b27b6b3fbe
モデル全体ではなく、パーツごとの仕様もある
onnx/Operators.md at master · onnx/onnx
対応フレームワーク
onnx/tutorials: Tutorials for creating and using ONNX models
ONNX Models
ONNXの学習済みモデルを配布している
ONNX Runtime Web
https://www.publickey1.jp/blog/21/webassemblywebglonnx_runtime_webort_web.html
WebAssemblyとWebGLで実装
MicroSoft製
[ONNX+
ONNX.js
https://qiita.com/xkumiyu/items/68acce640b801e8ecc67
試す
inception_v1を試す
$ wget https://s3.amazonaws.com/download.onnx/models/opset_9/inception_v1.tar.gz
参考
ONNXを試す - kiizuka’s vault
関連
NNEF
参考
ニューラルネットの共通フォーマット対決! NNEF vs ONNX - Fixstars Tech Blog /proc/cpuinfo
いまさらONNXを調べた(v1.4.1) · tkat0.github.io