誰でもできる機械学習 Watson Visual Recognition(画像認識)の使い方

クラウド
スポンサーリンク

IBM Watson の Visual Recognition(ビジュアル・レコグニション)は、ディープ・ラーニングを使用して画像に写った様々なものを分析・認識してくれる画像認識サービスです。IBM Cloud のライト・アカウントで一定の範囲内であれば無料で使えます。Visual Recognition で便利なのは、オリジナルの機械学習モデルを WEBブラウザから簡単に作成できるところです。そこで今回は、Visual Recognition でオリジナルの機械学習モデル作成する手順をまとめてみました。

 
(2019年1月1日更新)Visual Recognition が Watson Studio に対応したため記事を更新しました。また、以前と比べてAPIの認証手順が簡単になっています。

IBM Cloudライト・アカウントの登録

IBM Cloud には、「ライト・アカウント」というクレジットカード登録不要で Watson など主要なサービスを一定範囲内で使うことができるアカウントありますので、まずはじめにこちらを登録します。登録に必要な入力項目は、メールアドレス、氏名、電話番号だけなので、2〜3分もあれば登録できると思います。

IBM Cloudライト・アカウントの登録

Visual Recognition サービスの作成

IBM Cloudライト・アカウントの登録が終わったら、IBM Cloud のコンソール にログインして、画面上部の「カタログ」をクリックします。

IBM Cloudのコンソール画面

左メニューの「AI」をクリックします。(ライト・アカウントでログインした場合は、初期状態でライトプランのみ表示するようにサービスカタログが「label:ライト」でフィルタされています)

「AI」をクリック

下にスクルールして「Visual Recognition」をクリックします。

「Visual Recognition」をクリック

そのまま「作成」をクリックします。(ライト・アカウントでは「デプロイする地域/ロケーション(リージョン)」はダラスに固定されるようです)※2019年1月現在

Visual Recognitionサービスの作成

以上で Visual Recognition サービスが作成されました。

Visual Recognitionサービスの開始画面

API鍵 の確認

Visual Recognition サービスを使うための API鍵を確認します。

左メニューの「管理」をクリックし、資格情報に表示されている「API鍵」をメモしておきます。(「資格情報を表示」をクリックすると実際の API鍵が表示されます)

API鍵 の確認画面

Visual Recognition API へのリクエスト書式

とりあえず学習済みの一般モデル分類器(Watson Visual Recognition では機械学習モデルを「分類器」と呼びます)で画像認識を実行してみましょう。リクエストの書式は次の通りです。

curl -X POST -u "apikey:{API鍵}" \
--form "images_file=@{画像ファイルのパス}" \
"https://gateway.watsonplatform.net/visual-recognition/api/v3/classify?version=2018-03-19"

curl -X POST -u "apikey:{API鍵}"
  先ほどメモした API鍵 を指定します。例えば API鍵 が「secret」の場合は、「curl -X POST -u apikey:secret」になります。

--form "images_file=@{画像ファイルのパス}"
 画像認識させたい画像ファイルをのパスを「@」に続けて指定します。例えば画像ファイルのパスが /tmp/sample.jpg の場合は、「--form "images_file=@/tmp/sample.jpg"」になります。画像ファイルは jpg と png 形式に対応しています。

"https://gateway.watsonplatform.net/visual-recognition/api/v3/classify?version=2018-03-19"
 リクエストの送信先 Visual Recognition API の URL です。

一般モデル分類器での画像認識結果

ためしに下のアンパンマンの人形の写真を一般モデル分類器で画像認識させてみます。

アンパンマンの人形

一般モデル分類器では「ocardina(オカリナ)?」や「ball(ボール)」と認識され「アンパンマンの人形」とは認識できないようです。これを認識できるように、カスタム分類器(オリジナルの機械学習モデル)を作成してみます。

{
"images": [
{
"classifiers": [
{
"classifier_id": "default",
"name": "default",
"classes": [
{
"class": "savings bank",
"score": 0.591
},
{
"class": "earplug",
"score": 0.56,
"type_hierarchy": "/plug/earplug"
},
{
"class": "plug",
"score": 0.561
},
{
"class": "candy corn",
"score": 0.552,
"type_hierarchy": "/food/nutrition/delicacy/sweet/candy/candy corn"
},
{
"class": "candy",
"score": 0.645
},
{
"class": "sweet",
"score": 0.646
},
{
"class": "delicacy",
"score": 0.646
},
{
"class": "nutrition",
"score": 0.646
},
{
"class": "food",
"score": 0.646
},
{
"class": "ocardina",
"score": 0.542,
"type_hierarchy": "/musical instrument/ocardina"
},
{
"class": "musical instrument",
"score": 0.542
},
{
"class": "playroom",
"score": 0.512,
"type_hierarchy": "/indoors/playroom"
},
{
"class": "indoors",
"score": 0.513
},
{
"class": "jelly bean",
"score": 0.5,
"type_hierarchy": "/food/nutrition/delicacy/sweet/candy/jelly bean"
},
{
"class": "ball",
"score": 0.598
},
{
"class": "reddish orange color",
"score": 0.882
}
]
}
],
"image": "anpanman-org.jpg"
}
],
"images_processed": 1,
"custom_classes": 0
}

