当前位置: 首页 > news >正文

Guiding a Diffusion Model with a Bad Version of Itself

Guiding a Diffusion Model with a Bad Version of Itself

  • Abstract
  • 1. Introduction
  • 2. Background
  • 3. Why does CFG improve image quality?
    • Score matching leads to outliers.
    • CFG 消除异常值
    • Discussion
  • 4 Our method

Abstract

在图像生成扩散模型中,主要关注的轴心是图像质量、结果的变化量以及结果与给定条件(例如类别标签或文本提示)的对齐程度。流行的无分类器指导方法使用无条件模型来指导条件模型,从而在提高提示对齐和图像质量的同时,减少了变化量。这些效果似乎本质上是纠缠在一起的,因此难以控制。我们惊讶地发现,通过使用较小、训练较少的模型本身而不是无条件模型来指导生成,可以在不牺牲变化量的情况下获得对图像质量的独立控制。这在 ImageNet 生成中带来了显著的改进,使用公开可用的网络在 64×64 和 512×512 尺寸上分别创下了 1.01 和 1.25 的记录 FID。此外,该方法也适用于无条件扩散模型,大大提高了它们的质量。

1. Introduction

扩散去噪模型 [12, 37, 38, 39, 40] 通过逆转随机污染过程来生成合成图像。本质上,图像是通过逐步去噪从纯噪声中显现出来的。实现去噪器(等同于 [44] 的得分函数 [15])的神经网络是设计的核心元素,并提出了各种架构(例如,[1, 5, 7, 14, 16, 19, 30])。同样重要的是对应于求解常微分方程 [27, 38] 或随机微分方程 [40] 的多步去噪过程的细节,为此已经评估了许多不同的参数化、求解器和步骤计划 [17, 18, 22, 35, 46]。为了控制输出图像,去噪器通常依赖于类别标签、文本提示的嵌入或其他形式的条件输入。

扩散模型的训练目标是覆盖整个(条件)数据分布。这在低概率区域引发问题:模型因为无法表示这些区域而受到重罚,但它没有足够的数据来学习生成与这些区域对应的良好图像。无分类器指导【Classifier-free guidance】(CFG)[13] 已成为“降低采样温度”的标准方法,即将生成集中在学习良好的高概率区域。通过训练去噪网络在条件和无条件设置下操作,采样过程可以偏离无条件结果——实际上,无条件生成任务指定了一个要避免的结果。这导致更好的提示对齐和改进的图像质量,其中前者是由于 CFG 隐式地将条件部分的概率密度提高到大于一的幂 [8]。

然而,CFG 作为一种通用的低温采样方法,其缺点限制了其使用。首先,它仅适用于条件生成,因为指导信号基于条件和无条件去噪结果之间的差异。其次,由于无条件和条件去噪器被训练来解决不同的任务,采样轨迹可能会超出预期的条件分布,导致图像构图偏斜且常常过于简化 [21]。最后,提示对齐和质量改进的效果无法分开控制,并且它们之间的确切关系尚不清楚。

在本文中,我们提供了关于为何 CFG 提高图像质量的新见解,并展示了如何将这一效果分离为一种新方法,我们称之为自动指导(autoguidance)。我们的方法不会遇到任务不一致问题,因为我们使用了主要模型本身的一个较差版本作为指导模型,且保持条件不变。这个指导模型可以通过简单地限制模型容量和/或训练时间来获得。我们在各种合成测试用例以及在类别条件和文本条件设置下的实际图像合成中验证了自动指导的有效性。此外,我们的方法能够为无条件合成提供指导。在定量测试中,使用 FID [10] 和 FDDINOv2 [42] 指标衡量时,生成的图像分布显著改善,并在 ImageNet-512 和 ImageNet-64 生成中创下新纪录。

2. Background

去噪扩散。 去噪扩散通过迭代地对纯白噪声样本进行去噪,从而生成来自数据分布 p d a t a ( x ) p_{data}(x) pdata(x) 的样本,使得无噪声的随机数据样本逐渐显现出来 [12]。其思想是考虑 p d a t a ( x ) p_{data}(x) pdata(x) 的热扩散(heat diffusion),形成一系列逐渐平滑的密度 p ( x ; σ ) = p d a t a ( x ) ∗ N ( x ; 0 , σ 2 I ) p(x; \sigma) = p_{data}(x) \ast N(x; 0, \sigma^2I) p(x;σ)=pdata(x)N(x;0,σ2I)。对于足够大的 σ m a x \sigma_{max} σmax,我们有 p ( x ; σ m a x ) ≈ N ( x ; 0 , σ m a x 2 I ) p(x; \sigma_{max}) \approx N(x; 0, \sigma^2_{max}I) p(x;σmax)N(x;0,σmax2I),可以简单地通过生成正态分布的白噪声进行采样。然后将生成的样本通过概率流常微分方程(ODE)向低噪声水平演变 [18, 38, 40]:

