クラウドエンジニアブログ

機械学習モデルのエッジデプロイ&実行(Custom Vision Service 編)

八木 真理奈

八木 真理奈

はじめに

エッジデバイス上で AI・機械学習モデルを動かしたい…。そんなご相談も増えつつある、2018 秋です。

近年、端末の近くでデータの集計や分析を行い、クラウドシステムへの負荷を少なくしたり、リアルタイムな作業におけるデータ遅延を軽減したりする取り組みとして、エッジコンピューティング(Edge Computing)が注目されています。それに伴い、エッジデバイスに組み込むことを想定して設計されたディープラーニングのモデルやモデルの高速化・軽量化を行う技術も多く出てきており、エッジ AI(Edge AI)と呼ばれる AI・機械学習のアルゴリズムをエッジデバイスで実行する技術に関しても多くの研究がなされています。

最近では、Microsoft の Custom Vision Service でも、作成したモデルをエクスポートする機能が提供されるようになり、アプリケーションへ組み込むことでリアルタイムの分類が可能になりました。そこで今回は誰でも簡単に機械学習モデルを作成でき、PC でもエッジデバイスでも動かすことができる、Custom Vision Service を使ったモデル作成・デプロイ(エッジデバイスへのモデルの配置)の流れを以下の3ステップでご紹介します。

  1. 事前準備とモデル作成
    データ準備・Custom Vision Service を使ったモデルを作成する
  2. モデルのエクスポート
    作成したモデルの出力と結果の確認をする
  3. デプロイ
    エッジデバイス上へモデルをデプロイし、カメラで取得した画像を AI モデルで分類する


1. 事前準備とモデル作成

まずは、データの準備です。作成するモデルはお好きなものでかまいませんが、今回はホットドッグの画像とそれ以外の画像に分類するモデルを作ってみます。


データの準備と Custom Vision Service の概要理解が終わりましたら、Custom Vision Service でモデルの作成を行っていきましょう。今回はエッジデバイスで動かすことを考え、初期設定での [Create new project] の [Domains] 項目は、[General(compact)] を選択します。


[General(compact)] を選択

初期設定が終わりましたら、データを学習させていきます。先ほどダウンロードした、hot-dog-not-hot-dog のデータは、train と test のフォルダに分かれています。train フォルダの hot_dog と not_hot_dog フォルダに格納されている画像をそれぞれアップロードしていきます。test フォルダの画像は後ほど、精度の確認の際に使いますので、ここではなにもしません。


ot_dog と not_hot_dog フォルダに格納されている画像をそれぞれアップロード

hot_dog と not_hot_dog のアップロードが終わりましたら、右上にある緑の Train ボタンをクリックします。

Train ボタンをクリック

しばらくすると学習が終わり、結果が表示されます。今回は、Precision 81.8%、Recall 78.9%という結果になりました。実際には、ここから精度を上げるための取り組みを行うことが多いですが、とりあえず今回はこれでいきましょう。

Custom Vision Service の結果の見方を簡単に記載しておきます。

  • Precision(適合率)
    • 正と分類した画像のうち、実際に正である画像の割合
    • 例:ホットドッグと分類した画像の中で、実際にホットドッグだった画像の割合
  • Recall(再現率)
    • 実際の正の画像のうち、正であると分類された画像の割合
    • 例:実際のホットドッグの画像のうち、正しくホットドッグと分類された画像の割合

詳しくは以下のサイトをご覧ください。
Custom Vision で分類子をビルドする方法(分類子をトレーニングして評価する)
https://docs.microsoft.com/ja-jp/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier#train-and-evaluate-the-classifier


結果が表示されます

2. モデルのエクスポート

モデルの作成が終わりましたら、次は作成したモデルをエクスポートします。[Performance] の [Export] をクリックし、ダウンロードする形式を選択します。今回は Docker の形式を選択します。すると、[Choose your platform] というプラットフォームの OS を選択する画面が出ますので、自分のエッジデバイスにあった形式を選択します。今回は Raspberry Pi というデバイス上で動作させるので、[Linux] を選択し、[Export] ボタンを押します。


[Export] ボタンを押します

エクスポートが完了したら、解凍して、中身を確認しましょう。

  • app フォルダ:学習させたモデルや予測のスクリプト等が格納されているファイルです。
  • azureml フォルダ:Azure ML を使用して、ビルドおよびデプロイするためのファイルが格納されています。
  • DockerFile:Docker コンテナーの構成が記載されたファイルです。
  • README.txt:Docker でのビルド方法やローカルでの実行方法等が記載されたテキストファイルです。

ちなみに、メインの動作を行う app フォルダの中身は以下のようになっています。

  • app.py:データの API での受け渡しや前処理等、基本的な操作をする Python スクリプトです。
  • labels.txt:タグ付けしたテキストファイルです。この場合は、hot_dog と not_hot_dog の2つのタグが格納されています。
  • model.pb:学習させたモデルのファイルです。
  • predict.py:学習させたモデルやタグを読み込んだり、学習させたモデルに画像を渡したりする関数等が記載されています。

まず、モデルの挙動を確認し、画像に対する認識結果(どのラベルに分類されるか)を見てみましょう。ダウンロードした画像の中でまだ使っていない test フォルダの画像を渡し、表示される結果の中から、tagName(タグの名前)と probability(確率)の表記を探します。

ホットドッグの画像(input)
ホットドッグの画像(input)

ホットドッグの画像(output)
ホットドッグの画像(output)

ホットドッグではない画像(input)
ホットドッグではない画像(input)

ホットドッグではない画像(output)
ホットドッグではない画像(output)

きちんと認識できていることが分かりました。

3. デプロイ

モデルの作成・確認が終わりましたので、さっそくデプロイを行っていきます。

デプロイは Azure IoT Hub を使う方法もありますが、今回は Tera Term を用いて SSH 接続を行い、ファイルを送信しました。PC 側で圧縮(zip)して、エッジデバイス側(今回は Raspberry Pi)に送信します。

エッジデバイス側(今回は Raspberry Pi)に送信

圧縮したフォルダをエッジデバイス側に送信できたら、解凍(unzip)しましょう。その後、お手元のエッジデバイスにつないだカメラから画像を取得するスクリプトとつなげれば、すぐに学習したモデルを使用することができます。

Raspberry Pi につないだカメラから画像を取得するスクリプトに、エクスポートしたモデルを組み込んだ様子がこちらです。

エクスポートしたモデルを組み込んだ様子

結果を見てみると、ホットドッグである確率(probability)が95.74%、ホットドッグではない確率(probability)が0.01% と、カメラから得られたホットドッグの画像をきちんと認識できていることが分かります。

結果を見てみる

さいごに

今回は、Microsoft の Custom Vision Service で作成したモデルをエッジデバイス上で動作させるまでの簡単な流れをご紹介しました。誰でも早く簡単にモデルを作成し、PC でもエッジデバイス上でもモデルを動かすことができるので、活用できる範囲も広がりますね。今回は Tera Term を用いてモデルをデプロイしましたが、もちろん Azure IoT Hub を用いたデプロイも可能ですので、ぜひ色々と試してみてください。IoT と AI を掛け合わせ、ビジネスの可能性をどんどん広げていきましょう。

エッジコンピューティングについて実際にやってみたいけど制約がある、何から取り組めばよいか分からない等お困りのご担当者様も、まずはお気軽にお問い合わせいただければ幸いです。



次回予告
  • IaaS VM 上の SQL Database のバックアップ



【総合】お問い合わせ

ソリューションに関する全般的なお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録