【深度学习】FaceChain-SuDe,免训练,AI换脸
https://arxiv.org/abs/2403.06775
FaceChain-SuDe: Building Derived Class to Inherit Category Attributes for One-shot Subject-Driven Generation
摘要
最近,基于主体驱动的生成技术由于其个性化文本到图像生成的能力,受到了广泛关注。典型的研究工作主要集中在学习新主体的私有属性。然而,一个重要的事实没有被认真对待,即主体并不是一个孤立的新概念,而应该是预训练模型中某个类别的特化。这导致主体无法全面继承其类别中的属性,从而导致属性相关生成效果不佳。在本文中,受到面向对象编程的启发,我们将主体建模为派生类,其基类是其语义类别。这种建模使得主体能够从其类别继承公共属性,同时从用户提供的示例中学习其私有属性。具体来说,我们提出了一种即插即用的方法,称为Subject-Derived正则化(SuDe)。它通过约束主体驱动生成的图像在语义上属于主体的类别,构建了基类-派生类的建模。在三个基准和两个骨干网络下进行的广泛实验中,我们的SuDe方法在保持主体忠实度的同时,实现了富有想象力的属性相关生成。代码将很快在FaceChain开源。
1. 介绍
最近,随着文本到图像扩散模型的快速发展【22, 26, 29, 32】,人们可以轻松地使用文本提示生成高质量、照片般逼真且富有想象力的图像。这使得人们对AI绘画在游戏设计、电影拍摄等各个领域有了新的期待。其中,主体驱动的生成是一种有趣的应用,旨在为特定主体定制生成。例如,您感兴趣的东西如宠物、吊坠、动漫角色等。这些主体对于每个自然人(用户)来说是特定的,并不存在于预训练扩散模型的大规模训练中。为了实现这一应用,用户需要提供一些示例图像,以便将主体与一个特殊的标记({S*})绑定,然后可以用来指导进一步的定制。
现有的方法可以分为两种:离线方法和在线方法。前者【31, 41】采用离线训练的编码器直接将主体示例编码为文本嵌入,从而实现高测试效率。但其编码器的训练依赖于额外的大规模图像数据集,甚至还需要像素级的注释以获得更好的性能【41】。后者【13, 14, 18, 30】采用测试时微调策略来获得代表特定主体的文本嵌入。尽管牺牲了测试效率,但这种方法消除了对额外数据的依赖,更便于应用部署。由于其灵活性,本文中我们重点改进在线方法。
在部署中,最用户友好的方式仅需要用户上传一个示例图像,即一次性主体驱动的生成。然而,我们发现现有方法在这一具有挑战性但有价值的场景中,特别是在属性相关提示下,表现并不总是令人满意。如图1(a)所示,基线方法未能使“Spike”奔跑、跳跃或张嘴,这些都是狗的自然属性。有趣的是,预训练模型可以为非定制的“狗”生成这些属性【22, 26, 29, 32】。由此我们推测,图1中的失败是因为单一的示例图像不足以提供定制主体所需的属性,而这些属性无法由预训练模型自动补全。基于上述考虑,我们提出通过使主体(“Spike”)显式继承其语义类别(“狗”)的属性来解决这一问题。具体来说,受到面向对象编程(OOP)中定义的启发,我们将主体建模为其类别的派生类。如图1(b)所示,语义类别(“狗”)被视为基类,包含由预训练模型提供的公共属性。主体(“Spike”)被建模为“狗”的派生类,继承其公共属性,同时从用户提供的示例中学习私有属性。从图1(a)的可视化结果来看,我们的建模显著改善了基线方法在属性相关生成方面的表现。
图1
(a) 该实验对象是一只名为“Spike”的金毛猎犬,基准模型是 DreamBooth [30]。基准模型的失败是因为示例图像无法提供所需的属性,如“running”。我们的方法通过将“Dog”类别的这些属性继承到“Spike”来解决这一问题。
(b) 我们将“Spike”构建为基类“Dog”的派生类。在本文中,我们将预训练模型的基类的一般属性记录为公共属性,而对象特定的属性记录为私有属性。红色波浪线标记的部分是 C++ 中的“继承”语法 [37]。
从人类理解的角度来看,上述建模,即主体(“Spike”)是其类别(“狗”)的派生类,是一个自然的事实。但对于生成模型(例如扩散模型)来说,这种建模是不自然的,因为它没有“Spike”这一主体的先验概念。因此,为了实现这种建模,我们提出了一种Subject Derivation正则化(SuDe),以约束主体的生成图像可以分类到其对应的语义类别中。以上述例子为例,生成的“Spike的照片”应该有很高的概率属于“狗的照片”。这种正则化不能通过添加分类器轻易实现,因为其语义可能与预训练扩散模型中的语义不一致。因此,我们提出显式揭示扩散模型中的隐式分类器以实现上述分类的正则化。
我们的SuDe是一种即插即用的方法,可以方便地与现有的主体驱动方法结合。我们在三个精心设计的基准上进行了评估,分别是DreamBooth【30】、Custom Diffusion【18】和ViCo【14】。结果表明,我们的方法可以显著改善属性相关生成,同时保持主体忠实度。
我们的主要贡献如下:
- 我们为主体驱动生成提供了一个新的视角,即将主体建模为其语义类别的派生类,基类。
- 我们提出了一种主体派生正则化(SuDe),通过隐式扩散分类器构建主体与其类别之间的基类-派生类关系。
- 我们的SuDe可以方便地与现有基线方法结合,在即插即用的方式下显著改善属性相关生成,同时保持主体忠实度。
相关工作
2.1 面向对象编程
面向对象编程 (Object-Oriented Programming, OOP) 是一种具有对象概念的编程范式【2, 28, 40】,包括四个重要定义:类、属性、派生和继承。类是用于创建包含某些属性的对象的模板,这些属性包括公有属性和私有属性。前者可以在类外部访问,而后者不能。派生是定义一个属于现有类的新类,例如,可以从“Dog”类派生出一个新的“Golden Retriever”类,前者称为派生类,后者称为基类。继承意味着派生类应该继承基类的一些属性,例如,“Golden Retriever”应该继承“Dog”的“running”和“jumping”等属性。在本文中,我们将以主题驱动的生成建模为类派生,其中主题是派生类,其语义类别是相应的基类。为了适应这一任务,我们使用公有属性来表示一般特性,如“running”,使用私有属性来表示具体特性,如主题标识符。基类(类别)包含由预训练扩散模型提供的公有属性,而派生类(主题)从示例图像中学习私有属性,同时继承其类别的公有属性。
2.2 文本到图像生成
文本到图像生成旨在通过输入文本的指导生成高质量的图像,这通过结合生成模型与图像-文本预训练模型(例如,CLIP【24】)来实现。从生成器的角度来看,可以大致分为三类:基于GAN的方法、基于VAE的方法和基于扩散的方法。基于GAN的方法【9, 27, 38, 42, 44】采用生成对抗网络作为生成器,在结构化图像如人脸上表现良好,但在具有多变组件的复杂场景中表现较差。基于VAE的方法【6, 10, 12, 25】使用变分自编码器生成图像,能够合成多样化的图像,但有时无法很好地匹配文本。最近,基于扩散的方法【4, 11, 22, 26, 29, 32】取得了SOTA(State-of-the-Art)表现,能够根据文本提示生成照片级真实感的图像。在本文中,我们专注于将预训练的文本到图像扩散模型应用于主题定制化。
2.3 主题驱动的生成
给定一个特定主题,主题驱动的生成旨在通过文本指导生成该主题的新图像。先驱工作根据训练策略可分为两类:离线方法和在线方法。离线方法【7, 8, 31, 41】直接将主题的示例图像编码为文本嵌入,因此需要训练一个额外的编码器。虽然具有高测试效率,但由于需要大规模数据集进行离线训练,成本较高。在线方法【13, 14, 18, 30, 39】在测试时通过微调预训练模型来学习新主题,用一个特定的token ‘{S*}’表示主题。尽管牺牲了一些测试效率,但不需要额外的数据集和网络。然而,对于最用户友好的单次场景,这些方法无法很好地定制与属性相关的生成。为此,我们提出将主题构建为其类别的派生类,以继承公有属性同时学习私有属性。一些先前的工作【18, 30】通过提示工程部分考虑了这个问题,但我们在第5.4.5节中展示了我们的方法SuDe更为满意。
方法
3.1 预备知识
3.1.1 文本到图像扩散模型
扩散模型【15, 34】通过从高斯噪声中恢复图像来近似真实数据分布。它们使用一个前向过程逐渐在清晰图像(或其潜在代码) x 0 x_0 x0上添加噪声 ϵ ∼ N ( 0 , I ) \epsilon \sim N(0,I) ϵ∼N(0,I),以获得一系列噪声变量 x 1 x_1 x1到 x T x_T xT,其中 T T T通常等于1000,如下所示:
x t = α t x 0 + 1 − α t ϵ x_t = \sqrt{\alpha_t} x_0 + \sqrt{1 - \alpha_t} \epsilon xt=αtx0+1−αtϵ
其中 α t \alpha_t αt是控制噪声进程的 t t t相关变量。在文本到图像生成中,生成的图像由文本描述 P P P指导。给定步骤 t t t处的噪声变量 x t x_t xt,模型训练逐渐对 x t x_t xt去噪,如下所示:
E x , c , ϵ , t [ w t ∣ ∣ x t − 1 − x θ ( x t , c , t ) ∣ ∣ 2 ] E_{x,c,\epsilon,t}[w_t ||x_{t-1} - x_\theta(x_t, c, t)||^2] Ex,c,ϵ,t[wt∣∣xt−1−xθ(xt,c,t)∣∣2]
其中 x θ x_\theta xθ是模型预测, w t w_t wt是步骤 t t t的损失权重, c = Γ ( P ) c = \Gamma(P) c=Γ(P)是文本提示的嵌入, Γ ( ⋅ ) \Gamma(·) Γ(⋅)是预训练的文本编码器,例如BERT【17】。在我们的实验中,我们使用Stable Diffusion【3】,其基于LDM【29】,并使用CLIP【24】文本编码器作为我们的主干模型。
3.1.2 主题驱动的微调
概述:主题驱动生成的核心是将新主题的概念植入预训练的扩散模型中。现有工作【13, 14, 18, 30, 43】通过微调扩散模型的部分或全部参数、文本嵌入或适配器实现这一点,如下所示:
L s u b = ∣ ∣ x t − 1 − x θ ( x t , c s u b , t ) ∣ ∣ 2 L_{sub} = ||x_{t-1} - x_\theta(x_t, c_{sub}, t)||^2 Lsub=∣∣xt−1−xθ(xt,csub,t)∣∣2
其中这里的 x t − 1 x_{t-1} xt−1是步骤 t − 1 t-1 t−1处的用户提供的示例的噪声版本, c s u b c_{sub} csub是主题提示的嵌入(例如,“photo of a {S*}”)。‘{S*}’代表主题名称。
动机:使用上述公式3,现有方法可以学习主题的特定属性。然而,用户提供的单个示例中的属性不足以进行富有想象力的定制。现有方法没有设计来解决这个问题,只依赖于预训练的扩散模型自动填充缺失的属性。但我们发现这不够令人满意,例如在图1中,基线未能将‘Spike’狗定制为‘running’和‘jumping’。为此,我们提出将主题建模为其语义类别(基类)的派生类。这有助于主题继承其类别的公有属性,同时学习其私有属性,从而在保持主题一致性的同时改善属性相关的生成。具体而言,如图2(a)所示,通过重构主题示例捕捉私有属性。并且通过鼓励由主题提示({S*})指导的 x t − 1 x_{t-1} xt−1语义上属于其类别(例如“Dog”),继承公有属性,如图2(b)所示。
3.2 主题派生正则化
派生类是面向对象编程中的定义,而不是命题。因此,没有可以直接用来约束主题成为其类别的派生类的充分条件。然而,根据派生的定义,自然存在一个必要条件:派生类应该是其基类的子类。我们发现约束这个必要条件对帮助主题继承其类别的属性非常有效。具体而言,我们正则化主题驱动生成的图像,使其属于主题的类别,如下所示:
L s u d e = − log [ p ( c c a t e ∣ x θ ( x t , c s u b , t ) ) ] L_{sude} = -\log[p(c_{cate} | x_\theta(x_t, c_{sub}, t))] Lsude=−log[p(ccate∣xθ(xt,csub,t))]
其中 c c a t e c_{cate} ccate和 c s u b c_{sub} csub是类别和主题的条件。公式4很好地构建了一个派生类主题,原因有二:(1) 类别的属性反映在其嵌入 c c a t e c_{cate} ccate中,其中大部分是应该继承的公有属性。这是因为嵌入是由预训练的大型语言模型(LLM)【17】获得的,其训练主要涉及一般属性。(2) 如第4节分析的那样,优化 L s u d e L_{sude} Lsude结合公式3等同于增加 p ( x t − 1 ∣ x t , c s u b , c c a t e ) p(x_{t-1} | x_t, c_{sub}, c_{cate}) p(xt−1∣xt,csub,ccate),这意味着生成一个同时满足 c s u b c_{sub} csub(私有属性)和 c c a t e c_{cate} ccate(公有属性)条件的样本。尽管形式简单,公式4不能直接优化。在接下来的部分,我们描述如何在3.2.1节中计算它,并在3.2.2节中防止训练崩溃的必要策略。
3.2.1 主题派生损失
公式4中的概率不能通过一个额外的分类器容易获得,因为它的语义可能与预训练的扩散模型不对齐。为了确保语义对齐,我们提出在扩散模型本身中揭示隐式分类器。使用贝叶斯定理【16】:
p ( c c a t e ∣ x θ ( x t , c s u b , t ) ) = C t ⋅ p ( x θ ( x t , c s u b , t ) ∣ x t , c c a t e ) p ( x θ ( x t , c s u b , t ) ∣ x t ) p(c_{cate} | x_\theta(x_t, c_{sub}, t)) = C_t \cdot \frac{p(x_\theta(x_t, c_{sub}, t) | x_t, c_{cate})}{p(x_\theta(x_t, c_{sub}, t) | x_t)} p(ccate∣xθ(xt,csub,t))=Ct⋅p(xθ(xt,csub,t)∣xt)p(xθ(xt,csub,t)∣xt,ccate)
其中 C t = p ( c c a t e ∣ x t ) C_t = p(c_{cate} | x_t) Ct=p(ccate∣xt)与 t − 1 t-1 t−1无关,因此在反向传播中可以忽略。在Stable Diffusion【3】中,相邻步骤(即 t − 1 t-1 t−1和 t t t)的预测被设计为条件高斯分布:
p ( x t − 1 ∣ x t , c ) ∼ N ( x t − 1 ; x θ ( x t , c , t ) , σ t 2 I ) ∝ exp ( − ∣ ∣ x t − 1 − x θ ( x t , c , t ) ∣ ∣ 2 / 2 σ t 2 ) p(x_{t-1} | x_t, c) \sim N(x_{t-1}; x_\theta(x_t, c, t), \sigma^2_t I) \propto \exp(-||x_{t-1} - x_\theta(x_t, c, t)||^2 / 2\sigma^2_t) p(xt−1∣xt,c)∼N(xt−1;xθ(xt,c,t),σt2I)∝exp(−∣∣xt−1−xθ(xt,c,t)∣∣2/2σt2)
其中均值是步骤 t t t处的预测,标准差是 t t t的函数。从公式5和6,我们可以将公式4转换为可计算的形式:
L s u d e = 1 2 σ t 2 [ ∣ ∣ x θ ( x t , c s u b , t ) − x θ ‾ ( x t , c c a t e , t ) ∣ ∣ 2 − ∣ ∣ x θ ( x t , c s u b , t ) − x θ ‾ ( x t , t ) ∣ ∣ 2 ] L_{sude} = \frac{1}{2\sigma^2_t} [||x_\theta(x_t, c_{sub}, t) - \overline{x_\theta}(x_t, c_{cate}, t)||^2 - ||x_\theta(x_t, c_{sub}, t) - \overline{x_\theta}(x_t, t)||^2] Lsude=2σt21[∣∣xθ(xt,csub,t)−xθ(xt,ccate,t)∣∣2−∣∣xθ(xt,csub,t)−xθ(xt,t)∣∣2]
其中 x θ ‾ ( x t , c c a t e , t ) \overline{x_\theta}(x_t, c_{cate}, t) xθ(xt,ccate,t)是条件 c c a t e c_{cate} ccate的预测, x θ ‾ ( x t , t ) \overline{x_\theta}(x_t, t) xθ(xt,t)是无条件预测。 θ ‾ \overline{\theta} θ表示训练中分离,表明只有 x θ ( x t , c s u b , t ) x_\theta(x_t, c_{sub}, t) xθ(xt,csub,t)是梯度可传递的,而 x θ ‾ ( x t , c c a t e , t ) \overline{x_\theta}(x_t, c_{cate}, t) xθ(xt,ccate,t)和 x θ ‾ ( x t , t ) \overline{x_\theta}(x_t, t) xθ(xt,t)的梯度被截断。这是因为它们是我们要保留的预训练模型中的先验。
3.2.2 损失截断
优化方程(4)会导致 p ( c c a t e ∣ x θ ( x t − 1 , c s u b , t ) ) p(c_{cate} | x_{\theta}(x_{t-1}, c_{sub}, t)) p(ccate∣xθ(xt−1,csub,t))增加至接近1。然而,这个项表示在步骤 t − 1 t-1 t−1时噪声图像的分类概率。由于噪声的影响,它不应接近1。因此,我们提出提供一个阈值来截断 L s u d e L_{sude} Lsude。具体来说,对于基于 c c a t e c_{cate} ccate生成的图像,其属于 c c a t e c_{cate} ccate的概率可以用作参考。这表示在步骤 t − 1 t-1 t−1时噪声图像的适当分类概率。因此,我们使用该概率的负对数似然作为阈值 τ \tau τ,它可以通过将 c s u b c_{sub} csub替换为 c c a t e c_{cate} ccate来计算,如公式(7)所示:
τ t = − log [ p ( c c a t e ∣ x θ ( x t , c c a t e , t ) ) ] = − 1 2 σ t 2 ∣ ∣ x θ ‾ ( x t , c c a t e , t ) − x θ ‾ ( x t , t ) ∣ ∣ 2 \tau_t = -\log[p(c_{cate} | x_{\theta}(x_t, c_{cate}, t))] = -\frac{1}{2\sigma_t^2} ||\overline{x_{\theta}}(x_t, c_{cate}, t) - \overline{x_{\theta}}(x_t, t)||^2 τt=−log[p(ccate∣xθ(xt,ccate,t))]=−2σt21∣∣xθ(xt,ccate,t)−xθ(xt,t)∣∣2
(8)
公式(8)表示在步骤 t t t时 L s u d e L_{sude} Lsude的下界。当损失值小于或等于 L s u d e L_{sude} Lsude时,优化应停止。因此,我们截断 L s u d e L_{sude} Lsude如下:
L s u d e = λ τ ⋅ L s u d e , λ τ = { 0 , 如果 L s u d e ≤ τ t 1 , 否则 L_{sude} = \lambda_{\tau} \cdot L_{sude}, \quad \lambda_{\tau} = \begin{cases} 0, & \text{如果} \, L_{sude} \leq \tau_t \\ 1, & \text{否则} \end{cases} Lsude=λτ⋅Lsude,λτ={0,1,如果Lsude≤τt否则
(9)
在实践中,这种截断对于保持训练稳定性非常重要。详细信息见第5.4.2节。
3.3 总体优化目标
我们的方法仅引入了一个新的损失函数 L s u d e L_{sude} Lsude,因此可以方便地以即插即用的方式嵌入现有的流程中:
L = E x , c , ϵ , t [ L s u b + w s L s u d e + w r L r e g ] L = \mathbb{E}_{x, c, \epsilon, t} [L_{sub} + w_s L_{sude} + w_r L_{reg}] L=Ex,c,ϵ,t[Lsub+wsLsude+wrLreg]
(10)
其中, L s u b L_{sub} Lsub是用于学习主体私有属性的重构损失,如公式(3)所述。 L r e g L_{reg} Lreg是通常用于防止模型过拟合主体示例的正则化损失。通常,它与 c s u b c_{sub} csub无关,并在各种基线中有灵活的定义【14, 30】。 w s w_s ws和 w r w_r wr用于控制损失权重。在实践中,我们保持 L s u b L_{sub} Lsub和 L r e g L_{reg} Lreg与基线一致,仅通过添加我们的 L s u d e L_{sude} Lsude来改变训练过程。
4. 理论分析
这里我们分析SuDe的有效性,因为它建模了 p ( x t − 1 ∣ x t , c s u b , c c a t e ) p(x_{t-1} | x_t, c_{sub}, c_{cate}) p(xt−1∣xt,csub,ccate)。根据公式(3),(4)和DDPM【15】,我们可以表达 L s u b L_{sub} Lsub和 L s u d e L_{sude} Lsude如下:
L s u b = − log [ p ( x t − 1 ∣ x t , c s u b ) ] L s u d e = − log [ p ( c c a t e ∣ x t − 1 , c s u b ) ] L_{sub} = -\log[p(x_{t-1} | x_t, c_{sub})] \\ L_{sude} = -\log[p(c_{cate} | x_{t-1}, c_{sub})] Lsub=−log[p(xt−1∣xt,csub)]Lsude=−log[p(ccate∣xt−1,csub)]
(11)
这里我们首先简化 w s w_s ws为1以便于理解:
L s u b + L s u d e = − log [ p ( x t − 1 ∣ x t , c s u b ) ⋅ p ( c c a t e ∣ x t − 1 , c s u b ) ] = − log [ p ( x t − 1 ∣ x t , c s u b , c c a t e ) ⋅ p ( c c a t e ∣ x t , c s u b ) ] = − log [ p ( x t − 1 ∣ x t , c s u b , c c a t e ) ] + S t L_{sub} + L_{sude} = -\log[p(x_{t-1} | x_t, c_{sub}) \cdot p(c_{cate} | x_{t-1}, c_{sub})] = -\log[p(x_{t-1} | x_t, c_{sub}, c_{cate}) \cdot p(c_{cate} | x_t, c_{sub})] = -\log[p(x_{t-1} | x_t, c_{sub}, c_{cate})] + S_t Lsub+Lsude=−log[p(xt−1∣xt,csub)⋅p(ccate∣xt−1,csub)]=−log[p(xt−1∣xt,csub,ccate)⋅p(ccate∣xt,csub)]=−log[p(xt−1∣xt,csub,ccate)]+St
(12)
其中, S t = − log [ p ( c c a t e ∣ x t , c s u b ) ] S_t = -\log[p(c_{cate} | x_t, c_{sub})] St=−log[p(ccate∣xt,csub)]与 t − 1 t-1 t−1无关。从公式(12)可以看出,我们的方法建模了 p ( x t − 1 ∣ x t , c s u b , c c a t e ) p(x_{t-1} | x_t, c_{sub}, c_{cate}) p(xt−1∣xt,csub,ccate)的分布,该分布同时以 c s u b c_{sub} csub和 c c a t e c_{cate} ccate为条件,因此可以生成具有来自 c s u b c_{sub} csub的私有属性和来自 c c a t e c_{cate} ccate的公共属性的图像。
在实践中, w s w_s ws是各种基线上的变化超参数。这不会改变上述结论,因为:
w s ⋅ L s u d e = − log [ p w s ( c c a t e ∣ x t − 1 , c s u b ) ] p w s ( c c a t e ∣ x t − 1 , c s u b ) ∝ p ( c c a t e ∣ x t − 1 , c s u b ) w_s \cdot L_{sude} = -\log[p_{w_s}(c_{cate} | x_{t-1}, c_{sub})] \\ p_{w_s}(c_{cate} | x_{t-1}, c_{sub}) \propto p(c_{cate} | x_{t-1}, c_{sub}) ws⋅Lsude=−log[pws(ccate∣xt−1,csub)]pws(ccate∣xt−1,csub)∝p(ccate∣xt−1,csub)
(13)
其中 a ∝ b a \propto b a∝b表示 a a a与 b b b正相关。基于公式(13),我们可以看出 L s u b + w s L s u d e L_{sub} + w_s L_{sude} Lsub+wsLsude与 − log [ p ( x t − 1 ∣ x t , c s u b , c c a t e ) ] -\log[p(x_{t-1} | x_t, c_{sub}, c_{cate})] −log[p(xt−1∣xt,csub,ccate)]正相关。这意味着,当 w s w_s ws不等于1时,优化我们的 L s u d e L_{sude} Lsude与 L s u b L_{sub} Lsub仍然可以增加 p ( x t − 1 ∣ x t , c s u b , c c a t e ) p(x_{t-1} | x_t, c_{sub}, c_{cate}) p(xt−1∣xt,csub,ccate)。
5. 实验
5.1 实现细节
框架:我们在三个精心设计的框架上评估了SuDe的即插即用效果:DreamBooth【30】、Custom Diffusion【18】和ViCo【14】,使用了两个主干网络,Stable-diffusion v1.4(SD-v1.4)和Stable-diffusion v1.5(SD-v1.5)【3】。在实践中,我们保持所有基线的设计和超参数不变,仅在训练损失中添加我们的 L s u d e L_{sude} Lsude。对于超参数 w s w_s ws,由于这些基线有不同的训练范式(如可优化参数、学习率等),很难找到适用于所有基线的固定 w s w_s ws。我们在DreamBooth上设定为0.4,在ViCo上设定为1.5,在Custom Diffusion上设定为2.0。需要注意的是,用户可以根据不同的主体在实际应用中调整 w s w_s ws。这只需付出很小的代价,因为我们的SuDe是一个测试时调优基线的插件,具有高效性(如在单个3090 GPU上对ViCo的调优约7分钟)。
数据集:在定量实验中,我们使用了DreamBooth【30】提供的DreamBench数据集,该数据集包含来自15个类别的30个主体,每个主体有5个示例图像。由于我们专注于单次定制,这里我们在所有实验中只使用一个示例图像(编号为’00.jpg’)。在先前的工作中,他们收集的大多数提示与属性无关,如‘在沙滩/雪/森林中的{S*}照片’,仅改变图像背景。为了更好地研究我们方法的有效性,我们为每个主体收集了5个与属性相关的提示。示例如‘奔跑的{S*}照片’(对于狗),‘燃烧的{S*}照片’(对于蜡烛)。此外,各种基线有其独特的提示模板。具体来说,对于ViCo,其模板是‘{S*}的照片’,而对于DreamBooth和Custom Diffusion,模板是‘{S*} [类别]的照片’。在实践中,我们使用各种基线的默认模板。在本文中,为了方便书写,我们统一记录{S*}和{S*} [类别]为{S*}。此外,我们还在附录中展示了其他定性示例,这些示例收集自Unsplash【1】。
指标:对于主体驱动的生成任务,有两个重要方面是主体保真度和文本对齐度。对于第一个方面,我们参考先前的工作,使用DINO-I和CLIP-I作为指标。它们是生成图像和真实图像的DINO【5】(或CLIP【24】)嵌入的平均成对余弦相似度。如【14, 30】所述,DINO-I比CLIP-I更能反映保真度,因为DINO可以捕捉同一类别中主体的差异。对于第二个方面,我们参考先前的工作,使用CLIP-T作为指标,这是提示和生成图像的CLIP【24】嵌入的平均余弦相似度。此外,我们提出了一个新指标来评估属性的文本对齐度,简称为属性对齐度。这不能通过CLIP-T反映,因为CLIP仅在分类级别上粗略训练,对动作和材料等属性不敏感。具体来说,我们
使用BLIP-T,这是提示和生成图像的BLIP【19】嵌入的平均余弦相似度。由于BLIP被训练用于处理图像描述任务,因此它能更好地衡量属性对齐度。
5.2. 定性结果
这里,我们在图3中可视化了在三种基线上有无我们方法生成的图像。
属性对齐
定性上,我们看到使用我们的SuDe方法生成的图像在属性相关文本上对齐得更好。例如,在第1行,Custom Diffusion不能让狗玩球;在第2行,DreamBooth不能让卡通人物跑步;在第3行,ViCo不能给茶壶一个金色的材质。相比之下,结合了我们的SuDe后,他们的生成可以很好地反映这些属性。这是因为我们的SuDe帮助每个主体继承了其语义类别中的公共属性。
图像保真度
此外,我们的方法在生成富含属性的图像时仍能保持主体的保真度。例如,在第1行,使用SuDe生成的狗的姿势与示例图像非常不同,但我们仍然可以确定它们是同一只狗,因为它们具有私有属性,例如金色的毛发、面部特征等。
5.3. 定量结果
这里我们定量验证了第5.2节中的结论。如表1所示,我们的SuDe在属性对齐上取得了稳定的提升,即在SD-v1.4和SD-v1.5下,BLIP-T在ViCo上分别提高了4.2%和2.6%,在Custom Diffusion上提高了0.9%和2.0%,在DreamBooth上提高了1.2%和1.5%。此外,我们还展示了一个灵活的 w s w_s ws (在[0.5, 1.0, 2.0] · w s w_s ws中选取的最佳结果)标记的性能。我们看到这种低成本调整可以进一步扩大提升,即在SD-v1.4和SD-v1.5下,BLIP-T在ViCo上分别提高了5.3%和3.9%,在Custom Diffusion上提高了1.1%和2.3%,在DreamBooth上提高了3.2%和2.0%。关于 w s w_s ws 的更多分析在第5.4.1节中。对于主体保真度,SuDe只对基线的DINO-I带来了轻微波动,表明我们的方法不会牺牲主体保真度。
5.4. 经验研究
5.4.1 训练权重 w s w_s ws
w s w_s ws 影响 L s u d e L_{sude} Lsude 的权重比例。我们在图4中可视化了不同 w s w_s ws 下生成的图像,通过这些图像我们可以总结出:1)随着 w s w_s ws 的增加,主体(例如,茶壶)可以更全面地继承公共属性(例如,清晰)。在适当范围内(例如,茶壶的[0.5, 2] · w s w_s ws),可以很好地保持主体的保真度。但 w s w_s ws 过大导致我们的模型失去主体保真度(例如,碗的4 · w s w_s ws),因为它稀释了学习私有属性的 L s u b L_{sub} Lsub。2)对于属性简单的主体(例如,碗),较小的 w s w_s ws 更合适,而对于属性复杂的主体(例如,狗),较大的 w s w_s ws 更合适。另一个有趣的现象是,图4第1行中,基线生成的图像中有浆果,而我们的SuDe没有。这是因为尽管浆果出现在示例中,但它不是碗的属性,因此没有被我们派生的类别建模捕获。此外,在第5.4.3节中,我们展示了我们的方法还可以通过提示结合属性相关和属性无关的生成,用户可以进行诸如“带有樱桃的金属{S∗}照片”这样的定制。
5.4.2 损失截断消融
在第3.2.2节中,设计损失截断是为了防止 p ( c c a t e ∣ x θ ( x t , c s u b , t ) ) p(c_{cate}|x_{\theta}(x_t,c_{sub},t)) p(ccate∣xθ(xt,csub,t)) 过度优化。这里我们验证了这种截断对于防止训练崩溃的重要性。如图5所示,没有截断的情况下,生成在第2轮展示出失真,并在第3轮完全崩溃。这是因为过度优化 p ( c c a t e ∣ x θ ( x t , c s u b , t ) ) p(c_{cate}|x_{\theta}(x_t,c_{sub},t)) p(ccate∣xθ(xt,csub,t)) 使噪声图像具有过高的分类概率。一个极端的例子是将纯噪声分类为某一类别的概率为1。这破坏了预训练扩散模型的语义空间,导致生成崩溃。
5.4.3 结合属性无关的提示
在以上章节中,我们主要展示了我们SuDe在属性相关生成方面的优势。这里我们展示了我们的方法的优势也可以结合属性无关的提示进行更具创意的定制。如图6所示,我们的方法可以和谐地生成图像,例如,在各种背景下跑步的{S ∗ }(狗)、在各种背景下燃烧的{S ∗ }(蜡烛)、以及带有各种水果的{S ∗ }金属(碗)。
5.4.4 与类别图像正则化的比较
在现有的主体驱动生成方法中【14, 18, 30】,如公式10所述,通常使用一个正则化项 L r e g L_{reg} Lreg 来防止模型过拟合到主体示例。这里我们讨论 L r e g L_{reg} Lreg 和我们的 L s u d e L_{sude} Lsude 的角色差异。以DreamBooth中的类别图像正则化为例,定义如下:
L r e g = ∣ ∣ x θ ˉ p r ( x t , c c a t e , t ) − x θ ( x t , c c a t e , t ) ∣ ∣ 2 , L_{reg} = ||x_{\bar{\theta}_{pr}}(x_t,c_{cate},t) - x_{\theta}(x_t,c_{cate},t)||^2, Lreg=∣∣xθˉpr(xt,ccate,t)−xθ(xt,ccate,t)∣∣2,
其中 x θ ˉ p r x_{\bar{\theta}_{pr}} xθˉpr 是冻结的预训练扩散模型。可以看出,公式14在主体驱动微调前后,通过 c c a t e c_{cate} ccate 条件生成保持一致。视觉上,根据图8,我们发现 L r e g L_{reg} Lreg 主要有利于背景编辑。但它只使用‘类别提示’( c c a t e c_{cate} ccate)单独进行,忽略了 c s u b c_{sub} csub 和 c c a t e c_{cate} ccate 之间的联系建模。因此,它不能像我们的SuDe那样有利于属性编辑。
5.4.5 与修改提示的比较
本质上,我们的SuDe通过其类别的公共属性丰富了主体的概念。一种简单的替代方法是同时在文本提示中提供主体标记和类别标记,例如“{S ∗ }[category]的照片”,这已经在DreamBooth【30】和Custom Diffusion【18】基线中使用了。上述对这两个基线的比较表明,这种提示无法很好地解决属性缺失问题。这里我们进一步在ViCo基线上评估其他提示模板的性能,因为其默认提示仅包含主体标记。具体来说,我们验证了三个提示模板:P1:“[attribute] {S ∗ } [category]的照片”;P2:“[attribute] {S ∗ }的照片,并且是[category]”;P3:“{S ∗ }的照片,并且是[attribute] [category]”。参考提示学习中的工作【20, 23, 33, 35】,我们在这些模板中保留了触发词结构,即在主体驱动微调中使用的“{S ∗ }的照片”形式。
如表2所示,一个好的提示模板可以部分缓解这个问题,例如,P3的BLIP-T为41.2。但是,仍然有一些属性无法通过修改提示来补充,例如在图7中,P1到P3无法让狗“张开嘴”。这是因为它们只是在提示中放入了主体和类别,但忽略了像我们SuDe一样建模它们的关系。此外,我们的方法也可以在这些提示模板上工作,如表2所示,SuDe进一步改善了所有提示模板超过1.5%。
6. 结论
本文创造性地将主体驱动生成建模为构建一个派生类。具体来说,我们提出了主体派生正则化(SuDe),使主体从其语义类别中继承公共属性,同时从主体示例中学习其私有属性。作为一个即插即用的方法,我们的SuDe可以方便地结合现有基线并改进属性相关的生成。我们的SuDe面对最具挑战性但也是最有价值的一次性场景,可以生成富有想象力的定制,展示了有吸引力的应用前景。
更广泛的影响
主体驱动生成是一个新兴应用,目前的大多数工作集中在使用属性无关提示进行图像定制。但可以预见且有价值的场景是进行用户提供图像的多模式定制,其中属性相关生成将被广泛需要。本文提出的建模方法将主体构建为其语义类别的派生类,能够进行良好的属性相关生成,从而为未来的主体驱动应用提供了一个有前途的解决方案。
相关文章:

