最近一直在学习使用 Stable Diffusion,目前开始学习 LoRA 训练,试图使用 LoRA 微调预训练模型,实现脸型替换等常用功能
最开始我跑去了 LoRA 的官方仓库,虽然找到了 lora_pti
工具,但是没有理解数据集的准备方式,翻阅代码也没有理解到有用的信息
后面我找到了 SDWebUI
的 Images Processing
工具,它可以裁切缩放原始图像,最重要的是 Use deepbooru for caption
这个选项,可以自动为图片添加标签
尝试执行了之后,发现 SDWebUI
会把所有图像转换为 PNG
,并且把自动生成的标注信息保存在同名的 TXT
文件中
找到了 diffusers
库官方给的示例脚本 train_text_to_image_lora.py
,看了一遍参数,发现传入参数需要 huggingface
的 datasets
数据集格式
翻阅 官方文档,写了一段简单的代码,从 SDWebUI
的 Images Processing
输出目录,生成 metadata.jsonl
文件,构建符合格式的数据集目录
跑了一下,居然爆了我的 3090 涡轮卡的 24G 显存,找到了一片文章,可以优化参数 ,减少内存占用
https://www.cnblogs.com/huggingface/p/17108402.html
export MODEL_NAME="runwayml/stable-diffusion-v1-5"
export OUTPUT_DIR="/sddata/finetune/lora/pokemon"
export HUB_MODEL_ID="pokemon-lora"
export DATASET_NAME="lambdalabs/pokemon-blip-captions"
accelerate launch --mixed_precision="fp16" train_text_to_image_lora.py \
--pretrained_model_name_or_path=$MODEL_NAME \
--dataset_name=$DATASET_NAME \
--dataloader_num_workers=8 \
--resolution=512 --center_crop --random_flip \
--train_batch_size=1 \
--gradient_accumulation_steps=4 \
--max_train_steps=15000 \
--learning_rate=1e-04 \
--max_grad_norm=1 \
--lr_scheduler="cosine" --lr_warmup_steps=0 \
--output_dir=${OUTPUT_DIR} \
--push_to_hub \
--hub_model_id=${HUB_MODEL_ID} \
--report_to=wandb \
--checkpointing_steps=500 \
--validation_prompt="Totoro" \
--seed=1337