最近、機械学習の応用が凄い勢いで進んでいます。
こうした中で、弊社では、社内活動として私がAI関連技術の調査を担当することになりました。
担当するからには、実際に動作する面白いものを作りたいと考えています。
特に、組込装置でニューラルネットワークを動作させてみたい...と思いました。
調べたところ、ルネサス社のe-AIという製品がありました。
これは、ひとことで言えば「学習済のニューラルネットワークをC言語に変換するトランスレーター」です。
「おおこれは便利だ!」と思いましたが、それと同時に
「こういうツールを自分でも作ってみたい」
という気持ちが沸いてきました。(自分はツールを作るのが大好きなのです...!)
ということで、不定期連載で開発記事を書いてみます。
なお、もし良いものができた暁には無償で公開する予定です。
主な読者として、機械学習や組込ソフト開発に関連する用語を既に知っている技術者を想定しています。
例えば「TensorFlow」「Keras」といった機械学習フレームワークの名称や、
「教師あり学習」「教師なし学習」といった用語を、特に補足説明なく使う予定ですがご了承ください。
WikiPedia等へのリンクは可能な限り付けますので、興味ある方は、そこから辿ってみてください。
本連載では、以下のようなツール(図中の橙色部分)の完成を目標にします。
本連載の各回は、おおまかに以下のようになる予定です。
さて第1回の今回は、目標のひとつ「主要な機械学習フレームワークに対応する」を実現するにあたって、
以下の調査を実施しました。
機械学習フレームワークの主要なものを知るためここを見ました。
また、この記事が「ぱっと理解」できて助かりました。
他もいろいろ見ましたが、現在はTensorFlowが1番人気のようです。
(上図は記事[Deep Learning Framework Power Scores 2018]より引用)
さて、どの機械学習フレームワークを使っても、実際やることは似ています。
ここで「ニューラルネットワークのグラフ構造」と「(学習済の状態における)ニューロン間の結合強度」を
合わせたものを指して「学習済モデル」と呼ぶようです。
学習済モデルをエクスポートする際のファイル形式は、機械学習フレームワーク毎にまちまちですが、
それだと不都合が多いので、最近は共通のファイル形式が策定されてきています。
本連載で開発するツールは、共通のファイル形式をサポートすることで、
主要な機械学習フレームワークに対応できることになるはずです。
ただし、共通のファイル形式は複数の規格が提唱されている状況で、
その中から今後普及するであろうものを上手に選ぶ必要があります。
学習済モデルをファイルに保存する場合の形式について、動向を調査しました。
ほぼONNXかNNEFかの2択のようですが、
現在はONNXが圧倒的に有利な状況のようです。
機械学習フレームワーク | ONNX形式 | NNEF形式 |
---|---|---|
Caffe | ― | Export/Import |
Caffe2 | Export/Import | ― |
PyTorch | Export | ― |
Cognitive Toolkit (CNTK) | Export/Import | ― |
Apache MXNet | Export/Import | ― |
Chainer | Export | ― |
TensorFlow | Export/Import | Export/Import |
Apple CoreML | Export/Import | ― |
SciKit-Learn | Export | ― |
ML.NET | Export | ― |
Menoh | Import | ― |
(情報ソースはgithubのonnx/tutorialsとKhronosGroup/NNEF-Toolsです)
という結論になりました。
さて、次回は【第2回】学習済モデル読込機能の作成を予定しています。
不定期連載ですので、いつになるかは不明です。果たしてうまくいくのでしょうか...?
Written by 澤田
Copyright © Hokkaido Electronics Corporation.