メインコンテンツへスキップ
見出し画像

DreamBooth Stable Diffusion を試す

    愛犬の合成画像を生成できる画像生成AI「DreamBooth」の「Stable Diffusion」版を作ってる人がいたので、愛猫の合成画像の生成に挑戦してみました。

    ・DreamBooth Stable Diffusion

    GPUのメモリは32GB以上必要です。

    1. DreamBooth

    「DreamBooth」は、数枚の被写体画像 (例 : 特定の犬) と対応するクラス名 (例 : 犬) を与えてファインチューニングすることで、Text-to-Imageモデルに新たな被写体を学習させる手法です。愛犬の合成画像を生成できる画像生成AIとして話題になりました。

    画像

    オリジナルの「DreamBooth」は「Imagen」をベースにしていますが、この実装は「Textual Inversion」をベースにしています。

    2. DreamBooth Stable Diffusion


    「DreamBooth Stable Diffusion」その名の通り、「DreamBooth」の「Stable Diffusion」の実装です。オリジナルの「DreamBooth」のText-to-Imageモデルは「Imagen」をベースにしていますが、この実装は「Textual Inversion」をベースにしています。

    3. 入力画像の準備

    今回はうちの猫を学習させるため、写真を7枚ほど用意しました。

    画像

    4. 正則化画像の準備

    「DreamBooth」は、正則化のための一連の画像を必要とするため、クラスとなる猫の画像を200枚ほど用意しました。

    画像

    5. DreamBooth Stable Diffusion のインストール

    「Stable Diffusion」のインストール方法と同じです。

    (1) PyTorchのインストール。

    (2) パッケージのインストール。

    # パッケージのインストール
    pip install -e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers
    pip install pytorch_lightning tensorboard==2.8 omegaconf einops taming-transformers==0.0.1 clip transformers kornia test-tube
    pip install diffusers invisible-watermark

    (3) Dreambooth Stable Diffusion のインストール。

    git clone https://github.com/XavierXiao/Dreambooth-Stable-Diffusion.git
    cd Dreambooth-Stable-Diffusion
    pip install -e .
    mkdir inputs reg_inputs outputs checkpoint

    (4) inputsに入力画像、reg_inputsに正則化画像、checkpointにStable Diffusionのチェックポイント(sd-v1-4-full-ema.ckpt)を配置。
    Stable Diffusionのチェックポイントは、以下のサイトで入手できます。

    (5) 「Dreambooth-Stable-Diffusion/configs/stable-diffusion/v1-finetune_unfrozen.yaml」の編集。
    ファインチューニングの各種パラメータを調整します。GPUのメモリが足りないのでその対策になります。

    ・num_workers:2 → 1
    ・batch_frequency
    : 500 → 99999
    ・max_images : 8 → 1 

    学習するステップ数を増やしたい場合は、max_stepsを増やします。

    ・max_steps : 800 → 1000

    学習するほど特徴を捉えますが、プロンプト編集が効きにくくなります。

    6. 学習の実行

    以下のコマンドで学習を実行します。

    python main.py \
        --no-test \
        --base configs/stable-diffusion/v1-finetune_unfrozen.yaml \
        -t \
        --actual_resume ./checkpoint/sd-v1-4-full-ema.ckpt \
        -n cat \
        --gpus 0, \
        --data_root ./inputs \
        --reg_data_root ./reg_inputs \
        --class_word cat

    学習には15分ほどかかります。「./logs/<job_name>/checkpoints」に2つのチェックポイントが保存されます。1つは500ステップで、もう1つは最終ステップです。通常、500ステップで十分に機能します。

    「学習率」のデフォルトは「1.0e-6」です。これは、Dreamboothの論文で「1.0e-5」を使用すると編集性が低下することがわかったためです。

    「Dreambooth」には、「プレースホルダーワード[V]」と呼ばれる識別子が必要になります。Dreamboothの論文では、T5-XXLトークナイザーで珍しい単語を使用しています。この実装では、ランダムな単語「sks」をハードコードしています。「dog」で一般的な犬、「sks dog」で特定の犬を、プロンプトで指示できます。

    7. 推論の実行

    以下のコマンドで推論を実行します。

    python scripts/stable_txt2img.py \
        --n_samples 8 \
        --n_iter 1 \
        --scale 7.0 \
        --ddim_eta 0.0 \
        --ddim_steps 50 \
        --ckpt ./logs/inputs2022-09-11T21-20-34_cat/checkpoints/last.ckpt \
        --prompt "photo of sks cat on the moon " \
        --seed 13167

    「outputs」に月面に行ったうちの猫の画像が生成されます。

    ・photo of sks cat on the moon (左は本物)

    画像

    実際には、猫のブチの模様が安定しないので、まだまだ学習データやパラメータに調整が必要そうです。

    ・photo of sks cat

    画像

    8. 参考

    ・DreamBoothとTextual Inversionの比較

    ・22/09/18 Stable Diffusionの追加トレーニングについてのサーベイ

    ・22/09/26 Stable Diffusion追加学習の記録

    9. 関連



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