14
15

More than 3 years have passed since last update.

ONNX変換・確認ライブラリ、アプリケーションまとめ

Last updated at Posted at 2020-07-07

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の内容を確認するライブラリ、アプリケーションまとめ(随時更新予定)

目次

前提

  • 基本的には仮想環境を作成してから作業することをお勧めします。
Anacondaでの例
conda create -n mmdnn python=3.6

1. ONNXのVersionとOpset

1.1. Version

(調査中...)

1.2. Opset

(調査中...)

1.3. TensorRTとONNXの対応バージョン

TensorRT ONNX URL
7.x 1.6.0 https://docs.nvidia.com/deeplearning/tensorrt/release-notes/tensorrt-7.html
6.x 1.5.0 https://docs.nvidia.com/deeplearning/tensorrt/release-notes/tensorrt-6.html
5.x 1.4.1 https://docs.nvidia.com/deeplearning/tensorrt/release-notes/tensorrt-5.html
4.x 1.0 https://docs.nvidia.com/deeplearning/tensorrt/release-notes/tensorrt-4.html

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 <kerasHDF5ファイル(*.h5)> -df onnx -om <出力ONNXファイル(*.onnx)>

参考:https://arakan-pgm-ai.hatenablog.com/entry/2019/03/01/090000

2.1.6. Tips

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. 対応機械学習フレームワーク

※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のバージョンを確認できる。

image.png

確認例1

image.png

  • ONNXのファイルフォーマットバージョンが v6
  • INPUTSが2つ、OUTPUTSが3つ

確認例2

image.png

  • ONNXのファイルフォーマットバージョンが v7
  • INPUTSが2つ、OUTPUTSが3つ(確認例1と違いなし)
14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15