Posted at

GoogleのAutoML Visionで「快盗戦隊ルパンレンジャーVS警察戦隊パトレンジャー」の登場人物を検出してみた

More than 1 year has passed since last update.

非常に簡易的な操作で機械学習のモデルを生成できるGoogleの「AutoML Vision」を試してみました。

AutoML Vision

https://cloud.google.com/vision/automl/docs/?hl=ja

コンソールからポチポチと画像をアップロードして、ラベルを付けるだけで、あとは勝手に学習してくれるという素敵なシステムです。

猫を分類したり、魚を分類したり、二郎を分類したりするのが流行りだそうですが、娘が毎週見ている「快盗戦隊ルパンレンジャーVS警察戦隊パトレンジャー」の登場人物をAIで分類できたら「パパかっこいい!」となるのではないかということで、こちらにチャレンジしてみました。

かざすAI図鑑アプリ「LINNÉ LENS」リリース(特許出願中) 第一弾は約4,000種、日本の水族館にいる生き物の9割に対応

https://www.value-press.com/pressrelease/206311

ラーメン二郎とブランド品で AutoML Vision の認識性能を試す

https://cloudplatform-jp.googleblog.com/2018/03/automl-vision-in-action-from-ramen-to-branded-goods.html


画像収集

機械学習で一番大変なのは画像収集なのではないか? とやってみて分かりました。「AutoML Vision」では1ラベルにつき100枚以上、数百枚の画像を推奨しているようでしたが、100枚以下でも機能している事例を読みましたので、今回は1キャラクター50枚を目処にしました。

画像検索から拾ってくるのが定番のようですので、ヤフーとグーグルの画像検索からポチポチ拾っていきました。スクリプトを書いて自動化せよと怒られそうでしたが、「50枚くらいならいけるか・・・」という誘惑に負けました。

拾ってきた画像はサイズも形式もバラバラです。後処理で、複数の人物が同じ画像に収まっているものは、機械学習の妨げになるのではないかということで、トリミングを施しました。

ちなみに今回分類したのは以下の7名です。

登場人物

・夜野 魁利(やの かいり) / ルパンレッド

・宵町 透真(よいまち とおま) / ルパンブルー

・早見 初美花(はやみ うみか) / ルパンイエロー

・朝加 圭一郎(あさか けいいちろう) / パトレン1号

・陽川 咲也(ひかわ さくや) / パトレン2号

・明神 つかさ(みょうじん つかさ) / パトレン3号

・高尾ノエル(たかお のえる) / ルパンエックス / パトレンエックス

執事のおっさんも入れておけば良かった・・・。

それぞれ50枚ずつなので合わせて350枚の画像を用意しました。


AutoML Visionのセットアップ

Google Cloudのアカウントは持っている前提で、以下からプロジェクトを作成(既存のプロジェクトでも問題ないです)。

https://console.cloud.google.com/cloud-resource-manager?hl=ja&_ga=2.53674408.-1047417256.1533167814

次に課金を有効に。

https://support.google.com/cloud/answer/6293499?hl=ja#enable-billing

「AutoML Vision」のAPIを有効化します。

https://console.cloud.google.com/flows/enableapi?apiid=storage-component.googleapis.com%2Cautoml.googleapis.com%2Cstorage-api.googleapis.com&hl=ja&_ga=2.267521166.-1047417256.1533167814

以上だったような、もう少し手続きがあったような・・・。


機械学習していくぞ

以下のURLから「AutoML Vision」のコンソールが開きます。

https://beta-dot-custom-vision.appspot.com/vision/

中に「Dataset」というものと「Model」というものが見れます。

・Dataset 画像ファイルにラベルを付けたものの集合体

・Model Datasetを機械学習にかけて学習させたもの

まずDatasetを作成し、それを機械学習させてModelを作ります。そのModelにプログラムなどから分類したい画像を渡して、その結果を取得します。


データセットを作る

以下のURLからデータセットを新規作成できます。

https://beta-dot-custom-vision.appspot.com/vision/datasets/create

Dataset nameは好きな名前を付けてください。

