Dreambooth工作原理
什么是Dreambooth
中文名:梦想亭。
Dreambooth 由 Google 研究团队于 2022 年发布,是一种通过向模型注入自定义主题来微调扩散模型(如稳定扩散)的技术。
所谓自定义主体,就是一张照片,但是照片主体要鲜明。比如一张小狗狗照片,那么狗和背景要有很高的区分度。
官方给出的一个例子:左边是三张小狗照片,通过dreamboothed 模型后,就能生成右边不同的照片。
小节下:就是使用少量的照片,给到dreamboothed 模型,dreamboothed 模型就能生成出风格不同的照片来。
为什么不直接训练照片呢?
为什么不直接使用这些照片来训练模型呢?因为少量的照片去训练,会造成过拟合和语言漂移的问题。
语言漂移 (Language drift)
用一个成语来形容它:流变不居。
“Language drift”(语言漂移)是指在机器学习中,训练模型的语言或数据分布与实际应用环境中的语言或数据分布之间的差异或变化。这种差异可能会导致模型在实际应用中表现不佳。
具体来说,语言漂移可能出现在以下情况:
-
时间漂移(Temporal Drift):语言随着时间的推移而变化。例如,社交媒体上的流行词汇、俚语或新兴语言可能会不断变化,而训练模型的数据可能是以前的数据,无法跟上最新的语言趋势。
-
领域漂移(Domain Drift):语言在不同领域之间可能有差异。模型在一个领域中训练,但在另一个领域中使用时,语言和术语可能不同,导致性能下降。
-
地理漂移(Geographical Drift):不同地理位置的语言和方言差异也可能导致漂移。一个地区的特定用语可能在另一个地区无法理解。
为了应对语言漂移,我们通常需要不断更新和微调模型,使用最新的数据以及适应特定领域或地理位置的语言变化。这有助于确保模型在实际应用中保持准确性和效用。
过拟合(Overfitting)
或者叫:过度拟合。
我先用一个成语来形容过拟合:墨守成规。
过拟合(Overfitting)是指在机器学习中,模型过度适应训练数据,导致在测试数据上表现不佳的现象。这通常发生在模型变得过于复杂或在训练数据相对较少的情况下。
过拟合的原因:
-
模型复杂度过高:当模型具有太多参数或太多层,它可以学会在训练数据上几乎完美匹配每个样本,但这不代表它在新数据上泛化良好。
-
训练数据不足:如果可用于训练的数据量有限,模型可能会记住训练数据中的噪声,而不是学习通用规律。
过拟合的表现:
-
在训练数据上表现很好,误差很低,但在测试数据上表现糟糕。
-
模型的预测波动很大,对新数据敏感。
应对过拟合的方法:
-
数据扩充:增加训练数据的数量和多样性,有助于模型更好地泛化。
-
减小模型复杂度:减少模型中的参数数量或层级,以降低模型的复杂性。
-
来限制参数的大小,减少过拟合的风险。
-
早停:在训练过程中监视模型在验证数据上的性能,一旦性能开始下降,就停止训练,以防止过拟合。
Dreambooth 如何解决这些问题呢?
- 先给照片的主体取个个性化或者说具有标识性的名字。比如,狗的名字叫:Devora。
- 分类的预先保留:意思就是,Devora是啥呢?它是条狗,所以它的类目,就是Dog。
具体怎么做呢?
Dreambooth 的训练
我们需要三样东西:
- 一些自定义图像:主体鲜明的照片
- 唯一标识符(unique identifier)
- 一个分类名(class name)
在上面的例子中。唯一标识符是 Devora
。分类就是狗。
然后你需要构建你的 实例提示:
a photo of [unique identifier] [class name]
例如:a photo of Devora dog
和一个类提示
a photo of [class name]
比如: a photo of a dog
总结
Dreambooth是类似LoRA 模型。可以对照片的主体、风格、样式,进行微调的模型。
不过据说没有LoRA模型好,LoRA可是直接对交叉注意力层进行训练调整的。
参考地址:
How to use Dreambooth to put anything in Stable Diffusion (Colab notebook)