Stable Diffusion模型概述

Stable Diffusion

  • 1. Stable Diffusion能做什么?
  • 2. 扩散模型
    • 2.1 正向扩散
    • 2.2 反向扩散
  • 3. 训练如何进行
    • 3.1 反向扩散
    • 3.2 Stable Diffusion模型
    • 3.3 潜在扩散模型
    • 3.4 变分自动编码器
    • 3.5 图像分辨率
    • 3.6 图像放大
  • 4. 为什么潜在空间是可能的?
    • 4.1 在潜在空间中的反向扩散
    • 4.2 什么是VAE文件?
  • 5. 条件设定
    • 5.1 文本条件(从文本到图像)
    • 5.2 分词器
    • 5.3 嵌入
    • 5.4 将嵌入馈送给噪声预测器
    • 5.5 交叉注意力
    • 5.6 其他条件设定
  • 6. Stable Diffusion逐步解释
    • 6.1 从文本到图像
    • 6.2 噪声进度表
    • 6.3 从图像到图像
    • 6.4 补白
    • 6.5 深度到图像
  • 7. 什么是CFG值?
    • 7.1 分类器引导
    • 7.2 无分类器引导
    • 7.3 无分类器引导尺度
  • 8.Stable Diffusion v1.5 vs v2
    • 8.1 模型差异
    • 8.2 训练数据差异
    • 8.3 结果差异
  • 9. SDXL模型

Stable Diffusion是一个生成AI图像的潜在扩散模型,它能够从文本中生成图像。与在高维图像空间中操作不同,它首先将图像压缩到潜在空间中。

我们将深入了解其内部运作机制。

为什么需要了解呢?除了本身是一个迷人的主题外,对内部机制的一些了解将使您成为一位更出色的艺术家。您可以正确使用这个工具,以更高的精度实现结果。

文本到图像与图像到图像有什么不同?什么是CFG尺度?什么是去噪强度?这些问题的答案将在本文中找到。

让我们深入了解。

1. Stable Diffusion能做什么?

Stable Diffusion简单来说是一个文本到图像的模型。给它一个文本提示,它会返回一张与文本匹配的人工智能图像。

在这里插入图片描述

2. 扩散模型

Stable Diffusion属于一类称为扩散模型的深度学习模型。它们是生成模型,意味着它们被设计用于生成类似于训练数据的新数据。在Stable Diffusion的情况下,这些数据是图像。

为什么它被称为扩散模型呢?因为它的数学表现非常类似于物理学中的扩散。让我们了解一下这个概念。

假设我用两种图像训练了一个扩散模型:猫和狗。在下图中,左侧的两个峰代表了猫和狗图像的群体。

2.1 正向扩散

在这里插入图片描述
正向扩散过程向训练图像添加噪声,逐渐将其转变为不具特征的噪声图像。正向过程将任何猫或狗图像转变为噪声图像。最终,你将无法分辨它们最初是狗还是猫(这很重要)。

这就像一滴墨水落入玻璃杯中。墨滴在水中扩散。几分钟后,它随机分布在整个水中。你无法再分辨它最初是在中心还是靠近边缘。

下面是图像经历正向扩散的示例。猫图像变成了随机噪声。

在这里插入图片描述

2.2 反向扩散

现在来看看令人兴奋的部分。如果我们能够反向扩散呢?就像倒放视频一样。倒退时间。我们将看到墨滴最初是如何添加的。
在这里插入图片描述
从一个嘈杂而无意义的图像开始,反向扩散将恢复出一个猫或狗的图像。这是主要的思想。

从技术上讲,每个扩散过程都有两个部分:(1)漂移和(2)随机运动。反向扩散向猫或狗图像漂移,但在两者之间没有其他情况。这就是为什么结果可能是猫或狗的原因。

3. 训练如何进行

反向扩散的思想无疑是聪明而优雅的。但是百万美元的问题是,“它怎么能做到呢?”

要实现反向扩散,我们需要知道向图像添加了多少噪声。答案是教一个神经网络模型来预测添加的噪声,这就是Stable Diffusion中的噪声预测器。它是一个U-Net模型。训练过程如下:

  1. 选择一张训练图像,比如一张猫的照片。
  2. 生成一个随机噪声图像。
  3. 通过将这个嘈杂图像添加到一定数量的步骤来破坏训练图像。
  4. 教会噪声预测器告诉我们添加了多少噪声。通过调整其权重并向其显示正确答案来完成这一过程。

