こんにちは。
コンサルティング & テクノロジー部の吾郷です。
//Build 2017 でリリースされました、Microsoft Azure の 機械学習系サービス の Cognitive Service に新しく増えた機能の
Custom Vision Service について紹介します。
今回は、Custom Vision Service の操作方法を中心とし、最後に余談として Bot などのプログラムから使う場合のAPIを簡単に紹介します。
Custom Vision Service とは
Custom Vision Service とは、画像にタグ付けを行い独自のモデルを作成し、そのモデルと画像の特徴量を比較して、
どのモデルにより近いかを判断することができるWeb APIを作成するサービスです。
Custom Vision Service は、「https://www.customvision.ai/」から利用することができます。

使い方
//Build 2017 でデモを見たときに、「登山に行ったときにいつもわからない花を教えてくれるBotがいたらいいな」って思いましたので、今回は北海道の高山植物をサンプルに、Custom Vision Service を試してみました。
プロジェクトの作成
最初にやることは、プロジェクトの作成です。
「New Project」をクリックして、プロジェクトの名前をつけて、「Create Project」をします。
識別する画像の登録
次にやることは、識別する画像の登録です。
登録にあたり1つルールがあり、タグは2個以上、それぞれのタグには画像が5枚以上が必要です。
この条件を満たさないと、この後にやる Train で、エラーとなります。
操作方法は、Add Images をクリックし、タグ付けする画像を選択して、タグを登録するだけです。
今回登録した花は、「エゾエンゴサク」という花ですので、そのままのタグをつけました。

同様の方法で、「チングルマ」という花も登録しました。

Train
「Train」ボタンをクリックして、登録した画像を学習させます。
学習が終わるとその結果が表示されます。

試してみる
登録していない画像を使って、学習の精度を確認することができます。
テストは、画面右上にある「Quick Test」からできます。
チングルマを正しく識別することができました。

エゾエンゴサクも正しく識別できました。

ここで、まだ学習していない、「エゾノツガザクラ」の画像を与えると、なぜか「チングルマ」と識別しています。
まだ、学習していないのでしょうがないのですが。。

誤った結果となった画像をタグ付けする
「エゾノツガザクラ」の画像を利用して、追加の教育を行います。
「PREDICTIONS」にクリックテストを実行した画像がありますので、「エゾノツガザクラ」の画像を選び、タグ付けをします。

この状態で、再度「Train」をしてもエラーとなります。
理由は、1つのタグの最低枚数は5枚ですが、「エゾノツガザクラ」はまだ1枚しか登録してないからです。

再学習
「エゾノツガザクラ」の画像をさらに4枚登録して「Train」を実行しなおします。
学習後、別の「エゾノツガザクラ」の画像でクイックテストを実行すると、正しく識別されました。

簡単にまとめてしまうと、最初に識別用の画像を登録してタグ付けを行い機械学習を実行しますが、学習していないモデルが増えたり、精度がいまいちの場合は、テストで使った画像を元に追加登録を行い、再度機械学習を回すというような流れで利用していくフローとなります。
(応用)プログラムから、Custom Vision Service を利用する
上記の通り、GUI で人間操作で Custom Vision Service で機械学習をおこなってもいいのですが、プログラムから操作することで Bot 化することも可能です。
API リファレンスなどのドキュメントは、画面右上の「?」→「Documentation」でたどることができます。

API をたたくのに必用なキーは、画面右上の歯車のアイコンのところから入手することができます。

それと、もう一つ、Project ID も使います。
これは、「PERFORMANCE」→「Prediction URL」で表示する「How to use the Prediction API」のURLから取得できます。
※ API を実行して入手することもできます。
以下の赤字の箇所が、Project ID です。
https://southcentralus.api.cognitive.microsoft.com/customvision/v1.0/Prediction/7c0feea9-f34f-40cd-a99f-4f282c945011/url?iterationId=b3fad3b3-7310-4b2d-9ea9-bd6bbebb02d8

GUI で操作と API をマップすると以下のような形になります。
APIの詳細は、ドキュメントをご覧ください。
No |
GUIでの操作 |
API |
1 |
タグの作成 |
CreateTag
|
2 |
画像(ローカル)のタグ付け |
CreateImagesFromData
|
3 |
画像(URL)のタグ付け |
CreateImagesFromUrls
|
4 |
Trainの実行 |
TrainProject |
5 |
画像(ローカル)でクイックテスト実行 |
PredictImage |
6 |
画像(URL)でクイックテストの実行 |
PredictImageUrl |
さいごに
Custom Vision Service を使うと簡単に画像の識別ができます。
是非、みなさんも試してみてください。