d x σ = − σ ∇ x σ log ⁡ p ( x σ ; σ ) d σ (1) dx_\sigma = -\sigma \nabla_{x_\sigma} \log p(x_\sigma; \sigma) d\sigma \tag{1} dxσ=σxσlogp(xσ;σ)dσ(1)

该方程保证对于每个 σ ∈ [ 0 , σ m a x ] \sigma \in [0, \sigma_{max}] σ[0,σmax] x σ ∼ p ( x σ ; σ ) x_\sigma \sim p(x_\sigma; \sigma) xσp(xσ;σ)。当 σ = 0 \sigma = 0 σ=0 时,我们得到 x 0 ∼ p ( x 0 ; 0 ) = p d a t a ( x 0 ) x_0 \sim p(x_0; 0) = p_{data}(x_0) x0p(x0;0)=pdata(x0) ,正是我们所期望的。

在实际操作中,ODE 通过沿着方程 (1) 定义的轨迹进行数值求解。这需要在每一步对给定样本 x x x 和噪声水平 σ \sigma σ 计算所谓的得分函数 [15] ∇ x log ⁡ p ( x ; σ ) \nabla_x \log p(x; \sigma) xlogp(x;σ)。令人惊讶的是,我们可以用一个神经网络 D θ ( x ; σ ) D_\theta(x; \sigma) Dθ(x;σ) 来近似这个向量,该网络通过如下去噪任务进行参数化权重 θ \theta θ 的训练:

θ = arg ⁡ min ⁡ θ E y ∼ p d a t a , σ ∼ p t r a i n , n ∼ N ( 0 , σ 2 I ) ∥ D θ ( y + n ; σ ) − y ∥ 2 2 (2) \theta = \arg \min_\theta \mathbb{E}_{y \sim p_{data}, \sigma \sim p_{train}, n \sim N(0, \sigma^2I)} \| D_\theta(y + n; \sigma) - y \|_2^2 \tag{2} θ=argθminEypdata,σptrain,nN(0,σ2I)Dθ(y+n;σ)y22(2)

其中 p t r a i n p_{train} ptrain 控制训练期间的噪声水平分布。给定 D θ D_\theta Dθ,我们可以估计

∇ x log ⁡ p ( x ; σ ) ≈ D θ ( x ; σ ) − x σ 2 \nabla_x \log p(x; \sigma) \approx \frac{D_\theta(x; \sigma) - x}{\sigma^2} xlogp(x;σ)σ2Dθ(x;σ)x

近似误差取决于有限的容量或训练时间 [18, 44]。因此,我们可以将网络解释为预测去噪样本或得分向量,以便于当前分析。许多重新参数化和实际 ODE 求解器是可能的,正如 Karras 等人所列举的 [18]。我们遵循他们的建议,包括使用 σ ( t ) = t \sigma(t) = t σ(t)=t 的时间计划,这使我们可以通过噪声水平 σ \sigma σ 而不是单独的时间变量 t t t 来直接参数化 ODE。

在大多数应用中,每个数据样本 x x x 都与一个标签 c c c 相关联,例如表示类别索引或文本提示。在生成时,我们通过选择一个标签 c c c 并寻找条件分布 p ( x ∣ c ; σ ) p(x|c; \sigma) p(xc;σ) 的样本来控制结果,当 σ = 0 \sigma = 0 σ=0 时实现这一目标。在实际操作中,这是通过训练一个接受 c c c 作为附加条件输入的去噪网络 D θ ( x ; σ , c ) D_\theta(x; \sigma, c) Dθ(x;σ,c) 来实现的。

无分类器引导(Classifier-Free Guidance, CFG)
对于复杂的视觉数据集,生成的图像往往无法再现训练图像的清晰度,这是由于有限容量的网络产生的逼近误差。一个广泛使用的技巧叫做无分类器引导(CFG)[13],它将样本推向类标签的更高似然性,牺牲了多样性,以生成“更标准”的图像,这些图像网络似乎更能处理。

