论文精读(保姆级解析)—— FreeDoM: Training-Free Energy-Guided Conditional Diffusion Model

news2024/11/23 21:23:25

目录

  • 0 前言
  • 1 文章摘要
  • 2 引言
  • 3 相关工作
    • 3.1 需要训练的扩散方法
    • 3.2 无需训练的扩散方法
  • 4 预备知识
    • 4.1基于分数的扩散模型
    • 4.2 条件分数函数
    • 4.3 能量扩散引导
  • 5 提出方法
    • 5.1 近似时间相关能量
    • 5.2 有效的时间旅行策略
    • 5.3 能量函数构造
      • 5.3.1 单一条件引导
      • 5.3.2 多条件引导
      • 5.3.3 潜在扩散的引导
    • 5.4 具体例子
      • 5.4.1 文本
      • 5.4.2 分割图
      • 5.4.3 素描
      • 5.4.4 关键点检测
      • 5.4.5 Face IDs
      • 5.4.6 风格图像
      • 5.4.7 低通滤波器
  • 6 实验
    • 6.1 实施细节
  • 7 性能表现
    • 7.1 单一条件
    • 7.2 多条件
    • 7.3 潜在域免训引导

0 前言

  前面在讲解论文《Guidance with Spherical Gaussian Constraint for Conditional Diffusion》的时候作者反复提到了FreeDoM这个扩散模型,今天我们就来解读下这篇论文到低干了什么事情,做了哪些贡献。
  该论文发表在2023年计算机视觉顶会ICCV上,主要提出了一种免训练的条件扩散模型方法。下面给出论文的地址和代码仓库链接:

  • paper
  • code

1 文章摘要

  最近,条件扩散模型因其卓越的生成能力在众多应用中备受欢迎。然而,许多现有方法需要进行训练,它们需要训练一个时间依赖的分类器或一个条件依赖的评分估计器,这增加了构建条件扩散模型的成本,并且在不同条件之间的转移上也不方便。最近的一些工作尝试通过提出无需训练的解决方案来克服这一限制,但大多数只能应用于特定类别的任务,而不能应用于更一般的条件。在这项工作中,作者提出了一种无需训练的条件扩散模型(FreeDoM),可用于多种条件。具体来说,利用现成的预训练网络,例如人脸检测模型,来构建时间无关的能量函数,以引导生成过程而不需要训练。此外,由于能量函数的构建非常灵活并且适应各种条件,作者提出的FreeDoM比现有的无需训练的方法具有更广泛的应用范围。FreeDoM在其简单性、有效性和低成本方面具有优势。实验表明,FreeDoM对于各种条件是有效的,适用于包括图像和潜在代码域在内的各种数据领域的扩散模型。

2 引言

  最近,扩散模型在性能上已超越了之前最先进的生成模型(如GANs)。扩散模型的强大生成能力激发了研究人员将其应用于各种下游任务。条件生成是其中最受关注的领域之一。不同条件的条件扩散模型(CDMs)已被提出,如文本、类别标签、退化图像、分割图、标记、手绘草图、风格图像等。这些CDMs大致分为两类:需要训练的和无需训练的。

  一种典型的需要训练的CDM是训练一个时间依赖的分类器,以引导噪声图像 x t x_t xt朝给定的条件 c c c前进。另一类需要训练的CDM直接训练一个新的基于条件c的得分估计器 s ( x t , t , c ) s(x_t, t, c) s(xt,t,c)。这些方法虽然性能优异但不够灵活。一旦需要生成新的目标条件,就必须重新训练或微调模型,既不方便又昂贵。

  相比之下,无需训练的CDMs尝试在不额外训练的情况下解决相同的问题。有些方法尝试使用交叉注意力控制实现条件生成;有些方法直接修改中间结果以实现零样本图像修复;还有些方法通过调整初始噪声图像实现图像翻译。虽然这些方法在单一应用中有效,但难以推广到更广泛的条件(如风格、面部ID和分割掩码)。

  为了让CDMs在无需训练的情况下支持广泛的条件,本文提出了一种无需训练的条件扩散模型(FreeDoM),包括以下两个关键点。首先,为了强调泛化能力,作者提出了一种由能量函数引导的采样过程,能量函数构建非常灵活,可以应用于各种条件。其次,为了使所提方法无需训练,又使用现成的预训练时间无关模型(这些模型在网上易于获取)来构建能量函数。

  FreeDoM主要有以下优点:(1)简单有效。只需在原始扩散模型的无条件采样过程中插入能量函数梯度的求导步骤。广泛的实验显示了其有效的控制能力。(2)成本低且高效。构建的能量函数是时间无关的,无需重新训练。选择的扩散模型也无需在所需条件下进行训练。得益于用于大数据域的高效时间旅行策略,采样步骤的数量非常少,从而加快了采样过程,同时确保了良好的生成结果。(3)适用范围广泛。该方法支持的条件包括但不限于文本、分割图、草图、标记、面部ID、风格图像等。此外,通过结合多种条件,可以实现各种复杂但有趣的应用。(4)支持不同类型的扩散模型。无论所考虑的数据域是人脸图像、ImageNet中的图像,还是从图像编码器提取的潜在代码,广泛的实验表明FreeDoM在所有这些领域都表现良好。

