社員ブログ

印刷

学習済のニューラルネットワークを組込装置で動かす(その3)

連載第2回の振り返り

本連載の[第2回]は2019年11月でした。
また1年以上経過しています。まさに光陰矢の如しです...。

本連載の目標

本連載では、以下のようなツール(図中の橙色部分)の完成を目標にしたのでした。
目標

  • 学習済のニューラルネットワークをC言語に変換する
  • OSなしの小規模な組込装置でも動作可能なC言語を生成できる
  • 主要な機械学習フレームワークに対応する
再調査の実施

第2回から1年経過しているため再調査しました。
先日[2020 Kaggle ML & DS Survey][サマリー]が公開されたので、その情報も参考にしています。

【再調査1】機械学習フレームワークの動向調査

第2回の時点(2019年11月)では、研究分野で[PyTorch]が一番人気、応用分野で[TensorFlow]が一番人気でした。現在もこの状況から大きく変化していません。
なお、[第2回で引用した記事]では、主要なAI系学会の論文中にPyTorch、TensorFlowが引用される度合いを数値化し、その経時変化を見ていました。
最新の状況は[ここ]で確認できます。

【再調査2】学習済モデル保存ファイル形式の動向調査

第2回の時点(2019年11月)では[ONNX]が優勢でした。
現在もこの状況から大きく変化していません。

【再調査3】深層学習コンパイラの調査と選定

第2回の時点(2019年11月)では[TVM]を選定しました。
現在も良い選択であり方向修正は不要です。
TVMのOSなし小規模組込向けの機能拡張は[µTVM]と呼ばれています。
なお、今回の再調査では[この論文]も参考にしました。

再調査結果のまとめ
  • 機械学習フレームワークの1番人気は、研究ではPyTorch、応用ではTensorFlow
  • 学習済モデル保存ファイル形式の1番人気はONNX
  • 深層学習コンパイラの中でTVMは良い選択であり、OSなし小規模組込向けにはµTVMが利用できる
連載予定変更について

今回からµTVMのバックエンド対応を試行しています。
本当なら試行を完了させて今回の記事にしたかったのですが、まだ完了していません。
ですが、本連載は最低でも年1回のペースを維持したいですし、
TVMの近況など紹介したいトピックも出てきましたので、連載の予定を以下のように修正します。

  • 【第1回】事前調査
  • 【第2回】深層学習コンパイラの調査と選定
  • 【第3回】深層学習コンパイラのバックエンド対応 µTVMのバックエンド対応(その1)
  • 【第4回】動作検証 µTVMのバックエンド対応(その2)
  • 【第5回】動作検証

第2回の振り返りは以上です。第3回の本題に入ります。

µTVMのバックエンド対応(その1)

µTVMの概要を知るには[この記事]が参考になります。
これによればバックエンド対応の要件は4つあります。

  1. そのデバイス用のCクロスコンパイラがあること
  2. デバイスのメモリを読み書きする手段およびコードを実行する手段があること(JTAG等)
  3. デバイスのメモリ空間等の仕様について最低限必要な情報が提供されること
  4. デバイスで関数を実行するためのコードスニペットが提供されること

一般的な組込向けマイコンは、1と2の要件を既に満足しているはずで、
残りの3と4を満足するのは簡単だ、と書かれています。
確かに簡単そうだと感じましたが、実際やってみると想像以上に大変でした。
理由はいくつかあります。

  • TVMは活発に開発されておりソースコードの変化が速い。このためtutorial等に記載の手順通り実施できない事例が多々あり、トラブルシューティングが大変。(良い勉強にはなりますが...)
  • デバッグ通信をpythonから制御する手段が必要になる(自動化のため)。単にJTAG等のデバッグ通信があれば良いわけではない。
  • などなど...

目下、試行錯誤中です。
Cソースコードを生成するところまではたどり着きました。(この工程まではバックエンド対応とあまり関係ないので)
[ONNX Model Zoo]から入手した[super-resolution-10.onnx]をC言語に変換してみた例を少しだけお見せします。 ビューワー表示例

↑このモデルをC言語に変換すると...

ビューワー表示例

↑このような結果になった

TVMの近況について

TVMの近況について、いくつかトピックをご紹介します。

Apacheソフトウェア財団のトップレベルプロジェクトに昇格

TVMは[Apache Incubator]の支援を受けていましたが、
2020/11/30にトップレベルプロジェクトに昇格したと[発表]がありました。
TVMを個人的に応援している自分としても喜ばしい出来事です。

TVM Conference 2020開催

[TVM Conference 2020]が12/2~12/4に開催されました。
COVID-19に配慮してバーチャルイベントだったので、自分もオンラインで参加できました。
旅費をかけずに現地の最新情報に触れることができて得した気分です。
時差があって聴講は大変でしたが、Andrew Reusch氏によるµTVMのチュートリアルは参考になりました。
特に実機デモは興味深かったです。
発表の様子は[Twitter]でも投稿されていました。
デモ用プロジェクトのgithubリポジトリは[ここ]です。
その中に[スライドのPDF]も含まれています。

次回予告

次回は【第4回】µTVMのバックエンド対応(その2)を予定しています。

バックエンドの題材としてどのマイコンを選ぶか、まだ迷いがあり決めていません。
日本人の自分としてはルネサス社の製品から選びたい気持ちですが、果たしてどうなるでしょうか...。

次は1年経たずに掲載できるように頑張ります。

Written by 澤田

PAGE TOP