学習させる画像の準備

まず、学習させる画像を準備します。画像は最低でも10枚は必要で50枚以上が推奨されています。良好な学習をさせるには、150〜200枚が処理時間と正確度の間で最良のバランスになるようです。他にも画像サイズや容量にも制限がありますので、画像を準備する前に公式のガイドラインを読んでおくことをオススメします。

参考資料:分類器のトレーニングに関するガイドライン | Visual Recognition

また、カスタム分類器には最低でも2つのクラス、もしくは1つのクラスと1つの負例(間違った画像の集まり)が必要になります。今回は、「anpanman doll(アンパンマンの人形)」と「baikinman doll(バイキンマンの人形)」の2つのクラスを学習させることにして、下のような画像を準備しました。学習させる画像はクラスごとにフォルダにまとめて .zip ファイルにしておきます。

学習させる画像

カスタム分類器(機械学習モデル)の作成

学習させる画像の準備が終わったら、カスタム分類器(オリジナルの機械学習モデル)を作成します。

APIコマンドでもカスタム分類器を作成することはできますが、Watson Studio(機械学習モデルの作成やトレーニングを行うことができるツール群)を使えば WEBブラウザから簡単に作成できるのでこちらを利用します。

IBM Cloud のコンソールに戻って Visual Recognition の「管理」を選択し、「ツールの起動」をクリックします。(Watson Studio が起動します)

「Create Model」をクリックします。

Watson Studio のプロジェクトを作成するのですが、Visual Recognition のプロジェクトを作成する場合は、Watson Studio のサービスインスタンスが必要になりますので、メッセージの「here」をクリックしてサービスインスタンスの作成画面を開きます。

Watson Studio の「Try it for free」をクリックします。

プラン「Lite」を選択し、ページ下の「Create」をクリックします。

確認画面が表示されますので、そのまま「Confirm」をクリックします。

元のページに戻りますので、メッセージの「refresh」をクリックします。

適当な Watson Studio のプロジェクト名を入力して「Create」をクリックします。

以上で、カスタム分類器(オリジナルの機械学習モデル)が作成されました。下のような画面が表示されていると思います。

機械学習の実行

準備した画像をカスタム分類器にアップロードして、機械学習を実行します。

カスタム分類器の「Browse」をクリックします。

準備した画像の .zip ファイルを選択してアップロードします。

アップロードされた .zip ファイルを選択し「Add to model」をクリックします。

カスタム分類器に画像が追加されました。画像の下の名前がクラス名ですので、わかりやすい名前を設定しておきましょう。(このクラス名が画像認識結果として表示されます)

このカスタム分類器の適当な名前を入力し、「Train Model」をクリックして機械学習を開始します。(画像の容量にもよりますが10分〜1時間くらいかかります)

機械学習が完了したら、プロジェクト名をクリックして、作成したカスタム分類器の情報を確認します。

「Assets」タブを選択します。Models の下に作成したカスタム分類器が表示されていますので、「MODEL ID」をメモしておきます。(モデル名をクリックするとさらに詳細な情報やテストの実行、実装用のサンプルコードが表示できます)

カスタム分類器を使って画像認識

カスタム分類器を使う場合のリクエストの書式は次の通りです。3行目にカスタム分類機のIDを指定する以外は、一般モデル分類器にリクエストする時とまったく同じです。

curl -X POST -u "apikey:{API鍵}" \
--form "images_file=@{画像ファイルのパス}" \
--form "classifier_ids={カスタム分類器のID}" \
"https://gateway.watsonplatform.net/visual-recognition/api/v3/classify?version=2018-03-19"

 
他の場所で撮影した、アンパンマンとバイキンマンの人形の写真を認識させてみます。

アンパンマンの人形

"images": [
{
"classifiers": [
{
"classifier_id": "Toy_210431078",
"name": "Toy",
"classes": [
{
"class": "anpanman doll",
"score": 0.92

}

(略)

バイキンマンの人形

"images": [
{
"classifiers": [
{
"classifier_id": "Toy_210431078",
"name": "Toy",
"classes": [
{
"class": "baikinman doll",
"score": 0.92

}
(略)

学習のかいあってしっかり認識できているようです。(^^)

おわりに

「画像認識モデルの機械学習」と聞くと、ものすごく高度な技術が必要かと思っていましたが、こんなにも簡単にできてしまうのには正直おどろきです。アイデアさえあれば面白いWEBサービスや業務を効率化するシステムが作れそうですね。

コメント

タイトルとURLをコピーしました