画像のアップ方法はPCからJPG,PNG,ZIPでアップロードする、CSVを使ってアップロードするなどの方法があります。

Classification typeでは画像に複数のラベルを付けるか否か、という選択がありますが、現状では1画像には1枚のラベルというのが効果的だと書かれています。

画像のアップが終わったら、ラベルを付けていきます。

UIはGoogle Photoに似てますね。

左側に「Add Label」というリンクがあるので、ここから使いたいラベルを追加していきます。それから、画像をクリックして、それぞれの画像にラベルを付けます。ラベルはRESTなどで叩いた際の戻り値になってきますので、分かりやすいものを付けておいた方が良いです。


モデルを作る

データセットを用意したら、「TRAIN」というタブを開き「Train New Model」をクリックします。ウインドウが開くので、モデルに名前を付けて、「START TRAINING」をクリックすると学習が始まります。

今回は画像360枚、7つのラベルを設定して学習を行いました。所要時間は1時間程度だったと思います。完了したらEVALUATEのタブから結果を確認できます。

幾つかの指標があります。

・Precision(適合率) 正と判断したデータが、実際に正である割合

・Recall(再現率) 正であるデータが、正と判断された割合

・Score threshold(閾値)

PrecisionとRecallはいずれも高い割合の方がモデルの精度が高いことを示します。ただし、トレードオフの関係にあり、PrecisionとRecallがいずれも高い数値を出す、Score thresholdの数字を探る必要があります(スライダーを動かすだけで簡単にチェックできます)。コンソールやAPIからアクセスする際にも、閾値を設定することになりますので、ここでちゃんとチェックしておきましょう。

ちなみにこちらはラベル毎の結果。上手くいけば、左上から右下に、斜めに適合率の高い青い数字が出てくるはずです。この結果からはルパンブルーとルパンレッドはなかなか難しかったということが分かります。


コンソールで結果を楽しんでみる

モデルが完成したら「PREDICT」のタブから、簡単に機械学習の結果をチェックできます。

こちらの「UPLOAD IMAGES」のボタンを押すと画像選択画面になり、アップロードした画像を、先程作成したモデルで分類して結果を教えてくれます。

検知したラベルと、その精度を返してくれます。

Pythonのコードも例示されていて、もちろんAPIから叩くこともできます。こちらの方法は追って紹介したいと思います。


やってみて分かったこと


簡単すぎてびっくり

ほぼ機械学習デビューで、AutoMLデビューだったのですが、簡単すぎてびっくりしました。コンソールを使って画像をぽちぽちアップして、コンソールから結果を確認する、これだけであればノンプログラマーでも支障なく出来そうです。(その後、Pythonから結果を取得するのはなかなか苦労がありましたが・・・)


データセット大事

みんなが言うことですがデータ作りがとても大事で、これで精度が大いに変わります。

今回一番の反省点は、ヒーローの変身前と変身後のデータをごっちゃにしてしまったこと。今回はデータ量が少なかったですし、「快盗戦隊ルパンレンジャーVS警察戦隊パトレンジャー」は色が似通ってたりするので、見分けるのは難しいようでした。出来上がったモデルでも、変身前は大方判別できましたが、変身後はかなり間違える・・・という状態です。次回やるなら、変身前、変身後で計14ラベルでやるべきかなと思いました。

この辺のデータ作り、ラベル作りのノウハウはそれなりにありそうですね。


とにかくトライ

「百聞は一見に如かず」という言葉がありますが、実地で試してみると分かることが多いよね、と思いました。言葉や用語からして機械学習は難しそうというイメージを持っていた自分ですが、試して、体験しながら、言葉の意味も多少は理解できたように思います。具体的なユースケースがあまり思い付けてないのですが、触ったところで、多少なりともアイデアも出てきました。

あと楽しんでやれるテーマが必要だなあと。二郎を分類した人はきっと楽しかっただろうし、自分も「子供に凄い!」と言われたいというのが多少モチベーションになってデータ作りもできたので、ここって大事だよなあと改めて思いました。

では。

快盗戦隊ルパンレンジャーVS警察戦隊パトレンジャー

http://www.tv-asahi.co.jp/lvsp/