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)でも結構かかるのね……!!
この記事が気に入ったらサポートをしてみませんか?