2023年5月2日火曜日

NNCase V1.7を試す話(Sim実行編)


社会人2年目になり業務量が増えてきた中の人です。今回は以前やっていたが公開していなかったNNCaseのv1.x系(kmodel v5)を試す話になります。
2023/5/20追記:サンプルコードを公開



1.NNCase v1.xの特徴

以前のバージョンと比較した際の一番の変更点としては、従来のコマンドラインベースのものからPythonの1ライブラリとしての実装に変更されています。kmodelの元ネタになるonnxやkerasのモデルを生成するコードに追加することもできます。ビルド済みのwhlが公式から提供されており、CPUはx86-64、OSはWin/Linux/Mac版があります。
これ以外の点では、対応する演算の種類が増えている、K210の上位機種に当たるK510への対応といった部分のアップデートがなされています。これに合わせる形?でkmodelのバージョンもv5に上がっています。

2.テスト環境


今回の環境は以下の通りです。
  • RPi4 4GB(Raspbian 11:bullseye)
  • Docker(23.0.5, build bc4487a)
  • NNCase(v1.7.1)
NNCaseのv1.xはarm64に対応するwhlを出していないのですが、中身を一部変更してビルドしました(基本的にはx86-64と同じコードになります)。またビルドのデバッグがやりたかったので、Docker環境にねじ込みました。今回はK210を動かすところまではいかないので、NNCaseのみの紹介にします

3.インストール


x86-64環境であればインストールは簡単で、公式のリリースからwhlを持ってきてインストールするだけになります。(今回試しているarm64の場合は自前でビルドする必要が出てくるので面倒でした)

4.コンパイルとSim実行


v1.7.1でのコンパイルとSim実行手順は基本的にはここにいろいろ書いてあります。このディレクトリを手元に落としてきて動かすのが最初はよいかと思います。
このディレクトリは以下のような感じになっています。
.
|- tools:モデルの変換とSimを実行するためのコード
|- images:入力画像
|- model:もとになるモデル(onnx)
|- cpu
`-k210:実機実行用のコード
README.mdを見たところ、画像の入ったディレクトリを見に行くオプションがすべてimagesではないところだったのですが、手元で試したところimagesに変更しても動くことが分かりました。
python tools/compile.py model/yolox_nano_224.onnx yolox_nano_224_quant.kmodel --imgs_dir ./images/ --legacy --target k210
python tools/simulate.py yolox_nano_224_quant.kmodel ./images/dog.jpg
環境内でmatplotlibの表示機能が使えるのであれば、Sim結果としてこんな感じの画像が得られるはずです
Sim結果
実機実行の結果とは異なるので要注意

5.まとめ


今回はNNCase v1.7を使ってSimを実行してみました。変なことをしなければすんなり動くはずであり、K210の実機が無くても結果が確認できるのでお手軽に試せるかと思います。

n.おまけ


以前使っていたM5StickV+MaixPyの組み合わせではkmodelのv5に対応していなかったのですが、まさかのkendryteがMaixPyではない別のツールを作って対応しようとしていました。(boardのディレクトリにm5stick的なものがあったが、M5StickVで動くかどうかは不明)。
©2023 shts All Right Reserved.




0 件のコメント:

コメントを投稿