昨年4月に新製品OpenMV4 H7 Plusが発売されました。本日は、OpenMV4 H7 Plusの新機能であるEdgeImpulseオンラインサイトを利用してニューラルネットワークを独自にトレーニングし、分類認識を行う方法をご紹介します。
このチュートリアルでは、機械学習を使用して、OpenMV4 H7 Plusスマートカメラが顔にマスクを着用しているかどうかを識別するシステムを構築します。つまり、画像分類を実現します。

EdgeImpulseは、組み込みデバイス向けにオンラインでニューラルネットワークモデルをトレーニングするサービスを提供するウェブサイトであり、当社OpenMVのパートナーであり、同時にSTマイクロエレクトロニクスの公式パートナーでもあります。現在、EdgeImpulseはOpenMVユーザーに対して無料で開放されており、OpenMVユーザーはEdgeImpulseを無料で利用して、OpenMVに適したニューラルネットワークモデルをオンラインでトレーニングすることができます。
組み込みデバイスOpenMVにニューラルネットワークを追加することで、密猟者と象の識別、工場生産ラインの品質管理、ラジコン模型車の自動運転などの機能を実現できます。
このチュートリアルでは、高品質なデータセットを構築するための画像収集方法、ニューラルネットワークの学習に転移学習を適用する方法、およびシステムをOpenMVにデプロイする方法について学びます。
また、ビデオチュートリアルも提供しており、公式サイトで「OpenMV4 Plusでニューラルネットワークをトレーニングしてマスク認識を行う」を検索してご覧いただけます。
以下のアドレスでプロジェクト全体の内容を確認できます。すべてのコードとモデルが含まれています:https://book.openmv.cc/project/mask.html
EdgeImpulseを使用してOpenMV向けのニューラルネットワークモデルをオンラインでトレーニングする主な手順は、以下の四つの段階に分かれています:データセットの収集、アップロード、トレーニング、およびデプロイメントです。
01、データセットの収集
このチュートリアルでは、顔にマスクを着用しているかどうかを識別できるモデルを構築します。もちろん、他のアイテムの分類も選択できます。機械学習モデルを機能させるためには、マスクを着用した顔と着用していない顔の大量のサンプル画像を収集する必要があります。トレーニング時には、これらのサンプル画像がモデルの識別練習に使用されます。
私たちはOpenMV IDEを利用してデータセットを収集する必要があり、画像収集の手順は以下の通りです:
* 2つのカテゴリーを作成する:
OpenMV IDEのメニューバーにある「ツール」を開き、「データセットエディタ」を選択し、「新しいデータセット」をクリックします。次に、新しいフォルダを作成して開き、データセット内にさらに2つのフォルダを作成し、それぞれmask(マスクを着用した顔の写真を保存するため)とface(マスクを着用していない顔の写真を保存するため)と名付けます。


OpenMVによる画像収集
まずOpenMVに接続し、IDE内の「接続」をクリックし、「実行」をクリックします。FramebufferフレームバッファにはOpenMVのリアルタイム画像が表示されます。左側のメニューバーの写真ボタンをクリックすると、OpenMVは自動的にこの画像を保存し、これがデータセット内の一つのデータとなります。
まず、マスクを着用した人の顔を保存します。写真ボタンをクリックすると、IDEの下部で写真が撮影され、自動的に「00000」と命名されます。次の写真は「00001」となり、以降も同様に続きます。
OpenMVを使用して、マスク着用(男女各100枚)とマスク非着用(男女各100枚)の顔写真をそれぞれ200枚ずつ収集します。


