
Lambda Labsでコピー機LoRAを学習する
やっぱりSDXLで完璧なコピー機LoRA作れないのは諦めるしかないのかな
— とりにく (@tori29umai) September 19, 2023
network_dim = 32
network_args = ["conv_dim=16"]
にして、90epochぶん回したけど、背景が元絵と重ならない pic.twitter.com/50gDDseJfR
もしかしたらSDXLでコピー機LoRA作るのってめちゃくちゃ時間かかるのでは!?という仮説を元にラムダをぶん回してみる。自前の鯖だと部屋が暑い&うるさくてかなわん。
以下自分用の環境セットアップメモ。
自分用環境構築メモなので説明は簡素です。
①ベースモデルをGoogleドライブにアップロードする
今回はsd_xl_base_1.0_0.9vae.safetensors)もGoogleドライブに配置。

https://drive.google.com/file/d/XXXXXXXXXXXXXXXXXXXXXXXXX/view?usp=sharing
という共有リンクなら、『XXXXXXXXXXXXXXXXXXXXXXXXX』という文字列を控えておきます
②インスタンスを立てる
とりあえず1xA10で。安いので。

③必要なライブラリをインストール
Jupyter LabではTerminalを選択。

git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install -y python3.10
sudo apt-get install -y python3.10-venv
python3.10 -m venv venv
source venv/bin/activate
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
python -m pip install --upgrade pip
rm get-pip.py
deactivate
./setup.sh
sudo apt-get update
sudo apt-get install nano
sudo apt-get install -y libgl1-mesa-dev
sudo apt-get install unzip
sudo apt-get install python3.10-tk
sudo apt-get install -y tk-dev
※unzipは今回(コピー機LoRA作成)の用途だといらないが複数の画像データをまとめたzipを解凍する時に使う(厳格にはコピー機学習法でなくなる)
sudo apt-get install python3.10-tk
sudo apt-get install -y tk-dev
もGUIを使わないからいらんかも(うろ覚え)
④ベースとなるSDモデルをDLする
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
⑤コピー機LoRA用の元画像をアップする
左側のファイルエディタからフォルダを作成し、手動でファイルをアップロード。
kohya_ss/Line/384/00030-1752019098.png
kohya_ss/Line/384/00030-1752019098.txt
をそれぞれ配置する。

⑥設定ファイルを作る。
nano copi-ki.toml
pretrained_model_name_or_path = "sd_xl_base_1.0_0.9vae.safetensors"
output_dir = "models/Line"
sample_prompts = "prompts.txt"
seed = 42
xformers = true
max_data_loader_n_workers = 4
persistent_data_loader_workers = true
gradient_checkpointing = true
resolution = "1024,1024"
train_batch_size = 12
mixed_precision = "bf16"
save_precision = "bf16"
save_every_n_epochs = 10
sample_every_n_epochs = 10
sample_sampler = "k_euler_a"
optimizer_type = "adamw8bit"
unet_lr = 1e-3
network_train_unet_only = true
network_module = "networks.lora"
network_dim = 32
network_args = ["conv_dim=16"]
cache_latents = true
cache_text_encoder_outputs = true
caption_extension = ".txt"
サンプル出力時のpromptファイルも作る
nano prompts.txt
, --w 1024 --h 1024 --d 1
, --w 1024 --h 1024 --d 2
⑦学習を開始
出力先フォルダを作る
mkdir models
mkdir models/Line
source venv/bin/activate
accelerate launch \
--num_cpu_threads_per_process 1 \
"./sdxl_train_network.py" \
--config_file="copi-ki.toml" \
--train_data_dir="Line" \
--output_name="sdxl-copi-ki-Line" \
--max_train_epochs 500
こんだけ回せば少し位は元の絵に近づいてくれる筈・・・!(祈り
結果
SDXLでほぼ完ぺきなコピー機LoRA、280epochで完成?した。
— とりにく (@tori29umai) September 20, 2023
元の線画(赤色)にコピー機LoRAが出力した画像(緑)を乗算した結果がこれ。
A10を17時間40分でできた。請求は見たくない pic.twitter.com/CHx2U9YyFy
しかし・・・
1枚目から順番に
— とりにく (@tori29umai) September 20, 2023
LoRAなし
カラー40、線画40
カラー100、線画100
カラー40、線画280
ううううーん、もしかしてコピー機LoRAのepoch数は一致していた方がいい?
いや、カラーも280回すの正直きついんだが・・・ pic.twitter.com/ezehmmddlR
コピー機学習法で実現するには情報量が多い(差分をとっても純粋な線画成分だけ残らない)のでうまく行かないかと思いましたが、40/40でそこそこ動いてますね……。280でうまく行くか厳しそうな感じもありますが、どうでしょうね……。
— Kohya Tech (@kohya_tech) September 20, 2023
40-40>100-100>280-40
— とりにく (@tori29umai) September 20, 2023
って感じなので多分
40-40>100-100>280-280>280-40
って感じにはなりそうな雰囲気ですね。
うううーん影響を与えるのを抑える線画LoRAは素直にあきらめて、
複数枚の画像セットを40epoch位ぶん回す普通の線画LoRAの方が最終的に良い結果が得られそうです https://t.co/BmBvVma3YR
というオチでした。ちゃんちゃん!!!!!!!!