Vertex AIで物体検出のAutoMLを実行して画像中のペットボトル飲料を検出するモデルを作成する

2021.12.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部・機械学習チームの貞松です。
今回もGoogle Cloudの機械学習関連サービスです。

本記事は「クラスメソッド Google Cloud Advent Calendar 2021」の17日目のエントリーです。

Google Cloudの機械学習サービスとしてVertex AI(旧AI Platform)があります。
今回はVertex AI上のデータセットとAutoMLの機能を利用して、画像中のペットボトル飲料を検出するモデルを作成します。

データセットの作成

データのアップロード

まずは画像オブジェクト検出のデータセットを作成します。
任意のデータセット名を入力して、データタイプと目標の選択で画像オブジェクト検出を選択します。
リージョンについて、画像オブジェクト検出はasia-northeast1(東京)では使用できない為、今回はus-central1(アイオワ)を選択します。

今回はローカルにある画像データをアップロードするため、インポート方法はパソコンから画像をアップロードを選択しファイルを選択をクリックします。

ファイルの選択ダイアログから、アップロードする画像を選択すると、以下の画像のようにリストアップされます。
ファイルのアップロード先のCloud Storageパスを入力し続行をクリックするとファイルのアップロードが開始します。

画像のラベリング(アノテーション)

ファイルのアップロード完了後に、作成したデータセットの画面を開くと、以下のようにデータセットに含まれる画像ファイルが一覧で表示されます。
この状態では、学習データに必要なラベリング(アノテーション)が施されていない為、任意の画像をクリックしてラベリングの画面を開きます。

ラベリングの画面では、検出対象オブジェクトの領域をドラッグで指定し、該当のラベルを選択することでラベリングを実行します。

以下、アップロードした全ての画像にラベリングを施した状態です。
オブジェクトの領域とラベルが付与されていることが確認できます。

AutoMLによるモデル学習実行

データセットの作成が完了したので、AutoMLによるモデル学習を実行します。
トレーニングの画面を開き+作成をクリックします。

DatasetとAnnotation setを選択し、AutoMLを選択して続行をクリックします。

任意のモデル名を入力して続行をクリックします。

トレーニングオプションは目的に応じて選択して続行をクリックします。
今回はHigher accuracyを選択します。

ノード時間の最大値は20〜900の間で設定します。
コンピューティング時間削減の為Enable early stoppingは有効にします。   ここまで設定できたらトレーニングを開始をクリックします。

トレーニング中は以下のような画面が表示されます。

エンドポイントデプロイとテスト

エンドポイントデプロイ

トレーニングが完了し、モデルが作成されたら、作成されたモデルの画面を開きます。
以下のようにモデルの評価画面が表示されるので、各種評価指標を確認し、問題なければデプロイとテストタブをクリックします。

デプロイとテスト画面でエンドポイントへのデプロイをクリックします。

任意のエンドポイント名を入力し続行をクリックします。

エンドポイントに必要なパフォーマンスに応じて、コンピューティングノードの数を設定します。
今回は最小の1を設定します。
ロギングについても、本来は有効にしておくべきですが、今回はあくまでトライアルなので、費用削減の為無効にしておきます。
ここまで設定できたらデプロイをクリックします。

テスト実行

エンドポイントデプロイが完了したら、モデルのテストを実行してみます。 モデルのテスト(プレビュー)の下にある画像のアップロードをクリックします。
※アップロードする画像はファイルサイズ1.5MBが上限です

テスト用の画像がアップロードされると以下のような画面が表示されます。
afternoon_tea 1以外はスコアが0.000にも関わらず、検出されてしまっています。
スコア上位○件やスコアの閾値を設定する箇所が見当たらないため、プレビューのテスト実行機能としてはこれで致し方ないようです(もちろん実際にAPI経由でオブジェクト検出結果を取得して利用する場合は、最も高いスコアの領域・ラベルを表示するような使い方になります)
とはいえ、ペットボトルの領域とそれに対する正しいラベルがスコア0.990で検出できており、オブジェクト検出モデルとしては正しく機能しているようです。

以下、coca_colaginger_aleについても同様の結果が得られています。

リソースのクリーンアップ

モデルのテスト実行まで完了したら、不要な課金を停止するために、モデルのデプロイの解除→エンドポイントの削除の順番で課金対象リソースのクリーンアップを実行することを忘れないようにしましょう。

まとめ

Vertex AIで物体検出のAutoMLを実行して画像中のペットボトル飲料を検出するモデルを作成してみました。
GUI上の操作により、学習データセットの準備から学習実行、モデルデプロイ、テストまでの一連の処理を実行することができ、非常に扱いやすいと感じました。
もちろんAutoMLだけでなく、カスタムコード、カスタムコンテナを利用した学習にも対応しているので、独自のアルゴリズムやチューニングが必要な場合にも対応できます。
画像データ以外にも幅広く使用可能なので、一般的な機械学習課題解決の為のツールとして活用できそうです。