如何用Dreambooth finetune模型进行微调?
摘要:1. Dreambooth Dreambooth可以把你任何喜欢的东西放入Stable Diffusion模型。 1.1. 什么是Dreambooth 最初由谷歌在2022年发布,是对SD模型的fine-tune技术。可以把自己喜欢的东西注
1. Dreambooth
Dreambooth可以把你任何喜欢的东西放入Stable Diffusion模型。
1.1. 什么是Dreambooth
最初由谷歌在2022年发布,是对SD模型的fine-tune技术。可以把自己喜欢的东西注入到SD模型中。
为什么称为Dreambooth?根据谷歌团队的解释:它就像一个照相馆,在对这个东西拍照后,就可以合成到你梦想中的任何地方。
下面是论文中给的一个例子,仅使用这条狗的3张图片(这里为其取名为Devora),dreambooth调优后的模型即可生成这条狗在不同风格下的图片:
1.2. Dreambooth工作原理
为什么不能直接使用这些新图片以及额外的训练step来训练模型呢?因为这样会造成过拟合以及语言漂移language drift,从而导致无法达到目的。
(什么是语言漂移:一个例子是社交媒体上的文本数据。社交媒体的语言使用和风格会随着时间的推移而发生变化,例如,一个词汇在某个时期可能是流行的,但在另一个时期可能已经过时了。如果使用旧数据来训练自然语言处理模型,并在处理新数据时使用该模型,由于语言漂移的影响,模型可能无法正确处理新的社交媒体文本数据。例如,一个过时的模型可能无法正确处理最新的俚语或缩写词。因此,为了解决语言漂移问题,需要定期更新模型以适应新的语言使用和风格。)
Dreambooth解决这两个问题的方式:
使用一个很罕见的词来表示新的对象,这样它在模型中一开始就没有太多意义
保留先前的类别:为了保留类别的含义,例如,为了保留原始模型中“dog”的含义,模型被微调以在保留类别(狗)的图像生成的同时注入主题(Devora)。
除了Dreambooth外,还有另一种类似的技术叫textual inversion。它们之间的区别是:Dreambooth会微调整个模型,而textual inversion是注入一个新的单词(而不是重复使用一个罕见的单词),并且只微调模型的text embedding部分。
2. 训练Dreambooth准备
训练Dreambooth需要准备:
几张训练图片
一个特定的标识(unique identifier)
一个类别名(class name)
在上面那个例子中,标识是“Devora”,类别是“dog”。
然后构建我们的提示词:
a photo of [unique identifier] [class name]
(例如a photo of Devora dog)
以及类别提示词:
a photo of [class name]
(例如a photo of a dog)
2.1. 为webUI安装Dreambooth插件
可能会遇到下面的问题:
assert not shared.cmd_opts.disable_extension_access, "extension access disabled because of command line flags"
在启动命令里加上--enable-insecure-extension-access 即可解决。
2.2. 准备图片与模型
首先准备一个物品的几张图片,使用不同的角度拍摄。最好是不同背景,让模型可以区分背景。
我们使用3张兔子图片:
首先将它们裁剪为512 x 512 大小,可以使用工具BIRME
然后把图片上传到web UI所在机器。
2.3. 创建模型
在Dreambooth tab里,先创建一个模型,输入模型的名称,并选择要从哪个checkpoint开始进行训练。
(如果是要从Hagging Face加载模型,也可以指定模型的url与token。URL的格式应为‘runwayml/stable-diffusion-v1-5’这种。原始checkpoint会提取到models/dreambooth/MODELNAME/working目录)
然后点击Create,耗时1-2分钟左右。创建完毕后,UI会显示新模型目录已经设置好。
选择刚创建好的模型:
3. Class概念解释
在对图片与其描述(对图片内容的描述)进行训练时,模型会将每个输入的图片 与 图片对应的描述(描述里的每个单词)进行关联。而如果我们是要训练一个特定的对象(例如人),则这种方式是达不到我们预期效果的。
举个例子,假设我们要训练一个“施瓦辛格”的模型。
