K210 物体認識モデルの生成 ーエッジAI活用への道 2ー

Home > IoT > K210 物体認識モデルの生成 ーエッジAI活用への道 2ー
すき 3
うんこ 1

ハイエンドな金魚水槽システムの実現を目指して前回より始まりました エッジAI活用への道。今回は金魚の認識を目指して、まずはオリジナルの物体認識モデルの生成方法について調べました。

 

 

Maixduinoによる物体認識

前回はMaixduinoで顔認証まで試しましたが、20種ほどの物体を認識できるサンプルコードもありました。
 https://bbs.sipeed.com/t/topic/683

tiny-yolo v2というディープラーニングアルゴリズムを用いているようで 鳥、人、車など20種類の物体を認識できるモデルとK210用コードが公開されてございます。

残念ながら魚は認識できません。認識モデル作成が必須ですね。

認識モデルの生成調査

ところで認識モデルってどうやってつくるの?サンプルコード動かすだけでもヒーヒー言ってるのに。。。

ネット検索してもK210向けの生成方法が一連の流れで記載されているものは見つけられず、エラーで動かないなどの記事が目立ちました。

そんなときグッドタイミングである記事が投稿されました。

https://www.hackster.io/dmitrywat/object-detection-with-sipeed-maix-boards-kendryte-k210-421d55

アライグマの画像(200枚)を用いて学習しK210向けの認識モデルを生成しておりました。まさにやりたいこと!セレンディピティね!

ここではこの記事に従いアライグマ認識モデルの生成手順について説明いたします。かなり格闘しました。。。尚、深層学習に関する詳しい内容は全く理解しておりません。あしからず。

アライグマ認識モデルの生成

公開されている記事やソースを用いてアライグマ認識モデルの生成します。また学習により生成されたモデルをK210用に変換してMaxduinoに書き込んで実動作検証も致しました。

Ubuntuの導入

Win10でもモデル生成はできるようですが、モデル変換ツールがLinux向けでしたのでVirtual BoxでUbuntuを導入しました。

以下の記事のとおりにVirtualBox 5.2.32とUbuntu 18.04.01をインストールしました。

学習環境の構築

環境構築にはMinicondaというAnacondaの最小版インストーラを用いました。以下で各OS インストールできます。
 https://docs.conda.io/en/latest/miniconda.html

随時必要なものをインストールします。

プロジェクトデータを以下よりDLして所定の場所に展開します。
 https://github.com/AIWintermuteAI/Yolo-digit-detector

展開したYolo-digit-detectorフォルダに移動して以下を実施

conda create -n yolo python=3.6

conda activate yolo 

必要なパッケージをインストールするためにパッケージ一覧のテキスト requirements.txt をフォルダ内に作成します。

そして、以下実施で各パッケージがインストールされます。

pip install -r requirements.txt

pip install -e .

以上で学習環境が整いました。

深層学習

アライグマの画像を準備しいよいよ学習しモデルを生成します。

以下の画像データフォルダをDLしてYolo-digit-detectorフォルダに展開します。
 https://github.com/datitran/raccoon_dataset

以下の実施で学習がスタートします。

python train.py -c configs/raccoon.json 

Kerasという深層学習ライブラリをしようしているらしいです。画像入力サイズは224 x 224。その他の設定などはよく理解できておりません。。。

学習モデルの変換

学習が終わるとmodel.h5とmodel.tfliteというモデルファイルが生成されます。これをMaixduinoでも利用できる.kmodelファイルに変換します。

変換にはSipeed社の提供するMaix Toolboxを使用します。以下をDLします。
 https://github.com/sipeed/Maix_Toolbox

DLし展開したら、まず以下を実施して環境を構築します。

bash get_nncase.sh 

実行後に生成されるimagesフォルダには入力サイズである224 x 224の画像をいくつか入れておきます。これをしないと変換時にエラーがでます。
 https://bbs.sipeed.com/t/topic/569/7

先ほど生成したモデル model.tflite をMaix Toolboxに入れて以下実施で変換開始します。

./tflite2kmodel.sh model.tflite 

以上でK210用のmodel.kmodelファイルが生成されました。
 


 

アライグマ認識モデルの動作

ファーム、モデル書き込み

kflash_guiでファームと.kmodelファイルをMaixduinoに書き込みます。

ファームは maixpy_v0.4.0_13_ga40842f.bin を書き込みました。学習モデルmodel.kmodelはアドレス0x600000に書き込みました。

Micropythonコード

コードはYolo-digit-detector/micropython_code/racoon_detector.py を使用します。MaixPy IDEで書き込みました。

また画面方向調整のためコードに以下の挿入・変更施しました。

動作

完璧な動作ではないですがアライグマを認識できました!!!

 

あとは金魚画像をあつめてモデル生成できるかですね! 😀 
地雷たくさんありそうですが。。。

参考

追記

2020/1/16

Yolo-digit-detectorやMaix Toolboxに更新があるとのことでここで紹介した手法だと現在(2020年1月)エラーがでるようです。
紅樹タカオさん が解決してくれていますので是非ご参照ください。

M5StickVやUnitVで使えるkmodelファイルをローカル環境で作成する。

次の記事

オリジナル金魚認識モデルの生成 ーエッジAI活用への道 3ー

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください