このページでは、画像へのオブジェクトの挿入(インペインティング)について説明します。Vertex AI の Imagen では、マスク領域を指定して画像にオブジェクトを挿入できます。独自のマスクを使用することも、Imagen でマスクを生成することもできます。
次のモデルは、画像へのオブジェクトの挿入をサポートしています。
コンテンツ挿入の例
インペインティングでは、ベース画像、画像マスク、テキスト プロンプトを使用して、既存の画像にコンテンツを追加できます。
入力
| 編集対象のベース画像* | Google Cloud コンソールのツールで指定したマスク領域 | テキスト プロンプト |
|---|---|---|
|
|
イチゴ |
* 画像クレジット: Alex Lvrs、Unsplash より
Google Cloud コンソールでマスク領域を指定した後の出力
|
|
|
編集とカスタマイズ用 Imagen のモデルカードを表示する
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Vertex AI API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Vertex AI API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
環境の認証を設定します。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
Python
ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Cloud Shell を使用している場合は、この操作を行う必要はありません。
認証エラーが返され、外部 ID プロバイダ(IdP)を使用している場合は、 フェデレーション ID を使用して gcloud CLI にログインしていることを確認します。
詳細については、 Google Cloud 認証ドキュメントの ローカル開発環境の ADC の設定をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Google Cloud CLI をインストールします。
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
-
定義されたマスク領域を使用して挿入する
次のサンプルを使用して、Imagen 3 モデルを使用してインペインティング リクエストを送信します。
コンソール
Google Cloud コンソールで、[Vertex AI] > [Vertex AI Studio] ページに移動します。
[メディアを生成] をクリックします。
[画像] をクリックします。
[タスク] リストから [インペイント追加] を選択します。
[モデル] リストから、使用する Imagen モデルを選択します。
[入力画像] で [追加] をクリックし、編集する画像を選択してアップロードします。
[プロンプト] ボックスに、画像を編集する方法を説明するプロンプトを入力します。
次のいずれかの方法でマスクを指定します。
- 独自のマスクをアップロードする:
- パソコンでマスクを作成します。
- [ アップロード ] > [マスクをインポート] をクリックし、アップロードするマスクを選択します。
- マスクを定義する: 編集ツールバーからマスクツール(ボックス、ブラシ、masked_transitions 反転ツール)を選択して、コンテンツを追加する領域を指定します。
- 独自のマスクをアップロードする:
[実行] をクリックします。
Python
インストール
pip install --upgrade google-genai
詳しくは、SDK リファレンス ドキュメントをご覧ください。
Vertex AI で Gen AI SDK を使用するための環境変数を設定します。
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=us-central1 export GOOGLE_GENAI_USE_VERTEXAI=True
REST
Imagen API の詳細については、以下をご覧ください。- メソッド:
endpoints.predict VisionGenerativeModelInstanceVisionGenerativeModelParamsVisionGenerativeModelResult
リクエストのデータを使用する前に、次のように置き換えます。
-
REGION: プロジェクトが配置されているリージョン。サポートされているリージョンの詳細については、Vertex AI の生成 AI のロケーションをご覧ください。 PROJECT_ID: 実際の Google Cloud プロジェクト ID。-
TEXT_PROMPT: 省略可。モデルが生成する画像をガイドするテキスト プロンプト。最適な結果を得るには、マスクされた領域の説明を使用し、単語によるプロンプトは避けてください。たとえば、「コーギー」ではなく「かわいいコーギー」を使用します。 -
B64_BASE_IMAGE: 編集対象の画像を base64 でエンコードした画像で、サイズは 10 MB 以下です。Base64 エンコードの詳細については、ファイルを Base64 でエンコードおよびデコードするをご覧ください。 -
B64_MASK_IMAGE: サイズが 10 MB 以下で Base64 でエンコードされた白黒マスク画像。 -
MASK_DILATION: 省略可。マスクを拡大する画像幅の割合を表す 0~1 の浮動小数点値(両端を含む)。dilationを使用すると、不正確なマスクを補正できます。0.01の値をおすすめします。 -
EDIT_STEPS: 省略可。サンプリング ステップ数を表す整数。値が大きくなるほど画質は向上しますが、値が小さくなるほどレイテンシは短縮されます。初期値として
35ステップをお試しください。画質が要件を満たしていない場合は、上限値75まで値を増加させていくことをおすすめします。 -
SAMPLE_COUNT: 省略可。生成する画像の数を指定する整数。指定できる値の範囲は1~4で、デフォルト値は4です。
HTTP メソッドと URL:
POST https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/publishers/google/models/imagen-3.0-capability-001:predict
リクエストの本文(JSON):
{
"instances": [
{
"prompt": "TEXT_PROMPT",
"referenceImages": [
{
"referenceType": "REFERENCE_TYPE_RAW",
"referenceId": 1,
"referenceImage": {
"bytesBase64Encoded": "B64_BASE_IMAGE"
}
},
{
"referenceType": "REFERENCE_TYPE_MASK",
"referenceImage": {
"bytesBase64Encoded": "B64_MASK_IMAGE"
},
"maskImageConfig": {
"maskMode": "MASK_MODE_USER_PROVIDED",
"dilation": MASK_DILATION
}
}
]
}
],
"parameters": {
"editConfig": {
"baseSteps": EDIT_STEPS
},
"editMode": "EDIT_MODE_INPAINT_INSERTION",
"sampleCount": SAMPLE_COUNT
}
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/publishers/google/models/imagen-3.0-capability-001:predict"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/publishers/google/models/imagen-3.0-capability-001:predict" | Select-Object -Expand Content
"sampleCount": 2 を含むリクエストに対するものです。レスポンスは、生成された画像のバイトを base64 でエンコードした 2 つの予測オブジェクトを返します。
{
"predictions": [
{
"bytesBase64Encoded": "BASE64_IMG_BYTES",
"mimeType": "image/png"
},
{
"mimeType": "image/png",
"bytesBase64Encoded": "BASE64_IMG_BYTES"
}
]
}
自動マスク検出を使用して挿入する
次のサンプルを使用して、コンテンツを挿入するインペインティングを指定します。これらのサンプルでは、ベースイメージとテキスト プロンプトを指定します。Imagen は、ベース画像を変更するマスク領域を自動的に検出して作成します。
コンソール
Google Cloud コンソールで、[Vertex AI] > [Vertex AI Studio] ページに移動します。
[メディアを生成] をクリックします。
[画像] をクリックします。
[タスク] リストから [インペイント追加] を選択します。
[モデル] リストから、使用する Imagen モデルを選択します。
[入力画像] で [追加] をクリックし、編集する画像を選択してアップロードします。
[プロンプト] ボックスに、画像を編集する方法を説明するプロンプトを入力します。
編集ツールバーで、background_replace(マスクの抽出)をクリックします。
次のいずれかのマスク抽出オプションを選択します。
背景要素: 背景要素を検出し、その周囲にマスクを作成します。
前景要素: 前景のオブジェクトを検出し、その周囲にマスクを作成します。
background_replace 人物: 人物を検出し、その周囲にマスクを作成します。
[実行] をクリックします。
Python
インストール
pip install --upgrade google-genai
詳しくは、SDK リファレンス ドキュメントをご覧ください。
Vertex AI で Gen AI SDK を使用するための環境変数を設定します。
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=us-central1 export GOOGLE_GENAI_USE_VERTEXAI=True
REST
Imagen API の詳細については、以下をご覧ください。
- メソッド:
endpoints.predict VisionGenerativeModelInstanceVisionGenerativeModelParamsVisionGenerativeModelResult
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。
- LOCATION: プロジェクトのリージョン。たとえば、
us-central1、europe-west2、asia-northeast3です。使用可能なリージョンの一覧については、Vertex AI の生成 AI のロケーションをご覧ください。リージョン API エンドポイントが使用されている場合、エンドポイントの URL のリージョンによってリクエストの処理場所が決まります。競合がある場合、リソースパスのLOCATIONは無視されます。 - TEXT_PROMPT: 生成する画像をモデルに指示するテキスト プロンプト。インペインティング挿入にプロンプトを使用する場合は、最良の結果を得るために、マスクされた領域の説明を使用してください。1 語のプロンプトは使用しないでください。たとえば、「コーギー」ではなく「かわいいコーギー」を使用します。
- B64_BASE_IMAGE: 編集またはアップスケールするベース画像。画像は base64 でエンコードされたバイト文字列として指定する必要があります。サイズの上限: 10 MB。
- MASK_MODE - モデルで使用する自動マスク作成のタイプを設定する文字列。使用可能な値:
MASK_MODE_BACKGROUND: バックグラウンド セグメンテーションを使用してマスクを自動的に生成します。MASK_MODE_FOREGROUND: フォアグラウンド セグメンテーションを使用してマスクを自動的に生成します。MASK_MODE_SEMANTIC:maskImageConfig.maskClasses配列で指定したセグメンテーション クラスに基づいて、セマンティック セグメンテーションを使用してマスクを自動的に生成します。例:"maskImageConfig": { "maskMode": "MASK_MODE_SEMANTIC", "maskClasses": [175, 176], // bicycle, car "dilation": 0.01 }
- MASK_DILATION - フロート。このマスクを拡大する画像幅の割合。不完全な入力マスクを補正するには、値を
0.01にすることをおすすめします。 - EDIT_STEPS - 整数。ベースモデルのサンプリング ステップ数。インペインティング挿入の場合は、
35ステップから始めます。品質が要件を満たしていない場合は、ステップを上限の75まで増やします。ステップを増やすと、リクエストのレイテンシも大きくなります。 - EDIT_IMAGE_COUNT - 編集された画像の数。指定できるのは整数値(1~4)です。デフォルト値: 4。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict
リクエストの本文(JSON):
{
"instances": [
{
"prompt": "TEXT_PROMPT",
"referenceImages": [
{
"referenceType": "REFERENCE_TYPE_RAW",
"referenceId": 1,
"referenceImage": {
"bytesBase64Encoded": "B64_BASE_IMAGE"
}
},
{
"referenceType": "REFERENCE_TYPE_MASK",
"referenceId": 2,
"maskImageConfig": {
"maskMode": "MASK_MODE",
"dilation": MASK_DILATION
}
}
]
}
],
"parameters": {
"editConfig": {
"baseSteps": EDIT_STEPS
},
"editMode": "EDIT_MODE_INPAINT_INSERTION",
"sampleCount": EDIT_IMAGE_COUNT
}
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict" | Select-Object -Expand Content
"sampleCount": 2 を含むリクエストに対するものです。レスポンスは、生成された画像のバイトを base64 でエンコードした 2 つの予測オブジェクトを返します。
{
"predictions": [
{
"bytesBase64Encoded": "BASE64_IMG_BYTES",
"mimeType": "image/png"
},
{
"mimeType": "image/png",
"bytesBase64Encoded": "BASE64_IMG_BYTES"
}
]
}
制限事項
以降のセクションでは、Imagen のオブジェクト削除機能の制限事項について説明します。
変更されたピクセル
モデルは独自の解像度(1024 x 1024 など)でピクセルを生成します。これは、入力画像の解像度とは異なる場合があります。つまり、生成された画像には、元の画像にはなかった小さな変更が含まれている可能性があります。
画像を完全に保持するには、マスクを使用して、生成された画像を入力画像とブレンドすることをおすすめします。通常、入力画像の解像度が 2K 以上の場合は、生成された画像と入力画像をブレンドする必要があります。
挿入の制限事項
通常、挿入されたオブジェクトはベースイメージのスタイルに一致しますが、一部のキーワードでは、写実的な出力ではなく漫画風の結果が生成されることがあります。
たとえば、「黄色いキリン」と入力すると、キリンは本来茶色と黄褐色であるため、漫画のような画像が生成されることがあります。不自然な色で写実的な画像を生成することは困難です。
次のステップ
Imagen や Vertex AI のその他の生成 AI プロダクトに関する次の記事を読む。
- Vertex AI で Imagen 3 を使い始めるためのデベロッパー ガイド
- クリエイターとともにクリエイターのために構築された、新しい生成メディアのモデルとツール
- Gemini の新機能: カスタム Gem と Imagen 3 による画像生成の改善
- Google DeepMind: Imagen 3 - 最も高い品質水準の Text-to-Image モデル