GCP AutoML Visionで餃子とカレーを識別

##この記事について
最近のクラウドサービスでは、簡単に機械学習モデルを生成することが可能なサービスが公開されてきています。

現時点ではAWS Sagemaker, Google Cloud Platform Cloud Auto ML, Azure Machine Learning Studioなどが代表的なサービスです。
これらのサービスでは、プログラミングを必要とせず画像アップロードするだけで機械学習モデルの訓練、公開が可能になっています。

今回は、Google Cloud Platformがベータ版(2019年6月15日時点)として公開しているAutoML Visionを使ってみました。

この記事では、GCPの初期設定はすでに完了している前提で、カレーと餃子の写真100枚をそれぞれ入力画像としてどれだけ簡単にモデルを作成できるかということと、その実用性を検証していきます。

##データのアップロード
まずはモデルの訓練に使用したい画像をアップロードしていきます。
<img width="1160" alt="Screenshot_2019-06-15_at_19_30_54-2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185486/af452a14-eb6a-54e0-f167-6936ce1788f3.png">

画像データは 1. 画像ファイルを直接アップロード、2. csvファイルをアップロードが選択できます。
また、Google Cloud Strageに保存してあるデータを紐づけることもできます。
使用する枚数の画像にもよりますが、アップロードには少し時間がかかります。(画像100枚で3分程度)

gmailを利用している場合は、画像のアップロードが完了したらメールで通知が来ます。




次に画像のラベル付けをしていきます。
<img width="1160" alt="Screenshot_2019-06-15_at_20_12_27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185486/a8941a16-9102-16a6-4a64-16ce33a6657a.png">

ここでは、アップロードした画像に対してラベル付けを行うことができます。

今回はカレーと餃子の画像を別々にアップロードしたので、この画面で全選択してラベル付けを行いましたがこの方法では時間がかかるので、Google Cloud Strageに置いてあるデータまでのファイルパスをcsvファイルに保存してアップロードすることをオススメします。以下がcsvファイル内の一例です。ここでは、Google Cloud Strage上のファイルパス、カレーのラベル情報を一行に含んでいます。

gs://image_file.jpg, curry

##モデルの訓練
次はモデルの作成です。
<img width="1160" alt="Screenshot_2019-06-15_at_19_44_08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185486/6abc3cf3-85d3-b4ac-d961-fb6ba0ff1483.png">

TRAINタブを選択して、モデルのデプロイ対象別に訓練オプションを選択します。iOS用のCoreMLを選択することもできます。今回はモバイルアプリを作るわけではないのでCloud-hostedを選択しました。

モデルの訓練は15分から数時間以内に完了します。今回は合計200枚の画像なので、15分程度で訓練が完了しました。モデルの訓練もデータセットのアップロード同様にプロセスが完了するとメールで通知を受けることができます。
<img width="1160" alt="Screenshot_2019-06-15_at_20_21_29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185486/785fafce-c393-5ea6-77b4-fc2f0e106467.png">

##モデルの評価
完成したモデルの評価です。EVALUATEタブから訓練が終了したモデルの詳細を見ることができます。

Precision, Recall共に100%の精度が出ました。Confusion Matrixも見られます。
<img width="1160" alt="Screenshot_2019-06-15_at_20_27_03-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185486/f5453d5a-4a9e-6543-9ed3-600db9bce814.png">
<img width="1160" alt="Screenshot_2019-06-15_at_20_36_49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185486/13c40156-9f4d-1092-4496-a9db365dfecd.png">

##未知データの予測
最後に作成したモデルで未知データの予測をしてみます。

訓練データには含んでいないインド本格カレーの画像を対象に予測を行います。
画像のアップロードを行うだけで簡単に予測を行うことができます。
99.9%カレーという判定が出ました。
<img width="1160" alt="Screenshot_2019-06-15_at_20_50_29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185486/16ad0ee0-f368-c751-2dab-674505ff1a15.png">

画面下に行くとREST API, Pythonというセクションがあります。(個人的に一番お気に入りの機能)
ここではcurlコマンドで画像データをjson形式のバイナリで送るだけで予測結果を行うことができます。PythonコードもすでにgcpのIDが組み込み済みでコピペするだけで独自のクラスや関数化することができます。
<img width="1160" alt="Screenshot_2019-06-15_at_20_50_29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185486/2b3b96bd-3888-af2f-e70b-12df97175ba3.png">

##まとめ
今回はGoogle Cloud PlatfromのAuto ML Visionを使ってみました。
思っていたよりもはるかに簡単にMLモデルの構築、デプロイが可能なサービスになっています。以下に使用して感じたメリット、デメリットをまとめてみました。

メリット:
シンプルなUI
データ読み込みとモデル構築が簡単
デプロイする際のコードがすでに実装済

デメリット:
モデルをファイルとしてダウンロードすることができない。
使用アルゴリズムが不透明(難解なタスクの場合チューニングが難しい。。？)
コストがかかる

余談ですが、機械学習エンジニアとしてこれらのサービスに対して見解を述べておきます。

僕は普段の業務で音声分野の機械学習アルゴリズム開発に携わっています。音声分野は画像分野に比べて比較的このようなツール化が進んでいないので、多くの企業が独自のアルゴリズムを自社で構築している状況です。

近年、特に画像分野ではこれらのサービスを使うだけでモデルの作成ができてしまうので、気づいたら簡単なタスクだと独自でアルゴリズムを組むよりもクラウドの方が簡単で優秀なんて状況もあり得ます。

これらのクラウドサービスで利用できるものはベンチマークやサービスとしてどんどん活用していき、難解なタスクに直面した際やコスト的に問題がある場合には独自のモデルを構築できるような理論的な知識がこれからの機械学習エンジニアに求められていくことではないかと思います。

ここまで読んでくださってありがとうございます。

Aki