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

誰でもできる機械学習 Watson Visual Recognition(画像認識)の使い方
あぱーブログ
2018年2月12日  カテゴリー:WEB  タグ: , ,
Pocket
LINEで送る

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

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

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

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

Visual Recognition サービスの作成

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

IBM Cloudのコンソール画面

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

「Watson」をクリック

ライト・アカウントで使える Watson API が表示されますので、「Visual Recognition」をクリックします。

ライト・アカウントで使える Watson API

デプロイする地域/ロケーションの選択で「米国南部」を選択し、「作成」をクリックします。(ライト・アカウントでは地域を「米国南部」に選択する必要があります)

Visual Recognitionサービスの作成

サービス資格情報の作成

サービスが作成されたら、Visual Recognition の利用認証に使うサービス資格情報を作成します。

「サービス資格情報」をクリックします。

「サービス資格情報」をクリック

「新規資格情報」をクリックします。

「新規資格情報」をクリック

適当な「名前」を入力して「追加」をクリックします。(そのままでも構いません)

「名前」を入力して「追加」をクリック

追加した資格情報を表示して「api_key」をメモしておきます。

追加した資格情報を表示

画像認識を実行

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

curl -X POST \
--form "images_file=@<画像ファイルのパス>" \
"https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key=<APIキー>&version=2016-05-20"

curl -X POST
 POSTでリクエストを送信します。

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

"https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key=<APIキー>&version=2016-05-20"
<APIキー> の部分に、先ほどメモしたサービス資格情報の「api_key」を指定します。

参考資料:入門チュートリアル | Visual Recognition

 
ためしに下のアンパンマンの人形の写真を認識させてみます。

アンパンマンの人形

一般モデルでは「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.jpg"
}
],
"images_processed": 1,
"custom_classes": 0
}

学習させる画像の準備

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

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

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

学習させる画像

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

いよいよカスタム分類器(オリジナルの機械学習モデル)の作成です。APIコマンドでもカスタム分類器を作成することはできますが、今回は簡単なWEBブラウザから作成してみます。

「管理」を選択して「Visual Recognition Tool」をクリックします。

「Visual Recognition Tool」をクリック

初回のみAPIキーの入力が必要になりますので「API Key」をクリックして入力します。

APIキーの入力画面

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

「Create classifier」をクリック

分類器の名前とクラス名を入力して(このクラス名が画像認識結果として返ってきます)準備した学習させる画像(zipで固めたもの)を選択し、「Create」をクリックします。分類器の名前とクラス名は日本語も普通に使えます。(ただ、プログラム側からの利用を考えると英文字にしておくのが無難でしょう)

分類器の作成画面

学習が完了するまでしばし待ちます。

分類器作成中

ステータスが「ready」になれば学習完了です。分類器IDをメモしておきます。

分類器作成完了

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

カスタム分類器を使うために「myparams.json」と呼ばれる JSON ファイルを作成し、classifier_ids に先ほどメモしたカスタム分類器のIDと一般モデル分類器のID(default)を指定します。

vim myparams.json

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

curl -X POST \
--form "images_file=@<画像ファイルのパス>" \
--form "parameters=@myparams.json" \
"https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key=<APIキー>&version=2016-05-20"

参考資料:カスタム分類器の作成 | Visual Recognition

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

アンパンマンの人形

"images": [
{
"classifiers": [
{
"classifier_id": "おもちゃ_********",
"name": "おもちゃ",
"classes": [
{
"class": "アンパンマンの人形",
"score": 0.516628
}

(略)

バイキンマンの人形

"images": [
{
"classifiers": [
{
"classifier_id": "おもちゃ_********",
"name": "おもちゃ",
"classes": [
{
"class": "バイキンマンの人形",
"score": 0.541987
}
(略)

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

おわりに

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

スポンサーリンク
Pocket
LINEで送る

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です