🙌

Gemini 2.0 でオブジェクト境界を検知してみた

2024/12/24に公開

本記事は Google Cloud Japan Advent Calendar 2024 の [Gemini特集版] 24 日目の記事です。

皆様、いかがお過ごしでしょうか?
Google Cloud カスタマーエンジニアの山中です。
(パートナーエンジニアからカスタマーエンジニアにロールチェンジしました)

本記事では先日12/12早朝にアナウンスがありました Gemini 2.0 Flash で利用できるようになったオブジェクトの境界検知についてご紹介します。

Gemini 2.0 とは

Gemini 2.0 は Google が先日アナウンスした最新のモデルです。詳細は公式ブログ Gemini 2.0: エージェント時代に向けた新しい AI モデル や公式ドキュメント Gemini 2.0 (experimental) に掲載されているので、ぜひ読んでみてください。大きな特徴としては以下が紹介されています。

  • Multimodal Live API
    音声や動画をストリーミング形式で Gemini の入力として与えることができる機能です。
    以前、Project Astra の動画 が公開された際に、「Google Cloud でいつこういったサービスを利用できるのか?」とお客様からご質問いただくことが多かったのですが、まさにこの機能を利用することで同じような体験が提供できます。
    実際のデモはこちらに上がっています。

  • New Output Modalities (音声/画像出力)
    Gemini において、今まではインプットはテキスト・音声・画像に対応していたものの、出力はテキストに限定されていましたが、出力にも音声・画像出力ができるようになりました。
    実際のデモはこちらです。

  • Spatial understanding (境界ボックス検出)
    今回のブログで扱うのがこちらの機能です。
    生成AIのよくあるユースケースとして、写真へのタグ付けがあります。(例えば写真内に写っているアイテムを列挙して、など)
    そのタグ付けの際に、今までは写真のどの部分に該当のアイテムが含まれているかといった情報は正確に出力できなかったのですが、この機能では境界ボックスという形で、該当アイテムが含まれる座標を返してくれる機能になります。
    Cloud Vision APIに似ているものですね。
    実際のデモ はこちらです。
    Google AI Studioのデモ ではサンプルの画像や実際手元にある画像をアップロードし、挙動を試すことができます。
    Google AI Studioで試したデモ

境界ボックス検知のユースケース

写真や動画の中に特定のオブジェクトが含まれているか否か、というユースケースは様々な業界で存在しています。例えば、ドローンで空撮した写真に特定のオブジェクトや写っているかの検知や人の人数をカウントする、といったものです。
通常、Cloud Vision API のような事前トレーニング済みのモデルを利用したり、検知したいオブジェクトが一般的でないものである場合、大量のデータを用意し、Auto ML等を活用してトレーニングさせてモデルを作成して利用することが一般的でした。
今回、Gemini で境界ボックス検知が利用できるようになったことで、トレーニングなしで Gemini が学習している豊富な知識を活用した境界ボックス検知とラベリングが期待できます。

Gemini 2.0 を使って境界ボックスを検出する

はじめに

上述したGoogle AI Studioのデモをご利用いただければ、色々なことが試せます。しかしながら実際の社内データなどで試したい場合、セキュリティなどの観点から Enterprise Ready な Google Cloud の環境内で試していただくことをお勧めしています。

今回は Colab Enterprise を利用して実際に動作するところまでを試してみます。

使用するノートブック

境界ボックス検知に向けのサンプルコード が公開されていますので、今回はこれをベースに利用します。

ノートブックのインポート

Google Cloud Console を利用します。
「Vertex AI」 -> 「Colab Enterprise」を選択し、「インポート」(「+作成」ボタンの一つ右側)を選択します。
保存するリージョンは任意に指定してください。
インポート画面

その後ポップアップが表示されるので、「インポートソース」を「URL」にし、「URL 1」に以下のURLを貼り付けます。

https://github.com/google-gemini/cookbook/blob/main/gemini-2/spatial_understanding.ipynb

貼り付けたら「インポート」をクリックするとインポートされます。

インポートされた画面

ランタイムの設定

Colab Enterprise で動かすインスタンスを設定します。
設定はこちらの公式ドキュメントを参照してください。

コードの変更

インポートしたコードは Google API Key を使用するコードとなっています。
Google Cloud を利用されている場合、API Key は不要なので、「Setup your API Key」「Initialize SDK client」のセクションをそれぞれ以下のように変更します。

  • Setup your API Key
from google.colab import userdata
import os

# GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY') # 不要なのでコメントアウト
  • Initialize SDK client
from google import genai
from google.genai import types

# client = genai.Client(api_key=GOOGLE_API_KEY) # 設定方法が異なるのでコメントアウト

PROJECT_ID = 'project_id' # 皆さんのGoogle Cloud Project IDに変更してください。
LOCATION = 'us-central1'
client = genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION)

コードの変更は上記の部分だけです。
GenAI SDK になったことで、Google Cloud の Vertex AI ユーザおよび Gemini API ユーザが同一の SDK を使って開発できるようになったことは良いことですね。

コードの実行

上記の変更完了したら、順次上から実行するだけでサンプル画像については実行および結果の確認をすることができます。
任意の画像で実行したい場合は以下のように画像をインスタンスにアップロードして試します。

画像のアップロード

ノートブック左側に出ているフォルダのようなアイコンをクリックするとアップロードボタンが表示されます。(キャプチャ上に「セッションストレージにアップロード」と表示されているボタン)
こちらで任意の画像をアップロードします。
アップロード画面

画像ファイル名やプロンプトの変更

ノートブックの「Overlaying Information」セクションで画像名をアップロードした画像のファイル名に変更します。
私の場合は「board.jpg」です。

変更後、再度当該セクションを実行すると画像が切り替わったことが確認できます。
オリジナル画像1

再度境界ボックス検知を実行

上記後、同様に移行のセクションを実行することで任意の画像で試すことができます。
以下は私の仕事部屋の横につけているパンチングボードを撮ったもので、かなりいい精度で検知してくれていることがわかります。
オリジナルの検知画像

Gemini 2.0 で境界ボックス検知を行うことのメリット

では Vision API 等の従来の境界ボックス検知と比較した時のメリットは何か?という問いに対して、「検知対象や結果の自由度の高さ」が大きくあると個人的に思っています。

先ほどインポートしたノートブックの後半に例がいくつか含まれていますがプロンプトを調整することによって検出対象のオブジェクトを限定したり、信頼度(どこまで正しいかは別議論ですが)を結果に含めたりすることができます。

  • ペアの靴下を検出
    プロンプト:Show me the positions of the socks with the face

  • ラベルを日本語に指定
    プロンプト:Detect food, label them with Japanese characters + english translation.

  • 検知対象のオブジェクトを限定(狐の影)
    プロンプト:Draw a square around the fox' shadow

  • 検知対象のオブジェクトを限定(達成したい目的を考え、使用するツールを選択)
    プロンプト:Tell me how to clean my table with an explanation as label

後処理

想定外の課金を避けるため、利用が終わったらリソースを削除してください。

まとめ

今回の記事では Gemini 2.0 で利用可能となった境界ボックス検出を使ってみました。まだ
Experimental のステージですが色々可能性を感じさせてくれる結果でしたね。

今後も機能拡張されていくと思いますので、是非検証していただけると嬉しいです。

Google Cloud Japan

Discussion