(CVPR-2024)SwiftBrush:具有变分分数蒸馏的单步文本到图像扩散模型

SwiftBrush:具有变分分数蒸馏的单步文本到图像扩散模型

Paper Title:SwiftBrush: One-Step Text-to-Image Diffusion Model with Variational Score Distillation

Paper 是 VinAI Research 发表在 CVPR 24 的工作

Paper地址

Code:地址

Abstract

尽管文本到图像的扩散模型能够根据文本提示生成高分辨率和多样化的图像,但它们通常受到迭代采样过程缓慢的影响。 模型蒸馏是加速这些模型的最有效方向之一。然而,以前的蒸馏方法无法保持生成质量,同时需要大量图像进行训练,这些图像要么来自真实数据,要么由教师模型合成生成。 为了解决这一限制,我们提出了一种名为 SwiftBrush 的新型无图像蒸馏方案。从文本到 3D 合成中汲取灵感,其中可以通过专门的损失从 2D 文本到图像扩散先验中获得与输入提示对齐的 3D 神经辐射场,而无需使用任何 3D 数据GT,我们的方法重新利用相同的损失来将预训练的多步骤文本到图像模型蒸馏到学生网络,只需一个推理步骤即可生成高保真图像。尽管我们的模型很简单,但它是首批一步式文本转图像生成器之一,无需依赖任何训练图像数据即可生成与稳定扩散质量相当的图像。值得注意的是,SwiftBrush 在 COCO-30K 基准上获得了 16.67 的 FID 分数和 0.29 的 CLIP 分数,取得了具有竞争力的结果,甚至大大超越了现有的最先进蒸馏技术。

1. Introduction

扩散模型正受到研究界的广泛关注,因为它们在各种生成任务中取得了显著成果,包括图像生成 [10, 26, 40, 41]、视频合成 [11]、3D 建模 [3, 28, 46]、音频生成 [16] 和文本创建 [7, 17]。 特别是,文本到图像的扩散模型结合了语言模型和高质量扩散模型 [32, 36, 43] 的强大功能,彻底改变了人们基于文本描述创建视觉内容的方式。只需单击几下,就可以生成与真实照片无法区分的合成图像。此外,借助 ControlNet [49] 或 DreamBooth [35] 等技术,可以对生成输出进行额外控制,以进一步提高文本到图像模型的表现力并使其更接近大众用户。然而,尽管取得了令人瞩目的成功,这些模型也表现出推理速度慢的显著缺点。主要原因在于其采样的迭代性质,这对在边缘设备上的部署带来了重大挑战。

已经提出了几种方法来提高基于扩散的文本到图像生成的推理速度。 然而,最有效的方向是时间步长蒸馏,其目的是在网络主干不变和生成质量降低最小的情况下减少扩散模型的采样步骤数。从开创性的工作 [37] 开始,已经提出了更先进、更有效的蒸馏方法,最近的一些方法可以训练高效的学生网络,只需向前迈一步即可从输入字幕合成图像。在本文中,我们对基于蒸馏的一步式文本到图像生成方法感兴趣。 特别是,Meng 等人 [25] 采用了两阶段蒸馏,其中学生首先尝试将其输出与老师的无分类器引导输出进行匹配,然后引导自身以逐渐减少推理步骤。 这种方法复杂且耗时,至少需要 108 A100 GPU 天 [20]。基于 Song 等人 [42] 的工作,潜在一致性模型 (LCM) [23] 强制稳定扩散 (SD) [43] 潜在空间中 ODE 轨迹上所有点的一致性,并且与 [25] 不同,它们直接将两个蒸馏阶段合二为一。尽管引导式蒸馏和 LCM 都将推理步骤数显著减少到 2 或 4,但它们的 1 步推理产生的结果模糊且不令人满意。更复杂的是,Instaflow [20] 提出了一种称为“reflow”的技术,用于在蒸馏之前拉直老师的采样轨迹。虽然他们提出的技术在一步文本到图像蒸馏中被证明优于原始扩散框架,但 InstaFlow 需要昂贵的 4 阶段训练计划。此外,值得注意的是,这些方法的有效性在很大程度上依赖于大量的文本-图像对,由于此类数据的可访问性有限,情况并非总是如此。

