だれでも簡単に画像の分類ができる!Microsoft AzureのCustom Vision Serviceとは?

Data Science

2018.3.22

Topics

こんにちは。データサイエンスチーム tmtk です。
この記事では、Microsoft Azureのサービスの一つである、Custom Vision Serviceを紹介します。

Custom Vision Serviceとは

Microsoft AzureはMicrosoftによるクラウドサービスの名称です。競合にAmazon Web Services(AWS)Google Cloud Platform(GCP)などがあります。
Custom Vision ServiceはMicrosoft Azureのサービスの一つで、教師データとして画像をアップロードし、正解データとして画像にタグをつけると、画像の分類器を自動的に作成できるというサービスです。GCPにも類似サービスCloud AutoMLがあります。
Custom Vision Serviceはプレビュー版とされていますが、誰でも利用できるようです。ちなみにCloud AutoMLは2018年3月7日現在ではアルファ版とされており、Googleに申請をして受理されないと利用できません。

事前準備

今回は、Custom Vision Serviceを使って、桜とコスモスの写真を判別する分類器を作ってみましょう。
Custom Vision Serviceを使ってみる前に、まずはデータが必要です。フリー素材サイト「ぱくたそ」から、桜の写真とコスモスの写真を15枚ずつ集めます。
(出典:桜1, 桜2, 桜3, 桜4, 桜5, 桜6, 桜7, 桜8, 桜9, 桜10, 桜11, 桜12, 桜13, 桜14, 桜15,コスモス1, コスモス2, コスモス3, コスモス4, コスモス5, コスモス6, コスモス7, コスモス8, コスモス9, コスモス10, コスモス11, コスモス12, コスモス13, コスモス14, コスモス15


(収集した桜の写真とコスモスの写真)
また、Microsoft Azureのアカウントをもっていない場合は、アカウントを作成しておきます。

さっそくCustom Vision Serviceを使ってみる

それでは、さっそくCustom Vision Serviceを使ってみます。(利用料が発生するのでお気をつけください。)
まずCustom Vision Serviceのページにいき、画面左の「はじめる」をクリックします。

「New Project」をクリックして、新しいプロジェクトを作成します。

「Name」にプロジェクト名、「Description」にプロジェクトの説明を書きます(なんでもいいです)。「Domains」は該当するドメインを選択しますが、今回(桜とコスモスの分類)はGeneral(一般)を選択することにします。

画面右下の「Create Project」をクリックすると次のような画面に遷移するので、画面左上の四角形にプラスマークのアイコンをクリックします。

画像をアップロードするように促されるので、教師データとして、桜の画像を10枚選択します。残りの5枚は、今回は検証用にとっておくことにします。
「My Tags」に「桜」と入力し、右下の「Upload 10 files」ボタンをクリックします。

アップロードが完了したことを確認し、「Done」ボタンをクリックします。

コスモスについても同様に、写真を10枚アップロードします。

これで、桜の写真とコスモスの写真が10枚ずつ正解データつきでアップロードされました。
教師データの準備が整ったので、分類器を学習させます。画面右上の緑色のボタンを押し、学習を開始します。

少し待つと学習が完了し、桜とコスモスそれぞれのクラスに対するPrecisionとRecallが表示されます。ここで、どの程度の精度が出ているかチェックします。今回はすべて100%を達成できました。完璧です。
こうして作成した分類器は、以下のようにして使います。まず、画面左上の地球のようなアイコンをクリックします。

すると、分類器へのアクセスポイントの情報が表示されます。「If you have an image file:」以下のURLと、「Prediction-Key」以下の文字列をメモしておきます。

Linuxで端末を開きます。curlコマンドで、以下のようにして、メモしておいたURLに画像を送信します。ヘッダとして、Prediction-KeyContent-Typeを指定するのを忘れないようにします。

curl -H "Prediction-Key: (メモしたPrediction-Key)" \
     -H "Content-Type: application/octet-stream" \
     --data-binary @(送信したい画像のパス)\
    (メモしたURL)

すると、分類器が分類した結果がJSON形式で返ってきます。

{
  "Id": "00000000-0000-0000-0000-000000000000",
  "Project": "00000000-0000-0000-0000-000000000000",
  "Iteration": "00000000-0000-0000-0000-000000000000",
  "Created": "2018-03-07T08:24:29.0310493Z",
  "Predictions": [
    {
      "TagId": "00000000-0000-0000-0000-000000000000",
      "Tag": "コスモス",
      "Probability": 0.99963963
    },
    {
      "TagId": "00000000-0000-0000-0000-000000000000",
      "Tag": "桜",
      "Probability": 7.612745e-05
    }
  ]
}

この結果の場合は、コスモスである確率が99.96\%、桜である確率が0.007613\%と予測されています。

実際に、検証用にとっておいた5枚ずつの写真を分類してみると、以下のようになりました。

ファイル名 桜である確率 コスモスである確率 事実 正誤
ELFADSC08942_TP_V4.jpg 0.9999058 0.00166127912
ELL92_haruranman20130328_TP_V4.jpg 0.9999918 2.66327379E-06
EL1503315dasdaf_TP_V4.jpg 0.9949579 0.0103668887
PAK85_ninasakura20140308_TP_V4.jpg 0.9988119 1.10538076E-05
PAK_aoiyozakura15201751_TP_V4.jpg 0.999767542 0.000110187764
KAZ93_kosumosu02_TP_V4.jpg 1.6196211E-09 1.0 コスモス
TSU151103173648_TP_V4.jpg 0.000410566834 0.445664644 コスモス
TATSUDSC_8136_TP_V4.jpg 7.612745E-05 0.99963963 コスモス
ELL88_pinkkosumosu20140915082413_TP_V4.jpg 3.07984416E-09 0.9999994 コスモス
HIRO_20141011-P1050014_TP_V4.jpg 0.000207195073 0.999726832 コスモス

教師データ以外の写真に対しても、桜とコスモスを正しく判別できていそうなことがうかがえます。

まとめ

桜とコスモスの写真をたった10枚ずつ用意し、Custom Vision Serviceに送信しただけで、高精度な画像の分類器が簡単にできてしまいました!
機械学習やディープラーニングの知識・環境がまったくなくても、このような分類器を自作することができるとは、便利なサービスですね。特徴量やニューラルネットワークの設計といったことをしなくて済むので、機械学習の知識がある方にも便利に使えそうです。
普通の画像認識サービスには登録されていないような特殊な物も、このようなサービスを使えば、分類器を作成することが誰でも簡単にできそうです。パン屋のレジに画像認識を導入して自動化するといった事例のように、ビジネスに画像認識を導入してみたいとき、まずは簡単に試せるこのようなサービスを使って実現可能性を探ることができそうです。

tmtk

データ分析と機械学習とソフトウェア開発をしています。 アルゴリズムとデータ構造が好きです。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら