[FastComposer] AIでStable Diffusionをパーソナライズする

2023年7月25日火曜日

Artificial Intelligence

本記事では、FastComposerと呼ばれる機械学習手法を用いて、任意の2人の人物を含めた画像をテキストから生成する方法をご紹介します。

Eye catch
出典: mit-han-lab/fastcomposer

FastComposer

概要

FastComposerは、モデルの追加トレーニングなく、複数のSubjectに効率的にパーソナライズするText to Image技術です。

上図を例にとると、Referencesの2人の人物画とテキストを参照し、画像を生成した結果が示されています。
FastComposerは、モデルの微調整なしに、他の手法相当の出力結果を得られることが確認できます。

従来手法はSubject固有の微調整が必要であり非効率であることや、Subject間の特徴を混合することが多く、複数のSubjectの生成に課題がありました。

FastComposerは、Image Encoderによって抽出されたSubjectのembedingsを抽出し、Diffusionモデルのテキスト条件付けを強化し、forward-passのみでSubjectの画像とテキストに基づいてパーソナライズされた画像を生成することを可能にしています。

Architecture
出典: FastComposer: Tuning-Free Multi-Subject Image Generation with Localized Attention

詳細はこちらの論文をご参照ください。

本記事では上記手法を用いて、任意の2画像をとテキストを用いて画像を生成していきます。

デモ(Colaboratory)

それでは、実際に動かしながら
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

また、下記から直接Google Colaboratoryで開くこともできます。
Open In Colab

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

環境セットアップ

それではセットアップしていきます。 Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

初めにGithubからソースコードを取得します。

%cd /content
!git clone https://github.com/mit-han-lab/fastcomposer.git
%cd /content/fastcomposer
# Commits on Jul 4, 2023
!git checkout 106cf26158524c34d3d82ab0016da3b85c4e42c0

次にライブラリをインストールします。

%cd /content/fastcomposer

!pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118
!pip install transformers==4.25.1 accelerate datasets evaluate diffusers==0.16.1 xformers triton scipy clip

!python setup.py install

以上で環境セットアップは完了です。

学習済みモデルのセットアップ

ここでは、論文発表元が公開している学習済みモデルをダウンロードします。

%cd /content/fastcomposer

# create dir
!mkdir -p model/fastcomposer

# download model
!wget -c https://huggingface.co/mit-han-lab/fastcomposer/resolve/main/pytorch_model.bin \
      -O model/fastcomposer/pytorch_model.bin

参照画像のセットアップ

ここでは、パーソナライズした画像を生成するための参照画像をWeb上から取得します。

以下で取得している画像はコード中のURLからご確認ください。

%cd /content/fastcomposer

target_a = 'man'
target_b = 'women'
rootdir = f'input_imgs/{target_a}_{target_b}'
dir_a = f'input_imgs/{target_a}_{target_b}/{target_a}'
dir_b = f'input_imgs/{target_a}_{target_b}/{target_b}'
filename_a = f'{dir_a}/0.jpg'
filename_b = f'{dir_b}/0.jpg'

!rm -rf {rootdir}
!mkdir -p {dir_a}
!mkdir -p {dir_b}


!wget -c https://cdn.shopify.com/s/files/1/0250/3976/5585/files/gandhi_1024x1024.jpg \
      -O {filename_a}

!wget -c https://providence-blue.com/wp-content/uploads/2018/08/florence-nightingale-facts-featured.jpg \
      -O {filename_b}

Text to Image

最後に、テキストと参照画像から、パーソナライズした画像を生成していきます。
まず、Google Colabで実行するため一部ソースコードを修正します。

%cd /content/fastcomposer

!sed -E "s/accelerator.device/\"cuda\"/g" -i /content/fastcomposer/fastcomposer/inference.py
!sed -E "s/map_location=\"cpu\"/map_location=\"cuda\"/g" -i /content/fastcomposer/fastcomposer/inference.py

それでは、実行します。

from accelerate.utils import write_basic_config
write_basic_config()

output_dir = f'output_imgs/{target_a}_{target_b}'

!CUDA_VISIBLE_DEVICES=0 accelerate launch \
    --mixed_precision=fp16 \
    fastcomposer/inference.py \
    --pretrained_model_name_or_path "runwayml/stable-diffusion-v1-5" \
    --finetuned_model_path "model/fastcomposer" \
    --test_reference_folder {rootdir} \
    --test_caption "a man <|image|> and a beautiful woman <|image|> are cooking with wearing an apron, 4k, detail" \
    --output_dir {output_dir} \
    --mixed_precision fp16 \
    --image_encoder_type clip \
    --image_encoder_name_or_path "openai/clip-vit-large-patch14" \
    --num_image_tokens 1 \
    --max_num_objects 2 \
    --object_resolution 224 \
    --generate_height 512 \
    --generate_width 512 \
    --num_images_per_prompt 5 \
    --num_rows 1 \
    --seed 9258305 \
    --guidance_scale 4 \
    --inference_steps 50 \
    --start_merge_step 10 \
    --no_object_augmentation

出力結果は以下の通りです。

参照画像の2画像と、テキストからパーソナライズした画像が生成できていることが確認できます。

生成結果

まとめ

本記事では、FastComposerを用いてパーソナライズしたText to Imageを行う方法をご紹介しました。
出力画像の複数の人物をパーソナライズできることで、より意図する画像が生成することが可能となります。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1.  論文 - FastComposer: Tuning-Free Multi-Subject Image Generation with Localized Attention

2. GitHub - mit-han-lab/fastcomposer

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology