Google Cloud Platform が提供する、画像認識の機械学習サービス AutoML Vision のβ版が、
2018/07/25 にリリースされました。
このたび、この AutoML Vision を活用した機能を、
「CARTUNE」 という、クルマ好きが集うSNSアプリ ( Android / iOS ) に実戦投入しました。
この記事では、その事例をご紹介します。
完成した機能
クルマSNSアプリ 「CARTUNE」 にユーザーが投稿したクルマの画像を、AutoML Vision が自動で分類 し、あらゆるクルマの投稿をカタログ的に見られようにしました。
下記はその一例です。
眺めているだけでも、非常に楽しいものになっております。
これらの画像は全て、ユーザーがタグ付けしたものではなく、AutoML Vision が画像認識を行い、分類しています。
分類としては、
- フロント、サイド、リアといった、写真内のクルマのアングル
- メーター、ステアリングなど、インテリアとして写っているもの
- 痛車、ガルウィングといった、クルマの外観
- 大黒PA(クルマ好きが集う聖地パーキングエリア)の写真や、海が一緒に写っている写真、といったロケーション
などなどが可能となっています。
これ以外にも、合わせて計約30のラベルをオリジナルで用意しており、
いずれも非常に高い精度で(単一の画像分類モデルで)分類することができました。
AutoML Vision の概要とその能力
概要
AutoML Vision とは、 Google Cloud Platform が提供する、画像認識の機械学習サービスです。
2018年初めに、ラーメン二郎の画像から店舗を特定する事例で話題になりました。
2018/07/25 にβ版がリリースされております。
AutoML Vision は、
オリジナルの画像分類モデルを、
高度なプログラミング手法を必要とせず、
非常に高い精度で
トレーニングさせられることが特徴です。
対比として例えば、2016年に、同じく Google Cloud Platform からリリースされた Vison API は、非常に強力な画像認識サービスであるものの、
「ヨット」や「ライオン」、「エッフェル塔」などといった、あくまで Vison API 側が用意したカテゴリを検出することに限られました。(とはいえ膨大な量のカテゴリですが)
対して AutoML Vision は、自前の画像分類モデルを作成することができるため、
本記事の CARTUNE の事例のような、「痛車」「大黒PA」を検出したい、など、オリジナルの学習モデルを作成したい用途に適しています。
精度
下記画像は、本事例でトレーニングした画像分類モデルの、精度テスト結果(AutoML Vision コンソールのキャプチャ)です。
約4000枚の画像に約30のラベルづけをしてトレーニングを行い、
Precision(適合率) 89.8%
Recall(再現率) 83.0%
を出すことができました。
今回準備した学習データセットは、1ラベル平均で100枚強となります。
一般的な画像認識トレーニングに用いる学習量としては若干物足りない(推奨は1ラベル1,000枚以上)ながらも、
今回の使用目的には十分耐えうる精度を出すことができています。
(実プロダクトでは、score のしきい値を厳しめにすることで、さらに Precision を高くしています)
AutoML Vision の使い方
詳細な利用方法は、 公式のドキュメント をご参照ください。
ここではざっくり学習の流れと、一通り AutoML Vision を利用してみて気づいた注意点を記載します。
トレーニング画像の準備
トレーニング画像を Google Cloud Storage にアップロードし、
アップロードしたそれぞれの画像URIがどの分類ラベルに属するかを示す、CSVを作成します。
トレーニング画像が大量になる場合は、スプレッドシートなどで対応表を作成し、マクロでCSVを作成することになるでしょう。
あとは、このCSVをインポート画面からインポートするだけです。
4,000枚のトレーニング画像であれば、約1時間ほどでインポートが完了します。
また、試しに少量画像で AutoML Vision を試したいだけであれば、
コンソールのUI上で画像をインポートし、ラベル付けしていくこともできます。
トレーニング実行
トレーニング画像のインポートが終わると、下記画像のように、コンソール上で各画像とラベル付けを確認することができます。
あとはトレーニング実行ボタンを押すだけです。
AutoML Vision のトレーニングにはパラメータは殆ど必要なく、学習時間の設定のみです。
学習時間が長いほど精度は良くなりますが、料金が発生します。
しかし、1時間(※正確には 1 compute hour と呼ばれる内部時間)のトレーニングであれば、無料で月に10回まで可能です。
試しにトレーニングする場合は、この無料枠を積極的に使っていきましょう。
与えたデータセットは、トレーニングの際に自動で
- 80%がトレーニングデータ
- 10%がバリデーションデータ
- 10%がテストデータ
に分類されます。
この割合はカスタムで変更することも可能ですし、画像ごとに個別に割り当てることも可能です。
評価
トレーニングが完了すると、コンソール上で評価を確認することができます。
数々の評価軸 で結果を確認することができるので、ガイドラインに沿って データセットを改善し、再トレーニングを行って精度を高めていきましょう。
また、この時点で実データをモデルに適用することができるので、手元に別途テストデータを用意して、評価してみるのも良いと思います。
注意点
学習画像の量は目的に応じて設定する
AutoML Vision で、1ラベルあたりの推奨される学習画像枚数は、1,000枚です。
さらに、全ラベルで同等の量の学習データを準備することが推奨されているため、例えば30ラベルを分類したい場合、推奨に従えば30,000枚の学習データを準備する必要があります。
しかしながら、推奨枚数ほどの大量データを準備できない事例も多々あるかと思います。
しかも、量を確保しやすいラベル・確保しにくいラベル、といった偏りが出ることは、実例で多々あることかと思います。
本事例では、先述の通り、1ラベル平均で100枚強 × 30ラベル で計4,000枚 を準備し、
Precision, Recall ともに80〜90%の精度を実現することが出来ました。
勿論、本アプリでは今後、さらに精度を上げていきますが、
本事例を参考にして、画像認識の目的とコストに合わせて、学習画像の量を設定いただければと思います。
学習画像のラベルはもれなく設定する
ドキュメントに記載の通り、AutoML Vision では、全学習画像にラベルを設定する必要があります。
「ラベルなし」の学習データはトレーニングに影響を与えない(負例として学習されることはない)ので、もれなくラベルを設定するようにしましょう。
(※ None_of_the_above
という特別なラベルを付与することで [負例として学習できるようです] (https://cloud.google.com/vision/automl/docs/prepare#preparing_your_images)が、未検証です)
また、AutoML Vision では、multi-label 分類(1データに複数ラベルづけされる分類)も可能です。
multi-label 分類する場合は、ラベルづけ漏れのないように、全ラベル×全画像 を横断的にチェックするようにしてください。
例えば本事例で、「痛車」の学習画像のひとつとして、下記画像を準備しました。
これに「痛車」のラベルは付与したものの、「フロント」(正面向きのクルマ)のラベルの付与が漏れてしまっていたため、「フロント」の学習精度が悪くなる、という事例がありました。
全ラベルを横断的にチェックするよう、注意してください。
トレーニング時間による変化
先述の通り、AutoML Vision では、トレーニング時に学習時間を設定することができます。
先述の本事例の学習モデルは、24時間の学習を行ったものです。
同じデータセットで、無料枠の、1時間 (1 compute hour) の学習 (無料は月10回まで) を行うと、下記の精度となりましたので、ご参考にしてください。
この1時間の学習の精度でも、十分実用に耐えられる事例もあるかと思います。
まとめ
このたび、AutoML Vision を活用した機能を、クルマ好きが集うSNSアプリ「CARTUNE」に組み込みました。
AutoML Vision は、「高度なプログラミング手法を必要とせず画像認識を可能とする」ことをうたっています。
まさにその通りで、データセットとそのラベリングを適切に行うだけで、高精度の画像認識モデルを作成することができました。
この「適切に行う」というところもある程度の職人技が必要になるかと思いますが、それも 公式のガイドライン にて tips が公開されていますので、これから利用される場合は、まずドキュメントをしっかり読むことをおすすめします。
この AutoML Vision の登場により、機械学習(画像認識)の用途がさらに広まっていくのではと感じます。
今まで機械学習(画像認識)を敬遠していた方も、ぜひ AutoML Vision を触ってみて、独自のモデルを作ってみていただきたいと思います。