(CVPR-2023)面向实用的即插即用扩散模型

news2024/11/17 7:24:14

面向实用的即插即用扩散模型

Paper Title:Towards Practical Plug-and-Play Diffusion Models

Paper是Riiid AI Research发表在CVPR 2023的工作

paper地址

Code地址

Abstract

基于扩散的生成模型在图像生成方面取得了显著的成功。它们的指导公式允许外部模型即插即用地控制各种任务的生成过程,而无需微调扩散模型。然而,直接使用公开的现成模型进行指导会失败,因为它们在噪声输入上的表现不佳。为此,现有的做法是使用被噪声破坏的标记数据对指导模型进行微调。在本文中,我们认为这种做法在两个方面存在局限性:(1)对于单个指导模型来说,处理具有极其多样化噪声的输入太难了;(2)收集标记数据集阻碍了各种任务的扩展。为了解决这些限制,我们提出了一种新策略,该策略利用多位专家,其中每个专家专注于特定的噪声范围并在其相应的时间步指导扩散的逆过程。然而,由于管理多个网络和利用标记数据是不可行的,我们提出了一个称为实用即插即用 (PPAP) 的实用指导框架,它利用参数高效的微调和无数据知识传输。我们详尽地进行了 ImageNet 类条件生成实验,以表明我们的方法可以成功地引导具有较小可训练参数和无标记数据的扩散。最后,我们展示了图像分类器、深度估计器和语义分割模型可以通过我们的框架以即插即用的方式引导公开可用的 GLIDE。

1. Introduction

最近,基于扩散的生成模型 [49] 在各个领域都取得了巨大成功,包括图像生成 [14, 44, 45]、文本转语音 [21, 40] 和文本生成 [32]。具体来说,对于图像生成,最近的研究表明,扩散模型能够生成与 GAN 生成的图像相当的高质量图像 [8,12],同时不会出现模式崩溃或训练不稳定性 [38]。

除了这些优点之外,它们的公式化还允许外部模型指导 [8, 49, 53],从而引导扩散模型的生成过程朝着期望的状态发展。由于引导扩散利用了外部指导模型,并且不需要进一步微调扩散模型,因此它具有以即插即用的方式实现廉价且可控生成的潜力。例如,以前的方法使用图像分类器进行类条件图像生成 [8, 53],使用时尚理解模型进行时尚图像编辑 [28],使用视觉语言模型进行基于文本的图像生成 [1, 37]。由此可见,如果可以使用公开的现成模型进行指导,就可以轻松地将一种扩散应用于各种生成任务。

为此,一种现有做法是在训练数据集的噪声版本上对外部现成模型进行微调 [8, 12],以使模型适应在扩散过程中遇到的噪声潜像。然而,我们认为这种做法对即插即用生成有两个挑战:(1)单一指导模型不足以对受不同程度噪声破坏的输入进行预测,即任务太难;(2)它需要标记的训练数据集,这成为利用现成模型的主要障碍。

在本文中,我们首先研究了分类器在不同程度的噪声下的行为,以了解第一个挑战。一方面,在噪声严重的损坏图像上训练的指导模型根据粗糙结构对图像进行分类。因此,这样的模型将指导扩散模型生成必要的骨架特征。同时,在更干净的图像上训练的指导模型会捕捉图像中更精细的细节,指导扩散模型进行最后的润色。

基于这些关键观察,我们提出了一种新颖的多专家策略,该策略使用多个指导模型,每个模型都经过微调以专门针对特定的噪声区域。
尽管多专家策略很有效,但它应该管理多个网络并在将新的现成模型应用于各种生成任务时利用标记数据。

为了更实用地对具有多专家策略的扩散模型进行即插即用指导,我们引入了称为实用即插即用 (PPAP) 的框架。首先,为了防止由于多专家策略导致指导模型的大小过大,我们利用参数高效的微调方案,该方案可以使现成的模型适应嘈杂的图像,同时保留参数数量。其次,我们将现成模型对干净的扩散生成数据的知识转移到专家指导模型,从而无需收集标记数据集。

