だれでも簡単に画像の分類ができる!Microsoft AzureのCustom Vision Serviceとは?
2018.3.22
こんにちは。データサイエンスチーム 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-Key
とContent-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 } ] }
この結果の場合は、コスモスである確率が、桜である確率がと予測されています。
実際に、検証用にとっておいた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に送信しただけで、高精度な画像の分類器が簡単にできてしまいました!
機械学習やディープラーニングの知識・環境がまったくなくても、このような分類器を自作することができるとは、便利なサービスですね。特徴量やニューラルネットワークの設計といったことをしなくて済むので、機械学習の知識がある方にも便利に使えそうです。
普通の画像認識サービスには登録されていないような特殊な物も、このようなサービスを使えば、分類器を作成することが誰でも簡単にできそうです。パン屋のレジに画像認識を導入して自動化するといった事例のように、ビジネスに画像認識を導入してみたいとき、まずは簡単に試せるこのようなサービスを使って実現可能性を探ることができそうです。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterデータ分析と機械学習とソフトウェア開発をしています。 アルゴリズムとデータ構造が好きです。
Recommends
こちらもおすすめ
-
画像分類の機械学習モデルを作成する(1)ゼロからCNN
2018.4.17
-
手を動かして GBDT を理解してみる
2019.5.24
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16