在一般情况下,扩散模型中的引导作用涉及两个去噪网络 D 0 ( x ; σ , c ) D_0(x; \sigma, c) D0(x;σ,c) D 1 ( x ; σ , c ) D_1(x; \sigma, c) D1(x;σ,c)。引导效果是通过在两个去噪结果之间进行外推来实现的,外推系数为 w w w
D w ( x ; σ , c ) = w D 1 ( x ; σ , c ) + ( 1 − w ) D 0 ( x ; σ , c ) (3) D_w(x; \sigma, c) = wD_1(x; \sigma, c) + (1 - w)D_0(x; \sigma, c) \tag{3} Dw(x;σ,c)=wD1(x;σ,c)+(1w)D0(x;σ,c)(3)
显然,设置 w = 0 w = 0 w=0 w = 1 w = 1 w=1 会分别恢复 D 0 D_0 D0 D 1 D_1 D1 的输出,而选择 w > 1 w > 1 w>1 会过度强调 D 1 D_1 D1 的输出。回想一下去噪器和得分函数的等价性 [44],我们可以写出:
D w ( x ; σ , c ) ≈ x + σ 2 ∇ x log ⁡ ( p 0 ( x ∣ c ; σ ) p 1 ( x ∣ c ; σ ) ) w ∝ p w ( x ∣ c ; σ ) (4) D_w(x; \sigma, c) \approx x + \sigma^2 \nabla_x \log \left( \frac{p_0(x|c; \sigma)}{p_1(x|c; \sigma)} \right) w \quad \propto p_w(x|c; \sigma) \tag{4} Dw(x;σ,c)x+σ2xlog(p1(xc;σ)p0(xc;σ))wpw(xc;σ)(4)
因此,引导使我们能够访问在括号内表示的密度 p w ( x ∣ c ; σ ) p_w(x|c; \sigma) pw(xc;σ) 的得分。这一得分可以进一步写成:
∇ x log ⁡ p w ( x ∣ c ; σ ) = ∇ x log ⁡ p 1 ( x ∣ c ; σ ) + ( w − 1 ) ∇ x log ⁡ p 1 ( x ∣ c ; σ ) p 0 ( x ∣ c ; σ ) (5) \nabla_x \log p_w(x|c; \sigma) = \nabla_x \log p_1(x|c; \sigma) + (w - 1) \nabla_x \log \frac{p_1(x|c; \sigma)}{p_0(x|c; \sigma)}\tag{5} xlogpw(xc;σ)=xlogp1(xc;σ)+(w1)xlogp0(xc;σ)p1(xc;σ)(5)
将这个表达式代入方程 (1) 中的ODE中,得到从 p 1 p_1 p1 生成图像的标准演化,并且有一个扰动(当 w > 1 w > 1 w>1 时)增加了在样本点评估时 p 1 p_1 p1 p 0 p_0 p0 的比值。后者可以解释为增加一个假设的分类器将该样本归属于 p 1 p_1 p1 而不是 p 0 p_0 p0 的可能性。

在CFG中,我们训练一个辅助的无条件去噪器 D θ ( x ; σ ) D_\theta(x; \sigma) Dθ(x;σ),用于去噪分布 p ( x ; σ ) p(x; \sigma) p(x;σ),并使用它作为 D 0 D_0 D0。在实际操作中,这通常是通过使用相同的网络 D θ D_\theta Dθ 来实现的,该网络没有条件标签,设置为 D 0 : = D θ ( x ; σ , ∅ ) D_0 := D_\theta(x; \sigma, \emptyset) D0:=Dθ(x;σ,) D 1 : = D θ ( x ; σ , c ) D_1 := D_\theta(x; \sigma, c) D1:=Dθ(x;σ,c)
根据贝叶斯定理,外推后的得分向量变为:
∇ x log ⁡ p ( x ∣ c ; σ ) + ( w − 1 ) ∇ x log ⁡ p ( c ∣ x ; σ ) \nabla_x \log p(x|c; \sigma) + (w - 1) \nabla_x \log p(c|x; \sigma) xlogp(xc;σ)+(w1)xlogp(cx;σ)
在采样过程中,这引导图像更强烈地与指定的类别 c c c 对齐。

人们可能会认为,使用方程 (5) 中的得分函数来解决扩散ODE会生成来自 p w ( x ∣ c ; 0 ) p_w(x|c; 0) pw(xc;0) 指定的数据分布的样本。然而,事实并非如此,因为 p w ( x ∣ c ; σ ) p_w(x|c; \sigma) pw(xc;σ) 并不表示有效的 p w ( x ∣ c ; 0 ) p_w(x|c; 0) pw(xc;0) 热扩散过程。因此,解ODE实际上并没有遵循这个密度。相反,样本在每个噪声水平下都会盲目地被推向隐含密度的更高值。这会导致采样轨迹的失真,极度夸大的截断和模式丢失[21],以及颜色的过度饱和[36]。尽管如此,图像质量的提升往往是显著的,并且尽管存在这些缺点,通常还是会使用较高的引导值。

