赞
踩
论文:https://arxiv.org/abs/2212.04488
代码:https://github.com/adobe-research/custom-diffusion
虽然生成模型可以从大规模数据库中学到高质量的概念图像,但用户通常希望能够合成他们自己概念的实例(例如家人、宠物或物品)。在给定少量示例的情况下,我们能否教会模型快速学习新的概念?此外,我们能否将多个新概念组合在一起?我们提出了一种名为Custom Diffusion的有效方法,用于增强现有的文本到图像模型。我们发现,仅通过优化文本到图像条件机制中的少量参数就足以表示新概念,同时实现快速调整(约6分钟)。此外,我们可以通过闭式约束优化来联合训练多个概念或将多个经过微调的模型合并为一个模型。我们的经过微调的模型能够在新颖的环境中生成多个新概念的变体,并将它们与现有概念无缝地组合在一起。我们的方法在定性和定量评估中优于或与几个基线方法和其他同时进行的研究相媲美,同时具有内存和计算效率。
最近发布的文本到图像生成模型[59, 63, 66, 86]标志着图像生成领域的重要突破。用户只需通过输入文本提示,就能生成前所未有质量的图像。这种系统能够生成各种各样的物体、风格和场景,似乎“无所不能”。
然而,尽管这些模型具备多样且通用的能力,用户通常希望能够合成自己个人生活中的特定概念。例如,家人、朋友、宠物,或者是个人物品和地点,如新沙发或最近参观的花园,都是有趣的概念。由于这些概念是个人性质的,因此它们在大规模模型训练期间是未见过的。事后通过文本来描述这些概念不便捷,并不能以足够准确性生成个人化的概念。
这促使我们需要对模型进行定制。在给定少量用户提供的图像的情况下,我们能否通过增强现有的文本到图像扩散模型以添加新概念(例如他们的宠物狗或者类似于图1中展示的“月亮门”)?经过微调的模型应当能够将其与现有概念进行泛化和组合,生成新的变体。这其中存在一些挑战:首先,模型往往会遗忘[15, 40, 58]或改变[39, 46]现有概念的含义,例如在添加“月亮门”概念时可能会丧失“月亮”的含义。其次,模型容易过度拟合少量训练样本,减少采样的多样性。
此外,我们还研究了一个更具挑战性的问题,即组合微调,即能够超越单个概念的微调并将多个概念组合在一起,例如图1中展示的宠物狗站在月亮门前。
最近的研究已经探索了改进组合生成的方法[45]。但是,组合多个新概念会带来额外的挑战,如混合未见过的概念。
在本研究中,我们提出了一种名为Custom Diffusion的文本到图像扩散模型微调技术。我们的方法具有计算和内存高效的特点。为了克服上述挑战,我们确定了模型权重的一个小子集,即交叉注意力层中从文本到潜在特征的关键映射和值映射[6, 76]。
仅微调这些权重就足以通过新概念来更新模型。为了防止模型遗忘,我们使用一小组与目标图像具有相似描述的真实图像作为目标图像。
我们还引入了微调过程中的增强技术,这样可以加快收敛速度并改善结果。为了注入多个概念,我们的方法支持同时训练或分开训练,然后合并它们。
我们基于Stable Diffusion[2]构建了我们的方法,并在各种数据集上进行了实验,即使只有四个训练图像。
对于添加单个概念,我们的方法显示出比现有研究和基线方法更好的文本对齐度和视觉相似度。更重要的是,我们的方法能够高效地组合多个新概念,而同时进行的方法往往会遇到困难,常常省略一个概念。最后,我们的方法只需要存储少量参数(模型权重的3%),并且减少微调时间(在2个A100 GPU上仅需6分钟,比同时进行的方法快2-4倍)。请在我们的网站上找到代码和数据。
深度生成模型
生成模型旨在根据一组训练样本合成数据分布的样本。这些模型包括GANs [10,24,34]、VAEs [36]、自回归模型 [18, 61, 75]、基于流的模型 [16, 17] 和扩散模型 [14, 29, 71]。为了提高可控性,这些模型可以以类别 [10, 68]、图像 [32, 48, 80, 93] 或文本提示 [50, 73, 94] 为条件进行建模。我们的工作主要与文本条件下的合成 [47] 相关。虽然早期的工作 [31, 62, 73, 85, 87, 94] 仅限于少数类别 [43, 77],但最近的文本到图像模型 [14, 50, 59, 60, 63, 66, 86] 在大规模数据上进行训练,已经展示了非凡的泛化能力。然而,这种模型本质上是通才,很难生成个人玩具或罕见类别等特定实例,例如“月门”。我们的目标是将这些模型调整为新概念的专家。
图像和模型编辑
生成模型可以生成随机图像,但用户通常希望编辑单个具体图像。一些研究旨在利用生成模型(如GANs [3–5, 55, 92] 或扩散模型 [12, 35, 50])的能力进行编辑。具体图像的表示是一个挑战,这些方法使用逐图像或逐编辑的优化方法。与之密切相关的一类工作是直接编辑生成模型 [7,22,78]。尽管这些方法旨在定制GANs,但我们的重点是文本到图像模型。
迁移学习
有效地生成整个图像分布的一种方法是利用预训练模型,然后使用迁移学习 [22, 25, 41, 44, 49, 51–53, 81, 82, 89]。例如,可以将逼真的人脸转化为卡通风格 [22,41,49,52,53]。为了适应只有少数训练图像的情况,通常需要使用高效的训练技术 [33, 38, 67, 74, 90, 91]。与这些工作不同,这些工作侧重于调整整个模型以适应单个领域,而我们希望在不发生灾难性遗忘的情况下学习多个新概念 [20, 37, 40, 42, 58]。通过保留大规模预训练中捕获的数百万个概念,我们可以将这些新概念与现有概念组合起来进行合成。相关地,一些方法 [23, 30, 56, 70] 提议在判别性设置中训练适配器模块或低秩更新大规模模型。相反,我们调整了少量现有参数,不需要额外参数。
调整文本到图像模型
与我们的目标类似,两个同时进行的工作,DreamBooth [65] 和Textual Inversion [21],通过传输学习将文本到图像扩散模型 [63, 66] 进行微调,其中一个通过微调所有参数 [65],另一个引入和优化单词向量 [21]。我们的工作在几个方面与它们不同。首先,我们的工作处理了挑战性的情况:同时微调多个概念,而并行工作则存在困难。其次,我们仅微调了部分交叉注意力层参数,这极大地减少了微调时间。我们发现这些设计选择能够产生更好的结果,得到了自动度量和人类偏好研究的验证。
我们提出的模型微调方法如图2所示,只更新模型的交叉注意力层中的一小部分权重。此外,我们使用一组真实图像作为正则化集,以防止对目标概念的少量训练样本过拟合。在本节中,我们详细解释了我们的设计选择和最终算法。
图2. 自定义扩散。给定新概念的图像,我们检索与给定概念具有相似说明的真实图像,并创建用于微调的训练数据集,如左图所示。为了表示普通类别的个人概念,我们引入了一个新的修饰符标记 V∗,用在类别名称的前面。在训练过程中,我们优化扩散模型交叉注意力层中的键(key)和值(value)投影矩阵,同时也优化修饰符标记。检索到的真实图像在微调过程中被用作正则化数据集。
给定一个预训练的文本到图像扩散模型,我们旨在在该模型中嵌入一个新的概念,只需提供四个图像和相应的文本描述。微调后的模型应保留其先前知识,以便根据文本提示生成新的概念。这可能具有挑战性,因为更新后的文本到图像映射可能很容易过度拟合仅有的几个可用图像。
在我们的实验中,我们使用稳定扩散[2]作为我们的骨干模型,该模型是建立在潜态扩散模型(LDM)[63]上的。LDM首先使用VAE [36]、PatchGAN [32]和LPIPS [88]的混合目标将图像编码为潜态表示,以便运行编码器解码器可以恢复输入图像。然后他们使用交叉注意力在潜态表示中注入文本条件,训练一个扩散模型[29]。
扩散模型的学习目标。扩散模型[29, 71]是一类生成模型,旨在使用pθ(x0)近似原始数据分布q(x0):
其中ϵθ是模型的预测结果,wt是损失函数上的时间相关权重。模型在时间步t上进行条件训练,并且还可以在任何其他模态c(例如文本)上进一步进行条件训练。在推理过程中,使用模型[72]对固定时间步的随机高斯图像(或潜态)xT进行去噪。
对于微调目标,一个朴素的基准方法是更新所有层以使给定的文本-图像配对在公式2中的损失最小化。这在大规模模型上计算效率低下,并且在只有少量图像用于训练时很容易导致过拟合。因此,我们旨在确定一组足够进行微调任务的最小权重集合。
图3,分析在微调期间更新所有网络权值时权值的变化。交叉注意层的平均变化明显高于其他层,尽管它们只占总参数计数的5%。
其中Wq、Wk和Wv将输入映射到查询、键和值特征,而d’是键和查询特征的输出维度。然后,潜态特征通过注意力模块的输出进行更新。微调的任务旨在更新从给定文本到图像分布的映射,而文本特征仅作为交叉注意力模块中Wk和Wv投影矩阵的输入。因此,在微调过程中,我们建议只更新扩散模型的Wk和Wv参数。如我们的实验所示,这足以使用新的文本-图像配对概念来更新模型。图4显示了交叉注意力层的一个实例和可训练参数。
文本编码。给定目标概念图像,我们还需要一个文本说明。如果存在文本描述,例如“moongate”,我们将其用作文本标题。对于个性化相关的用例,其中目标概念是一般类别的唯一实例(例如宠物狗),我们引入一个新的修饰符令牌嵌入,即V* dog。在训练过程中,V * 使用罕见的令牌嵌入进行初始化,并与交叉注意力参数一起进行优化。在训练过程中使用的示例文本标题是“一只V*狗的照片”。
正则化数据集。在目标概念和文本标题配对上进行微调可能会导致语言漂移问题[39, 46]。例如,训练“moongate”会导致模型遗忘“moon”和“gate”与之前训练的视觉概念的关联,如图5所示。类似地,对V* tortoise plushy的个性化概念进行训练可能会泄露,导致所有带有plushy的示例都生成特定的目标图像。为了防止这种情况发生,我们从LAION-400M [69]数据集中选择了一组200个正则化图像,这些图像与目标文本提示在CLIP [57]文本编码器特征空间中的相似度高于0.85的阈值。
多个概念的联合训练。对于使用多个概念进行微调,我们将每个单独概念的训练数据集组合起来,并与我们的方法一起进行联合训练。
为了表示目标概念,我们使用不同的修饰符令牌V* i,用不常见的令牌进行初始化,并与每一层的交叉注意力键和值矩阵一起进行优化。如图7所示,将权重更新限制在交叉注意力键和值参数上,相对于像DreamBooth这样对所有权重进行微调的方法,可以获得更好的两个概念组合结果。
我们在附录B中提供了完整的推导过程。与联合训练相比,我们基于优化的方法更快(约2秒),前提是每个单独微调的模型已存在。如第4.2节所示,我们提出的方法可以在同一场景中生成两个新的概念,并且生成结果连贯。
训练细节。我们使用我们的方法进行单概念训练250步,在两个概念联合训练时进行500步,批量大小为8,学习率为8 × 10−5。在训练过程中,我们还随机调整目标图像的大小,范围从0.4倍到1.4倍,并根据调整比例相应地添加“非常小”、“远离”、“放大”、“特写”的提示文本。我们仅对有效区域的损失进行反向传播。这样可以加快收敛速度并改善结果。我们在附录E中提供了更多的训练细节。
在这一节中,我们展示了我们的方法在多个数据集上的结果,包括单概念微调和两个概念组合在Stable Diffusion模型[2]上的结果。
数据集。我们在十个目标数据集上进行实验,涵盖了各种类别和不同数量的训练样本。
这些数据集包括两个场景类别、两个宠物和六个物体,如图8所示。我们最近还引入了一个新的数据集,CustomConcept101,包含101个概念,并在附录A和网站上展示了我们在该数据集上的结果。
评估指标。我们使用以下指标评估我们的方法:(1)图像对齐,即生成图像与目标概念的视觉相似度,使用CLIP图像特征空间中的相似度进行衡量[21];(2)生成图像与给定提示文本的文本对齐,使用CLIP特征空间中的文本-图像相似度进行衡量[27];(3)在来自LAION-400M的500张真实图像的验证集上使用KID [8]来衡量对目标概念(例如V* dog)的过拟合和对现有相关概念(例如dog)的遗忘;(4)我们还进行了与基准方法的人类偏好研究。除非另有说明,我们使用200步的DDPM采样器和尺度6。用于定量和人类评估的提示文本在我们的网站上显示。
基准方法。我们将我们的方法与两个同时进行的工作DreamBooth [65](第三方实现[84])和Textual Inversion [21]进行比较。DreamBooth微调扩散模型中的所有参数,同时冻结文本转换器,并使用生成的图像作为正则化数据集。每个目标概念由唯一的标识符表示,后跟其类别名称,即“[V] category”,其中[V]是文本标记空间中很少出现的标记,并且在微调过程中不进行优化。Textual Inversion为每个新概念优化一个新的V标记。我们还将其与具有竞争力的基线Custom Diffusion(带微调全部参数)进行比较,在我们的方法中,我们微调U-Net [64]扩散模型中的所有参数,以及V标记嵌入。我们在补充材料中提供了所有基准方法的实现细节。
定性评估。我们对每个微调模型进行了一系列具有挑战性的提示测试。包括在新场景中生成目标概念,在已知艺术风格下生成目标概念,在另一个已知物体上组合目标概念,以及改变目标概念的某些属性,例如颜色、形状或表情。图6展示了我们的方法、DreamBooth和Textual Inversion的示例生成结果。我们的方法Custom Diffusion在捕捉目标物体的视觉细节的同时,具有更高的文本-图像对齐度。它在表现上优于Textual Inversion,并且与DreamBooth持平,同时训练时间和模型存储空间较少(速度约为传统方法的5倍,存储空间仅为75MB,而传统方法为3GB)。
定量评估。我们针对每个数据集的20个文本提示和每个提示的50个样本进行评估,共生成了1000张图像。我们在所有方法中使用50个步骤的DDPM采样和无分类器引导尺度为6。如图8所示,我们的方法在性能上优于并发方法[21, 65]。此外,与我们提出的基准方法(在扩散模型中微调所有权重)相比,Custom Diffusion在计算和时间效率上表现相当。表1还展示了每个微调模型在参考数据集上生成图像的KID,其标题与微调概念相似。
我们观察到,我们的方法的KID比大多数基准方法都要低,这表明对目标概念的过度拟合较少。
在附录C中,我们展示了可以压缩更新的矩阵,以进一步减少模型存储空间。
计算需求。我们的方法的训练时间约为6分钟(2个A100 GPU),相比之下,Ours(包含所有微调)需要20分钟(4个A100s),Textual Inversion需要20分钟(2个A100s),DreamBooth需要约1小时(4个A100s)。此外,由于我们只更新了75MB的权重,因此我们的方法对于存储每个概念模型的内存需求较低。我们在所有情况下都保持批处理大小为8。
我们展示了在以下五对情境中生成两个新概念的结果:(1) 月门+狗,(2) 猫+椅子,(3) 木盆+猫,(4) 木盆+花,以及 (5) 桌子+椅子。我们将我们的方法与同时在两个数据集上进行训练的DreamBooth进行比较,使用每个概念的两个不同的[V1]和[V2]标记。对于Textual Inversion,我们使用相同句子中每个概念的单独微调标记进行推理。我们在Figure 8和Table 1中对使用8个提示进行每种组合设置的400张图像进行了与基线方法的比较。我们还将我们的方法与按顺序训练两个概念或微调所有权重的基线进行了比较。除了"桌子+椅子"的组合外,我们的方法在所有组合中表现更好,而所有方法在该组合中的表现都差不多,只有Textual Inversion的表现较差,这也在附录的Figure 22中显示出来。这表明了仅微调交叉注意力参数对于组合的重要性。在按顺序训练的情况下,我们观察到对第一个概念的遗忘。
Figure 7展示了我们提出的两种方法和DreamBooth的样本图像。正如我们所看到的,我们的方法能够以连贯的方式在同一场景中生成两个物体,并与输入的文本提示高度对齐。我们在我们的网站上展示了更多样本。
我们使用亚马逊众包平台(Amazon Mechanical Turk)进行人类偏好研究。我们对我们的方法与DreamBooth、Textual Inversion和Ours (w/ fine-tune all)进行了配对测试。对于文本对齐,我们在同一提示上展示每种方法(我们的方法与基线方法)生成的两个结果,并提问:“哪个图像与文本更一致?”。
对于图像对齐,我们展示相关概念的2-4个训练样本以及生成的图像(与文本对齐研究中相同),并提问:“哪个图像更好地代表了目标图像中显示的物体?”。
每个问卷我们收集了800个回答。如表2所示,在单概念和多概念中,我们的方法优于基线方法,甚至比Ours (w/ fine-tune all)方法更好,这表明仅更新交叉注意力参数的重要性。
在本节中,我们对我们的方法的各个组成部分进行了剔除实验,以展示其贡献。我们在与第4.1节相同的设置上评估每个实验。我们在我们的网站上展示了剔除实验的样本生成结果。
利用生成的图像作为正则化(Ours w/ Gen)。如3.1节所述,我们检索相似类别的真实图像和标题,并在微调过程中将其用作正则化。
另一种创建正则化数据集的方法是利用预训练模型[65]生成图像。我们将我们的方法与这个设置进行了比较,即对于目标概念“类别”,使用提示、{类别}的照片生成图像,并在表3中展示结果。使用生成的图像可以在目标概念上获得类似的性能。
然而,这显示出过拟合的迹象,通过在类似类别真实图像的验证集上使用KID进行衡量。
没有正则化数据集(Ours w/o Reg)。我们展示了当不使用正则化数据集时的结果。我们将模型的训练迭代次数减半(与训练过程中目标图像的数量相同)。表3显示,该模型的图像对齐稍差,并且倾向于遗忘已有的概念,从验证集上的高KID值可以看出。
没有数据增强(Ours w/o Aug)。如3.2节中提到的,我们通过在训练过程中随机调整目标图像的大小,并在文本中添加与大小相关的提示(例如“非常小”)来进行数据增强。在这里,我们展示了不使用这些增强的效果。模型的训练步数相同。表3显示,没有数据增强会导致与目标图像的视觉相似性降低。
基于风格进行微调。我们在图9中展示了我们的方法也可以用于具有特定样式的微调。
我们将目标图像的文本提示更改为以V∗艺术的风格绘制的一幅画[21]。正则化图像是通过与“艺术”具有高相似度的标题进行检索的。
利用经过微调的模型进行图像编辑。类似于预训练模型,我们经过微调的模型也可以通过现有的图像编辑方法进行使用。我们在图10中展示了使用Prompt-to-prompt [26]方法的一个例子。
综上所述,我们提出了一种方法,用于在新概念、类别、个人物体或艺术风格上对大规模的文本到图像扩散模型进行微调,只需几个图像示例即可。我们的计算效率高的方法可以在新的上下文中生成经过微调的概念的新变体,同时保持与目标图像的视觉相似性。此外,我们只需要保存一小部分模型权重。此外,我们的方法还可以在同一场景中连贯地组合多个新概念。
如图11所示,难以组合的情况,例如一只宠物狗和一只宠物猫,仍然具有挑战性。在这种情况下,预训练模型也面临类似的困难,我们的模型继承了这些限制。此外,将三个或更多的概念组合在一起也具有挑战性。我们在附录C中展示了更多的分析和可视化结果。
git clone https://github.com/adobe-research/custom-diffusion.git
cd custom-diffusion
git clone https://github.com/CompVis/stable-diffusion.git
cd stable-diffusion
conda env create -f environment.yaml
conda activate ldm
pip install clip-retrieval tqdm
Our code was developed on the following commit #21f890f9da3cfbeaba8e2ac3c425ee9e998d5229
of stable-diffusion.
Download the stable-diffusion model checkpoint
wget https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt
For more details, please refer here.
Dataset: we release some of the datasets used in paper here.
Images taken from UnSplash are under UnSplash LICENSE. Moongate dataset can be downloaded from here.
Models: all our models can be downloaded from here.
执行一些采用看一下:
## sample
python sample.py \
--prompt "V*tortoise plushy sitting at the beach with a view of sea" \
--delta_ckpt "/ssd/xiedong/home/InST-main/custom-diffusion-main/models/delta_tortoise_plushy.ckpt" \
--ckpt "/ssd/xiedong/home/InST-main/InST/models/sd/sd-v1-4.ckpt"
## sample
python sample.py \
--prompt "V* cat in times square" \
--delta_ckpt "/ssd/xiedong/home/InST-main/custom-diffusion-main/models/delta_cat.ckpt" \
--ckpt "/ssd/xiedong/home/InST-main/InST/models/sd/sd-v1-4.ckpt" \
--seed 1234
日志
on model from a BertForPreTraining model). - This IS NOT expected if you are initializing CLIPTextModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model). torch.Size([1, 768]) loading new embedding torch.Size([49408, 768]) data: 0%| | 0/1 [00:00<?, ?it/sV*tortoise plushy sitting at the beach with a view of sea | 0/1 [00:00<?, ?it/s] Data shape for DDIM sampling is (6, 4, 64, 64), eta 1.0 Running DDIM Sampling with 200 timesteps DDIM Sampler: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 200/200 [01:02<00:00, 3.19it/s] Sampling: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [01:04<00:00, 64.25s/it] data: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [01:05<00:00, 65.06s/it] Your samples are ready and waiting for you here: /ssd/xiedong/home/InST-main/custom-diffusion-main Enjoy.
需要用已有图片训练embeding模型,得到的图这个对象其实也不太像主对象,还是有一些效果的。只能说明这个方向难度很高:把图片里的主体换个场景,这个主体要保持样貌相同。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。