Stable Diffusion 模型演进:LDM、SD 1.0, 1.5, 2.0、SDXL、SDXL-Turbo 等

news2024/11/20 3:18:19

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。

针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。

合集:

持续火爆!!!《AIGC 面试宝典》已圈粉无数!


一、背景

这里我们继续介绍 Stable Diffusion 相关的三个图像生成工作,Latent Diffusion Model(LDM)、SDXL 和 SDXL-Turbo。这三个工作的主要作者基本相同,早期是在 CompVis 和 Runway 等发表,后两个主要由 Stability AI 发表。

LDM 对应的论文为:[2112.10752] High-Resolution Image Synthesis with Latent Diffusion Models

LDM 对应的代码库为:High-Resolution Image Synthesis with Latent Diffusion Models

SDXL 对应的论文为:[2307.01952] SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis

SDXL 对应的代码库为:Generative Models by Stability AI

SDXL-Turbo 对应的论文为:[2311.17042] Adversarial Diffusion Distillation

SDXL-Turbo 对应的代码库为:Generative Models by Stability AI

图片

二、摘要

2021 年 05 月 OpenAI 发表 Diffusion Models Beat GANs,扩散模型(Diffusion Model,DM)的效果开始超越传统的 GAN 模型,进一步推进了 DM 在图像生成领域的应用。

不过早期的 DM 都直接作用于像素空间,因此如果要优化一个强大的 DM 通常需要花费数百 GPU 天时,并且因为需要迭代多步,推理的成本也很高。为了实现在有效的计算资源上训练 DM,同时保持其质量和灵活性,作者提出将 DM 应用于强大的预训练 AutoEncoder 的隐空间(Latent Space),这也就是为什么提出的模型叫 LDM。与以前的工作相比,这种方式训练 DM 首次实现了在降低复杂性和保留细节之间的平衡,并大大提高视觉的逼真度。

此外,作者还在模型中引入交叉注意力层,可以将文本、边界框等条件很方便地引入到模型中,将 DM 转化为强大而灵活的生成器,实现高分辨率的生成。作者提出的 LDM 模型同样在图像修复、类别条件生成等方面取得很好的效果,同时与基于像素空间的扩散模型相比,大大降低计算要求。

如下图 Figure 5 所示为其文本引导图像生成的结果:

图片

在 Stable Diffusion(LDM)的基础上,SDXL 将 U-Net 主干扩大了三倍:模型参数增加主要是使用了第二个 Text Encoder,因此也就使用更多的 Attention Block 和 Cross Attention 上下文。此外,作者设计了多分辨率训练方案,在多个不同长宽比的图像上训练。作者还引入了一个细化模型,用于进一步提升生成图像的视觉逼真度。结果表明,与之前版本的 Stable Diffusion 相比,SDXL 的性能有了显著提升,并取得与其他非开源模型相当的效果。此次的模型和代码同样完全开源。

如下图所示为 SDXL 生成的图像:

图片

在 SDXL 的基础上,作者提出了对抗性扩散蒸馏技术(Adversarial Diffusion Distillation,ADD),将扩散模型的步数降低到 1-4 步,同时保持很高的图像质量。结果表明,模型在 1 步生成中明显优于现有的几步生成方法,并且仅用 4 步就超越了最先进的 SDXL 的性能。训练出的模型称为 SDXL-Turbo。

如下图 Figure 1 所示为 SDXL-Trubo 生成的图像:

图片

三、Latent Diffusion Model(LDM)

3.1. LDM 模型概览

LDM 和其他扩散生成模型结构类似,整体来说包含三个组件:

  • Auto Encoder:下图左侧部分,包含红框的 Encoder 和蓝框的 Decoder,其中 Encoder 主要用于训练中生成 target z,推理阶段不需要。而 Decoder 用于从隐空间编码(latent code)恢复出图像。

  • Conditioning:下图右侧部分,用于对各种条件信息进行编码,生成的 embedding 会在扩散模型 U-Net 中使用。不同的条件可能会有不同的 Encoder 模型,也有不同的使用方式(对应下图中的 switch),比如:

  • 对于文本类型条件,可以使用 Bert Encoder,也可以使用 CLIP 中的 Text Encoder 将文本编码为 embedding。

  • 对于图像类型条件,比如图像修复、分割条件,可以将其编码后与噪声 Concat 作为输入,而不是通过 Attention 机制交叉。

  • Denoising U-Net:下图中间部分,用于从随机噪声 zT 中通过几步迭代生成 latent code,然后使用 Decoder 恢复出图像。其中的各种条件信息都会通过 Cross Attention 进行交叉融合。需要说明的是,U-Net 生成的目标是 x 经 Encoder 编码后的 embedding,通常也称为隐向量,而不是直接生成图像像素,因此说 U-Net 是作用在隐空间(Latent Space)。