3. Why does CFG improve image quality?

我们首先确定了分类器无关引导(CFG)如何改善图像质量,而不仅仅是影响提示对齐。为了说明为什么未引导的扩散模型通常生成不令人满意的图像,以及CFG如何解决这个问题,我们研究了一个二维的玩具示例,其中一个小规模的去噪网络被训练用于在一个合成数据集上执行条件扩散(图1)。该数据集设计为具有低局部维度(即高度各向异性和窄支持),并且在去噪过程中逐步显现出局部细节的层次化特征。这些特性在实际图像的流形中也可以预期到[4, 32]。关于设置的详细信息,见附录C。

在这里插入图片描述

图1:一个类似分形的二维分布,灰色和橙色区域表示两个类别。大约99%的概率质量位于显示的轮廓内。(a) 从橙色类别分布直接绘制的真实样本。(b) 使用一个小型去噪扩散模型进行条件采样,产生了离群点。© 使用分类器无关引导(w = 4)消除了离群点,但通过过度强调类别,减少了多样性。(d) 通过延长得分向量进行的简单截断。(e) 我们的方法将样本集中在高概率区域,而不会减少多样性。

Score matching leads to outliers.

与直接从底层分布中采样(图1a)相比,未引导的扩散(图1b)生成了大量极不可能的样本,这些样本位于分布的边缘。在图像生成的情况下,这些样本将对应于不现实的和破碎的图像。

我们认为,异常值来源于得分网络的有限能力与得分匹配目标的结合。众所周知,最大似然(ML)估计会导致数据分布的“保守”拟合[2],即模型会尽力覆盖所有训练样本。这是因为底层的Kullback–Leibler散度(KL散度)对任何训练样本的似然低估会产生极高的惩罚。虽然得分匹配通常不等同于最大似然估计,但它们是密切相关的[12, 24, 40],并表现出类似的行为。例如,已知对于多元高斯模型,最优的得分匹配拟合与最大似然估计相吻合[15]。

图2a和2b展示了在我们的玩具示例中,两个不同容量模型在中等噪声水平下学习到的得分场和隐含的密度。更强大的模型将数据紧密包围,而较弱的模型的密度则更加分散。

从图像生成的角度来看,模型过度覆盖整个训练数据分布变成了一个问题:模型最终会从数据分布的极端区域生成奇怪且不太可能的图像,这些图像并没有被准确学习,而是为了避免高损失惩罚而被包括进来。此外,在训练过程中,网络仅仅见过真实的噪声图像作为输入,而在采样时,它可能没有准备好处理从高噪声水平传递下来的不太可能的样本。

在这里插入图片描述

图2:图1c中高亮区域的放大图。(a) 在中间噪声水平 σ m i d σ_{mid} σmid下,学习得到的条件密度 p 1 ( x ∣ c ; σ m i d ) p_1(x|c; σ_{mid}) p1(xc;σmid)(绿色)及其得分向量(对数梯度),在代表性样本点处绘制。学习到的密度近似于底层真实的条件密度 p 1 ( x ∣ c ; σ m i d ) p_1(x|c; σ_{mid}) p1(xc;σmid)(橙色),但未能复现更细致的特征。(b) 较弱的无条件模型学习到了一个更为分散的密度 p 0 ( x ∣ c ; σ m i d ) p_0(x|c; σ_{mid}) p0(xc;σmid)(红色),拟合数据的效果较松散。(c ) 引导根据两个学习到的密度的(对数)比率的梯度(蓝色)移动样本点。由于较高质量的模型在数据上更为集中,因此该梯度场指向数据分布的核心。对应的梯度只是(a)和(b)中各自梯度的差异,在选定的点处进行示意。(d) 标准无引导扩散模型的采样轨迹,沿着学习得到的得分 ∇ x l o g p 1 ( x ∣ c ; σ ) ∇_x log p_1(x|c; σ) xlogp1(xc;σ)从噪声水平 σ m i d σ_{mid} σmid到0进行采样。等高线(橙色)表示底层真实的无噪声密度。(e) 引导引入了额外的力,如(c )所示,导致采样过程中样本点集中在数据密度的核心区域。

CFG 消除异常值

