速通指南里的步骤已经写的非常详细了,所以我就在这边说明一下自己的一些发现。
注意事项
- 如果在微信自带的浏览器中打开魔搭社区,出现以下这种情况,建议换个浏览器打开。(我刚开始是打不开的,但是后来又可以了)
- 速通指南里的镜像版本是1.16.1
但实际上按步骤进行得到的是1.17.0
- 重启Notebook kernel的两种方法
知识拓展
lora
由于Baseline中使用的是lora微调,所以就讲讲这方面的知识。
Stable Diffusion中的Lora(LoRA)模型是一种轻量级的微调方法,它代表了“Low-Rank Adaptation”,即低秩适应。Lora不是指单一的具体模型,而是指一类通过特定微调技术应用于基础模型的扩展应用。在Stable Diffusion这一文本到图像合成模型的框架下,Lora被用来对预训练好的大模型进行针对性优化,以实现对特定主题、风格或任务的精细化控制。
以下是Baseline中lora微调代码
# 下载模型
from diffsynth import download_models
download_models(["Kolors", "SDXL-vae-fp16-fix"])
#模型训练
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \
--lora_rank 16 \
--lora_alpha 4.0 \
--dataset_path data/lora_dataset_processed \
--output_path ./models \
--max_epochs 1 \
--center_crop \
--use_gradient_checkpointing \
--precision "16-mixed"
""".strip()
os.system(cmd)
-
第一部分:从
diffsynth
库中导入download_models
函数,然后调用该函数下载指定的模型。这里下载了两个模型,分别是"Kolors"和"SDXL-vae-fp16-fix"。 -
第二部分:首先导入
os
模块,然后定义一个字符串cmd
,这个字符串包含了一个用于训练模型的命令行命令。接下来,使用os.system(cmd)
执行这个命令。这个命令会调用DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py
脚本来训练模型,同时传入一些参数,如预训练的UNet路径、文本编码器路径、预训练的FP16 VAE路径等。此外,还设置了LORA rank、LORA alpha、数据集路径、输出路径等参数。最后,设置了最大训练轮数、是否进行中心裁剪、是否使用梯度检查点以及精度等参数。 -
以下是各个参数的解释:
--pretrained_unet_path
: 预训练的UNet模型的路径。--pretrained_text_encoder_path
: 预训练的文本编码器模型的路径。--pretrained_fp16_vae_path
: 预训练的FP16 VAE模型的路径。--lora_rank
: Lora模型的秩(rank)。--lora_alpha
: Lora模型的学习率。--dataset_path
: 数据集的路径。--output_path
: 输出模型的路径。--max_epochs
: 最大训练轮数。--center_crop
: 是否使用中心裁剪。--use_gradient_checkpointing
: 是否使用梯度检查点。--precision
: 使用的精度(16位混合精度)。
描述词的使用
提示词的构成非常关键,它们可以细分为多个类别和角度,以确保生成的图像能够精准地反映用户的需求。以下是提示词使用的具体方法和步骤:
主体
- 详细描述:对主要对象的描述需要具体详细,例如要生成一个女巫,不应仅仅写“A sorceress”,而应更具体地描述她的外观和动作,比如“Emma Watson as a powerful mysterious sorceress, casting lightning magic, detailed clothing”。
画风风格
- 风格描述:添加如“digital painting”(数字绘画)或“oil painting”(油画)等描述词,可以显著改变输出图像的风格。
描述细节
- 细节丰富性:包括场景、环境、服装、道具等各方面的细节,这些丰富的描述能够帮助模型更准确地捕捉需求,例如“1girl, long hair, white hair”表示一个长发白毛的女孩。
提示词顺序及权重
- 按重要性排序:提示词的顺序决定了其在生成图像中的权重,越靠前的词汇影响越大。同时,可以使用括号、冒号等符号调整每个提示词的权重,确保关键要素得到充分体现。
正向反向提示词
- 避免内容描述:除了指明想要的内容,还应明确不希望出现的内容,如“low quality, worst quality, nsfw”等,这有助于优化生成结果。
综合运用技巧
- 结合多种元素:在编写提示词时,尽量综合运用以上技巧,并参考已经成功的案例进行修改和优化。例如,“best quality, masterpiece, 8k, ultra-high resolution”等高质量描述词可以帮助提升输出图像的整体质量。
体验AI生图
运行结束后大家可以先玩一玩,体验一下AI生图,了解其原理。
修改其中的文字描述,执行修改部分的代码块,无需全部重新运行。
最后再重新运行这一代码块,即可打印出修改后的图片。
得到最终结果
总结
不过很明显第一张图片的手存在问题,通过之后几天的学习,代码会得到改进并更加完善。感兴趣的同学可以先玩一玩,深入学习后在baseline的基础上进行改进。