3 相关工作

3.1 需要训练的扩散方法

  需要训练的方法由于使用数据对进行监督学习,可以获得强大的控制生成能力。其中最突出的一种应用是文本生成图像任务。最广泛使用的文本生成图像模型是Stable Diffusion,通过输入提示文本生成符合文本描述的高质量图像。最近的一些研究,如ControlNet和T2I-Adapter,引入了更多需要训练的条件接口到Stable Diffusion中,如边缘图、分割图、深度图等。
  虽然这些需要训练的方法可以在训练条件下实现令人满意的控制效果,但训练的成本仍然是一个需要考虑的因素,特别是对于需要多个条件的复杂控制场景。需要训练的方法在实际应用中不是最便宜或最方便的解决方案。

3.2 无需训练的扩散方法

  无需训练的方法开发了各种有趣的技术,通过利用扩散模型的独特性质,即迭代去噪过程,实现某些任务的无需训练的条件生成。一些研究提出将目标交叉注意力图注入源交叉注意力图,以解决无需训练的prompt-to-prompt任务。此方法的局限性在于需要一个文本提示来预先固定要编辑的图像内容。DDNM提出使用Range-Null Space Decomposition修改中间结果,以无需训练的方式解决图像修复问题。这基于图像修复任务的降解算子,难以应用于其他任务。SDEdit提出调整初始噪声图像以控制生成过程,这在基于笔画的图像合成和编辑中很有用。其局限性在于笔画的指导不够精确和多样化。

  根据上述局限性,需要研究适用于广泛应用的无需训练的条件扩散模型(CDMs)。作者注意到该领域的一些最新努力。所提出来的FreeDoM具有更快的生成速度,并且适用于更广泛的应用(感觉实际效果还行,毕竟论文还是得吹一下)。

4 预备知识

4.1基于分数的扩散模型

  基于分数的扩散模型(SBDMs)是一类基于分数理论的扩散模型,该理论揭示了扩散模型的本质是估计分数函数 ∇ x t log ⁡ p ( x t ) ∇_{x_t} \log p(x_t) xtlogp(xt),其中 x t x_t xt是噪声数据。在采样过程中,SBDMs 通过逐步使用估计的分数从 x t x_t xt预测 x t − 1 x_{t-1} xt1。在本文的工作中,作者采用了DDPM的离散SBDMs设定,其采样公式为:
x t − 1 = ( 1 + 1 2 β t ) x t + β t ∇ x t log ⁡ p ( x t ) + β t ϵ \mathbf{x}_{t-1} = (1 + \frac{1}{2}\beta_t) \mathbf{x}_t + \beta_t \nabla \mathbf{x}_t \log p(\mathbf{x}_t) + \sqrt{\beta_t} \boldsymbol{\epsilon} xt1=(1+21βt)xt+βtxtlogp(xt)+βt ϵ
其中, ϵ ∼ N ( 0 , I ) \boldsymbol{\epsilon} \sim \mathcal{N}(0, I) ϵN(0,I)是随机采样的高斯噪声, β t ∈ R \beta_t \in R βtR是预定义参数。在实际实现中,分数函数将使用分数估计器 s ( x t , t ) s(x_t, t) s(xt,t)来估计,即 s ( x t , t ) ≈ ∇ x t log ⁡ p ( x t ) s(x_t, t) \approx ∇_{x_t} \log p(x_t) s(xt,t)xtlogp(xt)。然而,原始的扩散模型只能作为无条件生成器提供随机合成的结果。

4.2 条件分数函数

  为了将扩散模型的生成能力适应不同的下游任务,需要使用条件扩散模型(CDMs)。SDE提出了通过修改分数函数为 ∇ x t log ⁡ p ( x t ∣ c ) ∇_{x_t} \log p(x_t|c) xtlogp(xtc)来控制生成结果以满足给定的条件 c c c。使用贝叶斯公式 p ( x t ∣ c ) = p ( c ∣ x t ) p ( x t ) p ( c ) p(x_t|c)=\frac{p(c|x_t)p(x_t)}{p(c)} p(xtc)=p(c)p(cxt)p(xt),可以将条件分数函数重写为两个部分:
