エッジデバイス上で AI・機械学習モデルを動かしたい…。そんなご相談も増えつつある、2018 秋です。
近年、端末の近くでデータの集計や分析を行い、クラウドシステムへの負荷を少なくしたり、リアルタイムな作業におけるデータ遅延を軽減したりする取り組みとして、エッジコンピューティング(Edge Computing)が注目されています。それに伴い、エッジデバイスに組み込むことを想定して設計されたディープラーニングのモデルやモデルの高速化・軽量化を行う技術も多く出てきており、エッジ AI(Edge AI)と呼ばれる AI・機械学習のアルゴリズムをエッジデバイスで実行する技術に関しても多くの研究がなされています。
最近では、Microsoft の Custom Vision Service でも、作成したモデルをエクスポートする機能が提供されるようになり、アプリケーションへ組み込むことでリアルタイムの分類が可能になりました。そこで今回は誰でも簡単に機械学習モデルを作成でき、PC でもエッジデバイスでも動かすことができる、Custom Vision Service を使ったモデル作成・デプロイ(エッジデバイスへのモデルの配置)の流れを以下の3ステップでご紹介します。
まずは、データの準備です。作成するモデルはお好きなものでかまいませんが、今回はホットドッグの画像とそれ以外の画像に分類するモデルを作ってみます。
データの準備と Custom Vision Service の概要理解が終わりましたら、Custom Vision Service でモデルの作成を行っていきましょう。今回はエッジデバイスで動かすことを考え、初期設定での [Create new project] の [Domains] 項目は、[General(compact)] を選択します。
初期設定が終わりましたら、データを学習させていきます。先ほどダウンロードした、hot-dog-not-hot-dog のデータは、train と test のフォルダに分かれています。train フォルダの hot_dog と not_hot_dog フォルダに格納されている画像をそれぞれアップロードしていきます。test フォルダの画像は後ほど、精度の確認の際に使いますので、ここではなにもしません。
hot_dog と not_hot_dog のアップロードが終わりましたら、右上にある緑の Train ボタンをクリックします。
しばらくすると学習が終わり、結果が表示されます。今回は、Precision 81.8%、Recall 78.9%という結果になりました。実際には、ここから精度を上げるための取り組みを行うことが多いですが、とりあえず今回はこれでいきましょう。
Custom Vision Service の結果の見方を簡単に記載しておきます。
詳しくは以下のサイトをご覧ください。
Custom Vision で分類子をビルドする方法(分類子をトレーニングして評価する)
https://docs.microsoft.com/ja-jp/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier#train-and-evaluate-the-classifier
モデルの作成が終わりましたら、次は作成したモデルをエクスポートします。[Performance] の [Export] をクリックし、ダウンロードする形式を選択します。今回は Docker の形式を選択します。すると、[Choose your platform] というプラットフォームの OS を選択する画面が出ますので、自分のエッジデバイスにあった形式を選択します。今回は Raspberry Pi というデバイス上で動作させるので、[Linux] を選択し、[Export] ボタンを押します。
エクスポートが完了したら、解凍して、中身を確認しましょう。
ちなみに、メインの動作を行う app フォルダの中身は以下のようになっています。
まず、モデルの挙動を確認し、画像に対する認識結果(どのラベルに分類されるか)を見てみましょう。ダウンロードした画像の中でまだ使っていない test フォルダの画像を渡し、表示される結果の中から、tagName(タグの名前)と probability(確率)の表記を探します。
きちんと認識できていることが分かりました。
モデルの作成・確認が終わりましたので、さっそくデプロイを行っていきます。
デプロイは Azure IoT Hub を使う方法もありますが、今回は Tera Term を用いて SSH 接続を行い、ファイルを送信しました。PC 側で圧縮(zip)して、エッジデバイス側(今回は Raspberry Pi)に送信します。
圧縮したフォルダをエッジデバイス側に送信できたら、解凍(unzip)しましょう。その後、お手元のエッジデバイスにつないだカメラから画像を取得するスクリプトとつなげれば、すぐに学習したモデルを使用することができます。
Raspberry Pi につないだカメラから画像を取得するスクリプトに、エクスポートしたモデルを組み込んだ様子がこちらです。
結果を見てみると、ホットドッグである確率(probability)が95.74%、ホットドッグではない確率(probability)が0.01% と、カメラから得られたホットドッグの画像をきちんと認識できていることが分かります。
今回は、Microsoft の Custom Vision Service で作成したモデルをエッジデバイス上で動作させるまでの簡単な流れをご紹介しました。誰でも早く簡単にモデルを作成し、PC でもエッジデバイス上でもモデルを動かすことができるので、活用できる範囲も広がりますね。今回は Tera Term を用いてモデルをデプロイしましたが、もちろん Azure IoT Hub を用いたデプロイも可能ですので、ぜひ色々と試してみてください。IoT と AI を掛け合わせ、ビジネスの可能性をどんどん広げていきましょう。
エッジコンピューティングについて実際にやってみたいけど制約がある、何から取り組めばよいか分からない等お困りのご担当者様も、まずはお気軽にお問い合わせいただければ幸いです。