在这项工作中,我们旨在开发一种新颖的蒸馏方法,用于一步式文本到图像生成,该方法具有更高的质量和更易于接受的训练过程,其特点是无图像且机制简单。基于文本到 3D 技术的最新进展,我们的工作从它们无需使用 3D GT数据即可生成高质量 3D 神经辐射场 (NeRF) 的能力中汲取灵感。这一非凡成就是通过使用强大的预训练 2D 文本到图像模型来评估 NeRF 渲染的图像是否逼真来实现的,类似于 GAN 中的鉴别器。这一观察结果支撑了我们 SwiftBrush 方法的动机,因为我们认识到这些原理可以创新地适用于文本到图像生成,从而无需图像监督。因此,SwiftBrush 作为一种概念新颖的一步式文本到图像蒸馏过程而出现,它独特地能够在没有 2D 图像监督的情况下运行。这种战略性的调整不仅开启了将文本到图像扩散模型提炼为单步生成器的观点的改变,而且还指出了将文本到 3D 到文本到图像合成的混合原理的潜力。

因此,我们的方法成功地生成了具有非凡细节的高质量图像。从数量上看,我们的一步式模型在 MS COCO 2014 数据集(30K 幅图像)上实现了令人满意的零样本结果,FID 得分为 16.6,CLIP 得分为 0.29。值得注意的是,这是蒸馏式一步式模型首次在不使用单幅图像进行训练的情况下胜过之前的方法。图 1 展示了我们蒸馏式模型生成的图像。

图1

图 1. SwiftBrush 一步生成样本。与稳定扩散相比,我们的蒸馏方法可以以大约 20 倍的速度生成高保真图像。

2. Related Work

文本到图像生成。以前,文本到图像模型依赖于 GAN,并且仅关注小规模的以对象为中心的领域,例如花和鸟 [33, 48]。最近,随着文本-图像对的网络规模数据集(例如 LAION5B [39])、大型语言模型(例如 T5 [30])和大型视觉语言模型(例如 CLIP [29])的出现,这些类型的系统得到了迅速发展。DALL-E [31] 是第一个通过简单地扩大网络和数据集大小,在从文本标题创建图像方面表现出非凡的零样本能力的自回归模型。此后,大量方法被用于文本到图像的生成,包括蒙版生成transformer [4]、基于 GAN 的模型和扩散模型。基于潜在扩散模型 [34],稳定扩散是一个基于扩散的开源生成器,在艺术家和研究人员中广受欢迎。最近,文本转图像 GAN 再次受到关注,其中包括 StyleGAN-T [38] 和 GigaGAN [14] 等著名作品。虽然它们不需要迭代采样,因此速度极快,但由于它们存在不稳定性和臭名昭著的“模式崩溃”问题,因此在可扩展性和真实性方面落后于扩散模型。据我们所知,到目前为止,只有上述两项工作使用大量复杂的技术和辅助模块成功地将 GAN 应用于文本转图像。相反,扩散模型可以轻松扩展以生成高质量且清晰的样本,但它们需要冗长的采样过程。在这里,我们的目标是创建一个将 GAN 的速度与扩散模型的质量相结合的大规模生成模型。

