【深度学习】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.模…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
