Edge」が発表されました。TPUはもちろんのこと、Android端末やiPhoneなどのモバイルデバイスにもエクスポートが可能です。興味のある方は以下の記事を参照してみてください。Edgeを触ってみたQiita検証の流れでは、実際に試してみましょう。TPU環境にデプロイするラズパイのカメラでリアルタイムにナッツの識別をしてみるのようになります。少々長いですが、ぜひ最後まで読んで頂けると幸いです。学習に使うデータはスーパーマーケットで購入したナッツ系のおつまみ6種類の画像です。TPU上でのリアルタイム画像分類に使うナッツは別々の商品を用います。上記のようにお皿に取り分けたナッツをそれぞれスマホカメラのムービーで撮影します。https://storage.googleapis.com/apps-gcp-tokyo-02.appspot.com/dataset_movie.mp4その後、動画を静止画に分割し、AutoMLのデータセット用にアップロードします。以下のように合計2858枚の画像が読み込まれました。スマホの動画では距離や角度を変えて繰り返し撮ったので、似た画像も含まれていますね。背景(机)やお皿は白に統一し、AutoMLが分類の対象物として背景を中心としてしまわないようにデータセットを作成しました。Visionで学習させる各クラス500枚前後でAutoMLで推奨される枚数より少ないですが、クラスごとの偏りもなく、さっと作った割にはそこそこ良いデータセットができた気がします。それでは学習を開始してみます。以下のように選択します。accuracy」を選ぶこともできます。trade-off)も用意されています。ユースケースに応じてこういった使い分けができるのは嬉しいですね。学習完了後にメールの通知が来るので、この画面は閉じておきます。学習は2時間ほどで終了しました。それでは精度を見てみます。precisionが1.0、つまり精度が100%のモデルができました。混同行列も見てみましょう。今回は2時間の学習で1000円ちょっとかかりました。学習用とテスト用で非常に類似した画像が含まれていることがわかります。TPUで実際にリアルタイム分類した時にどれほど分類できているかを見て判断する事にしましょう。TPUのスピードを見るのが目的のため、一先ず良しとして先に進みます。TPU」を選択します。Storage)へのパスが表示されます。「EXPORT」ボタンを押して、モデルファイルが配置された事を確認してみましょう。GCSに3つのファイルがエクスポートされました。モデルファイル群の内容と予測プログラム実行用に修正それぞれの役割は以下の通りです。dict.txtモデルのラベル名が書かれたファイル。dictとあるので辞書構成かと思いきや、↓の左図のようにラベル名だけが記載されています。後で使うCoralのサンプルコードでは、インデックス列を追加(半角スペースつなぎ)して実行してみてください。edgetpu_model.tflitetflite形式のモデルファイル。TPU用にコンパイルされています。tfile_metadata.jsonモデルのメタ情報が記載されたファイル。バッチサイズや画像チャネル数、画像サイズなどがわかります。TPUで機械学習モデルを動作させる方法などは、Coralの公式リファレンスの他に以下の記事を参考にさせて頂きました。(大変勉強になりましたので、この場を借りてお礼申し上げます。TPUを購入してラズベリーパイと機械学習してみたエンジニアの電気屋さん自分のPCからラズパイにSSH接続ラズパイのセットアップが完了したら、自分のMacからラズパイにsshで接続し作業します。Computing)」を使うと簡単に設定ができます。参考VNCでPCからデスクトップ画面操作JellyWaressh接続の設定を保存でき、再度接続したい場合でもGUIからポチッとするだけでいけます。Macのデスクトップからラズパイにアクセスできました。demos」のチュートリアルを参考にします。beta全く同じコードですが、こちらにも掲載しておきます。(以下、ラズパイのコンソール上で実行します。GCSからモデルファイルをラズパイにコピーしてくるCoralのサンプルでは「~/Downloads」配下にモデルファイルを置くのが通例のようですので、今回作成したモデルもこちらに配置しておきます。ラズパイにgsutilコマンドをインストールしておきます。ラズパイを日本語設定にしている場合には「~/ダウンロード」になっているので、予め「~/Downloads」を作っておくと良いです。リアルタイム分類用のPythonプログラムを実行Coralはサンプルコードが充実しています。用意されている「classify_capture.py」にモデルのパス、先ほど修正したラベル辞書のパスを指定し実行します。「classify_capture.py」の実行前に、「dict.txt」ファイルを「モデルファイル群の内容と予測プログラム実行用に修正」にある内容に修正してから実行してみてください。Editor」で直接編集しました。~/Downloads/2019-06-05_11-54-27-458_edgetpu-tflite/dict.txtエラーなく実行できた場合、ラズパイ上でカメラが起動します。初期設定だとリモートデスクトップからはカメラの映像は見れないので、ラズパイにディスプレイを繋いで直接確認してみてください。推論用にナッツと機材を配置リアルタイム分類用に、学習に使ったナッツとは別の商品で試してみます。以下のようにお皿に並べました。TPU、ディスプレイは以下のように接続しています。ラズパイ本体にカメラを埋め込んで、ライブビューと分類結果をディスプレイに表示します。(天井が写っていますが、6種類のいずれかに分類しないといけないので、「tiger_nuts」となっています。「0.89」は予測確率、「10.50ms(ミリ秒)」は分類にかかった時間です。)結果を見るでは、実際にナッツをリアルタイム分類した結果を見てみます。https://storage.googleapis.com/apps-gcp-movies/edge_tpu_demo.mp4いかがだったでしょうか。上段右上のバナナチップ以外はまずまずの分類ができてそうです。ラズパイ側がUSB2.0なのであまり分類速度は出ないだろうと思っていたのですが、実際には思ったよりも速いという印象を持ちました。後記バナナチップが上手く分類できなかったのは、以下のように推論用と学習用でかなり形が違ってしまった事が原因だと考えられます。他の5種類のナッツに関しては推論用と学習用で別の商品ではありましたがわりと形が似ていました。本番環境と全く同じデータが学習時に揃っているとは限らないので、(そういった事が可能なケースであれば)都度都度学習用データを増強しモデルを作り直す必要がありそうです。ラズパイ」の組み合わせでリアルタイム画像分類を試してみました。AIの機能が実現できたと思います。TPUのフル性能は検証できていないですが、精度や速度に関してもまずまずの結果が出たと言えるのではないでしょうか。detection(物体検出)」もサポートされていくものと思われます。ハードウェア、ソフトウェアの基盤も揃い画像識別の実現に関しては非常にハードルが下がってきているので、あとは如何にして有効な活用方法を見つけるかが重要になってきそうです。みなさんも試してみてください。