我们的实证结果证实,我们的方法显著提高了条件图像生成性能,使用现成的模型,这些模型只有少量可训练参数且没有标记数据。我们还展示了公开可用的扩散模型 GLIDE [37] 的各种应用,通过即插即用的方式利用现成的图像分类器、深度估计器和语义分割模型。

图1

图 1. 我们框架的概览。实用即插即用 (PPAP) 能够利用现成的模型来指导扩散模型。下面显示的图像是通过以即插即用的方式使用 DeepLabV3 [4]、ResNet50 [15] 和 MiDaS [43] 指导无条件 GLIDE [37] 生成的。

2. Related Work

扩散模型 扩散模型 [8, 18, 26, 38, 49] 和基于分数的模型 [51, 53] 属于生成模型,通过逐渐消除噪声从给定分布生成样本。与其他基于可能性的方法(如 VAE [27] 或基于流的模型 [9, 10])不同,扩散模型已表现出可与 GAN [3, 12, 23] 媲美的卓越生成能力。尽管扩散模型的生成速度较慢,但DDIM [50]、A-DDIM [2]、PNDM [33] 和 DEIS [55] 等先前的研究已显著加快了生成过程。

对于扩散模型中的条件生成,分类器指导 [8, 53] 和无分类器指导 [19] 广泛应用于各种任务 [17,25,29,37,44]。分类器指导使用外部分类器的梯度,而无分类器指导在有标签和无标签的扩散模型的预测之间进行插值。然而,对于无分类器指导,扩散模型应该作为标记数据来学习,因为它需要对标签进行预测。在本文中,我们重点介绍分类器指导,它冻结无条件扩散模型,并指导它与外部模型一起以即插即用的方式进行各种没有标记数据的条件生成。

即插即用生成 沿袭 [36] 的说法,我们使用“即插即用”一词来指代无需联合训练可替换条件网络和生成模型,即可根据可替换条件网络给出的条件在测试时生成图像的能力。在图像生成 [11, 22, 24, 36, 52] 和文本生成 [6, 34, 48] 中,已经出现了各种即插即用条件生成的尝试,通过将约束绑定到非条件模型,例如 GAN [12]、VAE [27]。这些方法允许单个非条件生成模型通过改变约束模型来执行各种任务。

与我们最相似的工作是,Graikos 等人 [13] 尝试通过直接使用现成的模型优化潜在图像,将扩散模型即插即用地用于各种任务。然而,它无法像 ImageNet 那样在复杂分布中生成有意义的图像。与此相反,我们的方法通过在现成的模型中引入小参数并使其适用于潜在图像,成功地在复杂数据集中进行了指导。

3. Motivation

3.1. Preliminaries


扩散模型

扩散模型 [ 14 , 44 , 45 , 49 ] [14,44,45,49] [14,44,45,49] 是一类生成模型,通过逐渐去噪随机噪声来采样数据。扩散模型包括两个阶段,即正向和反向过程。正向扩散过程 q q q 逐渐向数据 x 0 ∼ q ( x 0 ) x_0 \sim q\left(x_0\right) x0q(x0) 添加噪声,噪声的方差依据某种时间表 β t \beta_t βt,如下所示:

q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) ( 1 ) q\left(x_t \mid x_{t-1}\right)=\mathcal{N}\left(x_t ; \sqrt{1-\beta_t} x_{t-1}, \beta_t \mathbf{I}\right) \quad(1) q(xtxt1)=N(xt;1βt xt1,βtI)(1)

我们重复正向过程,直到达到最大时间步 T T T。给定 x 0 x_0 x0,我们可以直接采样 x t x_t xt,公式如下:

x t = α t x 0 + 1 − α t ϵ , ϵ ∼ N ( 0 , I ) ( 2 ) x_t=\sqrt{\alpha_t} x_0+\sqrt{1-\alpha_t} \epsilon, \quad \epsilon \sim \mathcal{N}(0, \mathbf{I})\quad(2) xt=αt x0+1αt ϵ,ϵN(0,I)(2)

其中 α t : = ∏ s = 1 ( 1 − β s ) \alpha_t:=\prod_{s=1}\left(1-\beta_s\right) αt:=s=1(1βs)。注意,随着 t t t 增加, α t \sqrt{\alpha_t} αt 减小,使得 α T ≈ 0 \sqrt{\alpha_T} \approx 0 αT 0