注意:様々な角度からの写真を確実に収集し、トレーニング学習の多様性を確保してください。
収集の過程で、ある画像が十分に完璧に収集されていないと発見した場合、その画像を右クリックして削除をクリックすることができます。
02、アップロード
OpenMVで画像を収集した後、アカウントを登録してEdgeImpulse公式サイト(https://edgeimpulse.com/)にログインし、画像のアップロードを開始する必要があります。画像をアップロードする手順は以下の通りです:
EdgeImpulseで新しいプロジェクトを作成し、「keys」をクリックして「API Key」を選択し、「API Key」をコピーします。API Keyを使用してOpenMV IDEとEdge Impulseの接続を実現します。

OpenMV IDEの上部メニューバーから「ツール」→「データエディター」→「エクスポート」→「アップロード」→「APIキーでアップロード」を選択し、「APIキー」をコピーしてアップロードします。
アップロード時にデータは自動的にトレーニングセットとテストセットに分割され、デフォルトの選択比率は「80%と20%」で問題ありません。合計で400枚以上の顔画像を収集しており、そのうち80%のTraining Dateは、デフォルトで80%のデータをトレーニングに使用し、残りの20%をテストセットとして使用することを意味します。


03、トレーニングデータセット
データセットの準備が整えば、EdgeImpulseのウェブサイトインターフェースでデータセットのトレーニングを開始できます。
* 構成処理モジュール:
まず「Impulse Design」を選択し、処理モジュールを設定します:
デフォルトの画像サイズを「96 x 96」に設定します。
「画像Images」モジュールを選択すると、画像の分類トレーニングを行うことを意味します(EdgeImpulseでは音声や動画などの分類も可能です)。
「転移学習(画像)Transfer Learning (Images)」を選択し、学習モデルを設定します。
「保存Save impulse」を選択し、Successfullyと表示されれば設定は成功です。

画像前処理:
左側メニューの「画像Image」をクリックし、カラーフォーマットを「RGB」に設定してから、「保存」をクリックします。

次に「特徴生成Generate features」を選択してプロセスを開始します。400枚以上のデータに対して画像前処理が行われ、右側には完全なデータセットの3D可視化が表示されます。

SingTownの転移学習モデルを設定する
左側メニューの「転移学習Transfer learning」をクリックし、設定パラメータはすべてデフォルトを選択すればよく、必要に応じてパラメータを変更することもできます。
1. トレーニングサイクル数Number of training cyclesのデフォルト値を10に設定する
2.学習率Learning rateを0.0005に設定する
3.「データ拡張Data augmentation」をチェックすることも、チェックしないこともできます
4.最低信頼度Minimum confidence ratingをデフォルトで0.8に設定します。
「トレーニング開始」をクリックすると、トレーニングプロセスは約4〜5分かかります。
モデルのトレーニングが完了したら、精度、混同行列(confusion matrix)、および予想されるデバイス性能を確認できます。

* テストモデル:
訓練完了後、テストデータを使用してモデルを検証します。
「モデルテストModel testing」を選択し、「サンプル名Sample name」の横にあるチェックボックスにチェックを入れ、「選択項目を分類Classify selected」をクリックします。ここに表示される精度は97%に達しており、データが非常に少ないモデルとしては非常に珍しい成果です。

赤色で表示されているこの画像は不確定であることが確認されました。この画像の右側にある三点をクリックし、「分類を表示 Show classification」を選択すると、「リアルタイム分類」のインターフェースに移動します。ここにはファイルの詳細情報が含まれており、画像分類が誤っている原因を特定するのに役立ちます。

データが既知のすべてのクラスタ(マスク着用/非着用)の範囲外にある場合、これは以前に見られたどの分類とも一致しないデータである可能性があります。髪の毛が顔の大部分を覆っていることが原因であるかもしれません。
04、OpenMV上でのモデル実行
訓練設計、モデル訓練、モデル検証のステップを完了したら、このモデルをOpenMVにエクスポートできます。「OpenMV」を選択し、「Build」を選択して生成すると、自動的に3つのファイルが生成されます。
trained.tflite 学習済みニューラルネットワークモデル
labels.txt 二つの分類ラベル(faceとmask)
ei_image_classification.pyはOpenMV上で実行するコードです

OpenMV IDEに接続し、この3つのファイルをOpenMV内蔵のFlashに保存します。ei_image_classification.pyファイルをOpenMV IDEで開くと、先ほどEdgeImpulseで生成したコードが表示されます。実行をクリックすると、シリアルターミナルに実行結果が表示されます。


よし、あなたはOpenMVに独自のニューラルネットワークを訓練する機能を追加することに成功しました。
あなたの成果を期待しています!

OpenMVをベースとしたAIセキュリティシステム:重点エリアの未閉鎖状態を自動的に通知
重点施設のドアが長時間閉じられていないかどうかを自動的に判定し、速やかに通知します。

人物が境界を越えた際に即座にアラートを発する。OpenMVが「安全な境界感」を実現します。
仮想の警戒線を用いて、人物または機器の越境行為を識別します。

「AI都市管理官」が登場しました。OpenMVを基盤とした路上営業自動識別システム
道路上の違法営業行為を自動的に識別し、都市の日常的な管理を支援します。

ガスボンベの不適切な放置を検知?OpenMVを活用した危険警告の自動トリガー
ガスボンベの不適切な設置場所を自動識別し、ガス関連の安全上のリスクを事前に検出します。

帯電作業時に絶縁手袋を着用していませんか?OpenMVが直ちに警告を発します!
作業員が絶縁手袋を着用しているかどうかを自動識別し、安全作業を支援します。

OpenMVスマートカメラを用いて、アルミニウム板表面の欠陥をリアルタイムで検出
アルミニウム板表面の傷、へこみなどの欠陥をオンラインで検出することにより、品質管理を支援します。