もふもふ技術部

IT技術系mofmofメディア

機械学習の知識なしでカスタムモデルが作れる画像分類API、Google Cloud AutoML Visionでリンゴとイチゴを分類してみる

labeling

前回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とは独立したサービスみたい。

チュートリアル的にまずはやってみる

top

どうやらGoogle Cloud Platformでプロジェクトを作成する必要があるみたい。GCPのコンソールを開いて適当にプロジェクトを作っておきましょう。 project

カード情報などの請求の設定が必要っぽい。ぼくは既にしてあったのでスルー。

2.の権限設定は、SETUP NOWボタンを押せばいい感じに設定してくれるんだろう。ポチッと。

setup

Customer bucket missingと怒られたので、再びGCPのコンソールから適当にバケットを作っておこう。

このときのバケット名はプロジェクト名-vcmって名前じゃないとダメっぽい(画像は間違って作成してしまったやつなので参考にしないこと)。今回はcloud-automl-vision-sample-vcmという名前。Multi-Regionalが一番安かったのでそれにした。作成できたら再びSETUP NOWをクリック。

bucket

セットアップは出来たので、データセットを突っ込む。

completed

データセットを作る

とりあえず普通に分類できそうなテーマとして、リンゴとイチゴの分類をやってみる。

1ラベルごとに最低10枚画像が必要なので、Google画像検索でリンゴとイチゴを検索して、10枚ずつくらいの画像を入れる。イチゴの画像は1個ではなく複数写っているのも多くノイズになりそうだが、前処理とか何もせず突っ込んでみる。

アップロードはjpg,png,zipに対応しているみたいなので、全部zipにしてアップする

Classification typeはリンゴorイチゴの1ラベルだけ返せばいいので、Enable multi-label classificationはオフでOK。一度の予測で複数ラベルを返したい場合はチェックするだけでいいっぽい。

日本語名のファイルがあるとエラーが出る。

error-ja

レーニン

画面上からポチポチとラベル付け出来る。リンゴの画像にはappleをイチゴの画像にはstrawberryというラベルをつける。

labeling

レーニングいくぜ!

train1

Invalid arguments of requestでちょっとハマる。

機械学習ではデータセットを学習用・検証用・評価用の3つ分けて使用することが一般的で、各用途ごとに今回のイチゴとリンゴの2ラベル付きのサンプルが含まれている必要があります。

invalid-error

AutoMLでは自動的にこの用途3つに分けてくれるのですが、なにぶんデータセットが少なすぎるので、それぞれの用途にサンプルちょうどよく分散されていなかった模様。

csv1

なので、手動で振り分けてアップロードします。

csv2

適当な名前をつけてGCSにアップロードして、csvファイルをインポートします。ちなみにこのcsv手動でゼロから作成するのはだるいので、上記のラベリング後にエクスポートしたものを利用しました。

import

改めてトレーニング再開。

train2

15分くらいかかるぽい。4回やったら無料枠こえてしまうが、モデルごとに1時間分が無料なので、別のモデルを作った場合にはまた無料枠がある。とりあえずいろんなデータセットを試してみる上では費用はかからず済みそうだ。

予測してみる

適当に拝借してきた、どうみてもリンゴの画像で予測してみる。100%リンゴだろって結果。まあ当然ですな。

apple1

ちょっとノイズがありそうな背景画像もついて複数写っているリンゴの画像で予測してみる。こちらも楽勝で正答。

apple2

続いてこちらもノイズがありそうなイチゴの画像で予測。こちらは残念ながら94.6%リンゴだろ?と誤答。オイちげーぞこれはイチゴだ。データセットが少なすぎるかな。

ichigo1

明らかにイチゴだろと思える画像で予測。あら、これも99.9%リンゴと判断されちゃいましたね。やはりデータセットが少なすぎるのと前処理何もやっていないからダメっぽいかな。

ichigo2

ちなみに、トレーニングするだけで予測APIのエンドポイントが生成されるみたい。ステキ。

endpoint

まとめ

画像のアップロードからラベリング、トレーニング、評価、予測まで一気通貫で出来るので非常に使い勝手がよい。

以前自分でtensorflowを使って画像分類モデルを作ったことがあるが、プロトタイプ的に動かすのであれば、こっちでやったほうが圧倒的に簡単だし早い。難しい機械学習の知識もほとんどいらないので、正直神レベルのサービスなのではないかと思った。