在生成过程中应用 无分类器引导(classifier-free guidance, CFG) 的效果如图 1c 所示。正如预期的那样,样本避免了类边界(即,灰色区域附近没有样本),整个分布的某些分支被丢弃。我们还观察到第二种现象,即样本被拉向数据流形的核心区域,远离低概率的中间区域。看到这一点,我们认为这就是图像质量提升的原因。然而,单纯地增强类的似然性并不能完全解释这种集中的现象。

我们认为,这一现象源于条件去噪器(denoiser)无条件去噪器之间的质量差异。无条件去噪器 D 0 D_0 D0 面临比条件去噪器 D 1 D_1 D1 更难的任务:它必须同时生成来自所有类别的样本,而 条件去噪器 D 1 D_1 D1 只需要针对某一特定类别生成样本。由于任务更为复杂,并且通常只有较少的训练资源, D 0 D_0 D0 网络的拟合效果较差。这个精度差异可以通过图 2a 和 2b 中学习到的密度分布来看出。

从我们在第 2 节的解释来看,CFG 不是仅仅增强了样本来自类别 c 的似然性,还增强了样本来自更高质量的隐含分布的可能性。回顾一下,CFG 的引导效果最终可以看作是一个附加的力(方程 5),它将样本拉向 l o g [ p 1 ( x ∣ c ; σ ) / p 0 ( x ∣ c ; σ ) ] log [p_1(x|c; σ)/p_0(x|c; σ)] log[p1(xc;σ)/p0(xc;σ)] 的更高值。在图 2c 中,我们绘制了我们玩具示例中的这个比率,同时也展示了引导对 ODE 向量场贡献的梯度。我们可以看到,这个比率随着距离流形的远离而下降,因为分母 p0 表示一个更分散的分布,因此衰减得比分子 p1 更慢。因此,梯度指向流形的内部。每个密度比率的等高线对应于一个假设分类器会给样本分配的特定似然值,表示该样本来自 p1 而非 p0。由于这些等高线大致跟随数据流形的局部方向和分支,推送样本向“良好侧”集中,使得样本聚集在流形的核心区域。

Discussion

我们可以预期,这两个模型会在拟合相似区域时表现出不同程度的不足。去噪器的预测在这些区域会更有差异。因此,CFG 可以看作是一种自适应截断,它能识别出某个样本可能被低估的情况,并将其推向更好的样本方向。图 2d 和 2e 展示了这种效果在生成过程中的变化:这种截断会“超调”修正,从而生成的分布比真实数据分布更窄,但实际上这并没有对图像质量产生不利影响。

相比之下,一种简单的尝试——例如,借鉴 GANs 中的截断技巧或生成语言模型中的温度降低——会通过均匀地将得分向量延长一个系数 w > 1 来实现截断。图 1d 中展示了这一点:样本确实集中在高概率区域,但这种集中是各向同性的,导致外部分支区域为空。在实际应用中,这种方式生成的图像往往会表现出较少的变异、过于简化的细节和单调的纹理。

总结:
CFG 不仅提高了样本的类别似然性,还增加了来自更高质量分布的样本的概率,使得生成的样本更加集中、真实。
无条件去噪器 D 0 D_0 D0)与条件去噪器 D 1 D_1 D1)之间的差异是导致质量提升的原因,CFG 通过引导样本更集中在数据流形的核心区域,而非流形的边缘。
这种引导相当于一种自适应的截断,可以有效避免生成异常值,提升图像的质量。

4 Our method

我们提出通过直接使用一个低质量模型 D 0 D_0 D0 来指导高质量模型 D 1 D_1 D1,从而隔离图像质量提升的效果。 D 0 D_0 D0 D 1 D_1 D1 在相同的任务、条件和数据分布上进行训练,但 D 0 D_0 D0 由于容量不足和/或训练不足而遭遇某些额外的退化问题。我们称这种方法为 自引导(autoguidance),即用自身的劣化版本来指导模型。

在我们的 2D 玩具示例中,这个方法表现得出奇的好。图 1e 展示了使用一个较小的 D 0 D_0 D0(训练次数较少的模型)时的效果。如预期所示,样本被拉近了数据分布,但没有系统地丢弃任何部分。

为什么这个方法有效?
回顾一下,在有限的模型容量下,得分匹配(score matching) 倾向于过度强调数据分布中的低概率(即不太可能且未充分训练)区域。问题的出现具体位置和形式取决于许多因素,比如网络架构、数据集、训练细节等,因此我们无法预先确定并描述这些具体问题。然而,我们可以预期,同一个模型的较弱版本会在相同的区域做出类似的错误,只是更明显。自引导 的目的是通过测量强模型与弱模型预测的差异,识别并减少强模型的错误,并增强它。当两个模型的预测一致时,扰动微不足道;但当它们预测不一致时,差异会指示出更好的样本方向。