反向扩散过程从随机噪声 x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, \mathbf{I}) xTN(0,I) 开始,逐步生成去噪样本 x T − 1 , x T − 2 , … x_{T-1}, x_{T-2}, \ldots xT1,xT2,,直到达到最终样本 x 0 x_0 x0。使用噪声预测模型 ϵ θ ( x t , t ) \epsilon_\theta\left(x_t, t\right) ϵθ(xt,t),反向过程以 z ∼ N ( 0 , I ) z \sim \mathcal{N}(0, \mathbf{I}) zN(0,I) 的方式迭代去噪 x t x_t xt,如下所示:

x t − 1 = 1 1 − β t ( x t − β t 1 − α t ϵ θ ( x t , t ) ) + σ t z ( 3 ) x_{t-1}=\frac{1}{\sqrt{1-\beta_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\alpha_t}} \epsilon_\theta\left(x_t, t\right)\right)+\sigma_t z\quad(3) xt1=1βt 1(xt1αt βtϵθ(xt,t))+σtz(3)

其中 σ t 2 \sigma_t^2 σt2 是反向过程的方差。

外部模型引导的扩散

引导扩散通过利用外部模型来引导扩散模型的样本生成 [ 8 , 49 , 53 ] [8,49,53] [8,49,53]。具体来说,假设我们有一个外部引导模型 f ϕ f_\phi fϕ,该模型可以预测输入的某些特征,例如,预测图像类别的分类器。在反向扩散的每个时间步 t t t,我们使用引导模型计算 x t x_t xt 的梯度,方向是增加 x t x_t xt 拥有某些目标特征 y target  y_{\text {target }} ytarget  的概率。然后我们在通常的去噪更新之外,更新 x t x_t xt,使其朝着这个方向前进。更正式地,反向扩散过程(公式3)修改为如下形式:

x t − 1 = 1 1 − β t ( x t − β t 1 − α t ϵ θ ( x t , t ) ) + σ t z − s σ t ∇ x t L guide  ( f ϕ ( x t ) , y target  ) ( 4 ) \begin{aligned} x_{t-1}= & \frac{1}{\sqrt{1-\beta_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\alpha_t}} \epsilon_\theta\left(x_t, t\right)\right) \\ & +\sigma_t z-s \sigma_t \nabla_{x_t} \mathcal{L}_{\text {guide }}\left(f_\phi\left(x_t\right), y_{\text {target }}\right) \end{aligned}\quad(4) xt1=1βt 1(xt1αt βtϵθ(xt,t))+σtzsσtxtLguide (fϕ(xt),ytarget )(4)

其中 L guide  \mathcal{L}_{\text {guide }} Lguide  s s s 分别表示引导损失和引导强度。这种公式允许外部模型引导扩散模型以执行各种感兴趣的任务。例如,在类别条件图像生成中, f ϕ f_\phi fϕ 是一个输出 P ϕ ( y target  ∣ x t ) P_\phi\left(y_{\text {target }} \mid x_t\right) Pϕ(ytarget xt) 的图像分类器, L guide  \mathcal{L}_{\text {guide }} Lguide  − log ⁡ ( p ϕ ( y target  ∣ x t ) ) -\log \left(p_\phi\left(y_{\text {target }} \mid x_t\right)\right) log(pϕ(ytarget xt)) 给出。

3.2. Observation


本节探讨了简单的扩散指导方案是如何失败的。具体来说,我们表明,当用于引导扩散时,现成的模型会由于低置信度预测而失败,而使用受到大量噪声破坏的数据训练的模型则会失败。然后,我们报告了我们的主要观察结果,即使用受到不同噪声水平破坏的输入训练的分类器表现出不同的行为。我们表明这直接影响扩散指导,即拥有专门针对不同噪声区域的专家指导模型对于成功指导至关重要。

实验设置

我们的观察性研究涉及一个扩散模型和在噪声损坏数据上微调的各种分类器。对于引导分类器,我们使用了 ResNet50 [15],它在 ImageNet 上预训练,并在必要时进行了微调。我们使用了一个在 ImageNet 256 × 256 256 \times 256 256×256 上训练的扩散模型,最大时间步为 T = 1000 T=1000 T=1000,如文献 [8] 中所述。为了生成数据的噪声版本,我们执行了正向扩散过程,即给定输入 x 0 x_0 x0,我们得到 x t x_t xt (公式 2),对于 t = 1 , … , T t=1, \ldots, T t=1,,T。我们使用 DDIM 采样器 [50],设置为 25 步,并使用所考虑的分类器来引导扩散模型。