【深度学习】FaceChain-SuDe,免训练,AI换脸
https://arxiv.org/abs/2403.06775 FaceChain-SuDe: Building Derived Class to Inherit Category Attributes for One-shot Subject-Driven Generation 摘要 最近,基于主体驱动的生成技术由于其个性化文本到图像生成的能力,受到了广泛关注。典型的研…...

Uniapp鸿蒙项目实战
Uniapp鸿蒙项目实战 24.7.6 Dcloud发布了uniapp兼容鸿蒙的文档:Uniapp开发鸿蒙应用 在实际使用中发现一些问题,开贴记录一下 设备准备 windows电脑准备(家庭版不行,教育版、企业版、专业版也可以,不像uniapp说的只有…...

计算机三级嵌入式笔记(一)—— 嵌入式系统概论
目录 考点1 嵌入式系统 考点2 嵌入式系统的组成与分类 考点3 嵌入式系统的分类与发展 考点4 SOC芯片 考点5 数字(电子)文本 考点6 数字图像 考点7 数字音频与数字视频 考点8 数字通信 考点9 计算机网络 考点10 互联网 考纲(2023&am…...

react Jsx基础概念和本质
什么是jsx jsx是JavaScript和XML(HTML)的缩写,表示在js代码中编写HTML模板结构,它是react中编写UI模板的方式 const message this is message function App(){return (<div><h1>this is title</h1>{message}</div>) } jsx优…...

【深大计算机系统(2)】实验一 实验环境配置与使用 附常用指令
目录 一、 实验目标: 二、实验环境与工件: 三、实验内容与步骤 1. 学习并熟悉Linux基本操作,按照要求创建用户。(30分) 2.新建用户主目录下创建子目录:gdbdebug,并进入gdbdebug子目录。将过程和…...
目标检测经典模型之YOLOV5-detect.py源码解析(持续更新)
detect文件框架 一、导入模块包二、定义run函数1. 归一化操作代码解析uint8精度转换归一化 2. 扩展维度为什么扩展维度?代码解释 3. 对检测结果类别计数检查是否有检测结果统计每个类别的出现次数构建描述性字符串 三、定义命令行参数四、主函数 本帖是YOLOV5推理部…...
PF4J+SpringBoot
plugin-common pom.xml相关配置 <groupId>pub.qingyun</groupId> <artifactId>plugin-common</artifactId> <version>0.0.1-SNAPSHOT</version> <description>插件配置类</description><dependency><groupId>or…...

设计模式11-原型模式
设计模式11-原型模式 写在前面对象创建模式典型模式原型模式动机结构代码推导应用特点要点总结 原型模式与工厂方法模式对比工厂方法模式原型模式什么时候用什么模式 写在前面 对象创建模式 通过对象创建模式绕开动态内存分配来避免创建过程中所导致的耦合过紧的问题。从而支…...
Tomcat长连接源码解析
长连接: 客户端发送Http请求至服务端,请求发送完之后socket连接不断开,可以继续接收下一个Http请求并且解析返回。接手并解析这些Http请求的时候socket连接不断开,这种过程被称为长连接。 需要注意的点就在于,在满足什么条件的情况…...
C++编程:实现一个跨平台安全的定时器Timer模块
文章目录 0. 概要1. 设计目标2. SafeTimer 类的实现2.1 头文件 safe_timer.h源文件 safe_timer.cpp 3. 工作流程图4. 单元测试 0. 概要 对于C应用编程,定时器模块是一个至关重要的组件。为了确保系统的可靠性和功能安全,我们需要设计一个高效、稳定的定…...

PyTorch的自动微分模块【含梯度基本数学原理详解】
文章目录 1、简介1.1、基本概念1.2、基本原理1.2.1、自动微分1.2.2、梯度1.2.3、梯度求导1.2.4、梯度下降法1.2.5、张量梯度举例 1.3、Autograd的高级功能 2、梯度基本计算2.1、单标量梯度2.2、单向量梯度的计算2.3、多标量梯度计算2.4、多向量梯度计算 3、控制梯度计算4、累计…...

AI 绘画|Midjourney设计Logo提示词
你是否已经看过许多别人分享的 MJ 咒语,却仍无法按照自己的想法画图?通过学习 MJ 的提示词逻辑后,你将能够更好地理解并创作自己的“咒语”。本文将详细拆解使用 MJ 设计 Logo 的逻辑,让你在阅读后即可轻松上手,制作出…...

LeNet实验 四分类 与 四分类变为多个二分类
目录 1. 划分二分类 2. 训练独立的二分类模型 3. 二分类预测结果代码 4. 二分类预测结果 5 改进训练模型 6 优化后 预测结果代码 7 优化后预测结果 8 训练四分类模型 9 预测结果代码 10 四分类结果识别 1. 划分二分类 可以根据不同的类别进行多个划分,以…...

【BUG】已解决:java.lang.reflect.InvocationTargetException
已解决:java.lang.reflect.InvocationTargetException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发…...

配置kali 的apt命令在线安装包的源为国内源
目录 一、安装VMware Tools 二、配置apt国内源 一、安装VMware Tools 点击安装 VMware Tools 后,会加载一个虚拟光驱,里面包含 VMware Tools 的安装包 鼠标右键单击 VMware Tools 的安装包,点击复制到 点击 主目录,再点击选择…...

JAVA 异步编程(线程安全)二
1、线程安全 线程安全是指你的代码所在的进程中有多个线程同时运行,而这些线程可能会同时运行这段代码,如果每次运行的代码结果和单线程运行的结果是一样的,且其他变量的值和预期的也是一样的,那么就是线程安全的。 一个类或者程序…...

Golang | Leetcode Golang题解之第260题只出现一次的数字III
题目: 题解: func singleNumber(nums []int) []int {xorSum : 0for _, num : range nums {xorSum ^ num}lsb : xorSum & -xorSumtype1, type2 : 0, 0for _, num : range nums {if num&lsb > 0 {type1 ^ num} else {type2 ^ num}}return []in…...
IDEA自带的Maven 3.9.x无法刷新http nexus私服
问题: 自建的私服,配置了域名,使用http协议,在IDEA中或本地Maven 3.9.x会出现报错,提示http被blocked,原因是Maven 3.8.1开始,Maven默认禁止使用HTTP仓库地址,只允许使用HTTPS仓库地…...

56、本地数据库迁移到阿里云
现有需求,本地数据库迁移到阿里云上。 库名xy102表 test01test02test01 test023条数据。1、登录阿里云界面创建免费试用ECS实列。 阿里云登录页 (aliyun.com)](https://account.aliyun.com/login/login.htm?oauth_callbackhttps%3A%2F%2Fusercenter2.aliyun.com%…...

新时代多目标优化【数学建模】领域的极致探索——数学规划模型
目录 例1 1.问题重述 2.基本模型 变量定义: 目标函数: 约束条件: 3.模型分析与假设 4.模型求解 5.LINGO代码实现 6.结果解释 编辑 7.敏感性分析 8.结果解释 例2 奶制品的销售计划 1.问题重述 编辑 2.基本模型 3.模…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...