Azure の機械学習サービスのうち、Custom Vision を使った画像分類について勉強します。
Microsoft Learn から AI-900 の学習コンテンツで、画像分類のサンプル練習課題にそって進めます。
なお、Microsoft アカウントと Azure のサブスクリプションを用意しておきます。
Custom Vision の準備
Azure Portal で Cognitive Services を検索し、そのページに進みます。
Cognitive Services には、画像系だけでなく、音声や言語など、様々な認識サービスが用意されています。
今回使用する Custom Vision は画像系のサービスの一つで、自分で用意した学習素材を使ってトレーニングを行い、画像の分類を行います。
Cognitive Services のサービス一覧から Custom Vision の「+作成」をクリックします。
Custom Vision の作成画面が表示されます。
作成オプションでは「両方」を指定します。
サブスクリプションやリソースグループ、リージョンは適当なものを選びます。名前も入力します。ここでは「my-image-vision」としました。
トレーニングリソースや予測リソースは、とりあえず「Free F0」としておきます。
入力を行い、作成を行います。
Custom Vision ポータル
Custom Vision には Custom Vision ポータルという専用のサイトが用意されています。
ここでは、トレーニング用画像をアップロードし、オブジェクト検出モデルをトレーニングさせることができます。
NEW PROJECT から新規にプロジェクトを作成します。
名前、説明などを指定していきます。次のように設定を行いました。
今回は、
- 名前:Grocery Checkout
- 説明:Image classification for groceries
- リソース:Azure Portal の Cognitive Services で作成した Custom Vision を指定します
- プロジェクトタイプ:Classification
- 分類タイプ:Multiclass (single tag per image)
- ドメイン:Food
しばらくすると、作成したプロジェクト「Grocery Checkout」用のページが表示されます。
トレーニング画像のアップロード
まず最初にトレーニング用の画像を登録します。
トレーニング用の画像ですが、3種類のフルーツの画像のセットが用意されています。下の URL をクリックしてダウンロードを行います。zip ファイルですので解凍します。展開後、3種類のフォルダがありますので、これをアップしていきます。
プロジェクトページの Add Images をクリックし、まずは「apple」の画像をアップします。
この際、My Tags に「apple」と入力するのを忘れないようにします。
画像の指定と、タグの入力が終われば、Upload ボタンを押します。
これを、「orange」、「banana」の画像に対しても行います。
トレーニング
3種類の画像の登録が終われば、トレーニングを開始します。プロジェクトのトップページの右上にある「Train」ボタンを押します。
トレーニングのタイプを聞いてきます。Quick Traning を指定してトレーニングを開始します。
トレーニングの完了を待ちます。
Quick Test で確認する
トレーニングが終わったら、ちゃんと分類できるか簡易的に確認します。
プロジェクトトップページの右上にある「Quick Test」をクリックします。
簡易テスト用の画像が用意されているので、その URL を Image URL に入力し、「->」をクリックします。
簡易テスト用URL https://aka.ms/apple-image
簡易テスト用の画像は、見ての通りリンゴです。
簡易検索結果ですが、その下にある Predictions の Tag では apple が 98% となっていました。
ちゃんと分類できそうです。
予測モデルを公開する
Quick Test をパスしたら、いよいよ予測モデルを公開し、実稼働を意識した最終テストを行います。
まずは、予測モデルを公開します。ポータルトップの上部にある「Performance」をクリック、次に「Publish」をクリックします。
必要事項を入力します。
- Model Name:トレーニングで使用したモデルの名前です。
- Prediction resource:Cognitive Services で作成したリソースがプルダウンで選べるようになっています。
公開ができたら、「Prediction URL」をクリックします。ここで画像分類で使用するエンドポイントとキーを確認することができます。
プログラムから予測モデルを使用する
プログラムから予測モデルの API をコールして結果を表示してみます。
用意されているプログラムを使用します。github で公開されていますので、git コマンドを使ってダウンロードします。
git clone https://github.com/MicrosoftLearning/AI-900-AIFundamentals ai-900
ダウンロードができたら、ai-900 フォルダの下にある「classify-image.ps1」ファイルをエディタで開き、1-2行目にある $predictionUrl と $predictionKey 変数の値を書き換えます。
これらの値は、予測モデルを公開した時のエンドポイント URL とキーになります。
※Image URL の方です
01 $predictionUrl="https://myimagevision-prediction.cognitiveservices.azure.com/customvision/v3.0/Prediction/********************"
02 $predictionKey = "16******************22"
03
04 # Code to call Custom Vision service for image classification
05
06 $img_num = 1
07 if ($args.count -gt 0 -And $args[0] -in (1..3))
08 {
09 $img_num = $args[0]
10 }
11
12 $img = "https://raw.githubusercontent.com/MicrosoftLearning/AI-900-AIFundamentals/main/data/vision/fruit-$($img_num).jpg"
13
14 $headers = @{}
15 $headers.Add( "Prediction-Key", $predictionKey )
16 $headers.Add( "Content-Type","application/json" )
17
18 $body = "{'url' : '$img'}"
19
20 write-host "Analyzing image..."
編集が終われば保存してエディタを終了します。
Powershell コンソールから次のコマンドを実行します。
PS ./classify-image.ps1 1
Analyzing image...
apple
引数は、1、2、3 のいずれかを指定可能です。
ソースをみれば分かりますが、引数の 1、2、3 は、あらかじめ Web で用意されている3種類のサンプルを指定して、$img 変数に、その URL を格納しています。
そこで、Web で公開されている リンゴ or バナナ or オレンジの URL を $img に代入してみます。
写真素材ルームさんの画像をお借りしてみます。
このページのリンゴ画像紹介ページ https://photo-room.net/2559/ から、画像の URL https://photo-room.net/photos/pr01012.jpg を使用します。
11 # オリジナルをコメントアウト
12 #$img = "https://raw.githubusercontent.com/MicrosoftLearning/AI-900-AIFundamentals/main/data/vision/fruit-$($img_num).jpg"
13 # 写真素材ルームさんのリンゴの画像の URL を指定する
14 $img = "https://photo-room.net/photos/pr01012.jpg"
15
16 $headers = @{}
17 $headers.Add( "Prediction-Key", $predictionKey )
18 $headers.Add( "Content-Type","application/json" )
19
20 $body = "{'Url' : '$img'}"
保存した後、Powershell のターミナルから次のコマンドを実行します。引数は不要です。
PS ./classify-image.ps1
Analyzing image...
apple
ちゃんと認識できました。
続いてバナナの画像を試します。https://photo-room.net/511/ から、画像の URL https://photo-room.net/wp-content/uploads/pr00226.jpg を分類させてみます。
PS ./classify-image.ps1
Analyzing image...
banana
うまくいきました。
最後にオレンジです。https://photo-room.net/1315/ からオレンジの画像の URL https://photo-room.net/wp-content/uploads/pr00454.jpg を使用します。
PS ./classify-image.ps1
Analyzing image...
orange
これも問題なく分類できました。
関連記事
Azure Machine Learning ことはじめ(Azure Machine Learning Studio を使ったデータ分類)