更多细节请参考附录 B。

单纯的外部模型指导是不够的。在这里,我们研究了单纯扩散指导的失败案例。首先,我们尝试使用现成的 ResNet50 分类器对 ImageNet 类标签进行扩散指导。如图 4 的第一行所示,该模型无法为扩散指导提供有意义的梯度。这是因为现成的模型对在整个反向过程中遇到的分布不均、噪声隐变量输出低置信度、高熵预测,如图 2 所示。

图2

图 2. 逆向过程中的分类器置信度。现成的模型并没有增加置信度,表明它无法引导扩散到其置信区域。

我们还实验了一个在正向扩散过程中遇到的数据上微调的 ResNet50 分类器,即在所有 t ∈ [ 1 , … , 1000 ] t \in[1, \ldots, 1000] t[1,,1000] 上的 x t x_t xt (公式 1),其中 x 0 x_0 x0 对应于干净图像。正如在改进的 FID ( 38.74 → 30.42 ) (38.74 \rightarrow 30.42) (38.7430.42) 和 IS ( 33.95 → 43.05 ) (33.95 \rightarrow 43.05) (33.9543.05) 分数中观察到的那样,这比使用现成的模型效果更好(详见第5节)。然而,正如图2所示,对于较干净的图像( t ≈ 200 t \approx 200 t200),分类器的置信度下降,导致如图4第二行中的失败情况。

图4

图 4. x t x_t xt t ∈ [ 920 , 720 , 520 , 320 , 120 ] t \in[920,720,520,320,120] t[920,720,520,320,120] 上的梯度图(左 5 张)以及生成的图像(最右一张),当逆向过程从相同的初始噪声被引导生成哈士奇时的结果。训练在较小噪声和较大噪声上的分类器分别倾向于修改更细的细节和更粗的结构。

根据学习到的噪声研究分类器行为

为了理解单一噪声感知模型的失败,我们研究了微调在特定噪声级别上的分类器的行为,即对于某些适当的 a > 0 a>0 a>0 b < T b< T b<T t ∈ [ a , b ] ⊂ [ 0 , T ] t \in[a, b] \subset[0, T] t[a,b][0,T] 上的 x t x_t xt

具体来说,我们微调了五个 ResNet50 分类器 f ϕ i f_{\phi_i} fϕi i ∈ { 1 , … , 5 } i \in\{1, \ldots, 5\} i{1,,5},其中 f ϕ i f_{\phi_i} fϕi 在噪声输入 x t x_t xt 上训练, t ∈ { ( i − 1 ) ⋅ 200 , … , i ⋅ 200 } t \in\{(i-1) \cdot 200, \ldots, i \cdot 200\} t{(i1)200,,i200}。我们首先通过 Grad-CAM [47] 观察到每个 f ϕ i f_{\phi_i} fϕi 的行为差异。例如,正如图3所示, f ϕ 1 f_{\phi_1} fϕ1 f ϕ 2 f_{\phi_2} fϕ2 在较干净的图像上训练,它们基于独特的犬类特征(如眼睛或毛皮花纹)预测 ‘哈士奇’。同时, f ϕ 4 f_{\phi_4} fϕ4 f ϕ 5 f_{\phi_5} fϕ5 在噪声图像上训练,它们根据整体形状进行预测(尽管人眼几乎不可察觉)。

图3

图 3. 通过前向过程对每个专家在损坏图像上的 Grad-CAM 可视化。在较大和较小时间步长上训练的专家分别倾向于关注粗糙和精细特征。

这种行为差异在使用不同的 f ϕ i f_{\phi_i} fϕi 引导扩散时表现出来。例如, f ϕ 5 f_{\phi_5} fϕ5 在噪声图像上训练,最初生成一个类似哈士奇的形状,但未能填充更细的细节。另一方面, f ϕ 1 f_{\phi_1} fϕ1 在较干净的图像上训练,似乎专注于生成特定的细节(如毛发质感),但由于缺乏整体结构,未能生成类似哈士奇的图像。

