Stable Diffusion XL LoRA微调 原版未微调的SDXL模型对指定角色的生成不够稳定精确且易生成平均脸。如对于角色“神奇女侠Wonder Woman”的生成容易在服饰上产生多种版本以及生成非特定的平均脸且画风偏向于漫画风格而非真实电影实拍风格如果我们想要模型指定生成我们所需要版本的神奇女侠我们则需要微调。我们的指定版本是演员Gal Gadot在两部电影中的形象《神奇女侠》、《正义联盟》。1.构建自己的微调数据集如图我们在两部电影中截取了66张高质量图像图像质量越高越好我们基本符合每张大于300KB的质量。准备完成图像后非常重要的是提示词的撰写。提示词撰写的要点是强化形象与角色关键词Wonder Woman的绑定这一点通过减少典型特征服饰特点等锚点在提示词中的出现来实现。另一个要点是对于特殊道具武器、绳索、特殊视角侧脸、背面、愤怒、多样环境低光、背光、战场我们需要减少其与主体形象的绑定因此在提示词中我们需要额外提及。多样化的场景有利于模型更加全面地理解角色3D视角、角色的多状态、角色全身的服饰、角色对环境的响应但这些特殊场景并非与角色绑定所以我们需要将其与非角色的提示词绑定以防止在生成过程中的随意触发。以下是部分提示词示例{001}: Wonder Woman, 1girl, solo, upper body {002}: Wonder Woman, 1girl, solo, full body, battlefield {003}: Wonder Woman, 1girl, solo, battlefield {011}: Wonder Woman, 1girl, solo, looking at viewer {012}: Wonder Woman, 1girl, solo, upper body {013}: Wonder Woman, 1girl, solo, smile {021}: Wonder Woman, 1girl, solo, dim lighting, lying {022}: Wonder Woman, 1girl, solo, warzone {023}: Wonder Woman, 1girl, solo, warzone {031}: Wonder Woman, 1girl, solo, from behind {032}: Wonder Woman, 1girl, solo, warzone {033}: Wonder Woman, 1girl, solo, half body {041}: Wonder Woman, 1girl, solo, fighting {042}: Wonder Woman, 1girl, solo, glowing sword, fighting {043}: Wonder Woman, 1girl, solo, lying, fallen, sword, shield2.神奇女侠数据集LoRA微调我们设定训练轮次为80轮batch size2并记录了在训练过程中的loss和推理结果。对于每个阶段的推理可视化我们设置了4个角度的提示词以从多方面观察微调效果并降低偶然性[[prompt.subset]] prompt Wonder Woman, 1girl, solo, upper body, looking at viewer [[prompt.subset]] prompt Wonder Woman, 1girl, solo, full body, standing [[prompt.subset]] prompt Wonder Woman, 1girl, solo, close-up, face, looking at viewer [[prompt.subset]] prompt Wonder Woman, 1girl, solo, upper body, from sideepoch2epoch6epoch30epoch60epoch80可以看到随着训练的进行模型显然从平均脸向演员长相转移风格也转移到了电影实拍场景和画风。但是明显出现了比较严重的过拟合这是LoRA自身存在的原因也于我们的训练策略有关LoRA矩阵学习到了我们微调数据集的风格后在整个推理过程中逐渐占据主导一定程度上挤占了底模型的生成能力包括细节生成、真实性、艺术美感等。3.门控LoRA权重平衡过拟合问题但是好在LoRA的学习并不会改变底模型的参数LoRA本质上是一个表示参数更新的增量矩阵我们可以通过在推理时门控LoRA的大小来平衡底模型的生成能力以及微调数据集的风格体现我们给LoRA矩阵限定了一个门控水平注入量为0是正好对应了完全没有使用LoRA微调的情况即体现了底模型原始的生成能力随着LoRA注入量的提升我们微调的风格在逐步增强但过拟合问题也会慢慢体现我们发现在注入量在0.4~0.6之间是一个很好的平衡点。4.替换底模型验证LoRA的迁移能力我们的微调是在“真人模型”的底模型上进行的我们拿此微调的LoRA直接替换到SDXL的原版模型上观察微调LoRA在迁移时是否有效。使用真人模型作为底模型的时候四种姿态下是否使用LoRA的对比上为LoRA0下为LoRA0.5使用原版模型作为底模型的时候四种姿态下是否使用LoRA的对比上为LoRA0下为LoRA0.5可以发现在将LoRA设置为0.5的时候微调的推理表现结果在其微调的底模型真人模型上是非常好的。但是将底模型换为SDXL原版模型的时候虽然体现了一定的迁移能力演员的面部特征稳定地替代了平均脸但是由于并不是将原版模型作为微调时候的底模型所以LoRA出现了与原版模型的不适配体现在图2和图4出现了明显的模式错误人物生成过多、肢体不协调以及没有把漫画风格成功转移到电影实拍风格。5.测试在更多提示词下的模型推理能力我们希望展现模型在更多提示词上的能力包括微调数据内的如特殊道具剑和盾、绳索、战火以及微调数据外的更复杂动作和场景如骑自行车、看书、在床上睡觉赛博朋克风格、水墨风格、漫画风格、未来机甲风格。微调数据集内的提示词剑盾、绳索、战火可以发现对于微调数据集内的提示词推理重现的效果都比较差与我们训练时所绑定的特殊道具和特殊场景一致性比较差。微调数据集外的提示词风格赛博朋克、水墨画、漫画、未来机甲赛博朋克和水墨画比较成功漫画完全失败未来机甲基本失败。模型可能对于常见场景以及适应角色的场景推理效果比较好。微调数据集外的提示词复杂动作骑自行车、看书、睡觉复杂动作涉及到全身以及主体与道具、环境的交互考验了模型对于角色更强的理解能力。骑自行车对于自行车细节与角色交互部位产生了生成错误看书较好睡觉涉及到角色躺倒的姿态模型理解不够因此产生了肢体生成的错误。