Amazon SageMaker JumpStart を使用して Stable Diffusion で画像を修復する

Amazon SageMaker JumpStart を使用して Stable Diffusion で画像を修復する

2022年XNUMX月、私たちは 発表の AWS のお客様は、テキストから画像を生成できる 安定拡散 使用するモデル Amazon SageMaker ジャンプスタート. 本日、ユーザーが Stable Diffusion モデルを使用して画像を修復できるようにする新機能を紹介できることを嬉しく思います。 修復とは、テキスト プロンプトに基づいて、画像の一部を別の画像に置き換えるプロセスを指します。 元の画像、置き換えられる部分の輪郭を描くマスク画像、およびテキスト プロンプトを提供することにより、Stable Diffusion モデルは、マスクされた領域をテキスト プロンプトに記述されたオブジェクト、サブジェクト、または環境に置き換える新しい画像を生成できます。

修復を使用して、劣化した画像を復元したり、特定のセクションで斬新な主題やスタイルを使用して新しい画像を作成したりできます。 建築設計の分野では、Stable Diffusion インペインティングを適用して、建物の設計図の不完全または損傷した領域を修復し、建設作業員に正確な情報を提供できます。 臨床 MRI イメージングの場合、患者の頭部を拘束する必要があり、クロッピング アーティファクトがデータの損失や診断精度の低下を引き起こすため、標準以下の結果につながる可能性があります。 画像の修復は、これらの次善の結果を効果的に軽減するのに役立ちます。

この投稿では、XNUMX つの方法で Stable Diffusion 修復モデルを使用して推論をデプロイおよび実行するための包括的なガイドを紹介します。 Amazon SageMakerスタジオ、およびプログラムによって JumpStart API で利用可能 SageMaker Python SDK.

ソリューションの概要

以下の画像は修復の例です。 元の画像は左側、マスク画像は中央、モデルによって生成された修復画像は右側にあります。 最初の例では、モデルには元の画像、マスク画像、テキスト プロンプト「白い猫、青い目、セーターを着て、公園に横たわっている」、および否定的なプロンプト「足の描き方が悪い」が提供されました。 」 XNUMX 番目の例では、テキスト プロンプトは「女性モデルが、ピンクとブルーの色合いのブレンドが特徴のカジュアルなロング ドレスを優雅に披露しています」でした。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用して、安定した拡散で画像を修復します。垂直検索。あい。

Stable Diffusion のような大きなモデルを実行するには、カスタムの推論スクリプトが必要です。 エンド ツー エンドのテストを実行して、スクリプト、モデル、および目的のインスタンスが効率的に連携することを確認する必要があります。 JumpStart は、しっかりとテストされたすぐに使えるスクリプトを提供することで、このプロセスを簡素化します。 これらのスクリプトには、Studio UI からワンクリックでアクセスできます。 JumpStart API.

次のセクションでは、Studio UI または JumpStart API を使用してモデルをデプロイし、推論を実行する方法について説明します。

このモデルを使用することにより、以下に同意することに注意してください CreativeML Open RAIL++-M ライセンス.

StudioUIからJumpStartにアクセスします

このセクションでは、Studio UI を使用した JumpStart モデルのデプロイについて説明します。 付属のビデオでは、JumpStart で事前トレーニング済みの Stable Diffusion 修復モデルを見つけてデプロイする方法を示しています。 モデル ページには、モデルとその使用法に関する重要な詳細が表示されます。 推論を実行するために、低レイテンシーの推論に必要な GPU アクセラレーションを手頃な価格で提供する ml.p3.2xlarge インスタンス タイプを採用しています。 SageMaker ホスティング インスタンスが設定されたら、選択します。 配備します. エンドポイントは約 10 分以内に操作可能になり、推論リクエストを処理する準備が整います。

JumpStart は、新しく作成されたエンドポイントで推論を実行するのにかかる時間を短縮するのに役立つサンプル ノートブックを提供します。 Studio でノートブックにアクセスするには、 ノートブックを開く セクションに StudioのEndpointを使用する モデル エンドポイント ページのセクション。

