AI 绘画核心技术与实战
南柯
某头部大厂图像团队技术 leader,高级算法专家
6373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
AI 绘画核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

19| 实战项目(三):动手做一个自己的LoRA模型

你好,我是南柯。
上一讲我们已经学习了 LoRA 的算法原理,搞懂了引入 LoRA 技术减少可学习参数的技巧。
如今 LoRA 几乎家喻户晓,我们在 Civitai 或者 Hugging Face 上,也能找到各种各样的 LoRA 模型。这些 LoRA 模型既可以代表人物形象、动物形象或者某个特定物体,也可以代表水彩风、油画风这种特定的风格。
这一讲我们不妨自己动手,从零开始训练自己的 LoRA 模型。我们会以宝可梦生成和彩铅风格生成为例,完成两个模型的训练,借此探索 LoRA 模型表达内容和表达风格的能力如何实现。

如何训练一个 LoRA

在我们动手训练 LoRA 前,我先为你预告一下整个流程。
对于 LoRA 的训练,我们首先需要考虑两个问题:数据集获取和基础模型选择。幸运的是,我们已经熟悉了 Hugging FaceCivitai 这两个强大的开源社区,可以免费获取到海量数据集和基础模型。

数据准备

我们可以使用 Hugging Face 上现有的数据集,完成宝可梦的生成任务。这个数据集中包含 800 多张训练图片。从后面的数据集说明中你可以看到,每一张图,我们都可以获取到它对应的 prompt。
首先,我们可以通过后面这两行代码下载并加载数据集。
from datasets import load_dataset
dataset = load_dataset("lambdalabs/pokemon-blip-captions", split="train")
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何从零开始训练自己的LoRA模型,以宝可梦生成和彩铅风格生成为例,探索了LoRA模型表达内容和表达风格的能力。文章首先介绍了训练LoRA模型的两个关键问题:数据集获取和基础模型选择。对于数据准备,作者提到了使用现有数据集或者自己的图片进行训练,并展示了如何加载和可视化数据集中的图片和对应prompt。对于基础模型选择,作者强调了选择与训练目标风格接近的基础模型的重要性,并提供了下载基础模型的方法。 接着,文章详细介绍了LoRA训练过程的核心代码逻辑,包括使用VAE模块将图像编码到潜在空间、随机噪声和加噪到第t步、使用CLIP将文本描述作为输入等步骤。作者还解释了训练LoRA模型的核心代码,以UNet模型中的交叉注意力模块投影矩阵为例,详细阐述了训练过程中需要优化的部分是矩阵A和矩阵B。 此外,文章还介绍了如何使用Colab进行LoRA训练,以及如何将训练得到的LoRA模型应用到WebUI上。作者通过实例讲解了如何准备训练数据、图像prompt生成、LoRA训练、LoRA本地使用、超分功能修复生成效果的完整流程。同时,还提到了如何组合使用不同的LoRA模型以及与其他基础模型搭配使用时需要谨慎处理的问题。 总的来说,本文为读者提供了一手的实战经验和技术指导,深入探讨了LoRA模型的训练流程和应用。通过对数据准备、基础模型选择和LoRA训练过程的详细讲解,读者可以快速了解并掌握训练自己的LoRA模型的关键步骤和技术要点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 绘画核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • Geek_7401d2
    老师你好,看完后还是不知道如何入手训练,有几个问题 1、选择素材图片时要用多少张,什么样的图片合适,比方说训练某个人物的Lora时,选择该人的图片时要选择什么样的,全身照、半身照、面部特写等各占多少合适 2、Lora 模型训练多少轮(num_epochs)合适 3、训练完会有多个Lora模型,选择哪一个呢,选最后一轮训练的吗 4、我理解训练lora模型的原理是一样的,为什么同样的素材、用同样的基础模型,用不同的代码会出现不同的训练效果,文中用到的这两个代码库差异在哪呢

    作者回复: 你好。针对问题1,以人物LoRA为例,我的经验是以半身照为主,可以混合一些全身照和面部特写,不用混合很多。图片的数量越多越好,推荐不少于10张。针对问题2,训练步数可以根据效果来定,一般而言,300-500步效果会比较好,训练步数过多模型会出现过拟合,多样性能力会变差。针对问题3,咱们代码中有可视化看每一轮次的训练效果,可以挑选一个效果好的模型。一般来说,选择300-500步训练后的模型,不要选择步数太少的模型。针对问题4,diffusers的代码中可调整的参数非常少,数据增广较少、text_encoder学习率等指标设置也不够灵活等。对于开发者而言,可以以diffusers代码仓为基础,逐渐把这些特性加进去,模型的效果会有提升。希望能帮助到你。

    2023-08-31归属地:北京
    4
  • cmsgoogle
    使用diffusers库训练Lora,文中提到:耐心等待 20 分钟,我们就完成了 LoRA 模型的训练。 需要说明下是什么环境,如果再colab上使用T4服务器,大约要1个小时10多分钟。

    作者回复: 你好,感谢你的反馈。训练用时因计算资源而异,如果需要下载模型还会受网速影响,应该加一些说明。我们会根据反馈进行调整。

    2023-09-16归属地:美国
    1
  • 王大叶
    老师好,请教两个问题: 1. 对于人像 LoRA 的训练,精细化的打标是否有必要,对 LoRA 质量的影响会很大吗? 2. 实验发现用 deepbooru 给写实人像打标不是很准确,比如经常会把男性图片标注成 1girl,用 BLIP 打标信息又比较少,无法完全涵盖画面的内容。请教人像 LoRA 训练有什么推荐的打标方法吗?

    作者回复: 你好。针对第一个问题,我的看法是精细化打标不是很有必要,只需要保证发型、眼镜、服饰颜色这些最基本的信息被涵盖即可,很多时候训练人像LoRA的Prompt甚至是“A photo of a <sks> man”这种粗糙的描述。针对第二个问题,把男性图片标注成 1girl是由于DeepDanbooru的分类精度不够导致的,Midjourney有一个描述功能,写出的Prompt比较准确、信息也比较丰富,可以试试。也可以试试Qwen-VL这种多模态大模型的Caption效果,应该也不错。希望能帮助到你。

    2023-09-13归属地:北京
    1
  • 易企秀-郭彦超
    Y=(W+weight1​∗A1​⋅B1​+weight2​∗A2​⋅B2​)⋅X 老师你好,按照上面公式权重融合的过程是加权融合,W的值在相同维度上会同时受到A和B的影响,最终导致结果既不像A也不像B, 有没有一种累计方式 避免A和B的互相影响? 比如多lora融合前先merge, 根据CNN的思想, 取d/2的A模型参数量 与d/2的B模型参数量 合并成新的d*d lora模型,新的模型保留了原始的A 和 B的部分参数 并没有累加A和B

    作者回复: 你好。这是个很有意思的想法,更直观的,我们可以训练两个LoRA,每个LoRA影响不同的UNet模型Attention模块,这样融合的时候便不会在权重上产生叠加效应。但有一个问题,使用这种方式,即使我们能够将不同的LoRA权重解耦开,最终得到的效果大概率还是两个LoRA的中间态,因为这些LoRA都对图像生成的过程都产生了影响,这些影响是叠加还是冲突无法预测。

    2023-08-31归属地:北京
    2
    1
  • Geek_ca0b19
    老师好我有一个问题 如果采用五六张类似风格画风的图,可以通过这几张图训练出一个代表类似风格的lora吗?

    作者回复: 你好!使用5-6张图是可以训练出一个风格化LoRA模型的,需要保证这些图片的风格一致。我们可以在MidLibrary上获取很多风格图片:https://midlibrary.io/styles。

    2023-09-14归属地:广东
  • 石沉溪洞
    老师您好,请问这个能支持将基本模型改为SDXL吗?谢谢您

    作者回复: 你好,将基础模型更换为SDXL需要在代码中做出一定改动,可以参考这个Colab:https://github.com/Linaqruf/kohya-trainer/blob/main/kohya-LoRA-trainer-XL.ipynb

    2023-09-14归属地:广东
  • @二十一大叔
    老师,lora训练可以写一个本地运行的python版本吗,colab上看的不是很明白

    作者回复: 你好。Colab的代码在加餐篇中我们计划继续深扒。当前如果想理解lora的训练细节,直接看这个脚本就可以:https://github.com/huggingface/diffusers/blob/main/examples/text_to_image/train_text_to_image_lora.py。我们用的Colab在这份代码的基础上,增加了BLIP、数据增广的功能,底层逻辑是一样的。希望能帮助到你,欢迎多交流讨论。

    2023-09-05归属地:上海
  • 陈问渔
    请问 make_captions.py 的代码在哪看呀?

    作者回复: 你好,make_captions这个脚本可以看这个链接:https://github.com/Linaqruf/kohya-trainer/blob/main/finetune/make_captions.py。这个脚本完成两件事情:下载BLIP模型,为每张图生成prompt。

    2023-09-05归属地:上海
    2
  • Alex
    最新的sd 的bweui 的additional networks 是已经集成了么?我不太确定 我安装了一下 没有显示这个选项 请老师指教下

    作者回复: 你好,additional network这个插件需要单独安装,可以按照这个说明来安装:https://github.com/kohya-ss/sd-webui-additional-networks。

    2023-09-03归属地:江苏
  • peter
    是否有安卓手机上可以使用绘画AI?

    作者回复: 你好,应用商店里有不少AI绘画APP,可以检索一下。当前模型推理需要较多算力,所以主要还是通过调用各种云服务来完成绘画过程。希望能帮助到你。

    2023-08-31归属地:北京
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部