文本到 3D 生成。许多研究工作并没有直接从 3D 监督中学习生成模型,而是利用丰富的 2D 先验知识来完成 3D 生成任务。例如,最早的作品之一 Dream Fields [13] 利用 CLIP [29] 来引导生成的图像,以便从许多摄像机视图渲染的图像与文本标题高度一致。另一方面,DreamFusion [28] 和 Score Jacobian Chaining [44] (SJC) 等先驱作品提出了两个不同但等效的框架,其中使用 2D 文本到图像生成先验从文本描述生成 3D 对象。后续研究试图以各种方式改进这些文本到 3D 方法。其中,Magic3D [18] 和 ProlificDreamer [45] 是两个出色的作品,有效提高了 3D 对象的生成质量。 Magic3D 包含两个阶段,首先通过 DreamFusion 风格的优化获得低分辨率 3D 表示,然后细化其纹理以获得最终的高保真 3D 网格。同时,ProlificDreamer 提出了变分分数蒸馏 (VSD),其中涉及一个辅助教师,以弥合教师和 3D NeRF 之间的差距。受后者工作的影响,我们的方法采用了相同的技术来实现一步式文本到图像的生成。类似地,Score GAN [6] 和 Diff-Instruct [24] 使用类似 VSD 的损失将预训练的扩散模型蒸馏为一步式生成器。

Hinton 等人 [9] 提出的知识蒸馏是迁移学习方法之一。该算法主要灵感来源于人类的学习过程,即知识从知识更渊博的老师传授给知识较少的学生。在扩散模型的背景下,已经有人提出了从预先训练好的扩散老师那里更快地采样学生模型的方法。最直接的方法是直接蒸馏 [22],其中学生模型在采样 50-1000 步后从老师的输出中进行监督,这可能是令人望而却步的。最近的研究 [37, 42] 通过各种引导方法避免了蒸馏过程中的冗长采样。随后,一系列方法 [20, 23, 25] 将这些方法适应文本到图像的设置,并继承了它们在训练中依赖图像的局限性。相比之下,一项并发研究 [8] 学习了一个时间条件模型来预测老师在任何给定时间步骤的结果,所有这些都不需要图像监督。同样,我们的方法同样不需要图像,但却能取得更好的结果,并提供更简单的蒸馏设计。

3. Proposed Method

3.1. Preliminary


扩散模型包括两个过程:一个前向过程逐渐添加噪声,另一个反向过程预测逐渐去噪数据点的分布。前向过程从初始数据点 x 0 x_0 x0 开始,该点从分布 q 0 ( x 0 ) q_0\left(x_0\right) q0(x0) 中抽取,结果为 q t ( x t ∣ x 0 ) = N ( α t x 0 , σ t 2 I ) q_t\left(x_t \mid x_0\right)=\mathcal{N}\left(\alpha_t x_0, \sigma_t^2 I\right) qt(xtx0)=N(αtx0,σt2I),其中 { ( α t , σ t ) } t = 1 T \left\{\left(\alpha_t, \sigma_t\right)\right\}_{t=1}^T {(αt,σt)}t=1T 是噪声调度。每个时间步 t t t 的数据点 x t x_t xt q t ( x t ∣ x 0 ) q_t\left(x_t \mid x_0\right) qt(xtx0) 中抽取,使用噪声 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵN(0,I)
x t = α t x 0 + σ t ϵ . ( 1 ) x_t=\alpha_t x_0+\sigma_t \epsilon . \quad(1) xt=αtx0+σtϵ.(1)

经过 T T T 个时间步骤后,最终数据点预期成为纯高斯噪声 x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I) xTN(0,I)

相反,反向过程从 x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I) xTN(0,I) 开始,逐步进行去噪过程,共进行 T T T 步,其中每个步骤 t t t,嘈杂变量 x t + 1 x_{t+1} xt+1 被转换为更少嘈杂的变量 x t x_t xt,由模型 ϵ ψ \epsilon_\psi ϵψ 引导,该模型预测方程中的噪声 ϵ \epsilon ϵ。网络权重 ψ \psi ψ 通过最小化以下损失进行训练:
L uncond  ( ψ ) = E t , ϵ ∈ N ( 0 , 1 ) ∥ ϵ ψ ( x t , t ) − ϵ ∥ 2 2 ( 2 ) \mathcal{L}_{\text {uncond }}(\psi)=\mathbb{E}_{t, \epsilon \in \mathcal{N}(0,1)}\left\|\epsilon_\psi\left(x_t, t\right)-\epsilon\right\|_2^2 \quad(2) Luncond (ψ)=Et,ϵN(0,1)ϵψ(xt,t)ϵ22(2)
其中 t t t 均匀采样自 { 1 , … , T } \{1, \ldots, T\} {1,,T}

