前回IBM Visual RecognitionとCloud AutoML Visionどっちにしようか検討していたのですが、Cloud AutoML Visionの方を使うことに決定したので、実際に試してみますです。
画像分類API、Google Cloud AutoML VisionとIBM Watson Visual Recognitionを比較してみる
まだβ版らしい。
https://cloud.google.com/vision/
Google Cloud Platformとは独立したサービスみたい。
チュートリアル的にまずはやってみる
どうやらGoogle Cloud Platformでプロジェクトを作成する必要があるみたい。GCPのコンソールを開いて適当にプロジェクトを作っておきましょう。
カード情報などの請求の設定が必要っぽい。ぼくは既にしてあったのでスルー。
2.の権限設定は、SETUP NOWボタンを押せばいい感じに設定してくれるんだろう。ポチッと。
Customer bucket missing
と怒られたので、再びGCPのコンソールから適当にバケットを作っておこう。
このときのバケット名はプロジェクト名-vcm
って名前じゃないとダメっぽい(画像は間違って作成してしまったやつなので参考にしないこと)。今回はcloud-automl-vision-sample-vcm
という名前。Multi-Regional
が一番安かったのでそれにした。作成できたら再びSETUP NOWをクリック。
セットアップは出来たので、データセットを突っ込む。
データセットを作る
とりあえず普通に分類できそうなテーマとして、リンゴとイチゴの分類をやってみる。
1ラベルごとに最低10枚画像が必要なので、Google画像検索でリンゴとイチゴを検索して、10枚ずつくらいの画像を入れる。イチゴの画像は1個ではなく複数写っているのも多くノイズになりそうだが、前処理とか何もせず突っ込んでみる。
アップロードはjpg,png,zipに対応しているみたいなので、全部zipにしてアップする
Classification typeはリンゴorイチゴの1ラベルだけ返せばいいので、Enable multi-label classification
はオフでOK。一度の予測で複数ラベルを返したい場合はチェックするだけでいいっぽい。
日本語名のファイルがあるとエラーが出る。
トレーニング
画面上からポチポチとラベル付け出来る。リンゴの画像にはapple
をイチゴの画像にはstrawberry
というラベルをつける。
トレーニングいくぜ!
Invalid arguments of request
でちょっとハマる。
機械学習ではデータセットを学習用・検証用・評価用の3つ分けて使用することが一般的で、各用途ごとに今回のイチゴとリンゴの2ラベル付きのサンプルが含まれている必要があります。
AutoMLでは自動的にこの用途3つに分けてくれるのですが、なにぶんデータセットが少なすぎるので、それぞれの用途にサンプルちょうどよく分散されていなかった模様。
なので、手動で振り分けてアップロードします。
適当な名前をつけてGCSにアップロードして、csvファイルをインポートします。ちなみにこのcsv手動でゼロから作成するのはだるいので、上記のラベリング後にエクスポートしたものを利用しました。
改めてトレーニング再開。
15分くらいかかるぽい。4回やったら無料枠こえてしまうが、モデルごとに1時間分が無料なので、別のモデルを作った場合にはまた無料枠がある。とりあえずいろんなデータセットを試してみる上では費用はかからず済みそうだ。
予測してみる
適当に拝借してきた、どうみてもリンゴの画像で予測してみる。100%リンゴだろって結果。まあ当然ですな。
ちょっとノイズがありそうな背景画像もついて複数写っているリンゴの画像で予測してみる。こちらも楽勝で正答。
続いてこちらもノイズがありそうなイチゴの画像で予測。こちらは残念ながら94.6%リンゴだろ?と誤答。オイちげーぞこれはイチゴだ。データセットが少なすぎるかな。
明らかにイチゴだろと思える画像で予測。あら、これも99.9%リンゴと判断されちゃいましたね。やはりデータセットが少なすぎるのと前処理何もやっていないからダメっぽいかな。
ちなみに、トレーニングするだけで予測APIのエンドポイントが生成されるみたい。ステキ。
まとめ
画像のアップロードからラベリング、トレーニング、評価、予測まで一気通貫で出来るので非常に使い勝手がよい。
以前自分でtensorflowを使って画像分類モデルを作ったことがあるが、プロトタイプ的に動かすのであれば、こっちでやったほうが圧倒的に簡単だし早い。難しい機械学習の知識もほとんどいらないので、正直神レベルのサービスなのではないかと思った。