在这里插入图片描述
噪声在每个步骤逐渐添加。噪声预测器估计了每个步骤累积添加的总噪声。

训练结束后,我们有一个能够估计图像中添加的噪声的噪声预测器。

3.1 反向扩散

现在我们有了噪声预测器,怎么使用它呢?

我们首先生成一张完全随机的图像,然后请噪声预测器告诉我们噪声是多少。然后我们从原始图像中减去这个估计的噪声。重复这个过程几次,你将得到一张猫或狗的图像。
在这里插入图片描述
通过逐步从图像中减去预测的噪声来进行反向扩散。
你可能会注意到,我们无法控制生成猫或狗的图像。在谈到条件时,我们将解决这个问题。目前,图像生成是无条件的。

你可以在这篇文章中阅读有关反向扩散抽样和抽样器的更多信息。

3.2 Stable Diffusion模型

现在我需要告诉你一些坏消息:我们刚刚讨论的并不是Stable Diffusion的工作原理!原因是上述扩散过程是在图像空间进行的。在计算上非常慢。你甚至无法在任何单个GPU上运行,更不用说你笔记本电脑上的烂GPU了。

图像空间是巨大的。想想看:一个512×512像素的图像,有三个颜色通道(红、绿和蓝),是一个786,432维的空间!(你需要为一个图像指定那么多值。)

像Google的Imagen和Open AI的DALL-E这样的扩散模型都在像素空间。它们使用了一些技巧来使模型更快,但仍然不够。

3.3 潜在扩散模型

Stable Diffusion旨在解决速度问题。它是这样实现的。

Stable Diffusion是一个潜在扩散模型。它不是在高维图像空间中操作,而是首先将图像压缩到潜在空间。潜在空间小了48倍,因此它能够快速处理较少的数字。这就是为什么它更快的原因。

3.4 变分自动编码器

这是通过一种称为变分自动编码器(VAE)的技术完成的。是的,那就是VAE文件的精确内容,但我稍后会更清楚地解释。

变分自动编码器(VAE)神经网络有两个部分:(1)编码器和(2)解码器。编码器将图像压缩到潜在空间中的较低维表示。解码器从潜在空间还原图像。

在这里插入图片描述
变分自动编码器在图像和潜在空间之间进行转换。

Stable Diffusion模型的潜在空间是4x64x64,比图像像素空间小了48倍。我们讨论的所有正向和反向扩散实际上都是在潜在空间中完成的。

因此,在训练过程中,我们不是生成嘈杂的图像,而是生成潜在空间中的随机张量(潜在噪声)。我们不是用噪声破坏图像,而是用潜在噪声破坏图像在潜在空间中的表示。这样做的原因是它更快,因为潜在空间较小。

3.5 图像分辨率

图像分辨率反映在潜在图像张量的大小上。对于512×512像素的图像,潜在图像的大小为4x64x64。对于768×512的竖向图像,潜在图像的大小为4x96x64。这就是为什么生成较大图像需要更长的时间和更多的显存的原因。

由于Stable Diffusion v1是在512×512像素的图像上进行微调的,生成大于512×512的图像可能会导致重复的对象,例如臭名昭著的双头现象。

3.6 图像放大

要生成大幅印刷品,请保持图像的至少一侧为512像素。使用AI放大器或图像到图像函数进行图像放大。

或者,使用SDXL模型。它具有较大的默认大小为1,024 x 1,024像素。

4. 为什么潜在空间是可能的?

你可能会想知道为什么VAE可以将图像压缩到一个远远较小的潜在空间而不丢失信息。原因是,毫不奇怪,自然图像并不是随机的。它们具有很高的规律性:一个脸遵循眼睛、鼻子、脸颊和嘴巴之间特定的空间关系。狗有4条腿,有特定的形状。

换句话说,图像的高维度是人为的。自然图像可以轻松地压缩到远远较小的潜在空间而不丢失任何信息。这被称为机器学习中的流形假设。

4.1 在潜在空间中的反向扩散

这是Stable Diffusion中潜在反向扩散的工作原理。

  1. 生成一个随机的潜在空间矩阵。
  2. 噪声预测器估计潜在矩阵的噪声。
  3. 然后从潜在矩阵中减去估计的噪声。
  4. 重复步骤2和3,直到特定的采样步骤。
  5. VAE的解码器将潜在矩阵转换为最终图像。

4.2 什么是VAE文件?