虽然常见的扩散模型在像素空间中操作,但潜在扩散模型(LDMs)[34] 在预训练的正则化自编码器的潜在空间中建模扩散过程,其特征表示较小,因此提高了训练和推断的效率。

文本到图像扩散模型。与无条件扩散模型自由生成输出不同,文本条件扩散模型使用额外的提示 y y y 引导采样过程。这引导模型生成不仅逼真而且与提供的文本描述密切符合的输出。训练此类模型的目标如下:
L diff  ( ψ ) = E t , y , ϵ ∈ N ( 0 , 1 ) ∥ ϵ ψ ( x t , t , y ) − ϵ ∥ 2 2 \mathcal{L}_{\text {diff }}(\psi)=\mathbb{E}_{t, y, \epsilon \in \mathcal{N}(0,1)}\left\|\epsilon_\psi\left(x_t, t, y\right)-\epsilon\right\|_2^2 Ldiff (ψ)=Et,y,ϵN(0,1)ϵψ(xt,t,y)ϵ22
这与无条件扩散损失公式 (2) 略有不同。由于提示条件,模型可以提供比无条件模型更可控的生成。然而,许多领先方法 [1,32,36] 的实现仍对公众不可访问。Stable Diffusion 主要利用 LDM 框架,作为首个公开可用的大规模模型,显著推动了文本到图像合成的广泛采用和多样化。

得分蒸馏采样 (SDS) 是一种在生成 3D 对象中有效应用的蒸馏技术 [18, 28, 44]。它利用预训练的文本到图像扩散模型,根据文本条件 y y y 预测扩散噪声,表示为 ϵ ψ ( x t , t , y ) \epsilon_\psi\left(x_t, t, y\right) ϵψ(xt,t,y)。该方法优化单个 3D NeRF,用参数 θ \theta θ 表示,以与给定的文本提示对齐。给定相机参数 c c c,使用可微渲染函数 g ( ⋅ , c ) g(\cdot, c) g(,c) 从 3D NeRF 渲染相机视角 c c c 下的图像。此处,渲染的图像 g ( θ , c ) g(\theta, c) g(θ,c) 用于通过损失函数优化权重 θ \theta θ,其梯度可近似为:
∇ θ L S D S = E t , ϵ , c [ w ( t ) ( ϵ ψ ( x t , t , y ) − ϵ ) ∂ g ( θ , c ) ∂ θ ] \nabla_\theta \mathcal{L}_{S D S}=\mathbb{E}_{t, \epsilon, c}\left[w(t)\left(\epsilon_\psi\left(x_t, t, y\right)-\epsilon\right) \frac{\partial g(\theta, c)}{\partial \theta}\right] θLSDS=Et,ϵ,c[w(t)(ϵψ(xt,t,y)ϵ)θg(θ,c)]
其中 t ∼ U ( 0.02 T , 0.98 T ) , T t \sim \mathcal{U}(0.02 T, 0.98 T), T tU(0.02T,0.98T),T 是扩散模型的最大时间步数, ϵ ∼ N ( 0 , I ) , x t = α t g ( θ , c ) + σ t ϵ \epsilon \sim \mathcal{N}(0, I), x_t=\alpha_t g(\theta, c)+\sigma_t \epsilon ϵN(0,I),xt=αtg(θ,c)+σtϵ, y y y 是输入文本, w ( t ) w(t) w(t) 是加权函数。

