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 コンソールのキャプチャ)です。
![スクリーンショット 2018-08-08 16.01.48.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F29149%2Fc67a17e8-c392-45fa-344d-d61bc9fadc32.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=085cddde8fd4c2fb09372fc4798c2762)
約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を作成することになるでしょう。
![dataset_spread.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F29149%2Fabbd9e82-f8c1-7650-0709-bbe445447133.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=636ebec38304d1f0d7b8f349ab4e8de0)
あとは、このCSVをインポート画面からインポートするだけです。
4,000枚のトレーニング画像であれば、約1時間ほどでインポートが完了します。
![import.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F29149%2F1410b1c6-4d1e-fd9c-ccbb-8062b2cae07b.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=80bab600ff4342d7c4bc8561ad916563)
また、試しに少量画像で AutoML Vision を試したいだけであれば、
コンソールのUI上で画像をインポートし、ラベル付けしていくこともできます。
トレーニング実行
トレーニング画像のインポートが終わると、下記画像のように、コンソール上で各画像とラベル付けを確認することができます。
![images.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F29149%2Fb1c3249e-619f-e729-a8f4-b8ea3eca29dd.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=37632d8d1aa53c58192a1e1f4a155924)
あとはトレーニング実行ボタンを押すだけです。
AutoML Vision のトレーニングにはパラメータは殆ど必要なく、学習時間の設定のみです。
学習時間が長いほど精度は良くなりますが、料金が発生します。
しかし、1時間(※正確には 1 compute hour と呼ばれる内部時間)のトレーニングであれば、無料で月に10回まで可能です。
試しにトレーニングする場合は、この無料枠を積極的に使っていきましょう。
与えたデータセットは、トレーニングの際に自動で
- 80%がトレーニングデータ
- 10%がバリデーションデータ
- 10%がテストデータ
に分類されます。
この割合はカスタムで変更することも可能ですし、画像ごとに個別に割り当てることも可能です。
評価
トレーニングが完了すると、コンソール上で評価を確認することができます。
![スクリーンショット 2018-08-08 16.01.48.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F29149%2Fc67a17e8-c392-45fa-344d-d61bc9fadc32.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=085cddde8fd4c2fb09372fc4798c2762)
数々の評価軸 で結果を確認することができるので、ガイドラインに沿って データセットを改善し、再トレーニングを行って精度を高めていきましょう。
また、この時点で実データをモデルに適用することができるので、手元に別途テストデータを用意して、評価してみるのも良いと思います。
![eval.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F29149%2F8b29e256-32ed-35a6-bfd7-fea49caac168.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5a8ee3ddc6a64f31f2ae69d66697187b)
注意点
学習画像の量は目的に応じて設定する
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 分類する場合は、ラベルづけ漏れのないように、全ラベル×全画像 を横断的にチェックするようにしてください。
例えば本事例で、「痛車」の学習画像のひとつとして、下記画像を準備しました。
![痛車_学習.jpeg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F29149%2Fa44b26d9-0c79-3e43-3a8d-f5f9f2cc2678.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b52e9e5a8380d346c69c0fd7765d9856)
これに「痛車」のラベルは付与したものの、「フロント」(正面向きのクルマ)のラベルの付与が漏れてしまっていたため、「フロント」の学習精度が悪くなる、という事例がありました。
全ラベルを横断的にチェックするよう、注意してください。
トレーニング時間による変化
先述の通り、AutoML Vision では、トレーニング時に学習時間を設定することができます。
先述の本事例の学習モデルは、24時間の学習を行ったものです。
![スクリーンショット 2018-08-08 16.01.48.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F29149%2Fc67a17e8-c392-45fa-344d-d61bc9fadc32.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=085cddde8fd4c2fb09372fc4798c2762)
同じデータセットで、無料枠の、1時間 (1 compute hour) の学習 (無料は月10回まで) を行うと、下記の精度となりましたので、ご参考にしてください。
この1時間の学習の精度でも、十分実用に耐えられる事例もあるかと思います。
![1hour.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F29149%2F460576de-4058-302e-91fe-5ef153050453.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=71318d9db7539f5ae526c52fd6fe01cc)
まとめ
このたび、AutoML Vision を活用した機能を、クルマ好きが集うSNSアプリ「CARTUNE」に組み込みました。
AutoML Vision は、「高度なプログラミング手法を必要とせず画像認識を可能とする」ことをうたっています。
まさにその通りで、データセットとそのラベリングを適切に行うだけで、高精度の画像認識モデルを作成することができました。
この「適切に行う」というところもある程度の職人技が必要になるかと思いますが、それも 公式のガイドライン にて tips が公開されていますので、これから利用される場合は、まずドキュメントをしっかり読むことをおすすめします。
この AutoML Vision の登場により、機械学習(画像認識)の用途がさらに広まっていくのではと感じます。
今まで機械学習(画像認識)を敬遠していた方も、ぜひ AutoML Vision を触ってみて、独自のモデルを作ってみていただきたいと思います。