图片

3.2. AutoEncoder

AutoEncoder 中的 Encoder 用于对图像 x 进行压缩,假设输入图像分辨率为 HxW,则 f 压缩率对应的 latent code 大小为 H/f x W/f。也就是说,如果图像分辨率为为 512x512,则 f=4 的压缩率对应的 latent code 大小为 64x64,也就是 z 的大小为 64x64。针对不同的压缩率 f,作者也进行了一系列实验,对应的模型为 LDM-{f},总共有 LDM-1,LDM-2,LDM-4,LDM-8,LDM-16,LDM-32。需要说明的是,LDM-1 相当于没有压缩,也就是直接作用于像素空间,LDM-32 相当于 32 倍压缩,512x512 分辨率图像对应的 latent code 只有 16x16。

作者在类别条件生成任务上对几种压缩比进行了实验验证,如下图 Figure 6 所示,可见 LDM-4、LDM-8、LDM-16 获得最好的平衡。LDM-32 的压缩率太高,反而影响了生成质量:

图片

如下图 Table 6 所示,作者同样在图像修复任务上验证了不同压缩率、Cross Attention 的影响,可以看出 LDM-4 的训练、推理吞吐相比 LDM-1 有明显提升,并且 Attention 对吞吐的影响也不大。同时 LDM-4 还获得更好的效果(更低的 FID):

图片

3.3. Latent Diffusion Models

本文中作者使用的 U-Net 模型是基于 OpenAI Diffusion Models Beat GANs 中的 Ablated U-Net 修改而来,具体来说是将其中的 Self-Attention 替换为 T 个 Transformer block,每个 block 中包含一个 Self-Attention,一个 MLP 和一个 Cross-Attention,如下图所示,其中的 Cross Attention 就是用于和其他条件的 embedding 进行交叉融合:

图片

3.4. Conditioning 机制

LDM 支持多种条件类型,比如类别条件、文本条件、分割图条件、边界框条件等。

对于文本条件,可以使用常用的文本 Encoder,比如 Bert 模型,或者 CLIP 的 Text Encoder,其首先将文本转换为 Token,然后经过模型后每个 Token 都会对应一个 Token embedding,所以文本条件编码后变为一个 Token embedding 序列。

图片

图片

对于 layout 条件,比如常见的边界框,每个边界框都会以(l,b,c)的方式编码,其中 l 表示左上坐标,b 表示右下坐标,c 表示类别信息。

图片

对于类别条件,每个类别都会以一个可学习的 512 维向量表示,同样通过 Cross-Attention 机制融合。

图片

对于分割图条件,可以将图像插值、卷积后编码为 feature map,然后作为条件。

图片

图片

其中文本条件和 layout 条件都通过 Transformer Encoder 编码,对应的超参如下图 Table 17 所示,也就是文本最多只能编码为 77 个 Token,Layout 最多编码为 92 个 Token:

图片

所谓的 layout-to-image 生成如下图所示,给定多个边界框,每个边界框有个类别信息,生成的图像要在对应的位置生成对应的目标:

图片

3.5. 实验结果

3.5.1. 无条件生成

如下图 Table 1 所示,作者在多个任务上评估了 LDM-4 和 LDM-8 的无条件图像生成效果,可以看出,在大部分任务上都获得了很不错的结果:

图片

3.5.2. 类别条件生成

如下图 Table 3 所示,作者同样在 ImageNet 上与 ADM(Diffusion Model Beat GANs)等模型进行了类别条件图像生成对比,可见在 FID 和 IS 指标上获得了最优或次优的结果:

图片

3.5.3. LDM-BSR