尽管文本到 3D 合成取得了进展,但实证研究 [28, 44] 表明,SDS 经常遇到过度饱和、过度平滑和多样性降低等问题。如果我们在框架中简单应用 SDS,也可以观察到同样的退化,如第 4.3 节所示。

变分得分蒸馏 (VSD) 在 ProlificDreamer [45] 中引入,通过稍微修改损失来解决 SDS 之前提到的问题:
∇ θ L V S D = E t , ϵ , c [ w ( t ) ( ϵ ψ ( x t , t , y ) − ϵ ϕ ( x t , t , y , c ) ) ∂ g ( θ , c ) ∂ θ ] ( 5 ) \begin{aligned} \nabla_\theta \mathcal{L}_{V S D}=\mathbb{E}_{t, \epsilon, c} & {\left[w(t)\left(\epsilon_\psi\left(x_t, t, y\right)\right.\right.} \\ & \left.\left.-\epsilon_\phi\left(x_t, t, y, c\right)\right) \frac{\partial g(\theta, c)}{\partial \theta}\right] \end{aligned} \quad(5) θLVSD=Et,ϵ,c[w(t)(ϵψ(xt,t,y)ϵϕ(xt,t,y,c))θg(θ,c)](5)

同样, x t = α t g ( θ , c ) + σ t ϵ x_t=\alpha_t g(\theta, c)+\sigma_t \epsilon xt=αtg(θ,c)+σtϵ 是在相机视角 c c c 下渲染图像的嘈杂观察。VSD 通过引入一个额外的得分函数,与 SDS 区别开来,该得分函数专为从相机姿态 c c c 渲染的 3D NeRF 图像设计。该得分通过微调扩散模型 ϵ ϕ ( x t , t , y , c ) \epsilon_\phi\left(x_t, t, y, c\right) ϵϕ(xt,t,y,c) 得到,微调的扩散损失如下:
min ⁡ ϵ ϕ E t , c , ϵ ∥ ϵ ϕ ( x t , t , y , c ) − ϵ ∥ 2 2 ( 6 ) \min _{\epsilon_\phi} \mathbb{E}_{t, c, \epsilon}\left\|\epsilon_\phi\left(x_t, t, y, c\right)-\epsilon\right\|_2^2 \quad(6) ϵϕminEt,c,ϵϵϕ(xt,t,y,c)ϵ22(6)
如 ProlificDreamer 中提出的, ϵ ϕ \epsilon_\phi ϵϕ 由低秩适应 [12] (LoRA) 参数化,并从预训练的扩散模型 ϵ ψ \epsilon_\psi ϵψ 初始化,增加了一些用于条件相机视角 c c c 的层。请注意,在优化过程的每次迭代 i i i 中, ϵ ϕ \epsilon_\phi ϵϕ 需要适应当前的 θ \theta θ 分布。因此,ProlificDreamer 交替进行微调 ϵ ϕ \epsilon_\phi ϵϕ 和优化 θ \theta θ。通过这些算法增强,ProlificDreamer 显著提高了其能力,使其能够生成 NeRFs 并创建出色的纹理网格。这种改进直接激励我们将 VSD 适应于一步文本到图像扩散蒸馏任务。

3.2. SwiftBrush


动机。虽然 SDS 和 VSD 明确设计用于文本到 3D 生成任务,但它们通过 3D NeRF 的渲染图像 g ( θ , c ) g(\theta, c) g(θ,c) 与该目标松散地连接起来。事实上,我们可以用任何输出 2D 图像的函数替代 NeRF 渲染,以满足我们的需求。受此动机启发,我们建议用可以直接在一步中合成文本引导图像的文本到图像生成器替代 NeRF 渲染 g ( θ , c ) g(\theta, c) g(θ,c),从而有效地将文本到 3D 生成训练转换为一步扩散模型蒸馏。

