1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Machine Learning ことはじめ(Custom Vision による画像分類)

Last updated at Posted at 2022-12-28

Azure の機械学習サービスのうち、Custom Vision を使った画像分類について勉強します。

Microsoft Learn から AI-900 の学習コンテンツで、画像分類のサンプル練習課題にそって進めます。

なお、Microsoft アカウントと Azure のサブスクリプションを用意しておきます。

Custom Vision の準備

Azure Portal で Cognitive Services を検索し、そのページに進みます。

Cognitive Services には、画像系だけでなく、音声や言語など、様々な認識サービスが用意されています。

image.png

今回使用する 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

image.png

簡易テスト用の画像は、見ての通りリンゴです。

簡易検索結果ですが、その下にある Predictions の Tag では apple が 98% となっていました。
ちゃんと分類できそうです。

予測モデルを公開する

Quick Test をパスしたら、いよいよ予測モデルを公開し、実稼働を意識した最終テストを行います。

まずは、予測モデルを公開します。ポータルトップの上部にある「Performance」をクリック、次に「Publish」をクリックします。

必要事項を入力します。

  • Model Name:トレーニングで使用したモデルの名前です。
  • Prediction resource:Cognitive Services で作成したリソースがプルダウンで選べるようになっています。

公開ができたら、「Prediction URL」をクリックします。ここで画像分類で使用するエンドポイントとキーを確認することができます。

プログラムから予測モデルを使用する

プログラムから予測モデルの API をコールして結果を表示してみます。

用意されているプログラムを使用します。github で公開されていますので、git コマンドを使ってダウンロードします。

git コマンドを使ってダウンロード
git clone https://github.com/MicrosoftLearning/AI-900-AIFundamentals ai-900

ダウンロードができたら、ai-900 フォルダの下にある「classify-image.ps1」ファイルをエディタで開き、1-2行目にある $predictionUrl と $predictionKey 変数の値を書き換えます。

これらの値は、予測モデルを公開した時のエンドポイント URL とキーになります。
※Image URL の方です

classify-image.ps1
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 を使用します。

classify-image.ps1 の編集
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 のターミナルから次のコマンドを実行します。引数は不要です。

classify-image.ps1を実行
PS ./classify-image.ps1 
Analyzing image...

 apple

ちゃんと認識できました。

続いてバナナの画像を試します。https://photo-room.net/511/ から、画像の URL https://photo-room.net/wp-content/uploads/pr00226.jpg を分類させてみます。

classify-image.ps1を実行
PS ./classify-image.ps1 
Analyzing image...

 banana

うまくいきました。

最後にオレンジです。https://photo-room.net/1315/ からオレンジの画像の URL https://photo-room.net/wp-content/uploads/pr00454.jpg を使用します。

classify-image.ps1を実行
PS ./classify-image.ps1 
Analyzing image...

 orange

これも問題なく分類できました。

関連記事

Azure Machine Learning ことはじめ(Azure Machine Learning Studio を使ったデータ分類)

Azure Machine Learning ことはじめ(テキスト分析)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?