ウェブサイト検索

レビュー:テキストから画像への合成のためのマルチインスタンス生成コントローラー


2024年2月24日に発表されたMIGC: テキストから画像合成のためのマルチインスタンス生成コントローラに関する最近の論文では、マルチインスタンス生成(MIG)という新しいタスクが紹介されています。ここでの目標は、特定の属性を持ち、正確に配置された複数のオブジェクトを画像内に作成することです。新しいアプローチであるマルチインスタンス生成コントローラ(MIGC)は、このタスクをより小さな部分に分解し、各オブジェクトの正確なレンダリングを確保するために注意メカニズムを使用します。次に、これらのレンダリングされたオブジェクトが組み合わされて最終画像が作成されます。このタスクを評価するためのベンチマークとしてCOCO-MIGが作成され、実験結果はこのアプローチが生成されたオブジェクトの数量、位置、属性、および相互作用に対して優れた制御を提供することを示しています。

紹介

安定した拡散は、テキストから画像への生成でよく知られています。さらに、写真、絵画、その他のさまざまな分野で驚異的な能力を示しています。しかし、これらの研究は主に単一インスタンス生成に集中しています。実際のシナリオでは、数量、位置、属性、相互作用を制御しながら、単一の画像内で複数のインスタンスを同時に生成する必要がありますが、これにはまだ大きな未開拓の部分が残っています。本研究は、統一されたフレームワーク内で多様なインスタンスを生成する際に関連する複雑さに対処することを目指して、マルチインスタンス生成(MIG)のより広いタスクに深く掘り下げます。

分割統治戦略に動機づけられ、我々はマルチインスタンス生成コントローラー(MIGC)アプローチを提案します。このアプローチは、MIGを複数のサブタスクに分解し、それらのサブタスクの結果を組み合わせることを目的としています。 - オリジナル研究論文

MIGCは3つのステップで構成されています:

  1. 分割:MIGCは、SDのクロスアテンション層内でマルチインスタンス生成(MIG)を個々のインスタンスシェーディングのサブタスクに分解します。このアプローチは、各サブタスクの解決を加速し、生成される画像の調和を向上させます。

  2. Conquer: MIGCは、固定クロスアテンションからのシェーディング結果を改善するために、強化アテンションレイヤーと呼ばれる特別なレイヤーを使用しています。これにより、各インスタンスは適切なシェーディングを受けることが保証されます。

  3. 結合: MIGCは、レイアウトアテンションレイヤーを使用してシェーディングテンプレートを取得します。次に、それをシェーディング背景およびシェーディングインスタンスと組み合わせて、最終的なシェーディング結果を得るためにシェーディング集約コントローラーに送信します。

MIGCの概要(ソース)

COCO-MIG、COCO、およびDrawBenchを使用した包括的な実験が実施されました。COCO-MIG手法は、インスタンス成功率を32.39%から58.43%に大幅に向上させました。COCOベンチマークに適用したところ、このアプローチは平均精度(AP)を40.68/68.26/42.85から54.69/84.17/61.71に大きく増加させました。同様に、DrawBenchでは、位置、属性、カウントにおける改善が観察され、属性成功率が48.20%から97.50%に大幅に向上しました。さらに、研究論文で述べられているように、MIGCは元の安定した拡散と同様の推論速度を維持しています。

前提条件

  • AIモデルの基本理解: Stable DiffusionやDALL-Eのようなテキストから画像への合成モデルに精通していること。
  • マルチモーダル学習の知識: モデルがテキストと画像データの両方をどのように処理するかを理解すること。
  • 主要なML概念: 注意メカニズム、トランスフォーマー、潜在拡散モデルなどの概念に精通すること。
  • PythonとMLライブラリ: PyTorch、Hugging Face、またはTensorFlowなどのライブラリに関する経験。
  • 評価指標: 画像合成の評価指標(例:FID、CLIPスコア)への認識。

分析と結果