∇ x t log ⁡ p ( x t ∣ c ) = ∇ x t log ⁡ p ( x t ) + ∇ x t log ⁡ p ( c ∣ x t ) \nabla \mathbf{x}_t \log p(\mathbf{x}_t | \mathbf{c}) = \nabla \mathbf{x}_t \log p(\mathbf{x}_t) + \nabla \mathbf{x}_t \log p(\mathbf{c} | \mathbf{x}_t) xtlogp(xtc)=xtlogp(xt)+xtlogp(cxt)
其中,第一个部分 ∇ x t log ⁡ p ( x t ) \nabla \mathbf{x}_t \log p(\mathbf{x}_t) xtlogp(xt)可以使用预训练的无条件分数估计器 s ( ⋅ , t ) s(\cdot,t) s(,t)来估计,而第二个部分 ∇ x t log ⁡ p ( c ∣ x t ) \nabla \mathbf{x}_t \log p(\mathbf{c} | \mathbf{x}_t) xtlogp(cxt)是构建条件扩散模型的关键部分。我们可以将第二个部分 ∇ x t log ⁡ p ( c ∣ x t ) \nabla \mathbf{x}_t \log p(\mathbf{c} | \mathbf{x}_t) xtlogp(cxt)解释为一个修正梯度,将 x t x_t xt指向数据空间中的一个超平面,其中所有数据都与给定的条件 c c c兼容。基于分类器的方法通过训练一个时间依赖的分类器来计算这个修正梯度,用于条件引导。

4.3 能量扩散引导

  建模修正梯度 ∇ x t log ⁡ p ( c ∣ x t ) \nabla \mathbf{x}_t \log p(\mathbf{c} | \mathbf{x}_t) xtlogp(cxt)仍然是一个未解决的问题,一种简单直接的方法是利用能量函数,如下所示:
p ( c ∣ x t ) = exp ⁡ { − λ E ( c , x t ) } Z p(\mathbf{c}|\mathbf{x}_t) = \frac{\exp \{-\lambda \mathcal{E}(\mathbf{c}, \mathbf{x}_t)\}}{Z} p(cxt)=Zexp{λE(c,xt)}
其中, λ \lambda λ是一个表示正的温度系数, Z Z Z表示一个归一化系数, Z > 0 Z>0 Z>0,计算公式为 Z = ∑ c ∈ C exp ⁡ { − λ E ( c , x t ) } Z = \sum_{c \in C} \exp \{-\lambda \mathcal{E}(c, \mathbf{x}_t)\} Z=cCexp{λE(c,xt)},其中 C C C表示给定的条件域。 E ( c , x t ) \mathcal{E}(\mathbf{c}, \mathbf{x}_t) E(c,xt)是一个能量函数,用于计算条件 c c c和噪声 x t x_t xt之间的兼容性,值越小表示越兼容。如果 x t x_t xt完全满足条件 c c c的约束,能量值应该为0。任何满足上述性质的函数都可以作为可行的能量函数,利用它我们只需调整系数 λ \lambda λ来获得 p ( c ∣ x t ) p(c|x_t) p(cxt)
因此,修正梯度 ∇ x t log ⁡ p ( c ∣ x t ) \nabla \mathbf{x}_t \log p(\mathbf{c} | \mathbf{x}_t) xtlogp(cxt)可以通过以下方式实现:

∇ x t log ⁡ p ( c ∣ x t ) ∝ − ∇ x t E ( c , x t ) \nabla \mathbf{x}_t \log p(\mathbf{c}|\mathbf{x}_t) \propto -\nabla \mathbf{x}_t \mathcal{E}(\mathbf{c}, \mathbf{x}_t) xtlogp(cxt)xtE(c,xt)
这被称为能量引导,结合上面的两个公式 x t − 1 , ∇ x t log ⁡ p ( x t ∣ c ) , ∇ x t log ⁡ p ( c ∣ x t ) x_{t-1},\nabla \mathbf{x}_t \log p(\mathbf{x}_t | \mathbf{c}) ,\nabla \mathbf{x}_t \log p(\mathbf{c} | \mathbf{x}_t) xt1,xtlogp(xtc),xtlogp(cxt),我们可以总结出条件采样公式:
x t − 1 = m t − ρ t ∇ x t E ( c , x t ) \mathbf{x}_{t-1} = \mathbf{m}_t - \rho_t \nabla \mathbf{x}_t \mathcal{E}(\mathbf{c}, \mathbf{x}_t) xt1=mtρtxtE(c,xt)
其中, m t = ( 1 + 1 2 β t ) x t + β t ∇ x t log ⁡ p ( x t ) + β t ϵ \mathbf{m}_t = (1 + \frac{1}{2} \beta_t) \mathbf{x}_t + \beta_t \nabla \mathbf{x}_t \log p(\mathbf{x}_t) + \sqrt{\beta_t} \boldsymbol{\epsilon} mt=(1+21βt)xt+βtxtlogp(xt)+βt ϵ ρ t \rho_t ρt是一个尺度因子,可以看做是修正正向的学习率。总结出来的这个 x t − 1 x_{t-1} xt1是条件扩散模型的通用公式,允许使用不同的能量函数。

5 提出方法

  该部分总共包含4个小部分:

  1. 我们使用与时间无关的距离测量函数来近似与时间有关的能量函数,从而实现无需训练且灵活的条件扩散模型。
  2. 分析能量引导在大数据域中失效的原因,并提出时间旅行策略的高效版本。
  3. 描述构建能量函数的具体细节。
  4. 提供支持条件的具体示例。

5.1 近似时间相关能量

  我们使用能量函数来引导生成,因为它构建灵活并适用于各种条件。现有的基于分类器的一些方法选择时间相关的距离测量函数 D ϕ ( c , x t , t ) \mathcal{D}_{\phi}(c, x_t, t) Dϕ(c,xt,t)来近似能量函数,如下所示:
