機械学習(Cloud AutoML Vision)で指名手配犯を探せるか試してみた
最近ではあらゆる情報がSNS上に公開されています。
2018年には、大阪の富田林署から脱走した容疑者が別人のような姿でSNSに堂々と写真を公開していたことで話題になりました。
Cloud AutoML Visionを使って、ルパン三世パート5の中で登場した”ヒトログ”のように、SNSに公開された画像から指名手配犯を探せるのか試してみました。
目次
モデル作成用のデータ集め
まずはモデル作成で利用する、学習用の指名手配犯画像を集めます。
今回は警察庁のサイトなどから、学習用画像を集めました。
Cloud AutoML Visionの仕様上、1つのモデルにつき2つ以上のタグを設定する必要があるので、指名手配犯2名分の学習用画像を集めます。
データを拡張する
Cloud AutoML Visionで学習させるには、学習対象毎に100枚以上の画像をアップロードすることが推奨されています。
しかし、警察庁のサイトからはそれほどの画像を取得することはできませんので、学習用画像データを拡張します。
今回はKerasのImageDataGeneratorを使って学習用画像を拡張しました。
画像拡張の方法については、こちらに記載しています。
拡張したデータでトレーニングして、モデルを作成
学習用画像も揃ったので、モデルを作成します。
1.ブロジェクトの作成
Google Cloud Consoleにアクセスし、新しいプロジェクトを作成します。
左メニュー下部の「Vision」を選択し、「Get started with AutoML」をクリックします。
最初に作成したプロジェクトのIDを入力して「continue」
「SET UP NOW」をクリックします。
支払い情報の登録をしていない場合は、「GO TO BILLING」から支払い情報の登録をします。
GCPのサービスを利用するために支払い情報を登録する必要がありますが、今回の検証では無料枠内でおさまっています。
2.学習データのアップロード
SET UPが完了したら、拡張した学習用画像をアップロードしていきます。
Cloud AutoML Visionで学習モデルを作成するためには、1モデルあたり最低でも2つのタグを設定する必要があります。
画像をアップロードして学習させる方法は2つあります。
(1)個別にアップロードしてタグ付けする方法
拡張した学習用画像をアップロードし、手動でタグを設定します。
タグは「この画像は○○ですよ」と教えるための情報です。
(2)zipで一括でアップロードする方法
拡張した学習用画像をzip形式に圧縮してアップロードします。
zip圧縮前のディレクトリツリーがタグとして機能します。
. ├── data │ ├── tagA │ │ ├── a1.jpg │ │ ├── a2.jpg │ │ ├──・・・ │ └── tagB │ ├── b1.jpg │ ├── b2.jpg │ ├── ・・・
このようなディレクトリツリーの場合、「tagA」と「tagB」がタグとして認識されます。
今回はdataディレクトリをzipに圧縮し、「tagA」「tagB」部分に指名手配犯の名前を設定しました。
「NEW DATASET」をクリックし、新しく作成するデータセットの名前を入力します。
zipファイルでアップロードする場合は、「Upload images from your computer」から作成したzipファイルを選択して、画面下部の「CREATE DATASET」をクリックします。
import処理がはじまります。
今回タグAを約100枚、タグBを約100枚、計200枚の場合、数分でimportが完了しました。
3.TRANINGする
アップロードした学習用画像でトレーニングを実施し、モデルを作成します。
「TRAIN」タブに移動し、「START TRAINING」をクリック
画像約200枚、タグ2つの場合、10分程度で学習が終了しました。
テストしてみる
トレーニングで作成したモデルで、正しく指名手配犯を予測判定できるかテストをします。
モデル作成時に利用していない画像で予測判定のテストをします。
今回は、大きく風貌が変わったことで話題になった「富田林署を脱走した容疑者の画像」や、その他公開されている画像を利用して予測判定テストをしてみました。
「PREDICT」タブをクリックし、「UPLOAD IMAGES」で画像をアップロードすると、予測判定テスト結果が表示されます。
テスト結果
風貌が大きく変わっていない場合は、正しい判定をしました。
画像の荒れについても、軽微であれば正しい判定をしました。
髪型やその他風貌が大きく変わると、間違った判定をしました。
画像の荒れがひどい場合は、間違った判定をしました。
テスト結果を受けての考察
今回、モデル作成のために「tagA」の画像を3種類、「tagB」の画像を3種類用意し、画像拡張でそれぞれ100枚程度に増やしました。予測判定の精度を上げるためには、モデル生成に使う画像の種類が圧倒的に不足していると感じます。
二郎系ラーメンを判定する@jirou_deepさんの場合、約90,000枚の画像で約99.06%の正解率らしいです。
数万まではいかずとも、もう少しモデル作成用の画像がたくさんあれば、予測判定結果が変わってくるのではないかと思います。
とはいえ、指名手配犯の写真なんて一般の人は持っていませんので、学習用画像の増加に伴う精度の向上を検証をするためには、画像を集めやすい有名人で検証しなおした方が良さそうですね。
まとめ
専門的知識がなくても、とりあえず機械学習を試すことができました。
”とりあえず”程度では、判定精度に問題ありでしたが、学習用画像を増やすことで精度が上がる可能性があります。
また、専門的な知識やテクニックを使うことでも精度を上げることができるでしょう。
しかし、一定程度の性能でよければ、こんなにも簡単に、そして無料で機械学習を試せるなんて便利な世の中ですね。
Googleさんに感謝です。