作者同样将 BSR-degradation 应用到超分模型的训练,获得了更好的效果,BSR degradation Pipeline 包含 JPEG 压缩噪声、相机传感器噪声、针对下采样的不同图像插值方法,高斯模糊核以及高斯噪声,并以随机顺序应用于图像(具体可参考代码 https://github.com/CompVis/stable-diffusion/blob/main/ldm/modules/image_degradation/bsrgan_light.py),最终获得了不错的效果:

图片

3.6. 计算需求

作者与其他模型对比了训练和推理的计算需求和相关的参数量、FID、IS 等指标,提出的模型在更小的代价下获得更好的效果:

图片

四、SDXL

4.1. SDXL 模型概览

如下图所示,SDXL 相比 SD 主要的修改包括(模型总共 2.6B 参数量,其中 text encoder 817M 参数量):

  • 增加一个 Refiner 模型,用于对图像进一步地精细化

  • 使用 CLIP ViT-L 和 OpenCLIP ViT-bigG 两个 text encoder

  • 基于 OpenCLIP 的 text embedding 增加了一个 pooled text embedding

图片

图片

4.2. 微条件(Micro-Conditioning)

4.2.1. 以图像大小作为条件

在 SD 的训练范式中有个明显的缺陷,对图像大小有最小长宽的要求。针对这个问题有两种方案:

  • 丢弃分辨率过小的图像(例如,SD 1.4/1.5 丢弃了小于 512 像素的图像)。但是这可能导致丢弃过多数据,如下图 Figure 2 所示为预训练数据集中图像的长、宽分布,如果丢弃 256x256 分辨率的图像,将导致 39% 的数据被丢弃。

  • 另一种方式是放大图像,但是可能会导致生成的样本比较模糊。

图片

针对这种情况,作者提出将原始图像分辨率作用于 U-Net 模型,并提供图像的原始长和宽(csize = (h, w))作为附加条件。并使用傅里叶特征编码,然后会拼接为一个向量,把它扩充到时间步长 embedding 中并一起输入模型。

如下图所示,在推理时指定不同的长宽即可生成相应的图像,(64,64)的图像最模糊,(512, 512)的图像最清晰:

图片

4.2.2. 以裁剪参数作为条件

此外,以前的 SD 模型存在一个比较典型的问题:生成的物体不完整,像是被裁剪过的,如下图 SD1.5 和 SD 2.1 的结果。作者猜测这可能和训练阶段的随机裁剪有关,考虑到这个因素,作者将裁剪的左上坐标(top, left)作为条件输入模型,和 size 类似。如下图 Figure 4 中 SDXL 的结果,其生成结果都更加完整:

图片

如下图 Figure 5 所示,在推理阶段也可以通过裁剪坐标来控制位置关系:

图片

4.3. 多分辨率训练

真实世界的图像会包含不同的大小和长宽比,而文本到模型生成的图像分辨率通常为 512x512 或 1024x1024,作者认为这不是一个自然的选择。受此启发,作者以不同的长宽比来微调模型:首先将数据划分为不同长宽比的桶,其中尽可能保证总像素数接近 1024x1024 个,同时以 64 的整数倍来调整高度和宽度。如下图所示为作者使用的宽度和高度。在训练过程中,每次都从同样的桶中选择一个 batch,并在不同的桶间交替。此外,和之前的 size 类似,作者会将桶的高度和宽度 (h, w)作为条件,经傅里叶特征编码后添加到时间步 embedding 中:

图片

4.4. 训练

SDXL 模型的训练包含多个步骤:

  • 基于内部数据集,以 256x256 分辨率预训练 6,000,000 step,batch size 为 2048。使用了 size 和 crop 条件。

  • 继续以 512x512 分辨率训练 200,000 step。

  • 最后使用多分辨率(近似 1024x1024)训练。

根据以往的经验,作者发现所得到的的模型有时偶尔会生成局部质量比较差的图像,为了解决这个问题,作者在同一隐空间训练了一个独立的 LDM(Refiner),该 LDM 专门用于高质量、高分辨率的数据。在推理阶段,直接基于 Base SDXL 生成的 Latent code 继续生成,并使用相同的文本条件(当然,此步骤是可选的),实验证明可以提高背景细节以及人脸的生成质量。

4.5. 实验结果

如下图所示,作者基于用户评估,最终带有 Refiner 的 SDXL 获得了最高分,并且 SDXL 结果明显优于 SD 1.5 和 SD 2.1。

图片

如下图 Figure 10 所示为 SDXL(没有 Refiner) 和 Midjourney 5.1 的对比结果,可见 SDXL 的结果略胜一筹:

图片

如下图 Figure 11 所示为 SDXL(带有 Refiner) 和 Midjourney 5.1 的对比结果,可见 SDXL 的结果同样略胜一筹:

图片

五、SDXL-Turbo

5.1. SDXL-Turbo 方法

SDXL-Turbo 在模型上没有什么修改,主要是引入蒸馏技术,以便减少 LDM 的生成步数,提升生成速度。大致的流程为:

  • 从 Tstudent 中采样步长 s,对于原始图像 x0 进行 s 步的前向扩散过程,生成加噪图像 xs。

  • 使用学生模型 ADD-student 对 xs 进行去噪,生成去噪图像 xθ。

  • 基于原始图像 x0 和去噪图像 xθ 计算对抗损失(adversarial loss)。

  • 从 Tteacher 中采样步长 t,对去噪后的图像 xθ 进行 t 步的前向扩散过程,生成 xθ,t。

  • 使用教师模型 DM-student 对 xθ,t 进行去噪,生成去噪图像 xψ。

  • 基于学生模型去噪图像 xθ 和教师模型去噪图像 xψ 计算蒸馏损失(distillation)。

  • 根据损失进行反向传播(注意,教师模型不更新,因此会 stop 梯度)。

图片

需要说明的是,通常 ADD-student 模型需要预训练过程,然后再蒸馏。此外,Tstudent 的 N 比较小,作者设置为 4,而 Tteacher 的 N 比较大,为 1000。也就是学生模型可能只加噪 1,2,3,4 步,而教师模型可能加噪 1-1000 步。

此外,作者在训练中还用了其他技巧,比如使用了 zero-terminal SNR;教师模型不是直接作用于原始图像 x0,而是作用于学生模型恢复出的图像 xθ,否则会出现 OOD(out of distribution) 问题;作者还应用了 Score Distillation Loss,并且与最新的 noise-free score distillation 进行了对比。

5.2. 消融实验

作者进行了一系列的消融实验:

  • (a) 在判别器(Discriminator)中使用不同模型的结果。

  • (b) 在判别器中使用不同条件的效果,可见使用文本+图像条件获得最好结果。

  • © 学生模型使用预训练的结果,使用预训练效果明显提升。

  • (d) 不同损失的影响。

  • (e) 不同学生模型和教师模型的影响。

  • (f) 教师 step 的影响。

图片

5.3. 实验结果

如下图所示,作者与不同的蒸馏方案进行了对比,本文提出的方案只需一步就能获得最优的 FID 和 CLIP 分数:

图片

如下图 Figure 5 和 Figure 6 所示为性能和速度的对比,ADD-XL 1 步比 LCM-XL 4 步的效果更好,同时 ADD-XL 4 步可以超越 SDXL 50 步的结果,总之,ADD-XL 获得了最佳性能:

图片

图片

六、演进

6.1. Latent Diffusion

Stable Diffusion 之前的版本,对应的正是论文的开源版本,位于代码库 High-Resolution Image Synthesis with Latent Diffusion Models 中。

该版本发布于 2022 年 4 月,主要包含三个模型:

  • 文生图模型:基于 LAION-400M 数据集训练,包含 1.45B 参数。

  • 图像修复模型:指定区域进行擦除。

  • 基于 ImageNet 的类别生成模型:在 ImageNet 上训练,指定类别条件生成,获得了 3.6 的 FID 分数。使用了 Classifier Free Guidance 技术。

代码实现参考了 OpenAI 的 Diffusion Models Beat GANs 代码实现。

6.2. Stable Diffusion V1

Stable Diffusion 的第一个版本,特指文生图扩散模型,位于代码库 GitHub - CompVis/stable-diffusion: A latent text-to-image diffusion model 中。

该版本发布于 2022 年 8 月,该模型包含 2 个子模型:

  • AutoEncoder 模型:U-Net,8 倍下采样,包含 860M 参数。

  • Text Encoder 模型:使用 CLIP ViT-L/14 中的 Text encoder。

模型首先在 256x256 的分辨率下训练,然后在 512x512 的分辨率下微调。总共包含 4 个子版本:

  • sd-v1-1.ckpt:

  • 在 LAION-2B-en 数据集上以 256x256 分辨率训练 237k step。

  • 在 LAION-high-resolution(LAION-5B 中超过 1024x1024 分辨率的 170M 样本)上以 512x512 分辨率继续训练 194k step。

  • sd-v1-2.ckpt:

  • 复用 sd-v1-1.ckpt,在 LAION-aesthetics v2 5+(LAION-2B-en 中美观度分数大于 5.0 的子集) 上以 512x512 分辨率继续训练 515k step。

  • sd-v1-3.ckpt:

  • 复用 sd-v1-2.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率继续训练 195k step,使用了 Classifier Free Guidance 技术,以 10% 概率删除文本条件。

  • sd-v1-4.ckpt:

  • 复用 sd-v1-2.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率继续训练 225k step,使用了 Classifier Free Guidance 技术,以 10% 概率删除文本条件。

对应的 FID 和 CLIP 分数如下图所示,可见从 v1-1 到 v1-2,再到 v1-3 提升都很明显,v1-3 和 v1-4 差距不大:

图片

6.3. Stable Diffusion V1.5

Stable Diffusion 的 V1.5 版本,由 runway 发布,位于代码库 GitHub - runwayml/stable-diffusion: Latent Text-to-Image Diffusion 中。

该版本发布于 2022 年 10 月,主要包含两个模型:

  • sd-v1-5.ckpt:

  • 复用 sd-v1-2.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率继续训练 595k step,使用了 Classifier Free Guidance 技术,以 10% 概率删除文本条件。

  • sd-v1-5-inpainting.ckpt:

  • 复用 sd-v1-5.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率以 inpainting 训练了 440k step,使用 Classifier Free Guidance 技术,以 10% 概率删除文本条件。在 U-Net 的输入中额外加了 5 个 channel,4 个用于 masked 的图像,1 个用于 mask 本身。

对应的 FID 和 CLIP 分数如下图所示,可以看出,v1.5 相比 v1.4 的提升也不是很明显:

图片

如下图所示为图像修复的示例:

图片

6.3. Stable Diffusion V2

Stable Diffusion 的 V2 版本,由 Stability-AI 发布,位于代码库 GitHub - Stability-AI/stablediffusion: High-Resolution Image Synthesis with Latent Diffusion Models 中。

V2 包含三个子版本,分别为 v2.0,v2.1 和 Stable UnCLIP 2.1:

  • v2.0:

  • 发布于 2022 年 11 月,U-Net 模型和 V1.5 相同,Text encoder 模型换成了 OpenCLIP-ViT/H 中的 text encoder。

  • SD 2.0-base:分别率为 512x512

  • SD 2.0-v:基于 2.0-base 微调,分辨率提升到 768x768,同时利用 [2202.00512] Progressive Distillation for Fast Sampling of Diffusion Models 提出的技术大幅降低 Diffusion 的步数。

  • 发布了一个文本引导的 4 倍超分模型。

  • 基于 2.0-base 微调了一个深度信息引导的生成模型。

  • 基于 2.0-base 微调了一个文本信息引导的修复模型。

  • v2.1:

  • 发布于 2022 年 12 月,模型结构和参数量都和 v2.0 相同。并在 v2.0 的基础上使用 LAION 5B 数据集(较低的 NSFW 过滤约束)微调。同样包含 512x512 分辨率的 v2.1-base 和 768x768 分辨率的 v2.1-v。

  • Stable UnCLIP 2.1:

  • 发布于 2023 年 3 月,基于 v2.1-v(768x768 分辨率) 微调,参考 OpenAI 的 DALL-E 2(也就是 UnCLIP),可以更好的实现和其他模型的联合,同样提供基于 CLIP ViT-L 的 Stable unCLIP-L 和基于 CLIP ViT-H 的 Stable unCLIP-H。

如下图所示为 v2.0 和 v2.0-v 与 v1.5 的对比,可见其都有明显提升:

图片

6.4. Stable Diffusion XL

Stable Diffusion 的 XL 版本,由 Stability-AI 发布,位于代码库 Generative Models by Stability AI。

该版本发布于 2023 年 06 月,主要包含两个模型:

  • SDXL-base-0.9:基于多尺度分辨率训练,最大分辨率 1024x1024,包含两个 Text encoder,分别为 OpenCLIP-ViT/G 和 CLIP-ViT/L。

  • SDXL-refiner-0.9:用来生成更高质量的图像,不应直接使用,此外文本条件只使用 OpenCLIP 中的 Text encoder。

2023 年 07 月发布 1.0 版本,同样对应两个模型:

  • SDXL-base-1.0:基于 SDXL-base-0.9 改进。

  • SDXL-refiner-1.0:基于 SDXL-refiner-0.9 改进。

2023 年 11 月发表 SDXL-Trubo 版本,也就是优化加速的版本。

七、参考链接

  1. https://arxiv.org/abs/2112.10752

  2. https://github.com/CompVis/latent-diffusion

  3. https://arxiv.org/abs/2307.01952

  4. https://github.com/Stability-AI/generative-models

  5. https://arxiv.org/abs/2311.17042

  6. https://github.com/Stability-AI/generative-models

  7. https://jalammar.github.io/illustrated-stable-diffusion/

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

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

相关文章

Vue3+Ant design 实现Select下拉框一键全选/清空

最近在做后台管理系统项目的时候,产品增加了一个让人非常苦恼的需求,让在Select选择器中添加一键全选和清空的功能,刚开始听到的时候真是很懵,他又不让在外部增加按钮,其实如果说在外部增加按钮实现全选或者清空的话&a…

触摸屏是输入设备还是输出设备?

从功能上讲,触摸屏理应属于输入设备,之所以有很多用户会误会它是输出设备,是因为将其与“触摸显示屏”搞混了,以手机屏幕为例,它并不是单层屏幕,而是有多个不同功能和作用组成的集成屏,这类带有…

ubuntu-24.04系统静态Mac和IP配置

操作系统版本(桌面版):ubuntu-24.04-desktop-amd64.iso 原因说明:因网络的IP地址和Mac是预分配的,所以ubuntu系统需要修改网卡的mac地址和IP才能访问,网络查了半天资料都没成功,后再界面提示&a…

【Python】 Python中的“命名元组”:简单而强大的数据结构

基本原理 在Python中,namedtuple是tuple的一个子类,它允许我们为元组的每个位置指定一个名字。这种数据结构非常适合用于需要固定字段和值的场景,例如数据库查询的结果或配置文件中的设置。 namedtuple提供了一种方便的方式来访问元组中的元…

力扣2028. 找出缺失的观测数据

题目: 现有一份 n m 次投掷单个 六面 骰子的观测数据,骰子的每个面从 1 到 6 编号。观测数据中缺失了 n 份,你手上只拿到剩余 m 次投掷的数据。幸好你有之前计算过的这 n m 次投掷数据的 平均值 。 给你一个长度为 m 的整数数组 rolls &a…

防止浏览器缓存了静态的配置等文件(例如外部的config.js 等文件)

防止浏览器缓存了静态的配置文件 前言1、在script引入的时候添加随机数1.1、引入js文件1.2、引入css文件2、通过html文件的<meta>设置防止缓存3、使用HTTP响应头:前言 在实际开发中浏览器的缓存问题一直是一个很让人头疼的问题,尤其是我们打包时候防止的静态配置文件c…

在 PhpStorm 中自定义代码片段

在 PhpStorm 中自定义代码片段的步骤如下: 打开 PhpStorm,进入 “File” > “Settings” > “Editor” > “Live Templates”。 在右侧面板中,点击 “” 号,选择 “Live Template”。 在弹出的窗口中: Abbreviation: 输入您想要自动补全的缩写,比如 “de”Template …

【强训笔记】day24

NO.1 思路&#xff1a;递归。 代码实现&#xff1a; class Solution { public:bool IsBalanced_Solution(TreeNode* pRoot) {return dfs(pRoot)!-1;}int dfs(TreeNode* root){if(rootnullptr) return 0;int leftdfs(root->left);if(left-1) return -1;int rightdfs(root-…

深度揭秘:蓝海创意云渲染农场的五大特色功能

在当今数字化时代&#xff0c;影视制作、效果图设计等领域对于高质量的渲染需求日益增长。在这个背景下&#xff0c;云渲染平台成为了行业中不可或缺的一部分&#xff0c;它为用户提供了高效、灵活的渲染解决方案。蓝海创意云渲染农场https://www.vsochina.com/cn/render蓝海创…

WWW24因果论文(1/8) | 利用强化学习(智能体)进行因果问答

【摘要】因果问题询问不同事件或现象之间的因果关系。它们对于各种用例都很重要&#xff0c;包括虚拟助手和搜索引擎。然而&#xff0c;许多当前的因果问答方法无法为其答案提供解释或证据。因此&#xff0c;在本文中&#xff0c;我们旨在使用因果关系图来回答因果问题&#xf…

昂科烧录器支持Infineon英飞凌的磁性位置传感器TLE4998S8D

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Infineon英飞凌的磁性位置传感器TLE4998S8D已经被昂科的通用烧录平台AP8000所支持。 TLE4998S8D是一款磁性位置传感器&#xff0c;经过专门设计&#xff0c;满足高精度角度和位…

实施阶段(2024年5月)

【项目活动1】斐波拉契数列第n项的值&#xff1f; 数学思想&#xff1a;第一项和第二项的值都为1&#xff0c;从第三项开始值为前两项的和。 方法一&#xff1a;迭代 迭代变量&#xff1a;f1和f2 迭代表达式&#xff1a;f1,f2f2,f1f2 计数器&#xff1a;i 迭代表达式运算…

webpack打包配置项

webpack打包配置项 在config.js 中 module.exports {publicPath: process.env.NODE_ENV production ? / : /, //静态资源目录outputDir: dist, //打包名称assetsDir: static,//静态资源&#xff0c;目录devServer: {port: port,open: false,overlay: {warnings: false,erro…

解决Plugin ‘maven-clean-plugin:3.1.0‘ not found的问题

1. 问题描述 当导入别人的Maven项目时&#xff0c;可能会出现Plugin maven-clean-plugin:3.1.0 not found的错误信息。 2. 解决方案 2.1 方案一 检查自己的Maven仓库地址是否正确&#xff0c;一般引入其他人的项目时&#xff0c;Maven仓库的目录以及配置都会是别人的&#xff…

SpringBoot——基于Spring Task实现定时任务

目录 定时任务 项目总结 新建一个SpringBoot项目 pom.xml无需引入依赖 SpringTaskDemo SpringbootSpringtaskApplication启动类 定时任务 在日常的项目开发中&#xff0c;往往会涉及一些需要做到定时执行的代码&#xff0c;例如自动将超过24小时的未付款的订单改为取消状…

go语言,golang,linux,unbantu安装

查看系统是arm还是amd uname -m 命令可以显示系统的架构类型&#xff1a; uname -m输出可能是&#xff1a; x86_64&#xff1a;表示是 AMD64 架构&#xff08;即 64 位的 x86 架构&#xff09;。aarch64&#xff1a;表示是 ARM64 架构&#xff08;即 64 位的 ARM架构&#xf…

Thingsboard规则链:Message type switch节点详解

在物联网解决方案中&#xff0c;数据的高效处理与自动化决策流程是实现智能化管理的基础。Thingsboard&#xff0c;作为一个强大的开源物联网平台&#xff0c;通过其规则引擎为用户提供了一系列灵活的节点来定制复杂的业务逻辑。其中&#xff0c;Message Type Switch节点是构建…

超清高帧,成像升级 | SWIR短波红外相机500万像素992芯片

博图光电5MP短波红外相机&#xff0c;搭载了索尼IMX992 SenSWIR传感器&#xff0c;支持5.2MP分辨率&#xff0c;适合探测波长在400nm-1700nm波段的可见光和短波红外光&#xff0c;有效面积和透光率得到提升&#xff0c;内置TEC制冷片&#xff0c;实现了像素尺寸和图像均匀性方面…

微服务架构-数据共享设计模式

微服务架构-数据共享设计模式 每个微服务拥有自己的数据库&#xff0c;可以独立地进行数据库架构设计、部署和维护。这种是属于常规的方式&#xff0c;不受其他微服务的影响&#xff0c;具有高度的自治性。 然而&#xff0c;在将单体应用拆分成微服务时&#xff0c;可能会遇到…

sys.argv介绍

在Python的标准库中&#xff0c;sys 模块是一个常用而强大的工具&#xff0c;它提供了与Python解释器交互的函数和变量。 sys.argv 是获取运行python文件的时候命令行参数&#xff0c;且以list形式存储参数 sys.argv[0]表示代码本身文件路径 import sysprint(sys.argv[0]&…