その1 中華AIチップ(K210)の調査
昨年、AIチップについて調査をしていました。画像処理でK210という中華製チップ(モジュール)が安価に手に入ることが判りました。2019年にEETimesのレポートにK210の分解結果が報告されていました。TSMCの24nmプロセスとオープンソースのRISC-Vを使って、中国のSiPEEDという会社が開発したようです。以下にEETimesの記事とこのモジュールを\1,100で売っている秋月電子の情報を示します。
K210のデータシートを調べてみました。以下に抜粋を示します。
画像処理は、OpenCVのような手続き処理に加えCNNをベースとするAI処理が可能です。YOLO2や顔認識も可能です。このチップの目的は監視カメラやロボット搭載を目指しているようです。チップ内で処理し、認識したIDや位置情報をセンサのようにホストに伝えるように作られています。更に知らない人が多いようですが外部マイクを使ったビームフォーミングなどで16×16の2D音源検出ができるようです。
まずは、開発ボードの入手を行いました。現時点で全部の評価はできていませんが、秋月電子で手に入る開発ボードを示します。SiPEED社と秋月電子は密接なようでアマゾンより圧倒的に安価で手に入れることができました。私は、MaixDocとMaixduinoを購入しました。
SiPEED社以外からもK210を使用した開発ボードが出ています。正直に言ってHUSKYLENSが素晴らしいです。基本ノープログラムで顔認識学習などできます。また、メモリ容量は、Maixシリーズは8MBです。足りません。HUSKYLENSは増量しています。YahboonはSDカードからモデルを読み込めるようMaixと異なるMicroPythonライブラリを作っています。M5stackVは販売終了で良く判りません。
その2 SiPEED社製 MaixPyシリーズの調査
K210ボードの開発環境とMicroPythonでのプログラム方法を紹介します。ボードは一番
ベーシックなMaix Dockを使います。まず、ツールを2つダウンロードします。
MicroPythonのIDEである「MaixPy」と学習済モデル等をROMエリアに書き込む
「K-Flash」です。machine_visionというAIプログラムフォルダにあるアプリを使用する場合は、「K-Flash」は必須ですが、MicroPythonの関数を使う場合は「MaixPy」だけで十分です。
まず、SDカードから画像を読み込んでモニターに表示するテストを行いました。これは本体ROM容量が少ないため、スピードは落ちますがSDカードから読み込むという用途に使用できるようです。(Maixシリーズでは推奨されてないようですが)また、使えるSDカードは3枚に1枚くらいです。選別が必要です。 SDカードに犬の写真を入れて、MicroPythonで読み出しモニターに表示するプログラムと結果を示します。
次のテストは、machine_visionフォルダーにある顔認識のプログラムの動作確認です。
画像AIのプログラムは学習済のモデルが必要です。結論から言うと「face_model_at_0x300000.kfpkg」を用意して、K-Flashでメモリアドレス300000以降に書き込んでおく必要があります。SDカードからの読み込みも検討しましたがうまく動きませんでした。
MicroPythonのコードを示します。MicroPythonのバージョン差があるようで、コード修正が必要な個所がありました。
MaixPy(IDE)で動作確認した後に、本体に書き込みます。書き込みが終わるとUSBケーブルから電源を供給するだけでスタンドアローンで動作します。MicroPythonのプログラムにprint分でシリアル経由でFPSと検出ID(1は顔検出:分類してないので)を出力しています。バウンディングボックスの中心座標とかも抽出できるので画像センサとして色々と応用が出来そうです。
ケースは3Dプリンタで製作しました。stlファイルを公開してくれている方がおられます。感謝です。
その3 MaixDockの応用 ColorTracker
今回は、Maix DockのキラーアプリケーションかもしれないColor Trackerを次郎柿に応用した例を紹介します。(前回の顔検出はポピュラーすぎてキラーアプリとは言えないかも)まず、次郎柿を2個手に入れて、1週間かけてクロロフィルとカロテノイドの変化とRGBの色変化を胴回り4点の平均値を抽出しました。
比較のため次郎柿でない他の柿Cを7日目に追加購入し測定しました。行ったり来たりしますが経時変化としてG成分/B成分が低下していきます。(赤みが出る)めんどくさかったのですが、反射蛍光もアボカドで開発した装置を使って測定しました。
アボカドと違って、クロロフィルの688nm/740nmの両方のピークは現れず688nmのみでしたが、経時変化として688nmのピーク減少が見られました。カロテノイドのピークは検出できませんでした。 今回の柿は、7日間で大きな変化はなく7日目以降食べても硬さ(若干柔らかいのかな)というレベルでした。アボカドに比べ日持ちがするようです。
ColorTrackerで使用する色分類はRGBではなくLABです。RGBデータをLABデータに変換するツールを以下に紹介します。
変換ツールを使用しなくても、色相/彩度図をMaix Dockで撮影することで目的の色範囲を設定することができました。怪しいやり方ですが手間は大幅に省けます。PCモニターに色相/彩度図を表示し、未熟·適熟·過熟の領域を□枠で囲んでおきます。PaixPy(IDE)画面で狙った枠に一致するように、LAB値を修正していきます。画面白枠が検出した枠です。LABのA値,B値の範囲を絞っていけば、白枠の出現が限定されていきます。
複数の色の検出も可能ですが、色識別のIDを枠に付記する場合、プログラムが停止してしまいました。目的は、適熟の検出ですので、負荷の少ない単一色検出を採用しました。モニター上に表示した3個のサンプル画像で検出試験を行いました。速度は10fps以上です。これをUSBバッテリにつなげばグラス方式より格安に適熟判別が出来そうですね。
Maix Dockの報告はここまでです。MaixDockの弱点は、IOピンの配置にあります。2列です。ブレッドボードに不向きな基板です。カメラだけで何かするのには良いのですがIOピンを使用する場合は非常に面倒です。次回は、ArduinoUNOとピン互換な工作に向いたMaixDuinoとそのキラーアプリを介します。
その4 MaixDuinoの応用 音源探査
前回までは、Maix Dockの応用についてレポートしましたが、今回は兄貴分であるMaixduinoについて紹介します。MaixduinoはK210にESP32を追加したボードで、WiFiが使えることに加えArduinoUNOのIOピンとの互換性を配慮したボードです。ADCも6chあります。
Maix Dockとの大きな違いは、Maix DockはIOピン配置が2列でありIOピンへのアクセスが困難(ブレッドボード向きではない)です。MaixduinoはIOピンアクセスはArduinoに同じ。また、IOピンアサインはソフトウェアで再定義可能です。Maixduinoの応用としてMaix Dockと同じようにK210による顔認識やColor Tracker等カメラ応用も可能ですが、IOピンへのアクセスが良くなったので、Sipeedから発売されているマイクアレイを接続しました。カメラ応用例は多くありますがマルチマイク用例は少ないです。人気が無かったのかマイクアレイの入手が困難です。SwitchSienceさんに注文して2ケ月で入手できました。
6角形のパッドの隅6箇所と中央に1個MEMSマイクとLEDランプを配置したものです。K210のMicroPythonライブラリでは、ビームフォーミング処理を行い16×16の2次元音響マップをリアルタイム(~30fps)で抽出することができます。これは凄いです。マイクアレイからの信号は10ピンのケーブルで取り出します。Maixとの結線はソフトウェアで定義します。以下のPIN情報はMaixbitのようです。
今回のMaixduinoとの結線情報を示します。
Maix Dockの場合は以下のようになりますが、IOピンが2列なので厄介ですね。
MaixPyのデモプログラムはカメラ画像との合成はできませんが、以下のQiita情報でカメラ画像と音響画像を合成した方がおられ、プログラムを利用させていただきました。
プログラムの書き込みは、MaixPyを使用します。操作方法を以下に示します。
Maixduinoとマイクアレイを結線した写真を示します。
MaixDockのケースと同様に、stlファイルをDLして、3Dプリンターを使って
Maixduinoのケースを作りマイクアレイをビスなどでケースに固定しました。感謝!
最後に音源の表示例を示します。ずれているようにも感じます。
以前、マイクアレイ(3×2)による音源のマップ化を検討しましたが、
MaixDuinoで16×16の分解能をしかも高速で。こんなに手軽で安価に音源表示ができるとは思いませんでした。 中華半導体メーカーは安くて良いものを供給してくれますね。。K210すごい。
その5 K210進化系ボード調査1 Yahboon社
前回までは、Sipeed社製のK210ボード(Maixシリーズ)の評価報告でしたが、進化系?Yahboon社製のAIビジョンセンサーとDFRobot社製のHuskeylenseについて評価報告を続けます。今回は、Yahboon社製のAIビジョンセンサーです。
そして、マイクロパイソンの環境は、Maix系のMaixPyに相当するCanMVが提供されています。操作方法は類似していますが、MicroPython言語を含め微妙なちがいがあります。
Maix系との違いのひとつとしてSDカードからプログラムを起動できます。
(同じようなことをMaix Dockで行いましたがうまく起動できませんでした。)
また、モデルファイルについては、Maix系では、K-Flashを使用して本体ROMに書き込みましたがYahboonボードではSDカードに書き込みます。本体ROMを消費しません。
デモプログラムからTinyYOLOに相当するプロググラムを実装しました。Maix系でもTinyYOLOはかつてデモプログラムとして公開していましたが、何か理由があったのか現在はモデルデータもありません。しかたなく無く過去のファームウェアに戻そうとしても削除されていてMaix系では動かせませんでした。
ならばということで、Yahboonのこのプログラム voc20 をMaix Dockに移植することを試みました。MicroPythonの文法もMaixPyと異なりますが、適宜修正しながら進みました。しかし、動作確認済のSDカードにモデルファイルを書き込みましたが、SDカードからの読み込みに失敗します。Yahboon社製ボードの有益なアプリは画像分類ということでした。動作確認結果を示します。
以上です。感想としてはYahboon社製のAIビジョンセンサーはMaix Dockの2倍の値段ですが20分類アプリが使えることと、基板収納ケースが不要な点が良かったと思いました。次回は、DFRobot社製のHuskeylenseです。値段はYahboon社製のAIビジョンセンサーより若干高めですが、機能も豊富でプログラムレスというすばらしさがあります。最終報告予定です。
その6 K210進化系ボード調査2 DFRobot社 Huskeylense
K210の報告は今回が最終回です、Sipeed社のMaixシリーズが最初で、メモリ不足を解消するために学習済モデルをSDカードから読み出す仕様のYahboon社のAIビジョンセンサーを前回報告しました。今回は、外付けメモリ領域を拡大し顔認識や20分類、ライントレースなどのアプリ及び学習データをメモリ内に収納したDFRobot社のHuskeylenseについて評価報告を行います。なのでHuskeylenseではMaixPyのようなIDE環境は必要ありません。アプリ選択や顔認識学習すら自己完結で、本体のボタン操作で完了します。その分自由度(マイクアプリは非対応)はありませんが、これぞビジョンセンサといったものです。
マイコンとの接続は、シリアル方式とI2C方式が準備されています。(Yahboon社はシリアルのみ)上記写真の左下にある4端子のコネクタでマイコンをつなぎますが、シリアル/I2Cの切り替え設定は本体のボタン操作で行います。センサとして利用する場合はArduino用ライブラリが提供されています。
Huskeylenseのアプリは、顔や物体認識の場合には「BBの座標とIDの出力」またライントレース等のトラッキング応用の場合には「矢印座標」といった位置情報を基本にIDを付加して出力することで共通しています。なので「本体側で各種アプリを設定(コードで設定も可)しますが、マイコンに渡す情報には汎用性があります。
複数の顔を学習させ顔認識したBoudingBoxに顔IDを表示するアプリがあります。学習も本体のボタン操作だけです。特定の物体認識も同じ要領で学習できます。学習用画像はなんと1枚でOKです。精度を上げるため横顔などを加えた複数枚での学習もできるようですが1枚でも十分に識別できます。顔学習はPCのモニター画面とHuskeylenseを使って行いました。4枚ほど学習させました。
Arduinoの出力を示します。数fpsくらいの速度が出ています。顔検出できない場合と顔検出した場合の出力例をしましました。文字や###などがうざいですね。実際にセンサとして使う場合は数値のみを出力する必要があると思います。
文字や###を取り除いて、座標出力(4データ)とID出力(1データ)をコンマ区切りで出力するように変更しました。検出できないとき場合でもコンマ区切り5つのデータ出力にするため 0,0,0,0,0を出力させます。
数値出力にしたので、シリアルプロッタでセンサの動きを確認しました。センサらしくなりました。
ならばということで、サーボモータと連動して顔追跡実験を予定しています。残念ながら最終レポートには間に合いませんでしたが、プログラムコードと実験パーツ情報を以下に追加します。
今回で、K210に関する報告は最終回です。実質3ケ月くらい各種評価ボードを評価してきました。MaixDockは「ColorTracker応用」、MaixDuinoは「音源可視化応用」、Yahboonは「20分類応用」、そしてHuskeylenseは「顔認識応用」でした。画像センサとして一番便利なのは現時点では、DFRobot社製のHuskeylenseだと思いました。