如何用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概念解释 在对图片与其描述(对图片内容的描述)进行训练时,模型会将每个输入的图片 与 图片对应的描述(描述里的每个单词)进行关联。而如果我们是要训练一个特定的对象(例如人),则这种方式是达不到我们预期效果的。 举个例子,假设我们要训练一个“施瓦辛格”的模型。
阅读全文