这些分类器的行为与之前的观点一致;无条件扩散分别在较大和较小的噪声中关注整体结构和细节 [5]。考虑到这一点,我们假设分类器可以通过学习特定的噪声级别来引导扩散在该噪声级别进行生成。

3.3. Multi-Experts Strategy


4. Practical Plug-and-Play Diffusion

每当应用一个新的现成模型时,多专家策略必须利用多个网络并收集标记数据集。为了解决这种不切实际的问题,我们提出了一个即插即用的扩散指导框架:实用即插即用 (PPAP),它采用多专家策略,具有以下两个组件,如图 5 所示:(1) 我们引入了一种基于参数共享的参数高效微调方案,以防止指导模型的大小过大;(2) 我们建议使用一种知识转移方案,将现成模型关于干净扩散生成的数据的知识转移到专家指导模型,从而无需标记数据集。

图5

图 5. 我们的方法概述。我们使用参数高效的多专家,每个专家都专注于特定的噪声范围。我们将现成模型的知识转移到每个专家,从而绕过对标记数据的需求。在逆向过程中,我们只需要根据噪声区域相应地切换添加的训练参数。

4.1. Parameter Efficient Multi-Experts Strategy


提出的多专家策略的一个限制是,随着引导模型数量增加 N N N 倍,需要微调的参数数量也增加 N N N 倍。为了解决这个问题,我们采用了一种参数高效的策略,仅微调少量参数,同时重用大部分冻结的现成模型。具体而言,我们微调偏置项和批归一化(Batch Normalization),并对现成模型的某些权重矩阵应用 LoRA [20]。由于该方法不改变模型架构(如增加模型深度),因此不会引入额外的推理时间成本。我们将第 n n n 个专家模型记为 f ϕ n ∗ f_{\phi_n^*} fϕn,以区分现成模型 f ϕ f_\phi fϕ

在扩散模型的反向过程中,我们只需根据噪声区域相应地切换已添加的训练参数,同时重用现成的主干模型。更多的架构细节见附录 C。

4.2. Data Free Knowledge Transfer


到目前为止,我们假设可以访问用于训练引导模型的数据集 { ( x 0 , y ) } \left\{\left(x_0, y\right)\right\} {(x0,y)}。为了实现实用的即插即用生成,应该可以在不获取适合每个任务的标注数据集的情况下,使用现成模型进行引导。

我们在此提出使用扩散模型生成干净的数据集 { x ~ 0 } \left\{\tilde{x}_0\right\} {x~0},然后用它来训练专家引导模型。我们的基本假设是,通过模仿现成模型在干净图像上的预测,专家模型可以在一定程度上在噪声域中运行。具体而言,我们将现成模型 f ϕ f_\phi fϕ 作为教师,并使用其在干净数据上的预测作为训练专家引导模型 f ϕ n f_{\phi_n} fϕn 时的标签。正式地,我们将知识迁移损失公式化为:

L K T = E t ∼ unif ⁡ { n − 1 N T , … , n N T } [ L ( sg ⁡ ( f ϕ ( x ~ 0 ) ) , f ϕ n ∗ ( x ~ t ) ) ] \mathcal{L}_{K T}=\mathbb{E}_{t \sim \operatorname{unif}\left\{\frac{n-1}{N} T, \ldots, \frac{n}{N} T\right\}}\left[\mathcal{L}\left(\operatorname{sg}\left(f_\phi\left(\tilde{x}_0\right)\right), f_{\phi_n^*}\left(\tilde{x}_t\right)\right)\right] LKT=Etunif{Nn1T,,NnT}[L(sg(fϕ(x~0)),fϕn(x~t))]

其中 sg ⁡ ( ⋅ ) \operatorname{sg}(\cdot) sg() 是停止梯度操作符, L \mathcal{L} L 是任务特定的损失函数。通过这种形式化,我们可以轻松地将我们的方法适应各种感兴趣的任务,包括图像分类、单目深度估计和语义分割,只需使用不同的损失函数。由于篇幅限制,这里我们仅描述如何即插即用一个图像分类器。其他任务的详细信息可以在附录 D 中找到。

