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

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模型一起使用的图像尺寸)

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

相关文章:

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 在潜在空间中…...

二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)

目录 一、树概念及结构(了解) 1.1树的概念 1.2树的表示 二、二叉树概念及结构 2.1概念 2.2现实中的二叉树: 2.3数据结构中的二叉树: 2.4特殊的二叉树: 2.5 二叉树的存储结构 2.51 顺序存储: 2.5.2 链式存储&…...

C++日期类的实现

前言:在类和对象比较熟悉的情况下,我们我们就可以开始制作日期表了,实现日期类所包含的知识点有构造函数,析构函数,函数重载,拷贝构造函数,运算符重载,const成员函数 1.日期类的加减…...

B+树的插入删除

操作 插入 case2的原理,非叶子节点永远和最右边的最左边的节点的值相等。 case3:的基本原理 非叶子节点都是索引节点 底层的数据分裂之后 相当于向上方插入一个新的索引(你可以认为非叶子节点都是索引),反正第二层插入160 都要分裂,然后也需要再插入(因为索引部分不需要重…...

c# Avalonia 绘图

在Avalonia UI框架中&#xff0c;绘图主要通过使用DrawingContext类来实现。DrawingContext提供了一系列的绘图API&#xff0c;可以用来绘制线条、形状、图像以及文本等内容。以下是一个简单的示例&#xff0c;说明如何在Avalonia中进行基础的图形绘制 <!-- MainWindow.axa…...

springboot 双数据源配置

1:pom <!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</group…...

Redis内存使用率高,内存不足问题排查和解决

问题现象 表面现象是系统登录突然失效&#xff0c;排查原因发现&#xff0c;使用redis查询用户信息异常&#xff0c;从而定位到redis问题 if (PassWord.equals(dbPassWord)) {map.put("rtn", 1);map.put("value", validUser);session.setAttribute("…...

bootstrap5开发房地产代理公司Hamilton前端页面

一、需求分析 房地产代理网站是指专门为房地产行业提供服务的在线平台。这些网站的主要功能是连接房地产中介机构、房产开发商和潜在的买家或租户&#xff0c;以促成买卖或租赁房产的交易。以下是一些常见的房地产代理网站的功能&#xff1a; 房源发布&#xff1a;房地产代理网…...

2024年Mac专用投屏工具AirServer 7 .27 for Mac中文版

AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具&#xff0c;能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App&#xff0c;从 iOS 设备无线传送到 Mac 电脑的屏幕上&#xff0c;把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…...

关于MySql字段类型的实践总结

当字段为数值类型时应使用无符号UNSIGNED修饰 ALTER TABLE infoMODIFY COLUMN user_id int UNSIGNED NOT NULL; 当字段为varchar类型时应注意是否选择合适的字符集 例如存储一些范围值&#xff0c;数字英文字符时&#xff08;IP、生日、客户端标识等或以“,”分隔的数据&…...

UG NX二次开发(C#)-Ufun和NXOpen混合编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、Ufun函数3、 NXOpen4、混合编程实现1、前言 在UG NX二次开发过程中,采用Ufun功能比较简单,能用比较少的代码实现我们需要的功能,但是ufun函数的功能不是很强大,尤其随着UG NX的版本…...

【Spark精讲】一文讲透Spark RDD

MapReduce的缺陷 MR虽然在编程接口的种类和丰富程度上已经比较完善了&#xff0c;但这些系统普遍都缺乏操作分布式内存的接口抽象&#xff0c;导致很多应用在性能上非常低效 。 这些应用的共同特点是需要在多个并行操 作之间重用工作数据集 &#xff0c;典型的场景就是机器学习…...

如在MT9040、IDT82V3001A 等锁相环上电后或输入参考频率改变后必须复位锁相环。

锁相环是一种反馈控制系统,它能够将输出信号的相位锁定到输入参考信号的相位上。在实际应用中,如MT9040、IDT82V3001A等PLL集成电路在上电后或者当输入参考频率发生变化后通常需要复位的原因涉及到几个方面: 1、初始化状态: 当PLL电路上电时,其内部的各个组件可能…...

构建安全的SSH服务体系

某公司的电子商务站点由专门的网站管理员进行配置和维护&#xff0c;并需要随时从Internet进行远程管理&#xff0c;考虑到易用性和灵活性&#xff0c;在Web服务器上启用OpenSSH服务&#xff0c;同时基于安全性考虑&#xff0c;需要对 SSH登录进行严格的控制&#xff0c;如图10…...

wpf ComboBox绑定数据及变更事件

定义ComboBox&#xff0c;以及SelectionChanged事件 <ComboBox x:Name"cmb_radius" Height"30" Width"65" FontSize"15" DisplayMemberPath"Value" SelectedValuePath"Key" HorizontalAlignment"Center&…...

SQL BETWEEN 操作符

BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。 SQL BETWEEN 语法 SELECT column1, column2, ... FROM table_name WHERE column BETWEEN value1 AND value2; 参数说明&#xff1a; column1, column2, ...&#xff1a;要选择的字段名…...

Java位运算及移位运算

java中能表示整数数据类型的有byte、short、char、int、long&#xff0c;在计算机中占用的空间使用字节描述&#xff0c;1个字节使用8位二进制表示。 数据类型字节数二进制位数表示范围默认值byte18-27 – 27-10char2160 – 216-1\u0000 (代表字符为空 转成int就是0)short216-…...

上界通配符(? extends Type)

在Java中&#xff0c;? extends Type是一个上界通配符&#xff0c;表示参数化类型的上限是Type。这意味着容器可以持有Type类型的任何对象或者Type的子类型对象。 使用场景 这种类型的通配符常用于泛型方法中&#xff0c;允许方法接受Type的实例或其子类型的集合。这同样基于…...

zlib.decompressFile报错 【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:方案1方案2此Bug解决方案总结寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了zlib.decompressFile报错 的问题。 问题: zlib.decompressFile报错,怎么解…...

54.网游逆向分析与插件开发-游戏增加自动化助手接口-项目需求与需求拆解

内容来源于&#xff1a;易道云信息技术研究院VIP课 项目需求&#xff1a; 为游戏增加VIP功能-自动化助手。自动化助手做的是首先要说一下背景&#xff0c;对于授权游戏来讲它往往年限都比较老&#xff0c;老游戏和新游戏设计理念是不同的&#xff0c;比如说老游戏基本上在10年…...

Spring Boot笔记2

3. SpringBoot原理分析 3.1. 起步依赖原理解析 3.1.1. 分析spring-boot-starter-parent 按住Ctrl键&#xff0c;然后点击pom.xml中的spring-boot-starter-parent&#xff0c;跳转到了spring-boot-starter-parent的pom.xml&#xff0c;xml配置如下&#xff08;只摘抄了部分重…...

MySQL5.7服务器 SQL 模式

官网地址&#xff1a;MySQL :: MySQL 5.7 Reference Manual :: 5.1.10 Server SQL Modes 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. MySQL 5.7 参考手册 / ... / 服务器 SQL 模式 5.1.10 服务器 SQL 模式…...

关于LayUI表格重载数据问题

目的 搜索框搜索内容重载数据只显示搜索到的结果 遇到的问题 在layui官方文档里介绍的table属性有data项,但使用下列代码 table.reload(test, {data:data //data为json数据}); 时发现&#xff0c;会会重新调用table.render的url拿到原来的数据&#xff0c;并不会显示出来传…...

MyBatis-mapper.xml配置

1、配置获取添加对象的ID <!-- 配置我们的添加方法&#xff0c;获取到新增加了一个monster对象的iduseGeneratedKeys"true" 意思是需要获取新加对象的主键值keyProperty"monster_id" 表示将获取到的id值赋值给Monster对象的monster_id属性 --><…...

【如何选择Mysql服务器的CPU核数及内存大小】

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容&#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…...

【从浅到深的算法技巧】4.静态方法

1.1.6静态方法 在许多语言中&#xff0c;静态方法被称为函教&#xff0c;静态方法是一组在被调用时会被顺序执行的语句。修饰符static将这类方法和1.2的实例方法区别开来。当讨论两类方法共有的属性时我们会使用不加定语的方法一词。 1.1.6.1静态方法 方法封装了由一系列语句…...

YOLO手部目标检测

手部目标检测原文地址如下&#xff1a;手部关键点检测2&#xff1a;YOLOv5实现手部检测(含训练代码和数据集)_yolov5 关键点检测-CSDN博客 手部检测数据集地址如下&#xff1a; 手部关键点检测1&#xff1a;手部关键点(手部姿势估计)数据集(含下载链接)_手关键点数据集-CSDN博…...

网络IP地址如何更改?怎么使用动态代理IP提高网速?

网络IP地址更改以及使用动态代理IP提高网速的步骤如下&#xff1a; 一、更改IP地址 1. 打开浏览器&#xff0c;输入路由器登陆地址并登陆路由器后台管理界面。 2. 找到“高级设置”或“无线设置”或“VPN设置”一栏&#xff0c;点击“断开”&#xff0c;即可断开网络&#xff0…...

Flink实时电商数仓之DWS层

需求分析 关键词 统计关键词出现的频率 IK分词 进行分词需要引入IK分词器&#xff0c;使用它时需要引入相关的依赖。它能够将搜索的关键字按照日常的使用习惯进行拆分。比如将苹果iphone 手机&#xff0c;拆分为苹果&#xff0c;iphone, 手机。 <dependency><grou…...

MFC - CArchive/内存之间的序列化应用细节

文章目录 MFC - CArchive/内存之间的序列化应用细节概述笔记END MFC - CArchive/内存之间的序列化应用细节 概述 有个参数文件, 开始直接序列化到文件. 现在优化程序, 不想这个参数文件被用户看到. 想先由参数发布程序(自己用)设置好参数后, 加个密落地. 等用户拿到后, 由程序…...

C语言实验4:指针

目录 一、实验要求 二、实验原理 1. 指针的基本概念 1.1 指针的定义 1.2 取地址运算符&#xff08;&&#xff09; 1.3 间接引用运算符&#xff08;*&#xff09; 2. 指针的基本操作 2.1 指针的赋值 2.2 空指针 3. 指针和数组 3.1 数组和指针的关系 3.2 指针和数…...

项目——————————

C/C Linux Socket网络编程 TCP 与 UDP_c 语言tcp socket cleint read-CSDN博客C/C Socket - TCP 与 UDP 网络编程_c socket udp-CSDN博客 登录—专业IT笔试面试备考平台_牛客网...

【论文阅读】Realtime multi-person 2d pose estimation using part affinity fields

OpenPose&#xff1a;使用PAF的实时多人2D姿势估计。 code&#xff1a;GitHub - ZheC/Realtime_Multi-Person_Pose_Estimation: Code repo for realtime multi-person pose estimation in CVPR17 (Oral) paper&#xff1a;[1611.08050] Realtime Multi-Person 2D Pose Estima…...

图像分割实战-系列教程9:U2NET显著性检测实战1

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 U2NET显著性检测实战1 1、任务概述...

RK3568平台 Android13 GKI架构开发方式

一.GKI简介 GKI&#xff1a;Generic Kernel Image 通用内核映像。 Android13 GMS和EDLA认证的一个难点是google强制要求要支持GKI。GKI通用内核映像&#xff0c;是google为了解决内核碎片化的问题&#xff0c;而设计的通过提供统一核心内核并将SoC和板级驱动从核心内核移至可加…...

阿里云服务器节省计划价格便宜_成本优化全解析

阿里云服务器付费模式节省计划怎么收费&#xff1f;为什么说节省计划更节省成本&#xff1f;节省计划是一种折扣权益计划&#xff0c;可以抵扣按量付费实例&#xff08;不含抢占式实例&#xff09;的账单。相比包年包月实例&#xff0c;以及预留实例券和按量付费实例的组合&…...

3种依赖管理工具实现requirements.txt文件生成

1.pip 实现方式 要使用 pip 生成 requirements.txt 文件&#xff0c;可以使用以下命令&#xff1a; pip freeze > requirements.txt这个命令会将当前环境中所有已安装的 Python 包及其版本信息输出到 requirements.txt 文件中。这个文件可以用于共享项目的依赖信息&#xf…...

超图iClient3DforCesium地形、影像、模型、在线影像交互示例

超图iClient3DforCesium地形、影像、模型、在线影像交互示例 描述示例代码 描述 数据源&#xff1a;基于iserver发布的三维场景(地形、影像、BIM模型) 在线arcgis影像 应用&#xff1a;目录树展示源数据列表、目录树控制源数据可视化结果显隐、BIM模型点选查询关联属性 示例代…...

【解决】电脑上的WIFI图标不见了咋整?

相信不少同学都遇到过这种情况&#xff1a;电脑上的wifi图标莫名不见了&#xff0c;甚至有时候还是在使用的中途突然断网消失的。 遇到这种情况一般有两种解决方案&#xff1a; 1. 在开机状态下长按电源键30秒以上 这种办法应该是给主板放电&#xff0c;一般应用在wifi6上面。…...

2 - 表结构 | MySQL键值

表结构 | MySQL键值 表管理1. 库的操作2. 表的操作表的创建与删除表的修改复制表 3. 管理表记录 数据类型数值类型字符类型&#xff08;汉字或者英文字母&#xff09;日期时间类型 表头存储与日期时间格式的数据枚举类型 数据批量处理 表管理 客户端把数据存储到数据库服务器上…...

Redis(Linux版本7.2.3)

1、停止Redis服务器 [roottssvr1-c1 sysconfig]# ps -ef | grep redis root 322 1 0 10月30 ? 02:58:53 ./bin/redis-server 0.0.0.0:6379 root 32664 12498 0 14:45 pts/0 00:00:00 grep --colorauto redis [roottssvr1-c1 sysconfig]# [roottssvr…...

八股文打卡day18——操作系统(1)

面试题&#xff1a;进程和线程的区别&#xff1f; 我的回答&#xff1a; 1.概念上。进程是系统进行资源分配和调度的基本单位。线程是系统进行运算调度的最小单位。线程是进程的子任务&#xff0c;一个进程至少包含一个线程&#xff0c;一个进程可以运行多个线程&#xff0c;…...

设计模式—行为型模式之模板方法模式

设计模式—行为型模式之模板方法模式 在模板模式&#xff08;Template Pattern&#xff09;中&#xff0c;一个抽象类公开定义了执行它的方法的方式模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 模板方法&#xff08;Template Metho…...

机器学习的分类与经典算法

机器学习算法按照学习方式分类&#xff0c;可以分为有监督学习&#xff08;Supervised Learning&#xff09;、无监督学习&#xff08;Unsupervised Learning&#xff09;、半监督学习&#xff08;Semi-supervised Learning&#xff09;、强化学习&#xff08;Reinforcement Le…...

2.3物理层下面的传输媒体

目录 2.3物理层下面的传输媒体2.3.1导引型传输媒体1.双绞线2.同轴电缆3.光纤 2.3.2非导引型传输媒体无线电微波通信 2.3物理层下面的传输媒体 传输媒体是数据传输系统中在发送器和接收器之间的物理通路 两大类&#xff1a; 导引型传输媒体&#xff1a;电磁波被导引沿着固体媒体…...

笙默考试管理系统-MyExamTest----codemirror(57)

笙默考试管理系统-MyExamTest----codemirror&#xff08;57&#xff09; 目录 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管理系统-MyExamTest----codemirror 四、 笙默考试管理系统-MyExamTest---…...

Qt高质量的开源项目合集

文章目录 1.Qt官网下载/文档2.第三方开源 1.Qt官网下载/文档 Qt Downloads Qt 清华大学开源软件镜像站 Qt 官方博客 2.第三方开源 记录了平常项目开发中用到的第三方库&#xff0c;以及一些值得参考的项目&#xff01; Qt AV 基于Qt和FFmpeg的跨平台高性能音视频播放框…...

HarmonyOS ARKUI深度解析:图像组件及权限配置实战指南

文章目录 深入学习RKUI中的图片组件及权限配置图片组件简介图片源的三种格式Image : 图片显示组件图片组件属性及样式控制图片权限配置文章总结问题总结深入学习RKUI中的图片组件及权限配置 在本文中,我们将深入学习ArkUI(HarmonyOS UI框架)中的图片组件及其相关属性,同时…...

萨姆·奥尔特曼的预言

Sam Altman&#xff08;萨姆奥尔特曼&#xff09;是 OpenAI 的首席执行官&#xff0c;这家初创公司开发了众所周知的 ChatGPT。2023年11月&#xff0c;他突然被董事会解雇&#xff0c;并短暂调往微软。在 OpenAI 的每个人都威胁要辞职后&#xff0c;他又回来了。 新的商业模式…...

iPhone 13 Pro 更换『移植电芯』和『超容电池』体验

文章目录 考虑换电池Ⅰ 方案一Ⅱ 方案二 总结危险 Note系列地址 简 述: 首发买的iPhone 13P &#xff08;2021.09&#xff09;&#xff0c;随性使用一年出头&#xff0c;容量就暴跌 85%&#xff0c;对比朋友一起买的同款&#xff0c;还是95%。这已经基本得一天两充 >_<&a…...