SageMakerSDKでJumpStartをプログラムで使用する

JumpStart UI を利用すると、数回クリックするだけで、事前トレーニング済みのモデルをインタラクティブにデプロイできます。 あるいは、SageMaker Python SDK 内に統合された API を使用して、プログラムで JumpStart モデルを採用することもできます。

このセクションでは、JumpStart で適切な事前トレーニング済みモデルを選択し、このモデルを SageMaker エンドポイントにデプロイし、デプロイされたエンドポイントで推論を実行します。すべて SageMaker Python SDK を使用します。 次の例には、コード スニペットが含まれています。 このデモに含まれるすべての手順を含む完全なコードにアクセスするには、 JumpStart 画像編集入門 – 安定拡散修復 ノートブックの例。

事前トレーニング済みのモデルをデプロイする

SageMaker は、さまざまなビルドおよびランタイム タスクに Docker コンテナを利用します。 JumpStart は SageMakerディープラーニングコンテナ フレームワーク固有の (DLC)。 最初に、追加のパッケージと、選択したタスクのトレーニングと推論を処理するスクリプトをフェッチします。 次に、事前トレーニング済みのモデル アーティファクトが個別にフェッチされます。 model_uris、プラットフォームに柔軟性を提供します。 これにより、複数の事前トレーニング済みモデルを XNUMX つの推論スクリプトで使用できます。 次のコードは、このプロセスを示しています。

model_id, model_version = "model-inpainting-stabilityai-stable-diffusion-2-inpainting-fp16", "*"
# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve( region=None, framework=None, # automatically inferred from model_id image_scope="inference", model_id=model_id, model_version=model_version, instance_type=inference_instance_type,
)
# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference") base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

次に、それらのリソースを SageMakerモデル インスタンス化してエンドポイントをデプロイします。

# Create the SageMaker model instance
# Create the SageMaker model instance
model = Model( image_uri=deploy_image_uri, source_dir=deploy_source_uri, model_data=base_model_uri, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri role=aws_role, predictor_cls=Predictor, name=endpoint_name,
) # deploy the Model - note that we need to pass the Predictor class when we deploy the model through the Model class,
# in order to run inference through the SageMaker API
base_model_predictor = model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name,
)

モデルがデプロイされた後、モデルからリアルタイムの予測を取得できます!

入力

入力は、ベース イメージ、マスク イメージ、およびマスク アウトされた部分で置換されるサブジェクト、オブジェクト、または環境を記述するプロンプトです。 インペインティング エフェクト用の完璧なマスク イメージを作成するには、いくつかのベスト プラクティスが必要です。 特定のプロンプトから始めて、目的の結果を得るために、さまざまな Stable Diffusion 設定をためらわずに試してください。 修復するイメージによく似たマスク イメージを使用します。 このアプローチは、修復アルゴリズムが画像の欠落部分を補完するのに役立ち、より自然な外観になります。 通常、高品質のイメージはより良い結果をもたらすため、ベース イメージとマスク イメージが高品質で互いに似ていることを確認してください。 さらに、大きくて滑らかなマスク イメージを選択して、ディテールを保持し、アーティファクトを最小限に抑えます。

エンドポイントは、ベース イメージとマスクを生の RGB 値または base64 でエンコードされたイメージとして受け入れます。 推論ハンドラーは、に基づいて画像をデコードします。 content_type:

  • content_type = “application/json”、入力ペイロードは、未加工の RGB 値、テキスト プロンプト、およびその他のオプション パラメータを含む JSON ディクショナリである必要があります
  • content_type = “application/json;jpeg”、入力ペイロードは、base64 でエンコードされた画像、テキスト プロンプト、およびその他のオプション パラメータを含む JSON ディクショナリである必要があります

出力

エンドポイントは、Base64 でエンコードされた RGB 画像または生成された画像の JSON 辞書の XNUMX 種類の出力を生成できます。 を設定することで、必要な出力形式を指定できます。 accept へのヘッダー "application/json" or "application/json;jpeg" それぞれ JPEG 画像または base64 の場合。

  • accept = “application/json”、エンドポイントは画像の RGB 値を含む JSON ディクショナリを返します
  • accept = “application/json;jpeg”の場合、エンドポイントは base64.b64 エンコーディングでエンコードされたバイトとして JPEG 画像を含む JSON ディクショナリを返します