图像分类 图像分类器以图像为输入,并输出形式为 f ( x ) ∈ R C f(x) \in \mathbb{R}^C f(x)RC 的 logit 向量,其中 C C C 是图像类别的数量。我们将分类器的知识迁移损失 L c l s f \mathcal{L}_{c l s f} Lclsf 公式化为:

L c l s f = D K L ( sg ⁡ ( s ( f ϕ ( x ~ 0 ) / τ ) ) , s ( f ϕ n ∗ ( x ~ t ) ) ) \mathcal{L}_{c l s f}=D_{K L}\left(\operatorname{sg}\left(s\left(f_\phi\left(\tilde{x}_0\right) / \tau\right)\right), \mathrm{s}\left(f_{\phi_n^*}\left(\tilde{x}_t\right)\right)\right) Lclsf=DKL(sg(s(fϕ(x~0)/τ)),s(fϕn(x~t)))
其中, s s s 是 softmax 操作符, τ \tau τ 是温度超参数, D K L ( ⋅ ) D_{K L}(\cdot) DKL() 是 Kullback-Leibler 散度。

总结

  • 外部引导模型+LoRA
  • 外部引导模型的独立性

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

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

相关文章

PX4软/硬件(SITL/HITL)在环仿真

文章目录 介绍依赖PX4 Firmware&#xff1a; 软件在环(SITL)仿真Gazebo 软件无人机STIL连接简要示意SITL SLAM仿真总结示例 HITL 仿真 pxh常用命令MAVLink 指令使用这些命令时的注意事项 参考链接 介绍 为https://blog.csdn.net/weixin_41469272/article/details/117919845的补…

【买卖股票系列问题 -- 动规 + 其他转换方法】

目录&#xff1a; 前言买卖股票的最佳时机题解1&#xff1a;找出最值区间题解2&#xff1a;问题转化&#xff1a;最大子序和题解3&#xff1a;动态规划 买卖股票的最佳时机 II题解1&#xff1a;动态规划题解2&#xff1a;贪心 买卖股票的最佳时机含冷冻期动态规划 买卖股票的最…

Java代码审计篇 | ofcms系统审计思路讲解 - 篇1 | 环境搭建、路由机制

文章目录 Java代码审计篇 | ofcms系统审计思路讲解 - 篇1 | 环境搭建、路由机制1. 前言2. 项目环境搭建3. 项目路由机制3.1. 1&#xff09;先搜索pom.xml文件&#xff0c;看看使用了什么框架3.2. 2&#xff09;确定是否是spring的路由机制3.3. 3&#xff09;确定自写路由机制的…

双指针(7)_单调性_三数之和

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 双指针(7)_单调性_三数之和 收录于专栏【经典算法练习】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 题目…

【Redis】redis5种数据类型(string)

目录 redis5种数据类型和内部编码方式 redis单线程模型 string字符串类型相关命令 SET GET MSET MGET SETNX SETEX ​编辑PSETEX value值为整数&#xff0c;进行加减操作 INCR INCRBY DECR DECRBY INCRBYFLOAT APPEND GETRANGE SETRANGE STRLEN string的…

VMwareWorkstation安装UOS系统(1070版本)教程

UOS系统是一款国产信创操作系统。目前市面上主流的系统版本是1070&#xff0c;下面我们用虚拟机来安装一下这款系统。 创建虚拟机 首先&#xff0c;我们先打开VMwareWorkstation软件&#xff0c;新建虚拟机 选择自定义&#xff0c;点击下一步 点击下一步 选择稍后安装操作系统…

【通信管理之c++基础01】std::future

std::future https://en.cppreference.com/w/cpp/thread/future https://cplusplus.com/reference/future/future/ std::async #

实验一 局域网设计

一、实验目的 1.掌握网络工程中需求分析方法。 2.子网IP地址规划及子网间互相通信的方法。 3.掌握局域网的构建方法。 二、实验描述 某中学拟建设一个校园网&#xff0c;网络使用192.168.10.0/24这个地址段。计算机主要分布如下&#xff1a;两个学生机房各为10台&#xff…

数据库课程 CMU15-445 2023 Fall Project-0 项目记录