设计空间。我们采用与 ProlificDreamer [45] 相同的方法,对设计空间进行修改以更好地适应我们的任务。首先,我们使用两个教师模型:一个预训练的文本到图像教师 ϵ ψ \epsilon_\psi ϵψ 和一个额外的 LoRA 教师 ϵ ϕ \epsilon_\phi ϵϕ。此外,我们移除了 LoRA 教师中的相机视角 c c c 条件,因为在我们的情况下这不是必要的,并且我们对两个教师都使用无分类器指导。然后,我们用一个广义的一步文本到图像学生模型 f θ ( z , y ) f_\theta(z, y) fθ(z,y) 替代在文本到 3D 设置中针对特定用户提供的提示过拟合的 NeRF。我们的学生模型 f θ f_\theta fθ 以随机高斯噪声 z z z 和文本提示 y y y 作为输入。LoRA 教师和学生模型都用文本到图像教师的权重初始化。接下来,我们交替使用公式 (5) 和公式 (6) 训练学生模型和 LoRA 教师,同时冻结文本到图像教师。伪代码和系统图见算法 1 和图 2。

重写公式(5)和公式(6)
∇ θ L V S D = E t , ϵ [ w ( t ) ( ϵ ψ ( x t , t , y ) − ϵ ϕ ( x t , t , y , c ) ) ∂ f θ ( z , y ) ∂ θ ] ( 5 ) \begin{aligned} \nabla_\theta \mathcal{L}_{V S D}=\mathbb{E}_{t, \epsilon} & {\left[w(t)\left(\epsilon_\psi\left(x_t, t, y\right)\right.\right.} \\ & \left.\left.-\epsilon_\phi\left(x_t, t, y, c\right)\right) \frac{\partial f_\theta(z, y)}{\partial \theta}\right] \end{aligned} \quad(5) θLVSD=Et,ϵ[w(t)(ϵψ(xt,t,y)ϵϕ(xt,t,y,c))θfθ(z,y)](5)
min ⁡ ϵ ϕ E t , ϵ ∥ ϵ ϕ ( x t , t , y ) − ϵ ∥ 2 2 ( 6 ) \min _{\epsilon_\phi} \mathbb{E}_{t,\epsilon}\left\|\epsilon_\phi\left(x_t, t, y\right)-\epsilon\right\|_2^2 \quad(6) ϵϕminEt,ϵϵϕ(xt,t,y)ϵ22(6)

学生参数化。给定一个预训练的文本到图像扩散模型 ϵ θ \epsilon_\theta ϵθ,可以直接使用其输出作为学生模型,即 f θ ( z , y ) = ϵ θ ( z , T , y ) f_\theta(z, y)=\epsilon_\theta(z, T, y) fθ(z,y)=ϵθ(z,T,y),其中 T T T 是预训练模型的最大时间步。然而,在我们的情况下,选择的预训练模型是 Stable Diffusion,它本质上是为了预测添加的噪声 ϵ \epsilon ϵ。相比之下,我们的目标是优化学生模型,使其预测出干净且无噪声的 x 0 x_0 x0。因此,这种简单的方法导致了我们希望学生学习的内容和学生输出之间存在较大的域差异。为了便于训练,我们经验性地重参数化学生输出如下:
f θ ( z , y ) = z − σ T ϵ θ ( z , T , y ) α T f_\theta(z, y)=\frac{z-\sigma_T \epsilon_\theta(z, T, y)}{\alpha_T} fθ(z,y)=αTzσTϵθ(z,T,y)
如果我们设置 t = T , x t = z t=T, x_t=z t=T,xt=z, ϵ ≈ ϵ θ ( z , T , y ) \epsilon \approx \epsilon_\theta(z, T, y) ϵϵθ(z,T,y) 并且 x 0 ≈ f θ ( z , y ) x_0 \approx f_\theta(z, y) x0fθ(z,y),这是公式 (1) 的一个实现。所以这种重参数化将预训练模型的噪声预测输出转换为“预测的 x 0 x_0 x0”形式,经验表明在第 4.3 节中,这对学生模型的学习是有帮助的。