在Stable Diffusion v1中,VAE文件用于改善眼睛和面部的效果。它们是我们刚刚讨论的自动编码器的解码器。通过进一步微调解码器,模型可以呈现更精细的细节。

你可能意识到我之前提到的并不完全正确。将图像压缩到潜在空间确实会丢失信息,因为原始的VAE没有恢复出精细的细节。相反,VAE解码器负责绘制精细的细节。

5. 条件设定

我们的理解还不完整:文本提示从何处进入?没有它,Stable Diffusion不是一个文本到图像的模型。你将得到一张猫或狗的图像,没有任何控制它的方式。

这就是条件设置发挥作用的地方。条件设置的目的是引导噪声预测器,使得在从图像中减去预测的噪声之后,能够得到我们想要的结果。

5.1 文本条件(从文本到图像)

下面是文本提示如何处理并输入到噪声预测器的概述。分词器首先将提示中的每个单词转换为称为标记的数字。然后,每个标记转换为称为嵌入的768值向量。嵌入是由文本转换器生成的,准备好被噪声预测器使用。

在这里插入图片描述
如何处理文本提示并将其输入到噪声预测器中以引导图像生成。
现在让我们更深入地了解每一部分。如果以上高级概述对您来说足够好,您可以跳到下一节。

5.2 分词器

在这里插入图片描述
文本提示首先由CLIP分词器进行标记。CLIP是由OpenAI开发的深度学习模型,用于生成任何图像的文本描述。Stable Diffusion v1使用CLIP的分词器。

标记化是计算机理解单词的方式。我们人类可以阅读单词,但计算机只能读取数字。这就是为什么文本提示中的单词首先转换为数字的原因。

分词器只能对其在训练期间看到的单词进行标记。例如,CLIP模型中有“dream”和“beach”,但没有“dreambeach”。分词器将“dreambeach”分解为两个标记“dream”和“beach”。因此,一个单词并不总是意味着一个标记!

另一个细微之处是空格字符也是标记的一部分。在上述情况中,“dream beach”短语产生两个标记“dream”和“[space]beach”。这些标记与“dreambeach”产生的标记“dream”和“beach”(beach前面没有空格)不同。

Stable Diffusion模型限制在提示中使用75个标记。现在你知道它不同于75个单词了!

5.3 嵌入

在这里插入图片描述
Stable Diffusion v1使用OpenAI的ViT-L/14 Clip模型。嵌入是一个768值向量。每个标记都有自己独特的嵌入向量。嵌入由CLIP模型固定,这在训练期间学到。

我们为什么需要嵌入?这是因为一些单词与彼此密切相关。我们想利用这个信息。例如,man、gentleman和guy的嵌入几乎相同,因为它们可以互换使用。Monet、Manet和Degas都以印象主义风格绘画,但以不同的方式。这些名称具有紧密但不完全相同的嵌入。

这就是我们之前讨论的使用关键词触发样式的嵌入。嵌入可以产生神奇的效果。科学家已经证明,找到适当的嵌入可以触发任意的对象和样式,这是一种称为文本反演的微调技术。

5.4 将嵌入馈送给噪声预测器

在这里插入图片描述
从嵌入到噪声预测器。

在馈送到噪声预测器之前,嵌入需要被文本变换器进一步处理。变换器就像条件设置的通用适配器。在这种情况下,它的输入是文本嵌入向量,但它也可以是其他东西,比如类标签、图像和深度图。变换器不仅进一步处理数据,还提供包含不同条件模式的机制。

5.5 交叉注意力

文本变换器的输出在整个U-Net中被噪声预测器多次使用。U-Net通过交叉注意力机制使用它。这就是提示遇到图像的地方。

让我们以“一个有蓝眼睛的男人”为例。Stable Diffusion将“蓝”和“眼睛”两个词配对在一起(在提示内部进行自注意),以便生成一个有蓝眼睛的男人,而不是穿蓝衬衫的男人。然后,它使用这些信息来引导反向扩散,生成包含蓝眼睛的图像(在提示和图像之间进行交叉注意力)。

一点说明:Hypernetwork是微调Stable Diffusion模型的一种技术,它劫持了交叉注意力网络以插入样式。LoRA模型修改交叉注意力模块的权重以更改样式。仅修改该模块就可以微调Stabe Diffusion模型的事实告诉你该模块有多重要。

5.6 其他条件设定

文本提示并不是Stable Diffusion模型进行条件设定的唯一方式。