因此,我们可以预期,如果两个模型遭遇的退化问题是相互兼容的,自引导 会有效。由于任何 D 1 D_1 D1 模型都可能在某种程度上遇到容量不足和训练不足等问题,因此选择 D 0 D_0 D0 时应进一步加剧这些问题。

在实践中,分别训练或训练迭代次数不同的模型不仅在拟合精度上有所不同,还会在随机初始化、训练数据的洗牌等方面有所不同。为了使引导成功,质量差距应足够大,以至于系统性地扩展密度比这些随机效应更为显著。

Study on synthetic degradations.
为了验证我们的假设,即两个模型必须遭遇相同类型的退化问题,我们进行了一项受控实验,使用合成的退化作用于一个训练良好的现实世界图像扩散模型。我们通过对基础模型应用不同程度的合成退化来创建主网络和引导网络 D 1 D_1 D1 D 0 D_0 D0。这种构造使得我们可以使用未受影响的基础模型作为基准,衡量各种退化组合在 D 1 D_1 D1 D 0 D_0 D0 上的 FID 效果。我们发现,只要退化问题是兼容的,自引导大大消除了退化带来的损害:

  • 基础模型:作为基础模型,我们使用未应用 dropout 的在 ImageNet-512 上训练的 EDM2-S 模型(FID = 2.56)。
  • Dropout:我们通过对基础模型应用 5% 的 dropout 来构造 D 1 D_1 D1(FID = 4.98),并通过应用 10% 的 dropout 来构造 D 0 D_0 D0(FID = 15.00)。应用自引导后,我们达到了最佳结果(FID = 2.55),与基础模型的 FID 相匹配,且此时 w = 2.25。
  • 输入噪声:我们通过修改基础模型,向输入图像添加噪声,使其噪声水平增加 10%(FID = 3.96)。根据噪声水平的增加,相应地调整了去噪网络的 σ 条件输入。引导模型 D 0 D_0 D0 类似地构造,但其噪声水平增加了 20%(FID = 9.73)。应用自引导后,我们再次达到了最佳结果(FID = 2.56),此时 w = 2.00,再次与基础模型的 FID 相匹配。
  • 退化不匹配:如果我们将 D 1 D_1 D1 通过 dropout 进行退化,而将 D 0 D_0 D0 通过输入噪声进行退化,或者反之,则引导并未改善结果;在这种情况下,最佳 FID 是通过设置 w = 1 来获得的,即禁用引导,单独使用退化较小的 D 1 D_1 D1

虽然这个实验验证了我们的主要假设,但我们并不建议在实际应用中使用这些合成退化进行引导。现实中的扩散模型不会遭遇这些特定的退化问题,因此通过引入这些问题来创建引导模型不会产生一致的向数据流形的截断。

相关文章:

Guiding a Diffusion Model with a Bad Version of Itself

Guiding a Diffusion Model with a Bad Version of Itself Abstract1. Introduction2. Background3. Why does CFG improve image quality?Score matching leads to outliers.CFG 消除异常值Discussion 4 Our method Abstract 在图像生成扩散模型中,主要关注的轴心…...

快速上手!低功耗Air724UG模组软件指南:FTP示例