图2

图 2. SwiftBrush 概览。我们的系统允许在额外的可训练 LORA 教师的帮助下,从冻结的预训练教师那里训练单步文本到图像学生网络。学生网络接受文本提示和随机噪声的输入。然后,学生的输出会添加噪声,并与提示和随机绘制的时间步一起发送给两个教师,以计算 VSD 损失的梯度,该梯度会反向传播回学生。除此之外,LoRA 教师也使用扩散损失进行更新。与 ProlificDreamer [45] 类似,我们交替更新 LoRA 教师(绿色流)和学生(红色流)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端工程化(01):10款自动化构建工具初识。

前端工程化自动化构建工具是用于简化前端开发流程、提高开发效率和优化项目质量的工具。市面上的工具多种多样,贝格前端工场先介绍一下什么是前端工程化,为什么要前端工程化,以及常用工具,后面会对各种工具逐一介绍。 一、什么是…

【数据结构】一文了解七大排序算法

文章目录 前言一.直接插入排序插入排序思想插入排序代码实现插入排序总结 二.希尔排序希尔排序思想希尔排序代码实现希尔排序总结 三.选择排序选择排序思想选择排序代码实现选择排序总结 四.堆排序堆排序思想堆排序代码实现堆排序总结 五、冒泡排序冒泡排序思想冒泡排序代码实现…

深化信创存储 ,XEDP 与 飞腾腾云 S5000C 完成兼容性认证

近日,XSKY星辰天合的统一数据平台 XEDP 与飞腾信息技术有限公司的高性能服务器 CPU 飞腾腾云 S5000C 完成兼容性互认证。 经过严格的测试与评估,双方产品在技术上兼容良好,运行稳定且性能优异,融合双方优势构筑的软件定义存储系统…

SpringBoot实战:轻松实现接口数据脱敏

一、接口数据脱敏概述 1.1 接口数据脱敏的定义 接口数据脱敏是Web应用程序中一种保护敏感信息不被泄露的关键措施。在API接口向客户端返回数据时,系统会对包含敏感信息(如个人身份信息、财务数据等)的字段进行特殊处理。这种处理通过应用特…

Go-知识测试-模糊测试

Go-知识测试-模糊测试 1. 定义2. 例子3. 数据结构4. tesing.F.Add5. 模糊测试的执行6. testing.InternalFuzzTarget7. testing.runFuzzing8. testing.fRunner9. FuzzXyz10. RunFuzzWorker11. CoordinateFuzzing12. 总结 建议先看:https://blog.csdn.net/a1879272183…

智能家居开发新进展:乐鑫 ESP-ZeroCode 与亚马逊 ACK for Matter 实现集成

日前,乐鑫 ESP-ZeroCode 与亚马逊 Alexa Connect Kit (ACK) for Matter 实现了集成。这对智能家居设备制造商来说是一项重大进展。开发人员无需编写固件或开发移动应用程序,即可轻松设计符合 Matter 标准的产品。不仅如此,开发者还可以在短短…

Python(四)---序列

文章目录 前言1.列表1.1.列表简介1.2.列表的创建1.2.1.基本方式[]1.2.2.list()方法1.2.3.range()创建整数列表1.2.4.推导式生成列表 1.3. 列表各种函数的使用1.3.1.增加元素1.3.2.删除元素1.3.3.元素的访问和计数1.3.4.切片1.3.5.列表的排序 1.4.二维列表 2.元组2.1.元组的简介…

内网安全:域内信息探测

1.域内基本信息收集 2.NET命令详解 3.内网主要使用的域收集方法 4.查找域控制器的方法 5.查询域内用户的基本信息 6.定位域管 7.powershell命令和定位敏感信息 1.域内基本信息收集: 四种情况: 1.本地用户:user 2.本地管理员用户&#x…

短链接day4