文本提示和深度图像都用于在深度到图像模型中进行条件设定。

ControlNet使用检测到的轮廓、人体姿势等对噪声预测器进行条件设定,并实现对图像生成的出色控制。

6. Stable Diffusion逐步解释

现在你知道了Stable Diffusion的所有内部机制,让我们通过一些例子来看看在幕后发生了什么。

6.1 从文本到图像

在文本到图像中,你给Stable Diffusion一个文本提示,它返回一张图像。

步骤1:Stable Diffusion在潜在空间生成一个随机张量。通过设置随机数生成器的种子,你可以控制这个张量。如果将种子设置为某个值,你将始终得到相同的随机张量。这是你在潜在空间中的图像。但现在它只是噪声。

在这里插入图片描述

步骤2:噪声预测器U-Net以潜在嘈杂图像和文本提示作为输入,并预测潜在空间中的噪声(一个4x64x64张量)。

在这里插入图片描述
步骤3:从潜在图像中减去潜在噪声。这将成为新的潜在图像。

在这里插入图片描述
步骤4:重复步骤2和3,直到达到特定的采样步骤,例如,20次。

步骤5:最后,VAE的解码器将潜在图像转换回像素空间。这是运行Stable Diffusion后得到的图像。

在这里插入图片描述
以下是如何在每个采样步骤中对图像进行演变。

在这里插入图片描述

6.2 噪声进度表

图像从嘈杂到清晰。你是否想知道噪声预测器在初始步骤中是否工作不好?实际上,这只是部分正确。真正的原因是我们尝试在每个采样步骤中获得预期的噪声。这被称为噪声进度表。下面是一个例子。
在这里插入图片描述
噪声进度表是我们定义的。我们可以选择在每一步中减去相同数量的噪声。或者我们可以在开始时减去更多,就像上面那样。采样器在每一步中刚好减去足够的噪声,以在下一步中达到预期的噪声。这就是你在逐步图像中看到的。

6.3 从图像到图像

图像到图像使用Stable Diffusion将一幅图像转换为另一幅图像。这首次在SDEdit方法中提出。SDEdit可应用于任何扩散模型,因此我们有了Stable Diffusion的图像到图像(潜在扩散模型)。

在图像到图像中,输入包括输入图像和文本提示。生成的图像将受到输入图像和文本提示的条件影响。例如,使用下图中的素描和提示“带茎的完美绿苹果照片,水滴,戏剧性光线”作为输入,图像到图像可以将其转换为专业的图画:

在这里插入图片描述
现在让我们逐步了解这个过程。

步骤1:将输入图像编码到潜在空间。
在这里插入图片描述
步骤2:在潜在图像中添加噪声。去噪强度控制添加多少噪声。如果为0,则不添加噪声。如果为1,则添加最大量的噪声,使潜在图像成为完全随机的张量。

在这里插入图片描述
步骤3:噪声预测器U-Net以潜在嘈杂图像和文本提示作为输入,并预测潜在空间中的噪声(一个4x64x64的张量)。

在这里插入图片描述
步骤4:从潜在图像中减去潜在噪声。这将成为新的潜在图像。
在这里插入图片描述
步骤3和4在一定数量的采样步骤中重复,例如20次。

步骤5:最后,VAE的解码器将潜在图像转换回像素空间。这是运行图像到图像后得到的图像。
在这里插入图片描述
所以现在你知道图像到图像是什么了:它只是在初始潜在图像中加入一些噪声和输入图像。将去噪强度设置为1等同于文本到图像,因为初始潜在图像完全是随机的。

6.4 补白

修复图是图像到图像的一个特殊案例。在你想要修复图像的部分添加噪声。噪声的数量同样由去噪强度控制。

6.5 深度到图像

深度到图像是图像到图像的增强版本;它使用深度图生成带有额外条件的新图像。

步骤1:将输入图像编码成潜在状态。

在这里插入图片描述
步骤2:MiDaS(一种AI深度模型)从输入图像估计深度图。在这里插入图片描述
步骤3:在潜在图像中添加噪声。去噪强度控制添加多少噪声。如果去噪强度为0,则不添加噪声。如果去噪强度为1,则添加最大噪声,使潜在图像成为一个随机张量。
在这里插入图片描述
步骤4:噪声预测器估计潜在空间的噪声,由文本提示和深度图条件控制。