E ( c , x t ) ≈ D ϕ ( c , x t , t ) \mathcal{E}(c, x_t) \approx \mathcal{D}_{\phi}(c, x_t, t) E(c,xt)Dϕ(c,xt,t)
其中, ϕ \phi ϕ表示定义的预训练参数, D ϕ ( c , x t , t ) \mathcal{D}_{\phi}(c, x_t, t) Dϕ(c,xt,t)计算给定条件 c c c和噪声中间结果 x t x_t xt之间的距离。由于难以找到现有的预训练网络来处理噪声图像,无法直接构建噪声数据 x t x_t xt的距离测量函数。在这种情况下,我们必须为每种类型的条件训练(或微调)一个时间相关网络。

  相比时间相关网络,干净数据 x 0 x_0 x0的时间不变距离测量函数广泛存在。许多现成的预训练网络(如分类网络、分割网络和面部 ID 编码网络)是开源的,并且在干净图像上表现良好。我们将这些用于干净数据的距离测量网络表示为 D θ ( c , x 0 ) \mathcal{D}_{\theta}(c,x_0) Dθ(c,x0),其中 θ \theta θ表示它们的预训练参数。为了将这些网络用于能量函数,一种直接的方法是使用 D θ ( c , x 0 ) \mathcal{D}_{\theta}(c,x_0) Dθ(c,x0)近似 D ϕ ( c , x t , t ) \mathcal{D}_{\phi}(c, x_t, t) Dϕ(c,xt,t),公示如下:
D ϕ ( c , x t , t ) ≈ E p ( x 0 ∣ x t ) [ D θ ( c , x 0 ) ] \mathcal{D}_{\phi}(c, x_t, t) \approx \mathbb{E}_{p(x_0 | x_t)}[\mathcal{D}_{\theta}(c, x_0)] Dϕ(c,xt,t)Ep(x0xt)[Dθ(c,x0)]
  上面的方程是合理的,因为如果噪声图像 x t x_t xt和条件 c c c之间的距离较小,则与噪声图像 x t x_t xt对应的干净图像 x 0 x_0 x0与条件 c c c之间的距离也应该较小,尤其是在采样过程的后期,当 x t x_t xt的噪声水平相对较小时。然而,在采样过程中,无法获得与中间噪声结果 x t x_t xt对应的干净图像 x 0 x_0 x0,因此我们需要近似 x 0 x_0 x0。考虑 p ( x 0 ∣ x t ) p(x_0|x_t) p(x0xt)的期望值:
x 0 ∣ t : = E [ x 0 ∣ x t ] = 1 α ˉ t ( x t + ( 1 − α ˉ t ) s ( x t , t ) ) x_{0|t} := \mathbb{E}[x_0 | x_t] = \frac{1}{\sqrt{\bar{\alpha}_t}} (x_t + (1 - \bar{\alpha}_t) s(x_t, t)) x0∣t:=E[x0xt]=αˉt 1(xt+(1αˉt)s(xt,t))
其中, α ˉ t = ∏ i = 1 t ( 1 − β i ) \bar{\alpha}_t = \prod_{i=1}^t (1 - \beta_i) αˉt=i=1t(1βi) s ( ⋅ , t ) s(\cdot,t) s(,t)是预训练的分数估计器,根据上面的公式,我们可以估计出干净的图像,记为 x 0 ∣ t x_{0|t} x0∣t。然后,根据公式 E ( c , x t ) \mathcal{E}(c, x_t) E(c,xt) D ϕ ( c , x t , t ) \mathcal{D}_{\phi}(c, x_t, t) Dϕ(c,xt,t),我们可以近似噪声数据 x t x_t xt的时间相关函数:
E ( c , x t ) ≈ D θ ( c , x 0 ∣ t ) \mathcal{E}(c, x_t) \approx \mathcal{D}_{\theta}(c, x_{0|t}) E(c,xt)Dθ(c,x0∣t)
根据上面的公式和公式 x t − 1 x_{t-1} xt1,近似采样处理过程可以写成:
x t − 1 = m t − ρ t ∇ x t D θ ( c , x 0 ∣ t ( x t ) ) x_{t-1} = m_t - \rho_t \nabla_{x_t} \mathcal{D}_{\theta}(c, x_{0|t}(x_t)) xt1=mtρtxtDθ(c,x0∣t(xt))
具体细节可以看下面的算法1
在这里插入图片描述
算法1解析

  1. 初始化:从标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)中采样,初始化 x T x_T xT
  2. 迭代采样:从 T T T到1进行迭代。
  3. 采样噪声:如果 t > 1 t > 1 t>1,从标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)中采样噪声 ϵ \epsilon ϵ,否则设 ϵ = 0 \epsilon=0 ϵ=0
  4. 更新 x t − 1 x_{t-1} xt1:根据扩散模型的采样公式更新 x t − 1 x_{t-1} xt1
  5. 估计 x 0 ∣ t x_{0|t} x0∣t:估计干净图像 x 0 ∣ t x_{0|t} x0∣t
  6. 计算梯度 g t g_t gt:计算条件 c c c和估计的干净图像 x 0 ∣ t x_{0|t} x0∣t之间的距离测量函数的梯度 g t g_t gt
  7. 更新 x t − 1 x_{t-1} xt1:根据梯度 g t g_t gt和学习率 ρ t \rho_t ρt,调整 x t − 1 x_{t-1} xt1
  8. 返回结果:返回最终的生成图像 x 0 x_0 x0

