概要
SiPEED M1という、エッジコンピューティング向けの開発ボードがseeed studioで安かったので買ってみた。(購入ページ)
とりあえず既存のモデル(Tiny YOLOv2の顔認識)を動かせたので備忘録。
(開発スピードが速そうなので、すぐ陳腐化するだろう。)
ハードウェア
KENDRYTEというメーカーのK210というコアらしい。デュアルコアのRISC-Vプロセッサと、KPUと呼ばれているCNN用のアクセラレータが載ったチップ。
0.25TOPS @0.3W, 400MHzらしい。
付属していたTypeC→MicroBアダプタ経由でUSBポートにつなぐと、USBシリアルとして認識するとともに電源供給もできた。
開発環境
ダウンロード
githubのリリースページから開発環境MaixPy IDE v0.1.0
とフラッシュに焼くファイル(face_model_at_0x300000.kfpkg
, maixpy_v0.3.0_full.bin
)を入手。
デバイス上にスクリプトをアップロード/ダウンロードするツールuPyLoaderもダウンロードしておく。
Flash焼き込み
公式ドキュメントのUpgrade Firmwareの章の通りにファームを焼く。今回はWindows環境から焼いたので、K-Flashを用いた。
0.2.4では顔認識モデルとSDKが両方入ったバイナリがリリースされていたが、0.3.0は別々だった。最初0.2.4で試していて、SDKだけバージョンアップしたためにハマってしまった。
K-Flashでmaixpy_v0.3.0_full.bin
を焼いたあと、連続してface_model_at_0x300000.kfpkg
を焼けば別々の領域に配置してくれるようだった。
フラッシュを焼き終わるとターミナルが起動するが、後述のIDEのほうが使いやすいのでそのまま閉じる。
MaixPy IDE
上記MaixPy IDEのインストーラでインストールすると、OpenMV IDEという名前でインストールされた。
「ツール」->「ターミナルを開く」から新ターミナルまたは以前接続したシリアルポート名を選択すると、ターミナルが開く。
他のボードだと画像プレビューもできるのか!というリッチなターミナル画面。
サンプルが実行され、カメラの映像が液晶に表示された。
uPyLoader
uPyLoaderデバイス上のスクリプトファイル操作ツールらしい。
シリアルポート指定して接続すると、ローカルからのスクリプトファイルのアップロードが楽。OpenMV IDEのシリアルポートと同じポートを使うので、排他なので注意。
Remote側に見えているboot.pyを書き換えておくと、次回ブート時に自動実行されるようになる。OpenMV IDEのデモスクリプトで置き換えると、起動直後にカメラ画像が表示されるようになった。
(4/27追記)
Micro SDカードを刺しておくと、内蔵フラッシュを使わずにSDカードを使用するようになり、boot.pyもSDカードのものを使用するようになる。シリアル経由だとPCとのデータのやり取りが遅いので、SDカードは刺しておくと便利。
KPUのテスト
IDEのサンプルでは肝心のKPUを使用しないので、顔認識デモを焼いてみた。
難なく動作できたし、非常に速い。
https://www.youtube.com/watch?v=wIkQ6JHkOt4
その他のモデルについて
Maix Toolboxで他のTensorFlow Liteのモデルをkmodelに変換できるようなので、Edge TPUのモデルなどを変換してみたが、使用できるレイヤにいろいろと制限があるようでまだうまくいっていない。
そのへんの条件のドキュメントはどこにあるんだろう。
→ KPU用にモデルの変換を行うnncaseのgitにSupported layersの記述があった。
(4/27追記)
SiPEEDのBBSにいろいろなサンプルが上がっていた。
20クラス検出器の動作 (4/28追記)
20クラス検出のデモも動いた。
当初メモリ容量が足りないとのエラーが出たので、task = kpu.load("/sd/20class.kmodel")
としてSDからモデルを読むようにした。このロードには数十秒時間がかかるので注意。
再度やったら普通に動いた。モデルもロードもSDカード使わなければ一瞬だった。
上記BBSの投稿から、maixpy_20class.zip
をダウンロード・展開し、K-Flashで20class.kfpkg
を焼く。
BBSのコードに処理時間の計測を追加して、無事動作した。
https://youtu.be/MjHON3F0mUs