在这里插入图片描述
步骤5:从潜在图像中减去潜在噪声。这将成为新的潜在图像。
在这里插入图片描述
步骤4和5在一定数量的采样步骤中重复。

步骤6:VAE的解码器解码潜在图像。现在,你从深度到图像得到了最终图像。
在这里插入图片描述

7. 什么是CFG值?

这篇文章不完整,没有解释分类器免费引导(CFG),这是AI艺术家每天都在调整的一个值。为了理解它是什么,我们首先需要谈谈它的前身,分类器引导…

7.1 分类器引导

分类器引导是将图像标签纳入扩散模型的一种方式。你可以使用标签来指导扩散过程。例如,标签“cat”会引导反向扩散过程,生成猫的照片。

分类器引导尺度是一个用于控制扩散过程应该多紧密地遵循标签的参数。

下面是我从这篇论文中偷来的一个例子。假设有三组图像,分别带有标签“cat”、“dog”和“human”。如果扩散是未引导的,模型将从每组总体中抽取样本,但有时可能会抽取适合两个标签的图像,例如一个男孩抚摸一只狗。

在这里插入图片描述
分类器引导。左:未引导。中:小引导尺度。右:大引导尺度。

通过高分类器引导,扩散模型生成的图像将偏向极端或明显的示例。如果你向模型询问一只猫,它将返回一张明显是猫而没有其他东西的图像。

分类器引导尺度控制引导的密切程度。在上图中,右侧的采样具有比中间的更高的分类器引导尺度。在实践中,该尺度值简单地是朝着具有该标签数据的漂移术语的乘法器。

7.2 无分类器引导

尽管分类器引导取得了创纪录的性能,但它需要额外的模型来提供引导。这在训练中带来了一些困难。

无分类器引导,根据其作者的说法,是一种实现“无分类器引导”的方式,即“没有分类器的分类器引导”。与使用类标签和一个单独的模型进行引导不同,他们建议使用图像标题并训练一个条件扩散模型,就像我们在文本到图像中讨论的那样。

他们将分类器部分作为噪声预测器U-Net的条件,实现了所谓的“无分类器”(即没有单独的图像分类器)引导图像生成。

文本提示在文本到图像中提供了这种引导。

7.3 无分类器引导尺度

现在,我们有了使用条件的无分类器扩散过程。我们如何控制AI生成的图像应该多么遵循引导?

无分类器引导尺度(CFG尺度)是一个值,用于控制文本提示应该如何引导扩散过程。当CFG尺度设置为0时,AI图像生成是无条件的(即忽略了提示)。较高的CFG尺度将扩散引导到提示。

8.Stable Diffusion v1.5 vs v2

这已经是一篇很长的文章了,但如果不比较v1.5和v2模型之间的差异,它将不完整。

8.1 模型差异

Stable Diffusion v2使用OpenClip进行文本嵌入。Stable Diffusion v1使用Open AI的CLIP ViT-L/14进行文本嵌入。更改的原因有:

  • OpenClip是ViT-G/14型号的5倍大。更大的文本编码器模型提高了图像质量。
  • 尽管Open AI的CLIP模型是开源的,但这些模型是使用专有数据训练的。切换到OpenClip模型使研究人员更容易研究和优化该模型。这对于长期发展更有利。

v2模型有两个版本:

  • 512版本生成512×512的图像。
  • 768版本生成768×768的图像。

8.2 训练数据差异

Stable Diffusion v1.4 is trained with

Stable Diffusion v1.4的训练数据为:

  • 237k步,分辨率为256×256,使用laion2B-en数据集。
  • 194k步,分辨率为512×512,使用laion-high-resolution数据集。
  • 225k步,分辨率为512×512,“laion-aesthetics v2 5+”数据集,文本条件下降10%。

Stable Diffusion v2的训练数据为:

  • 550k步,分辨率为256×256,使用LAION-5B的子集,过滤掉显式色情材料,使用LAION-NSFW分类器,punsafe=0.1,美学评分>=4.5。
  • 850k步,分辨率为512×512,相同数据集,图像分辨率>=512×512。
  • 150k步,使用相同数据集的v目标。
  • 再次在768x768图像上进行140k步的继续训练。

Stable Diffusion v2.1在v2.0的基础上进行了微调:

  • 在相同数据集上额外进行了55k步(punsafe=0.1)。
  • 使用punsafe=0.98进行了额外的155k步。

实质上,他们在最后的训练步骤中关闭了NSFW过滤器。