0. 实验结果 1. 环境配置 1.1 虚拟机Ubuntu 22.04.4 LTS 1.2 Vscode 插件安装clangd&#xff1a;代码补全 1.3 参考官方Project 0完成环境配置 1.4 获取到的代码&#xff0c;切换分支到2023 Fall git checkout fc57dab // 仓库中2023 Fall release版本的哈希值 git branch d…

WPF 保姆级教程怎么实现一个树形菜单

先看一下效果吧: 我们直接通过改造一下原版的TreeView来实现上面这个效果 我们先创建一个普通的TreeView 代码很简单: <TreeView><TreeViewItem Header"人事部"/><TreeViewItem Header"技术部"><TreeViewItem Header"技术部-1&q…

低代码平台:助力企业数字化转型的利器

正文&#xff1a; 在数字化时代的浪潮中&#xff0c;企业需要快速适应市场变化和技术进步。传统的软件开发方法往往由于开发周期长、成本高和对技术人员的依赖程度高&#xff0c;难以满足企业的快速响应需求。此时&#xff0c;低代码平台&#xff08;Low-Code Platform&#x…

干货分享|分享一款微软出品的工作效率神器 PowerToys

工具介绍&#xff1a;Microsoft PowerToys 是一组实用工具&#xff0c;可帮助高级用户调整和简化其 Windows 体验&#xff0c;从而提高工作效率。 安装步骤&#xff1a;直接打开微软商店安装即可&#xff0c;并且可以保证下载到最新版本。 功能介绍&#xff1a; 高级粘贴 高级…

js react 笔记 2

起因&#xff0c; 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块 const { randomUUID } require(crypto);const uuid randomUUID(); console.log(uuid); // 输出类似 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d 2. 使用 props, 传递参数…

[uniapp/wx小程序] 关于cover-view滚动/点击穿透问题的解决方案/cover-view 的坑

情况&#xff1a;如果在原生组件上&#xff0c;搞了一些弹窗、覆盖层、操作栏等等的东西&#xff0c;有层级的情况&#xff0c;就会出现事件穿透的问题 问题&#xff1a;自然会想到官方给出的解决方案&#xff1a;使用cover-view。但有时穿透问题虽然解决了&#xff0c;但会出…

【NanoEdgeAIStudio】初次体验

本文前言 NanoEdge ai Studio是ST提供的免费软件&#xff0c;可以轻松地将ai添加到任何Arm Cortex-M MCU上运行的任何嵌入式项目中。官网首页&#xff1a;NanoEdge AI Studio&#xff0c;官方文档&#xff1a;AI:NanoEdge AI Studio。官方文档写的很详细&#xff0c;建议观看。…

Python 从入门到实战12(流程控制-跳出循环语句)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了流程控制语句中的循环语句。今天继续讨…

【数据结构】顺序表和链表——链表(包含大量经典链表算法题)

文章目录 1. 单链表1.1 概念与结构1.1.1 结点1.1.2 链表的性质1.1.3 链表的打印 1.2 实现单链表1.3 链表的分类1.4 单链表算法题1.4.1 移除链表元素1.4.2 反转链表1.4.3 链表的中间结点1.4.4 合并两个有序链表1.4.5 链表分割1.4.6 链表的回文结构1.4.7 相交链表1.4.8 环形链表1…

【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况(完整版)

关于java应用的监控本系列有文章如下&#xff1a; 【运维监控】influxdb 2.0telegraf 监控tomcat 8.5运行情况 【运维监控】influxdb 2.0grafana 监控java 虚拟机以及方法耗时情况 【运维监控】Prometheusgrafana监控tomcat运行情况 【运维监控】Prometheusgrafana监控spring b…

软考科目傻傻分不清?一次搞懂各科目考核内容!小白不再纠结!

2024年下半年软考报名已经逐步进入尾声了&#xff0c;大部分考生都已完成报名&#xff0c;但有不少小白因为是第一次报考&#xff0c;对各科目傻傻分不清&#xff0c;导致报错了科目…… 这种情况很可能会影响考试&#xff0c;浪费了一次报考机会。而为了尽量避免这一情况再发生…

个人简历 (自己设计的)

欢迎大家来观看。 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" co…