5.2 有效的时间旅行策略

  在应用算法1的时候,作者发现对于不同的数据集,性能表现差异较大。对于比较小的数据域,如人脸,算法1能在100DDIM采样步骤内有效地产生满足给定条件的结果。然而,对于大数据域(如 ImageNet),经常得到与给定条件不密切相关甚至随机生成的结果(如下图(a)所示)。作者将算法1在大数据域上失败的原因归结为指导不足。指导不足的原因是扩散模型在大数据域中的无条件得分方向有更多的自由度,使其更容易偏离条件控制的方向。为了解决这个问题,作者引入了时间旅行策略,该策略在解决困难生成任务时已被经验性地证明可以抑制生成不和谐的结果。
在这里插入图片描述
  时间旅行策略是一种将当前中间结果 x t x_t xt往回推 j j j步到 x t + j x_{t+j} xt+j并重新采样到第 x t x_t xt步的技术。这种策略在采样过程中插入更多的采样步骤,并优化生成的结果。在本文的实验中,作者每次向后推 j = 1 j = 1 j=1步并重新采样。在第 t t t步时,重复这个重新采样过程 r t r_t rt次。实验表明,时间旅行策略在解决指导不足问题上是有效的(如上图 2(b) 所示)。然而,时间成本也很高,因为采样步骤的数量增加了,特别是考虑到每个时间步都包括计算能量函数梯度的成本。

  幸运的是,作者发现时间旅行策略在每个时间步中的效果并不相同。实际上,在大多数时间步中使用这种技术不会显著修改最终结果,这意味着可以仅在少数时间步中使用这种策略,从而显著减少额外迭代步骤的数量。在下图中,作者通过将采样过程分为三个阶段来分析这种现象。在早期阶段,即混乱阶段,生成的结果 x 0 ∣ t x_{0|t} x0∣t极其模糊,能量指导难以产生任何合理的结果,所以不需要采用时间旅行策略。在后期阶段,即细化阶段,生成结果的变化很小,所以时间旅行策略没有什么用。在中间阶段,即语义阶段,生成的结果变化显著,所以这个阶段对于条件生成至关重要。基于这一观察,作者仅在语义阶段应用时间旅行策略,以实现高效采样,同时解决指导不足的问题。语义阶段的范围是一个实验性的选择,取决于选择的具体扩散模型。作者提出的包含高效时间旅行策略的FreeDoM的详细算法在算法2中展示,其中 r t = 1 r_t = 1 rt=1 意味着在第 t t t步不应用时间旅行策略。
在这里插入图片描述
算法2解析

  1. 初始化:从标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)中采样,初始化 x T x_T xT
  2. 迭代采样:从 T T T到1进行迭代。
  3. 时间旅行策略:在每个时间步 t t t,进行 r t r_t rt 次时间旅行。
  4. 采样噪声:如果 t > 1 t > 1 t>1,从标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)中采样噪声 ϵ 1 \epsilon_1 ϵ1,否则设 ϵ 1 = 0 \epsilon_1=0 ϵ1=0
  5. 更新 x t − 1 x_{t-1} xt1:根据扩散模型的采样公式更新 x t − 1 x_{t-1} xt1
  6. 估计 x 0 ∣ t x_{0|t} x0∣t:估计干净图像 x 0 ∣ t x_{0|t} x0∣t
  7. 计算梯度 g t g_t gt:计算条件 c c c和估计的干净图像 x 0 ∣ t x_{0|t} x0∣t之间的距离测量函数的梯度 g t g_t gt
  8. 更新 x t − 1 x_{t-1} xt1:根据梯度 g t g_t gt和学习率 ρ t \rho_t ρt,调整 x t − 1 x_{t-1} xt1
  9. 时间旅行重新采样:如果 i > 1 i > 1 i>1(即还需要更多次时间旅行),从标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)中采样噪声 ϵ 2 \epsilon_2 ϵ2,并根据时间旅行策略重新采样 x t x_t xt
  10. 返回结果:返回最终的生成图像 x 0 x_0 x0

5.3 能量函数构造

5.3.1 单一条件引导

  为了在特定应用中融入提出的算法,作者使用符合以下结构的距离测量函数来构建能量函数:
