🐈

ViCoをgoogle colabで試してみた。

2023/06/08に公開

ViCoとは

ViCoは対象物の画像を高い一貫性を持って画像内に埋め込むことができるtext-to-imageのfinetuned型のdiffusion modelです。DreamBoothとかと同種な感じですね。
https://github.com/haoosz/ViCo

リンク

Colab
github

準備

Google Colabを開き、メニューから「ランタイム→ランタイムのタイプを変更」でランタイムを「GPU」に変更します。

環境構築

インストール手順です。

!git clone https://github.com/haoosz/ViCo.git
%cd /content/ViCo/
!pip install pudb imageio imageio-ffmpeg pytorch-lightning omegaconf test-tube streamlit setuptools==59.5.0 pillow==9.0.1 einops torch-fidelity==0.3.0 transformers torchmetrics kornia==0.6
!pip install -e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers
!pip install -e git+https://github.com/openai/CLIP.git@main#egg=clip
!pip install -e .

推論

(1)モデルのダウンロードとデータの準備

!wget https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt -P /content/ViCo/models/ldm/stable-diffusion-v1

%cd /content/ViCo
import gdown

# get sample images
url = "https://drive.google.com/drive/folders/1m8TCsY-C1tIOflHtWnFzTbw2C6dq67mC"
gdown.download_folder(url, quiet=True, use_cookies=False)

# get pretrained checkpoint
url = "https://drive.google.com/drive/folders/1I9BJpTLEGueK2hCaR2RKdQrlTrtF24lC"
gdown.download_folder(url, quiet=True, use_cookies=False)

(2)推論
推論の前に以下のファイルを編集してください。20行目あたりにあるpytorch_lightiningのimportの部分です。

/content/ViCo/ldm/models/diffusion/ddpm.py
# from pytorch_lightning.utilities.distributed import rank_zero_only
from pytorch_lightning.utilities.rank_zero import rank_zero_only

推論の実行です。

# inference
%cd /content/ViCo

REF_IMAGE_PATH = "/content/ViCo/images/batman/1.jpg"
CHECKPOINT_PATH = "/content/ViCo/ckpt/batman"
OUTPUT_PATH = "/content/outputs/badman"

!python scripts/vico_txt2img.py \
--ddim_eta 0.0  --n_samples 2  --n_iter 2  --scale 7.5  --ddim_steps 50  \
--ckpt_path models/ldm/stable-diffusion-v1/sd-v1-4.ckpt  \
--image_path $REF_IMAGE_PATH \
--ft_path $CHECKPOINT_PATH \
--load_step 399 \
--prompt "a photo of * on the beach" \
--outdir $OUTPUT_PATH

結果の確認

from PIL import Image
display(Image.open("/content/outputs/badman/a-photo-of-*-on-the-beach.jpg"))


beachにいるかは微妙ですが、、以下がinputの画像です。

埋め込み精度高すぎ問題。。位置とか指定できたらもう神の領域ですね。

最後に

今回はfinetuned型のstable diffusionであるViCoをgoogle colabで試してみました。自分が入れたい現実の画像を高い一貫性を持って入れ込めるっているのは今までのstable diffusionにはなかった部分でかなり適用範囲が広そうなイメージ。最近のstable diffusionはこういった研究がめちゃくちゃ出てきているので比較検討していきたい。

今後ともLLM, Diffusion model, Image Analysis, 3Dに関連する試した記事を投稿していく予定なのでよろしくお願いします。

Discussion