マルチインスタンス生成(MIG)では、ユーザーが生成モデルに対して、グローバルプロンプト(P)、各インスタンスのバウンディングボックス(B)、および各インスタンスの説明(D)を提供します。これらの入力に基づいて、モデルは、各インスタンスがそのボックス内で説明と一致し、すべてのインスタンスが画像内で正しく整列する画像(I)を生成しなければなりません。従来の手法である安定拡散は、テキストリークや空間リークを含む属性リークに苦しんでいました。

MIGC(ソース)の比較結果

上の画像は、COCO-MIGデータセットにおけるMIGCアプローチと他のベースライン手法を比較しています。具体的には、黄色のバウンディングボックス「Obj」は位置が不正確に生成されたインスタンスを示し、青色のバウンディングボックス「Attr」は属性が不正確に生成されたインスタンスを示すために使用されています。

研究からの実験結果は、MIGCが特に色に関する属性制御に優れ、インスタンスの位置に対する精密な制御を維持していることを示しています。

位置を評価する際、Grounding-DINOが検出されたボックスを真実と比較するために使用され、IoUが0.5を超えるインスタンスを「正しく位置が生成された」とマークしました。属性に関しては、インスタンスが正しく配置されている場合、Grounded-SAMがHSV空間におけるターゲット色の割合を測定し、割合が0.2を超えるインスタンスを「完全に正しく生成された」とラベリングしました。

COCO-MIGでは、主にインスタンス成功率とmIoUに焦点が当てられ、色が間違っている場合はIoUを0に設定しました。COCO-Positionでは、成功率、mIoU、空間精度のためのGrounding-DINO APスコア、画像品質のためのFID、画像-テキスト一貫性のためのCLIPスコアおよびローカルCLIPスコアが測定されました。

DrawBenchでは、成功率は位置と数の正確性、及び正しい色の割り当ての確認に対して評価されました。手動評価は自動化された指標を補完します。

デモ

1. リポジトリをクローンし、必要なライブラリをインストールおよび更新します。

!git clone https://github.com/limuloo/MIGC.git
%cd MIGC
!pip install --upgrade --no-cache-dir gdown
!pip install transformers
!pip install torch
!pip install accelerate
!pip install pyngrok
!pip install opencv-python
!pip install einops
!pip install diffusers==0.21.1
!pip install omegaconf
!pip install -U transformers
!pip install -e .

2.必要なモジュールをインポートする

import yaml
from diffusers import EulerDiscreteScheduler
from migc.migc_utils import seed_everything
from migc.migc_pipeline import StableDiffusionMIGCPipeline, MIGCProcessor, AttentionStore
import os

3.事前にトレーニングされた重みをダウンロードし、あなたのディレクトリに保存します。

!gdown --id 1v5ik-94qlfKuCx-Cv1EfEkxNBygtsz0T -O ./pretrained_weights/MIGC_SD14.ckpt
!gdown --id 1cmdif24erg3Pph3zIZaUoaSzqVEuEfYM -O ./migc_gui_weights/sd/cetusMix_Whalefall2.safetensors
!gdown --id 1Z_BFepTXMbe-cib7Lla5A224XXE1mBcS -O ./migc_gui_weights/clip/text_encoder/pytorch_model.bin

4.「offlinePipelineSetupWithSafeTensor」という関数を作成する

この機能は、テキストと画像処理のためにMIGCおよびCLIPモデルを統合し、オフライン処理のパイプラインを設定します。

def offlinePipelineSetupWithSafeTensor(sd_safetensors_path):
    migc_ckpt_path = '/notebooks/MIGC/pretrained_weights/MIGC_SD14.ckpt'
    clip_model_path = '/notebooks/MIGC/migc_gui_weights/clip/text_encoder'
    clip_tokenizer_path = '/notebooks/MIGC/migc_gui_weights/clip/tokenizer'
    original_config_file='/notebooks/MIGC/migc_gui_weights/v1-inference.yaml'
    ctx = init_empty_weights if is_accelerate_available() else nullcontext
    with ctx():
        # text_encoder = CLIPTextModel(config)
        text_encoder = CLIPTextModel.from_pretrained(clip_model_path)
        tokenizer = CLIPTokenizer.from_pretrained(clip_tokenizer_path)
    pipe = StableDiffusionMIGCPipeline.from_single_file(sd_safetensors_path,
                                                    original_config_file=original_config_file,
                                                    text_encoder=text_encoder,
                                                    tokenizer=tokenizer,
                                                    load_safety_checker=False)
    print('Initializing pipeline')
    pipe.attention_store = AttentionStore()
    from migc.migc_utils import load_migc
    load_migc(pipe.unet , pipe.attention_store,
            migc_ckpt_path, attn_processor=MIGCProcessor)

    pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config)
    return pipe