E ( c , x t ) ≈ D θ ( c , x 0 ∣ t ) = Dist ( P θ 1 ( c ) , P θ 2 ( x 0 ∣ t ) ) \mathcal{E}(\mathbf{c}, \mathbf{x}_t) \approx \mathcal{D}_{\boldsymbol{\theta}}(\mathbf{c}, \mathbf{x}_{0|t}) = \text{Dist}(\mathcal{P}_{\boldsymbol{\theta}1}(\mathbf{c}), \mathcal{P}_{\boldsymbol{\theta}2}(\mathbf{x}_{0|t})) E(c,xt)Dθ(c,x0∣t)=Dist(Pθ1(c),Pθ2(x0∣t))
其中, D i s t ( ⋅ ) Dist(\cdot) Dist() 表示距离测量方法,如欧几里得距离, θ = { θ 1 , θ 2 } \theta = \{\theta_1, \theta_2\} θ={θ1,θ2} P θ 1 ( ⋅ ) \mathcal{P}{\boldsymbol{\theta}1}(·) Pθ1() P θ 2 ( ⋅ ) \mathcal{P}{\boldsymbol{\theta}2}(·) Pθ2() 将条件和图像投射到同一空间进行距离测量。这些投射网络可以是预训练的分类网络、分割网络等。在大多数情况下,我们只需要一个网络将干净图像 x 0 ∣ t x_{0|t} x0∣t 投射到条件空间。在有参考图像 x ref x_{\text{ref}} xref 的情况下,我们也只需要一个特征编码器将参考图像 x ref x_{\text{ref}} xref x 0 ∣ t x_{0|t} x0∣t 投射到相同的特征空间。

5.3.2 多条件引导

  在一些更复杂的应用中,可以有多个条件来控制生成的结果。以图像风格传递任务为例。这里,我们有两个条件:来自源图像的结构信息和来自样式图像的样式信息。在这些多条件情况下,假设给定的条件表示为 { c 1 , ⋯   , c n } \{c_1, \cdots, c_n\} {c1,,cn},我们可以近似构建能量函数为:
E ( { c 1 , ⋯   , c n } , x t ) ≈ η 1 D θ 1 ( c 1 , x 0 ∣ t ) + ⋯ + η n D θ n ( c n , x 0 ∣ t ) (12) \mathcal{E}(\{\mathbf{c}_1, \cdots, \mathbf{c}_n\}, \mathbf{x}_t) \approx \eta_1\mathcal{D}_{\boldsymbol{\theta}1}(\mathbf{c}_1, \mathbf{x}_{0|t}) + \cdots + \eta_n\mathcal{D}_{\boldsymbol{\theta}n}(\mathbf{c}_n, \mathbf{x}_{0|t}) \tag{12} E({c1,,cn},xt)η1Dθ1(c1,x0∣t)++ηnDθn(cn,x0∣t)(12)
其中, η i \eta_i ηi 是权重因子。作者为特定条件使用不同的距离测量函数 { D θ 1 ( ⋅ , ⋅ ) , ⋯   , D θ n ( ⋅ , ⋅ ) } \{\mathcal{D}_{\boldsymbol{\theta}1}(·, ·), \cdots, \mathcal{D}_{\boldsymbol{\theta}n}(·, ·)\} {Dθ1(⋅,⋅),,Dθn(⋅,⋅)},并将其总和用于梯度计算。

5.3.3 潜在扩散的引导

  作者说他提出的方法不仅适用于图像扩散,也适用于潜在扩散,例如Stable Diffusion。在这种情况下,中间结果 x t x_t xt 是潜在编码而不是图像。作者提出可以使用潜在解码器将生成的潜在编码投射到图像,然后在图像域中使用相同的算法。

5.4 具体例子

5.4.1 文本

  对于给定的文本提示,基于CLIP构建距离测量函数。具体来说,使用CLIP图像编码器(作为 P θ 2 ( ⋅ ) \mathcal{P_{\theta_2}(\cdot)} Pθ2())和CLIP文本编码器(作为 P θ 2 ( ⋅ ) \mathcal{P_{\theta_2}(\cdot)} Pθ2())将图像 x 0 ∣ t x_{0|t} x0∣t和给定的文本投射到相同的CLIP特征空间。与常用的余弦距离测量相比,为简便起见,我们选择了 ℓ 2 \ell_{2} 2欧几里得距离测量,因为实验中采样质量没有显著差异。

5.4.2 分割图

  对于分割图,我们选择基于实时语义分割网络BiSeNet的人脸解析网络来生成输入人脸的解析图,并直接计算给定解析图与 x 0 ∣ t x_{0|t} x0∣t解析结果之间的 ℓ 2 \ell_2 2欧几里得距离。人脸解析网络的一个有趣用法是约束梯度更新区域,这样我们可以编辑目标语义区域而不改变其他区域(如下图所示)
在这里插入图片描述

5.4.3 素描

  我们选择一个开源的预训练网络,它将给定的动画图像转换为手绘素描风格。实验证明,该网络对真实世界图像仍然有效。我们使用 ℓ 2 \ell_2 2欧几里得距离来比较给定的素描与 x 0 ∣ t x_{0|t} x0∣t的转换素描风格结果。

