Chapters
📘 Chapter #0 YOLOとは
📘 Chapter #1 環境設定
📘 Chapter #2 アノテーション
📘 Chapter #3
📗 Chapter #3-1 YOLOv3 Keras版実装
📗 Chapter #3-2 YOLOv3 Darknet版
📘 Chapter #A
📗 Chapter #A-1 YOLOの各バージョンについてまとめ
📗 Chapter #A-2 YOLOv3 Keras版実装に関して関連記事のまとめ
📗 Chapter #A-3 ONNX変換・確認ライブラリ、アプリケーションまとめ
#TL;DR
- ONNXに変換を行う、またはONNXの内容を確認するライブラリ、アプリケーションまとめ(随時更新予定)
目次
前提
- 基本的には仮想環境を作成してから作業することをお勧めします。
conda create -n mmdnn python=3.6
1. ONNXのVersionとOpset
1.1. Version
(調査中...)
1.2. Opset
(調査中...)
1.3. TensorRTとONNXの対応バージョン
1.4. 参考
ONNX versioning
https://github.com/onnx/onnx/blob/master/docs/Versioning.md
ONNX Version Converter
https://github.com/onnx/onnx/blob/master/docs/VersionConverter.md
ONNX Runtimeのバージョン互換に関するドキュメント
https://github.com/microsoft/onnxruntime/blob/master/docs/Versioning.md
ONNX バージョンと Windows ビルド
https://docs.microsoft.com/ja-jp/windows/ai/windows-ml/onnx-versions
いまさらONNXを調べた(v1.4.1)
https://tkat0.github.io/posts/learn-onnx/
2. 機械学習フレームワーク間の変換
2.1. MMdnn
2.1.1. 公式サイト
2.1.2. 概要
MMdnnは、ディープラーニング(DL)モデルの変換、可視化、診断を行うための包括的でクロスフレームワークのツールです。「MM」はモデル管理の略で、「dnn」はディープニューラルネットワークの頭文字をとったものです。
参考:https://github.com/Microsoft/MMdnn
2.1.3. 対応機械学習フレームワーク
- Keras
- TensorFlow (試験的) (まずは TensorFlow のReadmeを確認することを勧めます)
- CoreML (訳注:Apple CoreML)
- Caffe
- MXNet
- PyTorch
- Microsoft Cognitive Toolkit (CNTK)
- DarkNet (ソースのみ、 試験的))
- ONNX (ターゲットのみ)
転載元(2020年7月7日時点):https://github.com/Microsoft/MMdnn
2.1.4. インストール
pip install mmdnn
- その他変換する形式に応じたモジュールが必要。kerasの形式(*.karas, *.h5)を変換するならば、keras, tensorflowなど
2.1.5. 使い方
mmconvert -sf keras -iw <kerasのHDF5ファイル(*.h5)> -df onnx -om <出力ONNXファイル(*.onnx)>
参考:https://arakan-pgm-ai.hatenablog.com/entry/2019/03/01/090000
2.1.6. Tips
-
load_model_from_hdf5メソッドで
raise ValueError('No model found in config file.')
が表示された場合保存しているkeras形式が重み付けだけの場合に表示される模様。
対処法は、保存時に
model.save_weights()
の代わりにmodel.save()
を使用することで改善した、との情報あり。参考:
2.2. ONNXMLTools
2.2.1. 公式サイト
https://github.com/onnx/onnxmltools
https://pypi.org/project/onnxmltools/
2.2.2. 概要
ONNXMLToolsを使用すると、さまざまな機械学習ツールキットのモデルをONNXに変換することができます。
引用元:https://github.com/onnx/onnxmltools
2.2.3. 対応機械学習フレームワーク
- Keras (keras2onnx converterのラッパー)
- Tensorflow (tf2onnx converterのラッパー)
- scikit-learn (skl2onnx converterのラッパー)
- Apple Core ML
- Spark ML (試験的)
- LightGBM
- LibSVM
- XGBoost
※Pytorchには内蔵のONNXエクスポート機能があります。
転載元(2020年7月7日時点):https://github.com/onnx/onnxmltools
2.3. keras2onnx
2.3.1. 公式サイト
2.3.2. 概要
keras2onnxモデルコンバータを使用すると、KerasモデルをONNXモデルフォーマットに変換することができます。当初、Kerasコンバータはonnxmltoolsプロジェクトで開発されていましたが、Keras2onnxコンバータの開発は独立したリポジトリに移され、より多くの種類のKerasモデルをサポートし、複数のコンバータを混在させる複雑さを軽減しました。
引用元:https://github.com/onnx/keras-onnx
また、WinMLToolは、keras2onnx の呼び出しをラップしています。
2.4. WinMLTools
様々な機械学習モデルをONNXに変換し、Windows ML(Windows用の高速な推論環境)で使用できるようにするためのツール。
2.4.1. 公式サイト
2.4.2. 概要
WinMLTools を使用すると、さまざまなトレーニング フレームワークで作成された機械学習モデルを ONNX に変換できます。 これは、モデルを ONNX に変換して Windows ML で使用できるようにするための ONNXMLTools および TF2ONNX の拡張機能です。
引用元:https://docs.microsoft.com/ja-jp/windows/ai/windows-ml/convert-model-winmltools
2.4.3. 対応機械学習フレームワーク
- Keras
- TensorFlow (試験的)
- scikit-learn
- Apple Core ML
- LightGBM
- LibSVM
- XGBoost
転載元(2020年7月7日時点):https://docs.microsoft.com/ja-jp/windows/ai/windows-ml/convert-model-winmltools
2.5. PyToachからONNXに変換する
3. ONNXバージョン変換
3.1. ONNX Version Converter
3.1.1. 公式サイト
ONNX モデルを新しいターゲット opset にアップグレードおよびダウングレードする方法の例を示すチュートリアル
https://github.com/onnx/tutorials/blob/master/tutorials/ExportModelFromPyTorchForWinML.md
3.1.2. 概要
ONNX API には、異なる opset バージョン間で ONNX モデルを変換するためのライブラリが用意されています。 これにより、開発者とデータ サイエンティストは、既存の ONNX モデルを新しいバージョンにアップグレードしたり、モデルを古いバージョンの ONNX 仕様にダウングレードしたりできます。
バージョン コンバーターは、C++ または Python の API を使用して呼び出すことができます。 ONNX モデルを新しいターゲット opset にアップグレードおよびダウングレードする方法の例を示すチュートリアルも用意されています。
引用元:https://docs.microsoft.com/ja-jp/windows/ai/windows-ml/onnx-versions
4. 確認
4.1. Netron
4.1.1. 公式サイト
4.1.2. インストール
Wingetにてインストールする
winget install -e --id LutzRoeder.Netron
4.1.3. 情報確認
左上のModel Propertiesボタンから、ONNXのバージョンを確認できる。
確認例1
- ONNXのファイルフォーマットバージョンが v6
- INPUTSが2つ、OUTPUTSが3つ
確認例2
- ONNXのファイルフォーマットバージョンが v7
- INPUTSが2つ、OUTPUTSが3つ(確認例1と違いなし)