5.パイプラインを設定するために、引数'./migc_gui_weights/sd/cetusMix_Whalefall2.safetensors'で関数offlinePipelineSetupWithSafeTensor()を呼び出します。パイプラインの設定が完了したら、.to("cuda")メソッドを使用して、全パイプラインをGPUアクセラレーションのためにCUDAデバイスに転送します。

pipe = offlinePipelineSetupWithSafeTensor('./migc_gui_weights/sd/cetusMix_Whalefall2.safetensors')
pipe = pipe.to("cuda")

6. 作成されたパイプラインを使用して画像を生成します。作成された画像は提供されたプロンプトとバウンディングボックスに基づいており、この機能は生成された画像にバウンディングボックスと説明を注釈付けし、結果を保存または表示します。

prompt_final = [['masterpiece, best quality,black colored ball,gray colored cat,white colored  bed,\
                  green colored plant,red colored teddy bear,blue colored wall,brown colored vase,orange colored book,\
                  yellow colored hat', 'black colored ball', 'gray colored cat', 'white colored  bed', 'green colored plant', \
                    'red colored teddy bear', 'blue colored wall', 'brown colored vase', 'orange colored book', 'yellow colored hat']]
bboxes = [[[0.3125, 0.609375, 0.625, 0.875], [0.5625, 0.171875, 0.984375, 0.6875], \
            [0.0, 0.265625, 0.984375, 0.984375], [0.0, 0.015625, 0.21875, 0.328125], \
            [0.171875, 0.109375, 0.546875, 0.515625], [0.234375, 0.0, 1.0, 0.3125], \
                [0.71875, 0.625, 0.953125, 0.921875], [0.0625, 0.484375, 0.359375, 0.8125], \
                    [0.609375, 0.09375, 0.90625, 0.28125]]]
negative_prompt = 'worst quality, low quality, bad anatomy, watermark, text, blurry'
seed = 7351007268695528845
seed_everything(seed)
image = pipe(prompt_final, bboxes, num_inference_steps=30, guidance_scale=7.5,
                MIGCsteps=15, aug_phase_with_and=False, negative_prompt=negative_prompt, NaiveFuserSteps=30).images[0]
image.save('output1.png')
image.show()
image = pipe.draw_box_desc(image, bboxes[0], prompt_final[0][1:])
image.save('anno_output1.png')
image.show()

提示されたプロンプトに基づいて生成された画像

定義されたバウンディングボックスとともにイメージ

私たちは読者の皆さんにリンクをクリックして、完全なノートブックにアクセスし、コードをさらに実験することを強くお勧めします。

結論

この研究は、「MIG」と呼ばれる難しい課題に取り組み、MIGタスクの処理における安定した拡散の性能を向上させるための解決策「MIGC」を紹介することを目的としています。新しいアイデアの1つは、複雑なMIGタスクをより簡単なタスクに分解する「分割統治」の戦略を利用し、個々のオブジェクトのシェーディングに焦点を当てています。各オブジェクトのシェーディングは注意層を使用してさらに強化され、その後、別の注意層とコントローラを使用して、すべてのシェーディングされたオブジェクトと結合されます。提案されたCOCO-MIGデータセットや、COCO-PositionやDrawbenchのような広く使用されているベンチマークを使用して、いくつかの実験が行われました。MIGCを実験したところ、結果はMIGCが効率的かつ効果的であることを示しています。

私たちは、この記事を読むのが私たちが書くことを楽しんだのと同じくらいあなたに楽しんでもらえたことを願っています。

参考文献

  • 公式リポジトリ
  • オリジナル研究論文

関連記事: