はじめに
今回の学習は「DreamBooth fine-tuning of the SDXL UNet via LoRA」として紹介されています。いわゆる通常のLoRAとは異なるようです。以前にサンプル画像を使って学習を行いました。touch-sp.hatenablog.com
今回は自前の画像を学習させてみました。
やりたいこと
今回やりたかったことはファインチューニングしたモデルに「sks robot」というpromptを与えて以下のようなオリジナルのロボットを出力することです。以前Stable Diffusion 1.4で同じことをやっています。今回はSDXLで挑戦です。
touch-sp.hatenablog.com
用紙した画像
36枚の画像を用意しました。学習の実行
$ accelerate config ------------------------------------------------------------------------------------------------------------------------ In which compute environment are you running? This machine ------------------------------------------------------------------------------------------------------------------------ Which type of machine are you using? No distributed training Do you want to run your training on CPU only (even if a GPU / Apple Silicon device is available)? [yes/NO]:NO Do you wish to optimize your script with torch dynamo?[yes/NO]:NO Do you want to use DeepSpeed? [yes/NO]: NO What GPU(s) (by id) should be used for training on this machine as a comma-seperated list? [all]:all ------------------------------------------------------------------------------------------------------------------------ Do you wish to use FP16 or BF16 (mixed precision)? fp16
accelerate launch train_dreambooth_lora_sdxl.py \ --pretrained_model_name_or_path="stable-diffusion-xl-base-1.0" \ --instance_data_dir="robo-images" \ --pretrained_vae_model_name_or_path="madebyollin/sdxl-vae-fp16-fix" \ --output_dir="robo-trained" \ --mixed_precision="fp16" \ --instance_prompt="a photo of sks robot" \ --resolution=1024 \ --train_batch_size=2 \ --gradient_accumulation_steps=4 \ --gradient_checkpointing \ --learning_rate=1e-4 \ --lr_scheduler="constant" \ --lr_warmup_steps=0 \ --max_train_steps=1500 \ --checkpointing_steps=300 \ --seed="0" \ --enable_xformers_memory_efficient_attention \ --use_8bit_adam
結果
promptは「a photo of sks robot on the beach」としました。左から学習ステップ 300→600→900→1200→1500です。学習が進むにつれて狙ったロボット画像に近づいています。
続き
続きの記事を書きました。touch-sp.hatenablog.com