【Custom Vision 】誰でも出来る「きのこの山」と「たけのこの里」を使って画像認識 【Azure】

はじめに

Microsoft Azure の画像認識サービス Custom Vision Service をご存知でしょうか?
今回はみんなが大好きなあのお菓子
「きのこの山」と「たけのこの里」が判別できるか試してみます!

  • 画像認識のチュートリアルです
  • このサービスを使うことにより、機械学習の知識がなくても、AIを試すことができます。
  • 画像認識や判定、Azure を試しに使ってみたい方向け

Custom Vision Serviceとは

Microsoft Azureで提供される画像認識サービスです。
自分の持っている画像を学習させることで、その画像が何かを当てるための仕組み、機械学習のモデルを作ることができます。

  • 特定のドメイン用に最先端の画像分析をカスタマイズしたり、埋め込んだりできる
  • シナリオに合わせたカスタマイズが可能
  • シンプルなインターフェイスを使用して、画像識別モデルを簡単に作成

公式ブログ

Microsoftの公式ブログでは、ヒアリかどうかを見分ける機械学習モデルを作り、検証例が公開されています。

公式ブログの記事
image.png

Azureの画像認識系のサービスには他にも、「 Computer Vision API 」や「 Face API 」もあります。
上記はMicrosoftが構築した機械学習モデルを使う形になります。

Custom Vision Service では、 Azure の力を借りてカスタマイズした、学習モデルを作ることができます。

今回やること

コンビニで目に留まった「きのこの山」と「たけのこの里」を見分けられるのではないかとひらめいたので、検証してみます。

データの準備から、学習モデル作成、予測、APIの利用まで説明していきます。

1.データの準備

機械学習モデルを作成するには、学習するための元データが必要です。
機械学習界隈では訓練データ(training data)と呼ばれるものです。
まず、「きのこの山」と「たけのこの里」の画像が必要です。
ネットの画像検索から集めてくるやり方もありますが、今回は自前で準備します。
image.png
中身のきのことたけのこを並べていきます。
きのこの山、たけのこの里とも1箱にはちょうど30個ずつ入ってました。
ちなみに「きのこの山」は残念ながら1本は折れていたため、今回検証用に使ったのは29本です。

きのこの山
image.png
たけのこの里
image.png

写真を撮ったらPC上で、「きのこの山」と「たけのこの里」を1個1個切り出して保存していきます。
機械学習のためのデータ準備はこんな感じで地味な反復作業が多いです。
OpenCVあたりを使えば自動切り出しもできるかもしれません。

image.png
画像のサイズや認識対象の位置は、 Custom Vision さんがよしなにやってくれると思うので、特にこだわらず調整はせず切り出していきます。

こんな感じで29個のきのこ、30個のたけのこの画像を切り出しました。

image.png

2.学習モデルの作成

学習データが準備できたのでCustom Visionで学習モデルを作っていきます。

前提としてAzureのライセンスが必要です。
クレジットカードの登録が必要ですが、初回登録時12ヶ月の無料枠がついています。

まず、Custom Visionのポータルにアクセスします。

Custom Vision – Home

https://customvision.ai

サインインして、新しいプロジェクトを作成します。
image.png
プロジェクト名をつけます。
image.png
「Domains」の選択肢にはfood、landmark、retailなどがあります。
これらを選ぶと、モノの種類に応じた最適なモデルを作ってくれるようです。
今回はどれにあてはまるか分からないので、「general(一般)」を選びました。

できたプロジェクトを開くと、画像がアップロードできます。
image.png
訓練データのアップロードは複数ファイルをまとめてアップロードも可能です。
今回はそれぞれ10枚ずつアップします。
アップした画像にはタグをつけます。
それぞれ kinoko、takenoko というタグをつけます。
image.png
画像のアップロードとタグ付けが終わったので、いよいよ学習させます。

[Train]ボタンを選択すると、10秒くらいで処理は終わりました。
今回は画像サイズも小さく、画像数も各々10枚と少なかったためかと思いますが、それでもかなり速いです。

3.モデルの作成結果

学習が終わると、モデルの作成結果が表示されます
image.png
「Precision(適合率)」は96%、「Recall(再現率)」は100%とかなりよい精度が出ています。

この「 Precision」「Recall 」はそれぞれ機械学習モデルの成績を表す指標です。

  • 適合率(Precision)
    • 例えば、「きのこ」と判断したもので、実際「きのこ」だったものの割合です。
  • 再現率(Recall)
    • 実際に「きのこ」のもののうち、正しく「きのこ」と判断されたものの割合です。

図にすると以下のようなイメージです。
image.png
さらに詳しく知りたいという方は、以下のサイトに詳しく解説されています。

そろそろ本気で機械学習の評価方法について学習するよ – Web就活日記

4.予測

学習モデルが作れたので、予測、つまり「きのこ」か「たけのこ」か当ててみます。

右上にある[QuickTest]をクリックします。
image.png
まず「きのこの山」画像を選んでアップロードします。
結果は100%の確率で kinoko 、「きのこの山」と出ており正解です。
image.png
次に「たけのこの里」画像も試してみましたが、正解しています。
image.png

他のお菓子も試してみました

アルフォートとコアラのマーチは、「きのこ」でも「たけのこ」でもないと正しく判断しています。
一方、コロンは「たけのこ」と判定されました。
形や色が似ているため、間違ったんだと思いますが、そういうことを除けば正しく判定できてます。
すごーい!

ここまでコマンド操作なし、Webブラウザだけで、1時間もかからず
精度の高い「きのこの山」「たけのこの里」判定モデルを作成できました。Custom Vision、とても手軽です。
image.png

5.APIによる予測

Custom VisonではAPIも標準で提供されます。
APIを使った予測もやってみます。
APIに画像を渡すには、インターネット上のURLを指定する方法と、POSTでデータとして渡す2通りの方法があります。

APIのURLは[PERORMANCE]タブ→[Prediction URL]から確認できます。
image.png
今回はインターネット上の URL を指定して画像を渡します。
curl で以下の URL に POST します。

結果はJSONで返ってきます。

今回は「きのこ」の画像を投げました。
kinoko である確率が99.9%と正しく予測できています。

APIの詳しい仕様や、プログラミング言語ごとのサンプルコードは、以下にあります。
Custom Vision Prediction PredictImageUrl
Custom Vision Prediction PredictImage

まとめ

今回は、それぞれ10枚という少ない画像から精度の高いモデルが作れました。
しかし、実運用で使うには、画像の明るさ、見る向きなどにより
期待した精度が出ない可能性もあります。
訓練データを増やしたり、予測した場合の正解率を評価して、チューニングが必要かもしれません。

従来は機械学習を使った画像判定モデルを作る場合は、

  • 学習データの収集
  • 画像の調整(サイズ合わせ、トリミング、二値化など)
  • 学習ネットワークの構築
  • データ学習
  • パラメータの調整
  • 再評価・・・

と手数も時間もかかりました。
しかしCustom Visionの登場により、画像さえあれば、誰でもすぐに機械学習モデルを作って、活用することができます。
API連携してアプリケーションと組み合わせることもすぐにできます。

使用した訓練データは以下のURLからダウンロードできるようにしています。
この画像をもとに、Azureアカウントさえあれば、簡単に、すぐにCustom Vision Serviceを試すことができます。
ぜひともチャレンジしてみてください。

きのこ・たけのこ画像データ

公式サイトリンク

公式ドキュメント