用いてMaixduino用の画像認識モデルを製作する手順を学びご紹介させていただきました。AIモジュールここでは金魚の画像を元に認識モデルを生成して我が家の金魚ちゃんのMaxduinoのカメラでのリアルタイム認識を目指します。手順としましては前回のアライグマの画像を金魚にしてラベリングし同様に学習しただけですが、改めて順にご説明させていただきます。我が家のカワイイ金魚(和金)の認識を目指して認識用モデルを作るべく学習用の画像を準備します。画像のラベリング(アノテーション)画像の学習には教師データが必要となります。今回は金魚しか認識しませんのでクラスをgoldfishとして画像の一つ一つにどこに金魚がいるかをラベル付けする必要があります。深層学習などではラベル付けをアノテーション作業というようです。VOC形式(xml)で行います。Box上のUbuntuにLabelImgをインストールしました。Python3とGUIソフトのQt5を使用します。Dir”でアノテーションデータ保存先を指定します。labelにチェックを入れてモデルのクラス名(goldfish)を記載しておくと便利です。“Create\nRectBox”をクリックして画像をドラッグして金魚の場所を指定します。VOC形式のアノテーションデータが生成されます。</annotation>1234567891011121314151617181920212223242526272829303132333435363738<annotation><folder>images</folder><filename>goldfish-51.jpg</filename><path>/home/hoge/Yolo-digit-detector-goldfish/goldfish_dataset/images/goldfish-51.jpg</path><source><database>Unknown</database></source><size><width>600</width><height>450</height><depth>3</depth></size><segmented>0</segmented><object><name>goldfish</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>31</xmin><ymin>96</ymin><xmax>305</xmax><ymax>250</ymax></bndbox></object><object><name>goldfish</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>249</xmin><ymin>137</ymin><xmax>539</xmax><ymax>329</ymax></bndbox></object></annotation>これをすべての画像に対して実施します。今回は金魚だけ認識するので1クラスで十分ですがいろんなものを識別するモデルを生成するには膨大なデータと手間が必要となりますね。AIは人間の仕事を奪うといいますが、逆に増やしてはいやしないか。学習アライグマの時同様に以下の学習用プロジェクトデータに画像とアノテーションデータをコピーして学習します。https://github.com/AIWintermuteAI/Yolo-digit-detectorconfigsフォルダに学習設定jsonファイルを作成します。false}}正直この辺の値や正確な意味はよくわかってないです。随時理解したら追記したいと思います。actual_epoch:全体の学習回数train_image_folder:学習する画像のパスtrain_annot_folder:学習画像データのアノテーションデータのパスtrain_times:学習サイクルvalid_image_folder、valid_annot_folder:検証用のデータのパスここをカラにすると学習用のデータからランダムに2割のデータを検証用として学習されます。valid_times:検証回数batch_size:?learning_rate:?saved_folder:?first_trainable_layer:?jitter:?is_only_detect:?どうしたら効率よく良いモデルができるのかこの辺の設定が要だと思うのですが、じっくり勉強します。以下で設定した条件での学習がスタートします。TensorFlowで学習しているようです。configs/goldfish.json学習が終了すると、model.tfliteというモデルファイルが生成されます。Maixduinoでも利用できる.kmodelファイルに変換します。Toolboxを使用します。https://github.com/sipeed/Maix_ToolboxDLし展開したら、まず以下を実施して環境を構築します。224の画像をいくつか入れておきます。これをしないと変換時にエラーがでます。Toolboxに入れて以下実施で変換開始します。model.tflite以上でK210用のmodel.kmodelファイルが生成されました。ファーム、モデル書き込みkflash_guiでファームと.kmodelファイルをMaixduinoに書き込みます。学習モデルmodel.kmodelはアドレス0x600000に書き込みました。IDEで書き込みました。画面方向調整のためコードに以下の挿入・変更施しました。["goldfish"]動作40画像Googleで和金を検索して40個の画像を取得してモデル生成しました。Google上の赤い和金の画像40枚で適当に学習しモデル作った。検出それなりにできた。画像200枚にして同様に味見して、それから学習について真面目に学習します。2019静止画の金魚は認識できましたが水槽の動く金魚の認識はできませんでした。水槽の金魚の写真を55枚追加しました。自宅の金魚画像追加して95画像で再トライ。2019水槽の金魚も何となく認識できるようになってきました。水槽の金魚の写真を追加175画像で学習。