生の RGB 値でペイロードを送受信すると、入力ペイロードと応答サイズのデフォルト制限に達する可能性があることに注意してください。 したがって、base64 でエンコードされたイメージを設定して使用することをお勧めします。 content_type = “application/json;jpeg” = "application/json;jpeg" を受け入れます。

次のコードは、推論リクエストの例です。

content_type = "application/json;jpeg" with open(input_img_file_name, "rb") as f: input_img_image_bytes = f.read()
with open(input_img_mask_file_name, "rb") as f: input_img_mask_image_bytes = f.read() encoded_input_image = base64.b64encode(bytearray(input_img_image_bytes)).decode()
encoded_mask = base64.b64encode(bytearray(input_img_mask_image_bytes)).decode() payload = { "prompt": "a white cat, blue eyes, wearing a sweater, lying in park", "image": encoded_input_image, "mask_image": encoded_mask, "num_inference_steps": 50, "guidance_scale": 7.5, "seed": 0, "negative_prompt": "poorly drawn feet",
} accept = "application/json;jpeg" def query(model_predictor, payload, content_type, accept): """Query the model predictor.""" query_response = model_predictor.predict( payload, { "ContentType": content_type, "Accept": accept, }, ) return query_response query_response = query(model_predictor, json.dumps(payload).encode("utf-8"), content_type, accept)
generated_images = parse_response(query_response)

サポートされるパラメーター

Stable Diffusion 修復モデルは、画像生成用の多くのパラメーターをサポートしています。

  • 画像 – 元の画像。
  • mask – 画像生成時に黒く塗りつぶされた部分が変更されず、白い部分が置き換えられた画像。
  • プロンプト – イメージ生成をガイドするプロンプト。 文字列または文字列のリストにすることができます。
  • num_inference_steps (オプション) – 画像生成中のノイズ除去ステップの数。 ステップ数が多いほど、画質が向上します。 指定する場合は、正の整数にする必要があります。 推論ステップが増えると、応答時間が長くなることに注意してください。
  • guide_scale (オプション) – ガイダンス スケールを高くすると、画像の品質が犠牲になりますが、プロンプトにより密接に関連する画像になります。 指定する場合は、float にする必要があります。 guidance_scale<=1 無視されます。
  • negative_prompt (オプション) – これは、このプロンプトに対してイメージ生成をガイドします。 指定する場合は、文字列または文字列のリストであり、一緒に使用する必要があります guidance_scale。 場合 guidance_scale が無効になっている場合、これも無効になります。 さらに、プロンプトが文字列のリストの場合、 negative_prompt 文字列のリストでもある必要があります。
  • シード(オプション) – これにより、再現性のためにランダム化された状態が修正されます。 指定する場合は、整数にする必要があります。 同じシードで同じプロンプトを使用すると、結果のイメージは常に同じになります。
  • batch_size (オプション) – XNUMX 回の転送パスで生成する画像の数。 小さいインスタンスを使用するか、多くのイメージを生成する場合は、 batch_size 小さい数 (1–2) になります。 画像の数 = プロンプトの数*num_images_per_prompt.

制限とバイアス