5.4.4 关键点检测

  我们使用一个开源的预训练人脸关键点检测网络。该检测网络有两个阶段:第一阶段找到人脸中心位置,第二阶段标记该检测到的人脸的关键点。我们计算 x 0 ∣ t x_{0|t} x0∣t预测的人脸关键点与给定的关键点条件之间的 ℓ 2 \ell_2 2欧几里得距离,并仅在第一阶段检测到的人脸区域使用梯度更新中间结果。

5.4.5 Face IDs

  我们使用一个开源的预训练人脸识别网络ArcFace提取参考人脸的目标特征以表示人脸ID,并计算 x 0 ∣ t x_{0|t} x0∣t提取的ID特征与参考图像的ID特征之间的 ℓ 2 \ell_2 2欧几里得距离。

5.4.6 风格图像

  风格图像表示为 x s t y l e x_{style} xstyle 。我们使用以下公式计算 x s t y l e x_{style} xstyle x 0 ∣ t x_{0|t} x0∣t之间的风格信息距离:
Dist ( x style , x 0 ∣ t ) = ∣ ∣ G ( x style ) j − G ( x 0 ∣ t ) j ∣ ∣ F 2 , \text{Dist}(\mathbf{x}_{\text{style}}, \mathbf{x}_{0|t}) = ||G(\mathbf{x}_{\text{style}})_j - G(\mathbf{x}_{0|t})_j||_F^2, Dist(xstyle,x0∣t)=∣∣G(xstyle)jG(x0∣t)jF2,
其中, G ( ⋅ ) G(\cdot) G()表示图像编码器第 j j j层特征图的Gram矩阵,在实验中,我们选择CLIP图像编码器第三层的特征来生成满意的结果。

5.4.7 低通滤波器

  对于图像传输任务,我们需要一个能约束生成结果符合源图像 x s o r c e x_{sorce} xsorce结构信息的能量函数。类似于EGSDEILVR,我们在这个设置中选择了一个低通滤波器 K ( ⋅ ) \mathcal{K}(\cdot) K()。源图像 x s o r c e x_{sorce} xsorce x 0 ∣ t x_{0|t} x0∣t之间的距离计算如下:
Dist ( x source , x 0 ∣ t ) = ∣ ∣ K ( x source ) − K ( x 0 ∣ t ) ∣ ∣ 2 2 . \text{Dist}(\mathbf{x}_{\text{source}}, \mathbf{x}_{0|t}) = ||\mathcal{K}(\mathbf{x}_{\text{source}}) - \mathcal{K}(\mathbf{x}_{0|t})||_2^2. Dist(xsource,x0∣t)=∣∣K(xsource)K(x0∣t)22.

6 实验

6.1 实施细节

  作者提出的方法适用于许多开源的预训练扩散模型(DMs)。在的实验中,尝试了以下模型和条件:

  • 无条件人脸扩散模型:

支持的图像分辨率:256×256
预训练数据集:CelebA-HQ
实验条件:包括文本、解析图、草图、标志点和人脸ID

  • 无条件ImageNet扩散模型:

支持的图像分辨率:256×256
预训练数据集:ImageNet
实验条件:包括文本和风格图像

  • 基于分类器的ImageNet扩散模型:

支持的图像分辨率:256×256
预训练数据集:ImageNet
特点:带有时间依赖的分类器指导生成过程。
实验条件:风格图像

  • Stable Diffusion:

模型类型:潜在扩散模型
标准输出图像分辨率:512×512(支持更高分辨率)
特点:文本到图像模型
实验条件:风格图像

  • ControlNet [49]:

模型基础:基于Stable Diffusion,支持额外条件输入和原始文本输入。
使用的预训练模型:姿势到图像和涂鸦到图像模型
实验条件:包括人脸ID和风格图像。

7 性能表现

7.1 单一条件

  • 人脸数据
    在这里插入图片描述
  • ImageNet数据
    在这里插入图片描述

7.2 多条件

在这里插入图片描述

7.3 潜在域免训引导

在这里插入图片描述
  以上就是对本篇论文的解读,如有任何问题欢迎留言,批评指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1951521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化:智能物流管理系统设计思路流程(附代码示例)

目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. STM32微控制器与传感器代码 代码讲解 2. MQTT Broker设置 3. 数据接收与处理 代码讲解 4. 数据存储与分析 5. 数据分析与可视化 代码讲解 6. 数据可视化 项目总结 项目概述 随着电子商务的快…

Week 3 DAY 5:

Game on Ranges - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Game on Ranges 这道题题目意思有点难理解,加上是英文提面,这里解释一下,有两个人A和B, 一开始给定一个n,是1到n的排列,A人负责选取区间,…

数模打怪(八)之图论模型

一、作图 图的数学语言描述: G( V(G), E(G) ),G(graph):图,V(vertex):顶点集,E(edge):边集 1、在线作图 https://csac…

第G4周:CGAN|生成手势图像 | 可控制生成

本文为🔗365天深度学习训练营 中的学习记录博客 原作者:K同学啊 理论知识: 条件生成对抗网络(CGAN)是在生成对抗网络(GAN)的基础上进行了一些改进。对于原始GAN的生成器而言,其生成的…

