はじめに
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」では事前に用意された「cat.pt」「dog.pt」というのを使用します。
すでに用意されているから「--task_name "cat2dog"」の指定ができます。
つまり用意されていないものへの変換はできないということで汎用性に関してはやや疑問です。
「〇〇.pt」の作り方も公式ページには載っていますが今回は試していません。