Google Coral Dev Boardでの顔認識

人工知能は通常、ハイパワーコンピューティングとビッグデータに関連付けられていますが、組み込みアプリケーション向けのAIシステムの開発に対するニーズが高まっています。 Embecosmは、組み込みデバイスに特化したことで常に高く評価されています。 したがって、この専門知識を成長するAIの分野に適用することは、両方のコミュニティにとって非常に有益であると考えています。

![1_tZ8mh0ZbgMWmhW5HBnEmUw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/923edc50-3567-99d8-a608-d6555472aa9a.png)


### プロジェクト
####概要
このプロジェクトでは、AIと組み込みシステムの組み合わせを探索することを目標に、GoogleのEdge TPUに顔認識を実装することにしました。

![unnamed-_3_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/f60c254e-ffa9-ad13-c84e-30ac50c105f0.jpeg)

- GoogleのCoral開発ボード 海外代理店：https://store.gravitylink.com/global



####GoogleのEdge TPU
最近、Googleが開発ボードをリリースしたことを発見しました。その主な目的は、デバイス上の機械学習モデルのプロトタイプを作成することです。 このボードは、高速機械学習の推論が可能です。そのコプロセッサーは、低エネルギー（1 TOPで0.5ワット、1ワットあたり2 TOPS）で、1秒あたり4兆回の操作（TOPS）を実行できます。

上司と私、ルイス・レビルはすぐに興奮し、幸運にも十分でした。エンベコスムは私たちに取締役会を与えることに同意しました。 次に、ボードをどうするかを決める必要がありました。

####顔認識
Edge TPUのハードウェア設計は、リカレントニューラルネットワーク（RNN）やLong Short-Term Memoryモデル（LSTM）とは対照的に、畳み込みニューラルネットワーク（CNN）などのディープフィードフォワードニューラルネットワークを高速化するために開発されました。 したがって、コンピュータービジョンは探求するのに理想的なトピックのように思えました。

もともと、私たちは音を扱うという考えを熟考しました。 ただし、上記の理由により、サウンドを処理するモデルは、通常RNNやLSTMなどの時間ベースのアーキテクチャに依存しているため、通常Edge TPUの機能から外れています。

顔認識を選択した理由は、Edge TPUのドキュメントを確認した後、Googleが分類およびオブジェクト検出モデルのデモを提供しているのに、顔認識デモが不足していることに気づいたためです。 顔認識は画像分類とオブジェクト検出に密接に関連しているため、合理的な次のステップのように思えました。

###ボードのセットアップ
このブログ投稿の残りの部分では、Coralボードの使用を開始するために行ったプロセスについて説明します。 ボードをセットアップするには、以下で説明するGoogle Coral Webサイトのチュートリアルに従ってください。 詳細な手順については、こちらをご覧ください： Get Started | Coral (https://coral.withgoogle.com/docs/dev-board/get-started/)。

####必要条件
このボードは、LinuxマシンとMacマシンの両方から使用できます。 以下のコマンドはすべてMacで実行されたため、Linuxで実行する必要がある場合は変更する必要があります。 USB-A-USB-microBケーブル、USB-C-USB-Cケーブル、2-3A（5V）USB Type-C電源を使用しました。 さらに、画面などのシリアルコンソールプログラム（幸いなことにデフォルトでMacで使用可能）と最新のfastbootツールをインストールする必要がありました。


![微信截图_20190710150259.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/78811250-beca-26e3-37e5-7f65c900e528.png)


####ボードを開始する
ボードをフラッシュできるようにするには、シリアルコンソールを介して開発ボードと通信する必要があるため、udevドライバーをインストールする必要がありました。 次に、USB-microBケーブルを接続して、コンピューターをシリアルコンソールに接続する必要がありました。 LEDが点滅し始め、次のステップである/dev/cu.SLAB_USBtoUART 115200（Mac）を実行しました。

最後のステップは、ボードの電源を入れることでした。 2-3A電源ケーブルを「PWR」というラベルの付いたUSB-Cポートに差し込み、次にUSB-Cケーブルを「OTG」というラベルの付いたUSB-Cデータポートに接続しました。

####起動中
ボードが接続されたので、システムイメージをダウンロードしてフラッシュする必要がありました。 それを行うために、curl -O https://dl.google.com/coral/mendel/enterprise/mendel-enterprise-chef-13.zip を実行してイメージをダウンロードし、ファイルを解凍して、内部からbash flash.shを実行しました mendel-enterprise-chef-13フォルダー。

このスクリプトが完了すると、システムが再起動し、コンソールがログインを促します。 デフォルトのログイン名とパスワードは、どちらもmendelです。

####インターネットに接続する
ボードはワイヤレス接続をサポートしているため、インターネットに接続するのはそれほど難しくありませんでした。コマンドnmcli dev wifi connect <NETWORK_NAME> password <PASSWORD> ifname wlan0を実行し、nmcli connection showを実行して機能することを確認しました。

####Mendel Software
最新のソフトウェアを使用できるようにするために、コマンドでパッケージを更新しました。

```
echo“ deb https://packages.cloud.google.com/apt coral-edgetpu-stable main” | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
```

その後、sudo apt-get updateに続いてsudo apt-get dist-upgradeを実行します。

sshを介してボードに接続できるようにするために、Mendel Development Tool（MDT）もインストールしました。ホストコンピューターでpip3 install —user mendel-development-toolを実行した後、microB-USBをシリアルコンソールから切断し、mdtシェルを使用してUSB-CケーブルでMDTを使用してシェルを開くことができました。これで、MDTはSSHの公開/秘密キーペアを生成し、これがボードのauthorized_keysファイルにプッシュされたため、SSHによる認証が可能になりました。

####デモアプリケーションの実行
最後に、デモモデルを実行してテストできます。 HDMIポートを介してモニターをボードに接続し、edgetpu_demo —deviceコマンドを使用してデモを実行しました。 その結果、モニターに表示された車の記録が得られ、MobileNetモデルが各車を検出するためにリアルタイムで実行されました。(作者：Pietra Ferreira Tadeu Madio ）