2020年3月9日月曜日

tf.kerasの自作モデルをNNCase v0.2.0 (kmodel V4)に対応させ、M5StickV(K210)上で動かす(0)




 卒業も決定し、無事週5で研究室にこもっている中の人です。3月に予定されていた各種イベントが軒並み流れたため、研究もバイトもそっちのけでM5StickVで遊んでいました。(教授からオーバーワークかもよって言われました)。
 M5StickVで何をしていたかといえば、独自に作成したDNNモデルをK210内のKPU上で動かそうと悪戦苦闘していました。その時の苦労も含めて話していきたいと思います。


0-1.K210とKPU

 K210は、Kendryteが開発したデュアルコアRISC-Vチップです。内部構成はこんな感じ。

K210の概略。アクセラレータはKPU以外にもオーディオとFFT用が載る。(Image:Kendryte)

 このプロセッサの注目すべき(?)点としてKPUがあげられます。KPUはニューラルネット(おそらくCNNの演算をメインにしている)のアクセラレータであり、0.8TOPSの性能があるらしいです(参考:M5Stack - A series of modular stackable development devices)。
 今回はこいつを使っていきます。


0-2.KPUを開発する

 KPUはGPUなどと同じく、CPUのコードとは別の実行バイナリを作ってやる必要があります。そのためのツールとしてkendryteからNNCaseが提供されています。NNCase自体では学習モデルの作成は行わず、量子化とKPU向けの変換に特化しています。(PC向けのバイナリも吐き出せるようだが、今回は動作未確認)
 そのため、大元のモデルは自前で開発する必要があります。NNCaseの場合、Tensorflow/Tensorflow LiteまたはCaffeを使う必要があります(.tfliteが吐き出せればよいので、Torch->ONNX->tfliteとかでもできるはず)。


0-3.NNCase V0.1.0とV0.2.0

 NNCase V0.1.0からV0.2.0にかけての主な変更点は、GitHubのリリースを見てね(出落ち)。
 対応しているレイヤが増えたことや、コンパイルオプションが変わったことがあります。特にコンパイルオプションの違いはMaix Toolboxでのバグの原因になったりしてるようです。開発の最初、Maix Toolboxを入れていたのですが、結局tfliteの変換コードを作成し、直接NNCaseを使うことで解決しました。(一度作ればそこまで苦ではない)


0-4.開発環境

 リリースの内容的には、Win/Mac/Linuxがサポートされているようです。今回はTensorflow/Kerasによるトレーニング、Kmodelの生成をLinux(Ubuntu 18.04.3)、MaixPyによる開発をWindows 10で行いました。


0-5.次回予告?

 とりあえず導入は(中の人が力尽きたので)終わりで、次回はTensorflowによるモデル作成とTensorflow Liteへの変換の話の予定です。(ターゲットモデルは未定Deep Autoencoderになりました。)

 今回の一連の投稿は、モデル作成からM5StickVへの実装までの備忘録的なものにしていく予定です。
(V0.1.0の方は偉大なる先人のおかげで使用例や日本語資料も出ているのですが、V0.2.0の資料が少ない(日本語資料はほぼ皆無)という裏事情も。)

 この投稿ですくわれる方が一人でもいれば幸いです。
 


©2020 shts All Right Reserved.

0 件のコメント:

コメントを投稿