Stable Diffusion は、修復において優れたパフォーマンスを発揮しますが、いくつかの制限やバイアスに悩まされています。 これらには以下が含まれますが、これらに限定されません。

  • トレーニング データにこれらの特徴を備えた十分な画像が含まれていないため、モデルは正確な顔や手足を生成しない場合があります。
  • モデルは、 LAION-5B データセット、成人向けコンテンツが含まれており、さらに考慮しないと製品の使用に適さない可能性があります。
  • モデルは英語のテキストでトレーニングされているため、英語以外の言語ではうまく機能しない可能性があります。
  • モデルは画像内に適切なテキストを生成できません。
  • Stable Diffusion 修復は通常、256×256 または 512×512 ピクセルなどの低解像度の画像に最適です。 高解像度の画像 (768 x 768 以上) を扱う場合、この方法では、望ましいレベルの品質と詳細を維持するのに苦労する可能性があります。
  • シードを使用すると再現性を制御できますが、Stable Diffusion 修復では、入力またはパラメーターをわずかに変更すると、さまざまな結果が得られる場合があります。 これにより、特定の要件に合わせて出力を微調整することが困難になる場合があります。
  • この方法では、複雑なテクスチャとパターンを生成するのに苦労する可能性があります。特に、それらが画像内の広い領域にまたがる場合や、修復された領域の全体的な一貫性と品質を維持するために不可欠な場合です。

制限とバイアスの詳細については、 安定拡散修復モデルカード.

プロンプトを介して生成されたマスクを使用した修復ソリューション

CLIPSeq は、事前トレーニング済みの CLIP (Contrastive Language-Image Pretraining) モデルの機能を利用して、入力画像からマスクを生成する高度な深層学習手法です。 このアプローチは、画像のセグメンテーション、修復、操作などのタスク用のマスクを効率的に作成する方法を提供します。 CLIPSeq は、CLIP を使用して入力画像のテキスト記述を生成します。 次に、テキスト説明を使用して、テキスト説明に関連する画像内のピクセルを識別するマスクを生成します。 次に、マスクを使用して、画像の関連部分を分離し、さらに処理することができます。

CLIPSeq には、入力画像からマスクを生成する他の方法よりもいくつかの利点があります。 まず、別の画像セグメンテーション アルゴリズムで画像を処理する必要がないため、より効率的な方法です。 XNUMX つ目は、イメージのテキスト記述により近いマスクを生成できるため、より正確です。 第 XNUMX に、さまざまな画像からマスクを生成するために使用できるため、汎用性が高くなります。

ただし、CLIPSeq にはいくつかの欠点もあります。 まず、特定のドメインや専門分野を網羅していない可能性がある事前トレーニング済みの CLIP モデルに依存しているため、この手法には主題に関して制限がある可能性があります。 第 XNUMX に、画像のテキスト説明のエラーの影響を受けやすいため、機密性の高い方法になる可能性があります。

詳細については、 Amazon SageMaker を使用した生成 AI による仮想ファッション スタイリング.

クリーンアップ

ノートブックの実行が完了したら、プロセスで作成されたすべてのリソースを必ず削除して、請求が停止されるようにしてください。 エンドポイントをクリーンアップするコードは、関連する ノート.

まとめ

この投稿では、JumpStart を使用して事前トレーニング済みの Stable Diffusion 修復モデルをデプロイする方法を示しました。 この投稿ではコード スニペットを示しました。このデモのすべての手順を含む完全なコードは、 JumpStart の紹介 – プロンプトに従って画質を向上させる 例のノート。 ご自身で解決策を試し、ご意見をお寄せください。

モデルとその仕組みの詳細については、次のリソースを参照してください。

JumpStart の詳細については、次の投稿をご覧ください。


著者について

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用して、安定した拡散で画像を修復します。垂直検索。あい。ヴィヴェック・マダン博士 Amazon SageMaker JumpStart チームの応用科学者です。 イリノイ大学アーバナ シャンペーン校で博士号を取得し、ジョージア工科大学で博士研究員を務めました。 彼は機械学習とアルゴリズム設計の活発な研究者であり、EMNLP、ICLR、COLT、FOCS、および SODA カンファレンスで論文を発表しています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用して、安定した拡散で画像を修復します。垂直検索。あい。アルフレッド・シェン AWS のシニア AI/ML スペシャリストです。 彼はシリコンバレーで働いており、ヘルスケア、金融、ハイテクなどのさまざまな分野で技術職や管理職を務めています。 彼は専任の応用 AI/ML 研究者であり、CV、NLP、およびマルチモダリティに重点を置いています。 彼の作品は、EMNLP、ICLR、Public Health などの出版物で紹介されています。

タイムスタンプ:

より多くの AWS機械学習