8.3 结果差异

用户普遍发现使用Stable Diffusion v2难以控制风格和生成名人。虽然Stability AI并未明确过滤掉艺术家和名人的名称,但它的效果在v2中要弱得多。这可能是由于训练数据的差异造成的。Open AI的专有数据可能包含更多的艺术品和名人照片。他们的数据可能经过高度筛选,使得一切都看起来美好漂亮。

v2和v2.1模型并不受欢迎。人们主要使用经过微调的v1.5和SDXL模型。

9. SDXL模型

SDXL模型是v1和v2模型的官方升级版。该模型以开源软件的形式发布。

这是一个更大的模型。在AI领域,我们可以期望它更好。SDXL模型的总参数数量为66亿,而v1.5模型为9.8亿。
在这里插入图片描述
SDXL管道包括一个基础模型和一个细化模型。

实际上,SDXL模型是两个模型。您运行基础模型,然后是细化模型。基础模型设置全局组成,而细化模型添加更细的细节。

您可以仅运行基础模型,而不使用细化模型。

SDXL基础模型的变化包括:

  • 文本编码器结合了最大的OpenClip模型(ViT-G/14)和OpenAI的专有CLIP ViT-L。这是一个明智的选择,因为它使得SDXL易于提示,同时保持了功能强大且可训练的OpenClip。
  • 新的图像大小调整,旨在使用小于256×256的训练图像。这通过不丢弃39%的图像显著增加了训练数据。
  • U-Net比v1.5大三倍。
  • 默认图像大小为1024×1024。这比v1.5模型的512×512大4倍。 (查看与SDXL模型一起使用的图像尺寸)

请注意,由于篇幅原因,上述内容已经进行了适度的压缩和调整,以便更好地适应给定的文本段落。如果有其他具体的翻译需求或问题,欢迎随时提出。

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

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

相关文章

Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【论文精读】A Survey on Large Language Model based Autonomous Agents

A Survey on Large Language Model based Autonomous Agents 前言Abstract1 Introduction2 LLM-based Autonomous Agent Construction2.1 Agent Architecture Design2.1.1 Profiling Module2.1.2 Memory ModuleMemory StructuresMemory FormatsMemory Operations 2.1.3 Plannin…

论文阅读:通过时空生成卷积网络合成动态模式(重点论文)

原文链接 github code 介绍视频 视频序列包含丰富的动态模式,例如在时域中表现出平稳性的动态纹理模式,以及在空间或时域中表现出非平稳的动作模式。 我们证明了时空生成卷积网络可用于建模和合成动态模式。 该模型定义了视频序列上的概率分布&#xff0…

c++语言基础17-判断集合成员

题目描述 请你编写一个程序&#xff0c;判断给定的整数 n 是否存在于给定的集合中。 输入描述 有多组测试数据&#xff0c;第一行有一个整数 k&#xff0c;代表有 k 组测试数据。 每组数据第一行首先是一个正整数 m&#xff0c;表示集合中元素的数量&#xff08;1 < m &…

Python----matplotlib库

目录 plt库的字体&#xff1a; plt的操作绘图函数&#xff1a; plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number)&#xff1a; plt.axes(rect)&#xff1a; plt.subplots_adjust(): plt的读取和显示相关函数&#xff1a; plt库的基础图…

vue和react哪种框架使用范围更广

Vue和React都是非常流行的前端JavaScript框架&#xff0c;它们各自有着广泛的应用场景和支持者。选择使用哪一个框架往往取决于特定的项目需求、开发团队的熟悉程度以及生态系统的偏好。以下是这两个框架的一些主要特点&#xff0c;以帮助比较它们的使用范围&#xff1a; React…

【数据挖掘】基于 LightGBM 的系统访问风险识别(附源码)

基于 LightGBM 的系统访问风险识别 文章目录 基于 LightGBM 的系统访问风险识别一、课题来源二、任务描述三、课题背景四、数据获取分析及说明&#xff08;1&#xff09;登录https://www.datafountain.cn并获取相关数据&#xff08;2&#xff09;数据集文件说明&#xff08;3&a…

进程和计划任务

一、什么是程序 是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 二、进程 1.什么是进程 进程&#xff1a;正在运行中的程序&#xff0c;加载到内存…

Python 自学(三) 之序列的应用