C#基础——类、构造函数和静态成员

类 类是一个数据类型的蓝图。构成类的方法和变量称为类的成员,对象是类的实例。类的定义规定了类的对象由什么组成及在这个对象上可执行什么操作。 class 类名 { (访问属性) 成员变量; (访问属性) 成员函数; } 访问属性:public(公有的&…

MinIO对象生命周期

Object Management — MinIO Object Storage for Windowshttps://min.io/docs/minio/windows/administration/object-management.html 1.概念 MinIO 对象生命周期是指对存储在 MinIO 中的对象进行自动管理的一套策略。这些策略可以用于自动删除旧对象、转移对象到不同的存储类别…

Golang高效合并(拼接)多个gzip压缩文件

有时我们可能会遇到需要把多个 gzip 文件合并成单个 gzip 文件的场景,最简单最容易的方式是把每个gzip文件都先解压,然后合并成一个文件后再次进行压缩,最终得到我们想要的结果,但这种先解压后压缩的方式显然效率不高,…

day08:订单状态定时处理、来单提醒和客户催单

文章目录 Spring Task介绍cron表达式入门案例 订单状态定时处理需求分析代码开发扩展 WebSocket介绍入门案例特点 来单提醒需求分析和设计代码实现 客户催单需求分析和设计代码实现 Spring Task 介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时…

爬虫提速!用Python实现多线程下载器!

✨ 内容: 在网络应用中,下载速度往往是用户体验的关键。多线程下载可以显著提升下载速度,通过将一个文件分成多个部分并行下载,可以更高效地利用带宽资源。今天,我们将通过一个实际案例,学习如何用Python实…

C++ | Leetcode C++题解之第292题Nim游戏

题目: 题解: class Solution { public:bool canWinNim(int n) {return n % 4 ! 0;} };

如何使用API快速打造健康医疗系统?

在数字医疗市场,数据是人们经常谈及的一个话题。当前,消费者医疗和健康应用收集的数据越来越多,电子健康记录的实施也创造出了大量有关病人的电子信息。 API接口在智慧医院跨网、跨机构之间的业务协同和数据共享交换中得到数据共享。支撑了医…

鸿蒙APP架构及开发入门

1.鸿蒙系统 1.1 什么是鸿蒙 鸿蒙是一款面向万物互联时代的、全新的分布式操作系统。 在传统的单设备系统能力基础上,鸿蒙提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机、PC、智能音箱、耳机、…

【数学建模】权重生成与评价模型(上)

文章目录 权重生成与评价模型(上)1. 层次分析法1.1 层次分析法的原理构建判断矩阵权重向量计算一致性检验 1.2 层次分析法的案例1. 建立层次结构2. 构建判断矩阵3. 计算权重向量4. 一致性检验5. 计算综合权重 1.3 另一种得出综合得分的方法例子计算步骤完…

计算机实验室排课查询小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,教师管理,实验室信息管理,实验室预约管理,取消预约管理,实验课程管理,实验报告管理,报修信息管理&#xff0…

Leetcode49. 字母异位词分组(java实现)

今天我来给大家分享的是leetcode49的解题思路,题目描述如下 如果没有做过leetcode242题目的同学,可以先把它做了,会更好理解异位词的概念。 本道题的大题思路是: 首先遍历strs,然后统计每一个数组元素出现的次数&#…

Java 基础学习第二节: Java 变量与数据类型

第二节 001.回顾 1.Java开发环境 1.Java编译运行过程 编译期:.java源文件,经过编译,生成.class字节码文件运行期:JVM加载.class文件并运行跨平台,一次编程,到处使用 2.名词解释 JVM:java虚拟机,加载并运行.classJRE:java运行环境,JVMjava系统类库JDK:java开发工具包,JRE开发j…

【计算机网络】期末实验答辩

注意事项: 1)每位同学要在下面做过的实验列表中选取三个实验进行答辩准备,并将自己的姓名,学号以及三个实验序号填入共享文档"1(2)班答辩名单"中。 2)在答辩当日每位同学由老师在表…

Dify 零代码 AI 应用开发:快速入门与实战

一、Dify 介绍 Dify 是一个开源的大语言模型 (LLM) 应用开发平台。它结合了后端即服务 (Backend-as-a-Service) 和 LLMOps (LLMOps) 的概念,使开发人员能够快速构建生产级生成式 AI (Generative AI) 应用。即使是非技术人员也可以参与 AI 应用的定义和数据操作。 …

CeoMax总裁主题最新3.8.1破解免授权版/WordPress付费资源素材下载主题

CeoMax总裁主题最新3.8.1破解免授权版,一套WordPress付费资源素材下载的主题,感觉这是做资源站唯一一个可以和ripro媲美甚至超越的模板,UI很美,功能也很强大,有想学习的可下载搭建学习一下,仅供学习研究借鉴…

C语言同时在一行声明指针和整型变量

如果这么写, int *f, g; 并没有声明2个指针,编译器自己会识别,f是一个指针,g是一个整型变量; void CTszbView::OnDraw(CDC* pDC) {CTszbDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for nat…