SSブログ

Tensorflow対応のSPRESENSE Arduinoパッケージを作ってみた話 [SPRESENSE]

SPRESENSEのSDKではTensorflow lite/microが利用できるのですが、ArduinoIDEでなんとか利用できないかなとずっと考えていたのですが、ようやくそれを実現しました。手順については、Qiitaにまとめていますので、ぜひ参照してください。


Tensorflow lite/micro 用の SPRESENSE Arduino パッケージを作ってみた
Qiita.png
https://qiita.com/TaroYoshino/items/be62c70ad78a9a80308a


今回はその経緯についてちょっと触れたいと思います。今後、作業をしてみる人の参考になるかもしれません。


コンパイルを通すのに一苦労
外部ライブラリをArduinoパッケージに取り込むのは、jpegライブラリを追加したときに経験済なので、ある程度どのあたりを変えたらよいのかというあたりはついていました。

参考
SPRESENSE Arduino で libjpeg を使いたい
stackoverflow.png
https://ja.stackoverflow.com/questions/73301/spresense-arduino-%e3%81%a7-libjpeg-%e3%82%92%e4%bd%bf%e3%81%84%e3%81%9f%e3%81%84


しかし、Tensorflow lite/microの場合は大変でした。もっとも大変だったのはヘッダーファイルのエクスポートです。とても整理されたコードとは思えず、依存関係が複雑でかつフォルダが細分化されているので、必要なすべてのヘッダーファイルを絞り出すのにかなりの時間がかかりました。


サンプルコードがとにかく分かりにくい
一通りコンパイルは通ったので、動作確認のためにサンプルコードをArduinoに移植しようとしたのですが、サンプルなのにすごく分かりにくい。プラットフォームに依存しないように作ろうとしたことはわかりますが定数まで、分離する必要あるんですかね?

サンプルという以上は普通はわかりやすい例を出すものですが、とてもそのような事を意識したようには思えません。HelloWorldサンプルがなぜ正弦波を予測して出力するものなのか意味わかりません。Androidは非常にわかりやすく作られていましたが、Tensorflowはひどいですね。やはり組み込みはおまけなのでしょうか?


サンプルはビルドしたけどTensorflowの学習済モデルが動かない
どうにかこうにか、HelloWorldサンプルをArduinoに移植し、SPRESENSEのイメージを作るところまではいきました。しかし、それを書き込んでみると、Tensorflowの学習済モデルが動いている気配がない。量子化係数がnanを返しているので、インタープリターが動いていない。

理由がわからず試行錯誤を繰り返しましたが、サンプルコードをコンパイルするときのコンパイルオプションに問題があるのだろうとあたりをつけて、SDKのサンプルをコンパイルしているときのオプションをログを出力して細かく見ました。差分をArduinoIDEのplatform.txtに設定してみたら、これがビンゴ!無事に動くようになりました。


かなり癖のあるTensorflow lite/micro ですがTensorflowの最新フレームワークが使えるのは大きな魅力です。これから少しずつ使いこなしていきたいと思います。
(^^)/






深層学習&深層強化学習による電子工作 TensorFlow編 (たのしくできる)

深層学習&深層強化学習による電子工作 TensorFlow編 (たのしくできる)

  • 出版社/メーカー: 東京電機大学出版局
  • 発売日: 2021/06/21
  • メディア: 単行本(ソフトカバー)



SONY SPRESENSE メインボード CXD5602PWBMAIN1

SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



nice!(18)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 18

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Arduino IDE2.0 Relea..Tensorflow対応 SPRESEN.. ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。