Air724UG模组集成了高性能处理器和丰富的外设接口,支持多种通信协议,包括FTP(文件传输协议)。通过Air724UG模组,开发者可以轻松实现设备的远程文件管理功能。一起接着看下去吧! 一、简介 FTP(…...

GAMES101 完结篇(笔记和作业)

写在前面 我已经把笔记和作业代码放在了GitHub上,欢迎访问GAMES101笔记及作业 (github.com),如果对你有帮助,欢迎fork or star 下面我想简单介绍一下这里面的东西 Homework Homework文件夹里有0~8的作业框架,参考的其他大佬的代…...

3D Slicer与MONAI人工智能三维影像处理

如何又快又高效的做三维影像?勾画roi? 案例1 患者腹腔占位半月余,完善CT增强扫描,使用Slicer 对肿瘤,胰腺,动脉,静脉进行三维重建。重建时间1-5分钟。 案例2 胸部CT平扫,使用 slic…...

NC65客开单据自定义项处理以及自定义项相关介绍(超级详细带图以及代码NC65自定义项大全)

自定义项教程 自定义项和物料辅助属性简介 自定义档案的概念: NC系统中有大量的档案,这些档案中有相当一部分为系统预置的,鉴于用户对系统应用的个性化需求,系统支持用户自定用户自己的档案,并对其进行维护管理&…...

责任链模式的理解和实践

责任链模式(Chain of Responsibility)是行为型设计模式之一,它通过将多个对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止。这个模式的主要目的是将请求的发送者和接收者解耦,使请求沿着处理链传…...

【大模型-向量库】详解向量库管理:连接管理、集合管理、向量管理

在向量数据库(Vector Database)中,向量库管理的概念是非常重要的,因为它涉及到如何高效地存储、索引和检索大规模的向量数据。向量库管理通常包括三个主要方面:连接管理、集合管理和向量管理。以下是对这三者的详细解释…...

MySQL书籍推荐

《高性能MySQL(第4版)》-西尔维亚博特罗斯 系统层次 Mysql性能优化和高可用架构实践 2020 系统基础 MySQL性能调优与架构设计 系统基础 Mysql技术大全 2021 综合 MySQL数据库应用案例教程 综合实战 从入门到项目实践 综合实战 丰富 超值 MySQ…...

常见的数据结构:

数据结构是计算机科学中的一个核心概念,它涉及到组织、管理和存储数据的方式,以便可以有效地访问和修改数据。数据结构的形式有很多,每种结构都有其特定的用途、优势和局限性。以下是一些常见的数据结构: 1. **数组(A…...

快速、高效的数据处理:深入了解 Polars 库

快速、高效的数据处理:深入了解 Polars 库 在数据科学和分析领域,Pandas 一直是 Python 数据处理的标杆。然而,随着数据量的增加,Pandas 在性能上的局限性逐渐显现。为了解决这一问题,越来越多的开发者开始寻找替代方…...

【LINUX】Linux 下打包与部署 Java 程序的全流程指南

文章目录 一、Java 程序打包1. 使用 Maven 打包2. 使用 Gradle 打包 二、运行 JAR 文件1. 前台运行2. 后台运行方法 1:使用 & 符号方法 2:使用 nohup 三、关闭运行中的程序1. 查找程序 PID2. 关闭程序 四、使用 Shell 脚本管理程序1. 创建 Shell 脚本…...

Spark 计算总销量

Spark 计算总销量 题目: 某电商平台存储了所有商品的销售数据,平台希望能够找到销量最好的前 N 个商品。通过分析销售记录,帮助平台决策哪些商品需要更多的推广资源。 假设你得到了一个商品销售记录的文本文件 product_id, product_name,…...

矩阵置零

矩阵置零 ​ 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff…...

Ai编程cursor + sealos + devBox实现登录以及用户管理增删改查(十三)

一、什么是 Sealos? Sealos 是一款以 Kubernetes 为内核的云操作系统发行版。它以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,使企业能够像使用个人电脑一样简单地使用云。 二、适用场景 业务运…...

深度解读:生产环境中的日志优化与大数据处理实践20241116

🌟 深度解读:生产环境中的日志优化与大数据处理实践 在现代软件开发中,日志是系统调试与问题排查的重要工具。然而,随着应用的复杂化和数据量的增长,传统日志模块在应对复杂嵌套对象、大数据类型时可能面临性能问题和安…...

docker 搭建gitlab,亲测可用

1、Gitlab镜像 查找Gitlab镜像 docker search gitlab 拉取Gitlab镜像 docker pull gitlab/gitlab-ce:latest 2、启动Gitlab容器 # 启动容器 docker run \-itd \-p 9980:80 \-p 9922:22 \-v /home/gitlab/etc:/etc/gitlab \-v /home/gitlab/log:/var/log/gitlab \-v /ho…...

SpringBoot 分层解耦

从没有分层思想到传统 Web 分层,再到 Spring Boot 分层架构 1. 没有分层思想 在最初的项目开发中,很多开发者并没有明确的分层思想,所有逻辑都堆砌在一个类或一个方法中。这样的开发方式通常会导致以下问题: 代码混乱&#xff1…...

opencv复习

目录 1.core 1.图像变换 1.1 affine仿射变换 1.2 透视变换 2.四元数(旋转) 2.1 轴角转四元数 2.2 旋转矩阵转四元数 2.3 欧拉角转旋转矩阵 2.4 四元数转旋转矩阵 2.5 四元数用eigen用的比较多 2. imgproc. Image Processing 2.1 bilateralF…...

flask-socketio相关总结

flask-socketio是一个为flask应用程序添加的实时双向通信功能的扩展库,有了这个库,就可以在flask应用中应用websocket协议,帮助flask实现低延迟、双向的客户端、服务端通信。客户端通过任何SocketIO官方库,都能与服务器建立长连接…...

2024-12-03OpenCV图片处理基础

OpenCV图片处理基础 OpenCV的视频教学:https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV摄像头读取 OpenCV使用摄像头读取图片帧,点击S保存当前帧到指定文件夹,点击Q关闭窗口,点击其他按钮打印按钮的值 要实现这个功能&…...

本地部署开源趣味艺术画板Paint Board结合内网穿透跨网络多设备在线绘画

文章目录 前言1.关于Paint Board2.本地部署paint-board3.使用Paint Board4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Paint Board公网地址 前言 大家好,是不是每次想要在电脑上画画时,都被那些笨重的专业绘图软件搞得头大如斗呢?…...

iOS、android的app备案超简单的公钥、md5获取方法

很多云商的备案平台,推荐下载一些工具来获取公钥和MD5,但是这些工具的跨平台性不是很好,安装也十分麻烦,安装的时候还需要设置国内源等等。 这里,其实有在线工具可以获取APP的公钥和MD5、SHA1值这些信息的。不需要安装…...

SpringCloud 与 SpringBoot版本对应关系,以及maven,jdk

目录 SpringCloud 与 SpringBoot各版本的对应关系 方式一 Learn 方式二 OverView SpringBoot与JDK、maven 容器等对应关系 SpringCloud 与 SpringBoot各版本的对应关系 SpringCloudSpringBootFinchley2.0.xFinchley.SR1Spring Boot >=2.0.3.RELEASE and <=2.0.9RELEAS…...

23种设计模式之装饰模式

目录 1. 简介2. 代码2.1 ABatterCake &#xff08;抽象组件&#xff09;2.2 BatterCake &#xff08;具体组件&#xff09;2.3 ADecorator &#xff08;抽象装饰者&#xff09;2.4 EggDecorator &#xff08;具体装饰者&#xff09;2.5 SausageDecorator&#xff08;具体装饰者…...

HTMLHTML5革命:构建现代网页的终极指南 - 2. HTMLHTML5H5的区别

HTML&HTML5革命&#xff1a;构建现代网页的终极指南 2. HTML&HTML5&H5的区别 大家好&#xff0c;我是莫离老师 在上一节课&#xff0c;我们了解了HTML的重要性和前端开发的核心概念。 今天&#xff0c;我们将深入探讨 HTML、HTML5 和 H5 的区别&#xff0c;并重点…...

Django之ORM表操作

ORM表操作 1.ORM单表操作 首先想操作表的增删改查&#xff0c;需要先导入这个表,以之前创建的UserInfo表为例,在app下的views.py中导入 from app import modelsdef query(request):new_obj models.UserInfo(id1,name北北,bday2019-09-27,checked1,)new_obj.save()return Htt…...

python下几个淘宝、天猫、京东爬虫实例

以下是使用Python编写的针对淘宝、天猫、京东详情页的爬虫实例。请注意&#xff0c;这些实例仅供参考&#xff0c;实际使用时可能需要根据网站结构的变化进行调整&#xff0c;并且需要遵守各平台的爬虫协议和法律法规。 淘宝详情页爬虫实例 环境准备&#xff1a; Python 3.xSe…...

级联树结构TreeSelect和上级反查

接口返回结构 前端展示格式 前端组件 <template><div ><el-scrollbar height"70vh"><el-tree :data"deptOptions" :props"{ label: label, children: children }" :expand-on-click-node"false":filter-node-me…...

gradle下载慢解决方案2024 /12 /1android studio (Windows环境)

gradle下载慢解决方案2024 /12 /1 默认环境配置好了,环境配置和程序安装请出门右转 打开软件,点击右上角设置,找到如下设置页 选择本地安装并制定好你已经安装好的 gradle 应用保存即可 全局插件环境配置(新版本可以直接在设置中添加了) 找对应位置添加国内源并把前面的内置源…...

Python+OpenCV系列:GRAY BGR HSV

以下是 GRAY、BGR 和 HSV 三种色彩空间的对比&#xff0c;涵盖了它们的定义、特点、应用场景和优缺点&#xff1a; 1. 定义 GRAY&#xff1a; 灰度图像仅包含亮度信息&#xff0c;每个像素用一个值&#xff08;通常在0到255之间&#xff09;表示亮度&#xff08;黑到白&#x…...