pix2pix-zero(Zero-shot Image-to-Image Translation)を試してみる(Instruct-Pix2Pixとの比較)


はじめに

pix2pix-zero(Zero-shot Image-to-Image Translation)を使って写真に写る犬を猫に変えるというタスクに挑戦しました。
github.com
以前「Instruct-Pix2Pix」というのを使ったのでそちらとの比較になります。
touch-sp.hatenablog.com

PC環境

Windows 11
CUDA 11.6.2
Python 3.10.9

Python環境構築

torchとtorchvisionを先にインストールして後はまとめて「requirements.txt」でインストールしました。

pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install -r requirements.txt

requirements.txt

accelerate==0.16.0
diffusers==0.12.1
einops==0.6.0
gradio==3.18.0
ipython==8.10.0
numpy==1.24.2
opencv-python-headless==4.5.5.64
Pillow==9.4.0
psutil==5.9.4
tqdm==4.64.1
transformers==4.26.1
salesforce-lavis==1.0.0

実行

リポジトリのクローン

git clone https://github.com/pix2pixzero/pix2pix-zero
cd pix2pix-zero

画像の準備

画像はこちらから使わせて頂きました。

「dogonbench.png」という名前で「pix2pix-zero/assets/test_images/dogs」フォルダ内に保存しました。

スクリプトの実行

実行は2段階で行います。

python src/inversion.py  ^
        --input_image "assets/test_images/dogs/dogonbench.png" ^
        --results_folder "output/test_dog"
python src/edit_real.py ^
    --inversion "output/test_dog/inversion/dogonbench.pt" ^
    --prompt "output/test_dog/prompt/dogonbench.txt" ^
    --task_name "dog2cat" ^
    --results_folder "output/test_dog/" ^
    --use_float_16 

Instruct-Pix2Pixとの比較

どちらも元画像、または生成画像に対するpromptを用意する必要がありません。

pix2pix-zeroの結果
instract-pix2pixの結果

「pix2pix-zero」では事前に用意された「cat.pt」「dog.pt」というのを使用します。

すでに用意されているから「--task_name "cat2dog"」の指定ができます。

つまり用意されていないものへの変換はできないということで汎用性に関してはやや疑問です。

「〇〇.pt」の作り方も公式ページには載っていますが今回は試していません。