目录 1. 序列的含义 2. 序列的索引 P80 3. 序列相加 P81 4. 序列乘法 P82 5. in 关键字 P83 6. 计算序列的最大值max()&#xff0c;最小值min()和长度len() P83 7. 列表的初始化 list() P85 8. 列表元素的添加&#xff0c;…

apache httpd多后缀解析漏洞复现

一、漏洞描述 Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析成php文件,利用Apache httpd这个特性,就可以绕过上传文件的白名单。 该漏洞和apache版本和php版本无关,属于用户配置不当造成的解…

vc2017编译从github网站上下载的源码

以ZLmediakit为例 1.下载软件 cmakehttps://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5-windows-x86_64.zip Microsoft Visual Studio https://my.visualstudio.com/Downloads?qvisual%20studio%202017&wt.mc_ido~msft~vscom~older-downloads …

Unity DOTS中的baking(二)Baker的触发

Unity DOTS中的baking&#xff08;二&#xff09;Baker的触发 我们知道&#xff0c;当传入Baker的authoring component的值发生变化时&#xff0c;就会触发baking。不过在有些情况下&#xff0c;component所引用的对象没有变化&#xff0c;而是对象自身内部的一些属性发生了变化…

C++上位软件通过LibModbus开源库和西门子S7-1200/S7-1500/S7-200 PLC进行ModbusTcp 和ModbusRTU 通信

前言 一直以来上位软件比如C等和西门子等其他品牌PLC之间的数据交换都是大家比较头疼的问题&#xff0c;尤其是C上位软件程序员。传统的方法一般有OPC、Socket 等&#xff0c;直到LibModbus 开源库出现后这种途径对程序袁来说又有了新的选择。 Modbus简介 Modbus特点 1 &#…

书生-浦路大模型全链路开源体系

2023年&#xff0c;大模型成为热门关键词 论文链接 大模型已经成为发展通用人工智能的重要途经 模型评测过程&#xff1a;从模型到应用 全链条开源开发体系 | 数据&#xff1a; 多模态融合 万卷包含文本、图像和视频等多模态数据&#xff0c;涵盖科技、文学、媒体、教育和法…

芯课堂 | MCU之EXT

概述 本文将介绍一下华芯微特MCU的嵌套向量中断控制器&#xff08;NVIC&#xff09;与外部中断/事件控制器&#xff08;EXTI&#xff09;的使用方法等。 01.嵌套向量中断控制器&#xff08;NVIC&#xff09; NVIC的全称是Nested vectoredinterrupt controller&#xff0c;即嵌…

普中STM32-PZ6806L开发板(HAL库函数实现-温度传感器DS18B20)

简介 主芯片STM32F103ZET6, 通过引脚PG11 连接DS18B20, 读取DS18B20采集的温度数据;电路原理图 DS18B20电路图 DS18B20 与 主芯片连接引脚 其他知识 DS18B20资料 DS18B20数据手册 DS18B20 简介 单线通讯的温度传感器, 测量温度在-55℃ 到 125℃&#xff0c; 在-10C 到…

平衡二叉树,力扣

目录 前序遍历与后续遍历 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 审题目事例提示&#xff1a; 解题方法&#xff1a; 难度分析&#xff1a; 解题方法分析&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 补充说明…

【每日论文阅读】生成模型篇

联邦多视图合成用于元宇宙 标题: Federated Multi-View Synthesizing for Metaverse 作者: Yiyu Guo; Zhijin Qin; Xiaoming Tao; Geoffrey Ye Li 摘要: 元宇宙有望提供沉浸式娱乐、教育和商务应用。然而&#xff0c;虚拟现实&#xff08;VR&#xff09;在无线网络上的传输是…

【UEFI基础】EDK网络框架(通用函数和数据)

通用函数和数据 DPC DPC全称Deferred Procedure Call。Deferred的意思是“延迟”&#xff0c;这个DPC的作用就是注册函数&#xff0c;然后在之后的某个时刻调用&#xff0c;所以确实是有“延迟”的意思。DPC在UEFI的实现中包括两个部分。一部分是库函数DxeDpcLib&#xff0c;…

数字IC设计——数字电路基本元器件

现代数字集成电路基本由CMOS晶体管构成&#xff0c;而CMOS门电路由PMOS场效应管和NMOS场效应管以对称互补的形式组成&#xff0c;所谓“互补”&#xff0c;即利用互补型MOSFET&#xff0c;即pMOS和nMOS&#xff0c;二者成对出现构成互补电路。 这种电路具有高的电路可靠性和抗干…