微调:步骤
1 选择预训练模型 如ResNet VGG
2 准备新的数据集
3 构建模型
4 冻结部分模型
5 定义损失函数和优化器
6 微调模型
7 评估模型
8 微调的策略
https://www.zhangzhenhu.com/aigc/dreamBooth.html
dreambooth
(fix the object, then generate the same object in different scene)
DreamBooth 并不是一个独立的图像生成模型,它是一种微调技术,通过对现有的预训练好的图像生成模型进行微调, 进而实现能通过文本 Prompt 控制生成同一个主体的不同场景的图像。
DreamBooth 仅仅是在文本 Prompt 动了手脚,不需要对扩算模型做任何改动
最大的特点是Subject-Driven,针对某一个特定的主体,生成这个主体可以是一个动物或者某个物体,包括人都是可以的
todo: 实际训练一把人像或者狗
LORA
https://juejin.cn/post/7229787490257190973
代码链接
Low-Rank Adaptation of Large Language Models(Lora)是一种为了解决大语言模型微调而开发的技术。它将预训练模型权重冻结,并将可训练的秩分解矩阵注入到Transformer架构的每一层,大大减少了下游任务的可训练参数数量。具体来说,它将原始矩阵分解为两个矩阵的乘积,其中一个矩阵的秩比另一个矩阵的秩低。这时只需要运用低秩矩阵来进行运算,这样,可以减少模型参数数量,提高训练吞吐量,并且在模型质量上表现出色,且不会增加推理延迟。
代码改动: 就把unet attention里面的dense层换成了dense_lora
LoRA的做法是将一个权重矩阵分解为两个矩阵存储,能起到的作用可以用下图表示,参数量由(1000* 2000)减少到(1000* 2+2000*2), 大概300多倍!
controlNet
fixed your position,then generate a lot of same position but not different style pics
它是在预训练的 Stable Diffusion 模型基础上, 为其增加了一个额外的输入,这个输入是另外一张图像,比如姿态图、线稿、草图等等, 这个额外的输入作为 Stable Diffusion 的一个控制条件(condition), 它可以控制 Stable Diffusion 生成的图像结果,使其符合我们输入的条件图像特征。
ControlNet 在训练时,原始 Stable Diffusion 的 Unet 部分是冻住的,参数不更新, 仅仅 ControlNet 部分的参数进行更新
textual inversion
-
目标:与DreamBooth一样,都是想要微调模型生成特定目标或风格的图像
-
方法:通过在vocabulary中添加一个额外的embedding来学习输入的新特征。预训练模型的所有参数都锁住,只有新的embedding被训练