diffusiondb_2m_first_5k_cannyでControlNet LLLiteを学習

タイトル通りです。自分用メモなので不親切極まりないぜ!

git clone -b sdxl https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts

pip install xformers==0.0.21
pip install bitsandbytes==0.41.1
pip install scipy
pip install --upgrade -r requirements.txt
pip install datasets

sudo apt-get update
sudo apt-get install nano
sudo apt-get install -y libgl1-mesa-dev

accelerate config

- This machine
- No distributed training
- NO
- NO
- NO
- all
- bf16

事前にGoogleドライブにモデルはおいておく

curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=控えておいた文字列" > /dev/null
CODE=$(awk '/_warning_/ {print $NF}' /tmp/cookie)
curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=控えておいた文字列" -o sd_xl_base_1.0_0.9vae.safetensors
nano LoRAtoLLLite.py

LoRAtoLLLite.py

from datasets import load_dataset
import os
from PIL import Image

# 出力ディレクトリを指定
output_dir = "diffusiondb_2m_first_5k_canny"  # ここにデータを保存します

# 画像、ガイドディレクトリを作成
image_dir = os.path.join(output_dir, "image")
guide_dir = os.path.join(output_dir, "guide")
os.makedirs(image_dir, exist_ok=True)
os.makedirs(guide_dir, exist_ok=True)

# データセットをダウンロード
dataset = load_dataset("HighCWu/diffusiondb_2m_first_5k_canny", split="train")  # trainデータセットのすべての行をダウンロード

# データをループして画像とテキストを保存
for i, data_point in enumerate(dataset):
    image = data_point['image']  # 画像を取得
    guide = data_point['guide']  # ガイド画像を取得
    text_list = data_point['text']  # テキストリストを取得

    # テキストリストから文字列を作成
    cleaned_text = ''.join(text_list).replace(", ", " ")

    # 画像を保存
    image_path = os.path.join(image_dir, f"{i+1}.png")
    image.save(image_path)

    # ガイド画像を保存
    guide_path = os.path.join(guide_dir, f"{i+1}.png")
    guide.save(guide_path)

    # テキストを保存(imageフォルダに保存します)
    text_path = os.path.join(image_dir, f"{i+1}.txt")
    with open(text_path, 'w', encoding='utf-8') as text_file:
        text_file.write(cleaned_text)

print("データの保存が完了しました。")
python LoRAtoLLLite.py
nano canny_dataset.toml
[general]
flip_aug = false
color_aug = false
resolution = [1024,1024]

[[datasets]]
batch_size = 16
enable_bucket = false

    [[datasets.subsets]]
    image_dir = "diffusiondb_2m_first_5k_canny/image"
    caption_extension = ".txt"
    conditioning_data_dir = "diffusiondb_2m_first_5k_canny/guide"
nano canny_config.toml
pretrained_model_name_or_path = "sd_xl_base_1.0_0.9vae.safetensors"
max_train_epochs = 10
max_data_loader_n_workers = 4
persistent_data_loader_workers = true
seed = 42
enable_bucket = true
min_bucket_reso = 512
max_bucket_reso = 2048
gradient_checkpointing = true
mixed_precision = "bf16"
save_precision = "bf16"
full_bf16 = false
optimizer_type = "adamw8bit"
learning_rate = 2e-4
xformers = true
output_dir = "models"
output_name = "canny"
save_every_n_epochs = 1
save_state = true
save_model_as = "safetensors"
vae_batch_size = 4
cache_latents = true
cache_latents_to_disk = true
cache_text_encoder_outputs = true
cache_text_encoder_outputs_to_disk = true
network_dim = 64
cond_emb_dim = 32
dataset_config = "canny_dataset.toml"
mkdir models
accelerate launch --num_cpu_threads_per_process 1 sdxl_train_control_net_lllite.py --config_file canny_config.toml

>AssertionError: caption file is empty / キャプションファイルが空です: diffusiondb_2m_first_5k_canny/image/3972.txt
というエラーがでてきたので、kohya_ssのGIT Captioning(microsoft/git-large-textcaps)で分析。

a woman in a blue dress is taking a selfie.

上記のキャプションで3972.txtを上書きし、もう一度コマンドを叩けば学習が開始されました。
とりあえず10epochで様子見するか・・・かーらーのー?9時間。
gpu_1x_a10(メモリ24GB)でも結構かかるのね……!!

この記事が気に入ったらサポートをしてみませんか?