はじめに
Microsoft Azure の画像認識サービス Custom Vision Service をご存知でしょうか?
今回はみんなが大好きなあのお菓子
「きのこの山」と「たけのこの里」が判別できるか試してみます!
- 画像認識のチュートリアルです
- このサービスを使うことにより、機械学習の知識がなくても、AIを試すことができます。
- 画像認識や判定、Azure を試しに使ってみたい方向け
Custom Vision Serviceとは
Microsoft Azureで提供される画像認識サービスです。
自分の持っている画像を学習させることで、その画像が何かを当てるための仕組み、機械学習のモデルを作ることができます。
- 特定のドメイン用に最先端の画像分析をカスタマイズしたり、埋め込んだりできる
- シナリオに合わせたカスタマイズが可能
- シンプルなインターフェイスを使用して、画像識別モデルを簡単に作成
公式ブログ
Microsoftの公式ブログでは、ヒアリかどうかを見分ける機械学習モデルを作り、検証例が公開されています。
Azureの画像認識系のサービスには他にも、「 Computer Vision API 」や「 Face API 」もあります。
上記はMicrosoftが構築した機械学習モデルを使う形になります。
Custom Vision Service では、 Azure の力を借りてカスタマイズした、学習モデルを作ることができます。
今回やること
コンビニで目に留まった「きのこの山」と「たけのこの里」を見分けられるのではないかとひらめいたので、検証してみます。
データの準備から、学習モデル作成、予測、APIの利用まで説明していきます。
1.データの準備
機械学習モデルを作成するには、学習するための元データが必要です。
機械学習界隈では訓練データ(training data)と呼ばれるものです。
まず、「きのこの山」と「たけのこの里」の画像が必要です。
ネットの画像検索から集めてくるやり方もありますが、今回は自前で準備します。
中身のきのことたけのこを並べていきます。
きのこの山、たけのこの里とも1箱にはちょうど30個ずつ入ってました。
ちなみに「きのこの山」は残念ながら1本は折れていたため、今回検証用に使ったのは29本です。
写真を撮ったらPC上で、「きのこの山」と「たけのこの里」を1個1個切り出して保存していきます。
機械学習のためのデータ準備はこんな感じで地味な反復作業が多いです。
OpenCVあたりを使えば自動切り出しもできるかもしれません。
画像のサイズや認識対象の位置は、 Custom Vision さんがよしなにやってくれると思うので、特にこだわらず調整はせず切り出していきます。
こんな感じで29個のきのこ、30個のたけのこの画像を切り出しました。
2.学習モデルの作成
学習データが準備できたのでCustom Visionで学習モデルを作っていきます。
前提としてAzureのライセンスが必要です。
クレジットカードの登録が必要ですが、初回登録時12ヶ月の無料枠がついています。
まず、Custom Visionのポータルにアクセスします。
https://customvision.ai
サインインして、新しいプロジェクトを作成します。
プロジェクト名をつけます。
「Domains」の選択肢にはfood、landmark、retailなどがあります。
これらを選ぶと、モノの種類に応じた最適なモデルを作ってくれるようです。
今回はどれにあてはまるか分からないので、「general(一般)」を選びました。
できたプロジェクトを開くと、画像がアップロードできます。
訓練データのアップロードは複数ファイルをまとめてアップロードも可能です。
今回はそれぞれ10枚ずつアップします。
アップした画像にはタグをつけます。
それぞれ kinoko、takenoko というタグをつけます。
画像のアップロードとタグ付けが終わったので、いよいよ学習させます。
[Train]ボタンを選択すると、10秒くらいで処理は終わりました。
今回は画像サイズも小さく、画像数も各々10枚と少なかったためかと思いますが、それでもかなり速いです。
3.モデルの作成結果
学習が終わると、モデルの作成結果が表示されます
「Precision(適合率)」は96%、「Recall(再現率)」は100%とかなりよい精度が出ています。
この「 Precision」「Recall 」はそれぞれ機械学習モデルの成績を表す指標です。
- 適合率(Precision)
- 例えば、「きのこ」と判断したもので、実際「きのこ」だったものの割合です。
- 再現率(Recall)
- 実際に「きのこ」のもののうち、正しく「きのこ」と判断されたものの割合です。
図にすると以下のようなイメージです。
さらに詳しく知りたいという方は、以下のサイトに詳しく解説されています。
そろそろ本気で機械学習の評価方法について学習するよ – Web就活日記
4.予測
学習モデルが作れたので、予測、つまり「きのこ」か「たけのこ」か当ててみます。
右上にある[QuickTest]をクリックします。
まず「きのこの山」画像を選んでアップロードします。
結果は100%の確率で kinoko 、「きのこの山」と出ており正解です。
次に「たけのこの里」画像も試してみましたが、正解しています。
他のお菓子も試してみました
アルフォートとコアラのマーチは、「きのこ」でも「たけのこ」でもないと正しく判断しています。
一方、コロンは「たけのこ」と判定されました。
形や色が似ているため、間違ったんだと思いますが、そういうことを除けば正しく判定できてます。
すごーい!
ここまでコマンド操作なし、Webブラウザだけで、1時間もかからず
精度の高い「きのこの山」「たけのこの里」判定モデルを作成できました。Custom Vision、とても手軽です。
5.APIによる予測
Custom VisonではAPIも標準で提供されます。
APIを使った予測もやってみます。
APIに画像を渡すには、インターネット上のURLを指定する方法と、POSTでデータとして渡す2通りの方法があります。
APIのURLは[PERORMANCE]タブ→[Prediction URL]から確認できます。
今回はインターネット上の URL を指定して画像を渡します。
curl で以下の URL に POST します。
1 2 3 4 5 |
curl -sX POST "https://southcentralus.api.cognitive.microsoft.com/customvision/v1.0/{PrijectID}/url?iterationId={IterationID}" \ -H "Content-Type: application/json" \ -H "Prediction-key: {Prediction-key}" \ -d '{"Url": "画像のURL"}' |
結果はJSONで返ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "Created": "2017-11-30T07:22:29.2698916Z", "Id": "88951980-eb5f-4519-a45e-ca371c5d105a", "Iteration": "962f6ef2-b049-437d-b39e-6c115d918b30", "Predictions": [ { "Probability": 0.9999999, "Tag": "kinoko", "TagId": "28bdc70f-26f2-47cf-91a1-730905b3366a" }, { "Probability": 1.73013581e-09, "Tag": "takenoko", "TagId": "a662bff1-06f8-4ac5-be49-22861237e8cc" } ], "Project": "250d2d53-2d1a-4ca5-9b35-95c215206e84" } |
今回は「きのこ」の画像を投げました。
kinoko である確率が99.9%と正しく予測できています。
APIの詳しい仕様や、プログラミング言語ごとのサンプルコードは、以下にあります。
Custom Vision Prediction PredictImageUrl
Custom Vision Prediction PredictImage
まとめ
今回は、それぞれ10枚という少ない画像から精度の高いモデルが作れました。
しかし、実運用で使うには、画像の明るさ、見る向きなどにより
期待した精度が出ない可能性もあります。
訓練データを増やしたり、予測した場合の正解率を評価して、チューニングが必要かもしれません。
従来は機械学習を使った画像判定モデルを作る場合は、
- 学習データの収集
- 画像の調整(サイズ合わせ、トリミング、二値化など)
- 学習ネットワークの構築
- データ学習
- パラメータの調整
- 再評価・・・
と手数も時間もかかりました。
しかしCustom Visionの登場により、画像さえあれば、誰でもすぐに機械学習モデルを作って、活用することができます。
API連携してアプリケーションと組み合わせることもすぐにできます。
使用した訓練データは以下のURLからダウンロードできるようにしています。
この画像をもとに、Azureアカウントさえあれば、簡単に、すぐにCustom Vision Serviceを試すことができます。
ぜひともチャレンジしてみてください。