短链接管理 创建短链接数据库表 URI、URL和URN区别 : URI 指的是一个资源 ;URL 用地址定位一个资源; URN 用名称定位一个资源。 举个例子: 去寻找一个具体的人(URI);如果用地址:XX省XX市XX区…

使用 Google 的 Generative AI 服务时,请求没有包含足够的认证范围(scopes)

题意: Google generativeai 403 Request had insufficient authentication scopes. [reason: "ACCESS_TOKEN_SCOPE_INSUFFICIENT" 问题背景: I have tried the simple POC for generativeai on its own to do generate_content and it works…

【初阶数据结构】2.顺序表

文章目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1.线性表 线性表(linear list)是n…

JavaFx+MySql学生管理系统

前言: 上个月学习了javafx和mysql数据库,于是写了一个学生管理系统,因为上个月在复习并且有一些事情,比较忙,所以没有更新博客了,这个项目页面虽然看着有点简陋了,但是大致内容还是比较简单的,于是现在跟大家分享一下我的学生管理系统,希望对这方面有兴趣的同学提供一些帮助 &a…

19185 01背包问题

解决这个问题的关键是使用动态规划的方法。我们可以创建一个二维数组dp[i][j],其中i表示考虑前i件物品,j表示背包的容量。dp[i][j]的值表示在考虑前i件物品,且背包容量为j时能获得的最大价值。 ### 算法步骤 1. 初始化一个二维数组dp&#x…

Qt常用基础控件总结—容器部件(QGroupBox类)

五、容器部件 按钮框控件QDialogButtonBox 类(很少用) 按钮组控件QButtonGroup 类(很少用) 组框控件QGroupBox 类 QGroupBox 类介绍 QGroupBox(组框),直接继承自 QWidget 类,因此使用该类创建的对象,可作为窗口使用,组框在外观上是可见的。 QGroupBox 类(组框),…

数据平滑处理(部分)

一、 移动平均(Moving Average) 是一种最简单的数据平滑方法,用于平滑时间序列数据。它通过计算一定窗口内数据点的平均值来减少噪音,同时保留数据的趋势。移动平均包括简单移动平均(SMA)或指数加权移动平均…

【爬虫】爬虫基础

目录 一、Http响应与请求1、Http请求2、Http响应3、状态码 二、Requests库1、发起GET请求2、发起POST请求3、处理请求头 三、BeautifulSoup库1、解析HTML文档2、查找和提取数据Ⅰ、查找单个元素Ⅱ、查找所有元素Ⅲ、使用CSS选择器Ⅳ、获取元素属性 四、爬取豆瓣电影榜 一、Http…

YOLOv10训练自己的数据集(交通标志检测)

YOLOv10训练自己的数据集(交通标志检测) 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用YOLOv10训练自己的数据集进行交通标志检测准备数据进行训练进行预测进行验证 参考文献 前言 由于本人水平有限,难免出现错漏&#xff…

【Linux】日志

日志是记录软件运行过程中发生的事件的一种手段,通常包含以下内容: 时间戳:记录日志条目创建的确切时间。这对于追踪事件发生的时间顺序至关重要。日志级别:表示日志信息的严重性或重要性,常见的级别包括 DEBUG、INFO…

RisingWave 用例:流式 ETL、实时分析、事件驱动应用

RisingWave 非常适合以下类别的用例。 流式 ETL实时分析事件驱动应用 流式 ETL 是实时分析和事件驱动应用的基础。实时分析通过引入数据看板,扩展了流式 ETL,而事件驱动应用则在实时分析的基础上增加了逻辑,以评估条件是否触发后续行动。 …

【测开能力提升-fastapi框架】fastapi模版引擎简单使用

1.6 通过模版引擎返回HTM页面 import uvicorn from fastapi import FastAPI, Request from fastapi.templating import Jinja2Templatesapp FastAPI()# 初始化模版引擎存放位置 templates Jinja2Templates(directory"templates")app.get("/") async def…