深入浅出讲解Stable Diffusion原理,新手也能看明白

news2024/12/28 12:58:35

说明

最近一段时间对多模态很感兴趣,尤其是Stable Diffusion,安装了环境,圆了自己艺术家的梦想。看了这方面的一些论文,也给人讲过一些这方面的原理,写了一些文章,具体可以参考我的文章:

北方的郎:图文匹配:Clip模型介绍

北方的郎:VQGAN(Vector Quantized Generative Adversarial Network)模型简介

北方的郎:当倚天剑遇到屠龙刀 VQGAN-CLIP 介绍

不知道看文章的人怎么看,听我讲的人经常反应的就是听不明白。于是我又在网上找了一下,发现这篇文章讲的很好,算得上是深入浅出,可惜是英文的,就把它翻译了一下:

https://stable-diffusion-art.com/how-stable-diffusion-work/

在翻译的过程中,我增加了自己的一些东西,调整了一些内容。

Stable Diffusion如何工作?

Stable Diffusion是一种深度学习模型。我们将深入探讨Stable Diffusion是如何工作的。你为什么需要知道这部分内容?除了它本身就是一个引人入胜的主题之外,对内在机制的一些理解将使您成为更好的艺术家。您可以正确使用该工具以获得更高精度的结果。文本到图像(text-to-image)与图像到图像(image-to-image)有何不同?什么是CFG价值?什么是降噪强度?您将在本文中找到答案。

Stable Diffusion能做什么?

在最简单的形式中,Stable Diffusion是一种文本到图像模式。给它一个文本提示(Text Prompt)。 它将返回与文本匹配的图像。

Stable Diffusion将文本提示转换为图像。

扩散模型(Diffusion model)

Stable Diffusion属于一类称为扩散模型(diffusion model)的深度学习模型。它们是生成模型,这意味着它们的目的是生成类似于它们训练数据的新数据。对于Stable Diffusion来说,数据就是图像。
为什么叫扩散模型?因为它的数学看起来很像物理学中的扩散。让我们来解释这个理念。假设我训练了一个只有两种图像的扩散模型:猫和狗。在下图中,左边的两个山峰代表猫和狗这两组图像。

前向扩散将照片变成噪点。(图修改自本文)

前向扩散(Forward diffusion)

前向扩散过程将噪声添加到训练图像中,逐渐将其转换为没有特点的噪声图像。前向过程会将任何猫或狗的图像变成噪声图像。最终,您将无法分辨它们最初是狗还是猫。就像一滴墨水掉进了一杯水里。墨滴在水中扩散。几分钟后,它会随机分布在整个水中。你再也分不清它最初是落在中心还是边缘附近。
下面是一个进行前向扩散的图像示例。猫的图像变成随机噪音。

猫图像的前向扩散。


反向/逆向扩散(Reverse diffusion)

现在是令人兴奋的部分。如果我们能逆转扩散呢?就像向后播放视频一样。时光倒流。我们将看到墨滴最初添加的位置。

反向扩散过程恢复图像。

从嘈杂、无意义的图像开始,反向扩散恢复了猫或狗的图像。这是主要思想。从技术上讲,每个扩散过程都有两部分:(1)漂移或定向运动和(2)随机运动。反向扩散向猫或狗的图像漂移,但两者之间没有任何变化。这就是为什么结果可以是猫或狗。

如何进行训练


反向扩散的想法无疑是聪明而优雅的。但重要的问题是,“怎么能做到呢?为了反向扩散,我们需要知道图像中添加了多少噪声。答案是教神经网络模型来预测增加的噪声。它被称为Stable Diffusion中的噪声预测因子(noise predictor)。这是一个U-Net模型。培训如下。

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

噪声在每一步按顺序添加。噪声预测器估计每个步骤的总噪声加起来。

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

反向/逆向扩散(Reverse diffusion)

现在我们有了噪声预测器。要如何使用呢?
我们首先生成一个完全随机的图像,并要求噪声预测器告诉我们噪声。然后,我们从原始图像中减去这个估计的噪声。重复此过程几次。你会得到一只猫或一只狗的图像。

反向扩散的工作原理是从图像中连续减去预测的噪声。

您可能会注意到我们无法控制生成猫或狗的图像。当我们谈论条件反射时,我们将解决这个问题。目前,图像生成是无条件的

译者:大家可以结合这张WebUi的界面看后面的内容,其实后面的内容很好的解释了这些参数的用途。

Stable Diffusion Model


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

图像空间是巨大的。想一想:具有三个颜色通道(红色、绿色和蓝色)的 512×512 图像是一个 786,432 维的空间!

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

潜在扩散模型(Latent diffusion model)


Stable Diffusion旨在解决速度问题。方法如下:
Stable Diffusion是一种在潜在空间扩散(latent diffusion)的模型。它不是在高维图像空间中操作,而是首先将图像压缩到潜空间(latent space)中。对比原像素空间,潜空间(latent space)小了 48 倍,因此它获得了处理更少数字的好处,这就是为什么它要快得多。


变分自编码器(Variational Autoencoder)


Stable Diffusion使用一种称为变分自编码器(Variational Autoencoder)的技术来实现图像潜空间压缩。这正是我们在使用Stable Diffusion时设置的VAE文件的内容,我稍后会详细说明。

变分自编码器(VAE:Variational Autoencoder)神经网络由两部分组成:(1)编码器和(2)解码器。编码器将图像压缩为潜在空间中的低维表示。解码器从潜在空间恢复图像。

Variational autoencoder transforms the image to and from the latent space.

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

因此,在训练过程中,它不会生成噪声图像,而是在潜在空间中生成随机张量(潜在噪声)。它不是用噪声破坏图像,而是用潜在噪声破坏图像在潜在空间中的表示。这样做的原因是它的速度要快得多,因为潜在空间更小。


图像分辨率(Image resolution)

图像分辨率反映在潜在图像张量的大小上。潜在图像的大小仅为 4x64x64,仅适用于 512×512 图像。对于 4×96 的纵向图像,它是 64x768x512。这就是为什么生成更大的图像需要更多的VRAM的原因。


由于Stable Diffusion v1 在 512×512 图像上进行了微调,因此生成大于 512×512 的图像可能会导致重复对象,例如臭名昭著的两个头部。如果必须,请将至少一侧保持在 512 像素,并使用 AI 升频器(AI upscaler)以获得更高的分辨率。


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


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


换句话说,图像的高维性是伪影。自然图像可以很容易地压缩到更小的潜在空间中,而不会丢失任何信息。这在机器学习中被称为流形假设(manifold hypothesis)。


潜空间中的反向扩散


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

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

什么是VAE文件?


VAE文件在Stable Diffusion v1中使用,以改善眼睛和面部的绘画效果。它们是我们刚刚谈到的自编码器的解码器。通过进一步微调解码器,模型可以绘制更精细的细节。


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


条件(Conditioning)


前面的说明仍然不完整,缺了最重要的一块拼图:文本提示(text prompt)在哪里注入到图片?没有这部分内容,Stable Diffusion就不是文本到图像(text-to-image)模型。你会随机得到一只猫或一只狗的图像,但你没法控制Stable Diffusion为你生成猫或者狗的图像。
这就是条件(conditioning)的用武之地。条件的目的是引导噪声预测器,以便预测的噪声在从图像中减去后会给出我们想要的东西。


文本条件(Text conditioning)


下面概述了如何处理文本提示(Text Prompt并将其输入噪声预测器。分词器(Tokenizer首先将提示中的每个单词转换为称为标记(token的数字。然后将每个标记转换为称为Embedding的 768 值向量。(是的,这与您在Web UI中使用的Embedding相同)然后,Embedding由文本转换器处理,并准备好供噪声预测器使用。

如何处理文本提示并将其馈送到噪声预测器中以引导图像生成。

现在让我们仔细看看每个部分的详细内容。如果上述概述对您来说已经够了,您可以跳到下一部分。


分词器(tokenizer

分词器。


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


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

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

另一个细则是空格字符也是令牌(token)的一部分。在上述情况下,短语“dream beach”产生两个标记“dream ”和“[空格]beach”。这些token与“dreambeach”产生的token不同,“dream beach”是“dream”和“beach”(beach前没有空格)。
Stable Diffusion模型仅限于在提示中使用 75 个令牌。(现在你知道它和75个字不一样了!)

嵌入/标签(Embedding)

嵌入。


Stable Diffusion v1 使用 Open AI 的 ViT-L/14 剪辑模型。嵌入是一个 768 个值的向量。每个令牌都有自己唯一的嵌入向量。嵌入由 CLIP 模型固定,该模型是在训练期间学习的。


为什么我们需要嵌入(Embedding)?这是因为有些词彼此密切相关。我们希望利用这些信息。例如,mangentleman 和 guy 的嵌入几乎相同,因为它们可以互换使用。莫奈、马奈和德加都以印象派风格作画,但方式不同。这些名称具有接近但不相同的嵌入。


这与我们讨论的用于触发带有关键字的样式的嵌入相同。嵌入可以产生魔力。科学家们已经证明,找到合适的嵌入可以触发任意的对象和样式,这是一种称为文本反转的微调技术。


将嵌入(embeddings)馈送到噪声预测器(noise predictor

从嵌入到噪声预测器。


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


交叉注意力机制(Cross-attention)

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


让我们以提示“蓝眼睛的男人”为例。Stable Diffusion将“蓝色”和“眼睛”这两个词配对在一起(提示中的自注意力机制),这样它就会生成一个蓝眼睛的男人,而不是一个蓝衬衫的男人。然后,它使用这些信息将反向扩散引导到包含蓝眼睛的图像。(提示/prompt和图像/image之间的交叉注意力机制)


旁注:

Hypernetwork是一种微调Stable Diffusion的技术,它通过干预交叉注意力网络来插入样式。

LoRA 模型修改交叉注意力模块的权重以更改样式。仅修改此模块就可以微调 Stabe Diffusion模型这一事实说明了该模块的重要性。

ControlNet 通过检测到的轮廓、人体姿势等来调节噪声预测器,并实现对图像生成的出色控制。

Stable Diffusion Step-by-Step

文本到图像(Text-to-image)


在文本到图像中,您向Stable Diffusion提供文本提示(prompt),它会返回一个图像。


第 1 步。Stable Diffusion在潜空间中生成随机张量。您可以通过设置随机数生成器的种子来控制此张量。如果将种子设置为某个值,您将始终获得相同的随机张量。这是你在潜在空间中的图像。但现在都是噪音。

随机张量在潜在空间中生成。


第 2 步。噪声预测器 U-Net 将潜在噪声图像和文本提示作为输入,并预测噪声,也在潜在空间(4x64x64 张量)中。


第 3 步。从潜在图像中减去潜在噪声。这将成为您的新潜在图像


步骤 2 和 3 重复一定数量的采样步骤,例如 20 次。
第 4 步。最后,VAE的解码器将潜在图像转换回像素空间。这是运行Stable Diffusion后获得的图像。


下面介绍了如何在每个采样步骤中对映像演变进行成像。

每个采样步骤的图像。


噪音时间表(Noise schedule)

图像从嘈杂变为干净。您是否想知道噪声预测器在初始步骤中是否运行良好?实际上,这只是部分原因。真正的原因是我们试图在每个采样步骤中获得预期的噪声。这称为噪声时间表。下面是一个示例。

15 个采样步骤的噪声计划。



噪音时间表是我们定义的。我们可以选择在每一步减去相同数量的噪声。或者我们可以在开始时减去更多,就像上面一样。采样器在每个步骤中减去足够的噪声,以达到下一步中的预期噪声。这就是您在step-by-step图像中看到的内容。


图像到图像(Image-to-image)


图像到图像是SDEdit方法中首次提出的一种方法。SDEdit可以应用于任何扩散模型。所以我们有Stable Diffusion的图像到图像的功能。
输入图像和文本提示作为图像到图像的输入提供。生成的图像将由输入图像和文本提示调节。例如,使用这幅素人画和提示“photo of perfect green apple with stem, water droplets, dramatic lighting”作为输入,图像到图像可以将其变成专业绘图:

图像到图像

现在这是分步介绍:
第 1 步。输入图像被编码为潜在空间。


第 2 步。噪点被添加到潜在图像中。降噪强度控制添加的噪声量。如果为 0,则不添加噪声。如果为 1,则添加最大噪声量,以便潜在图像成为完整的随机张量。

第 3 步。噪声预测器 U-Net 将潜在噪声图像和文本提示作为输入,并预测潜在空间(4x64x64 张量)中的噪声。


第 4 步。从潜在图像中减去潜在噪声。这将成为您的新潜在图像


步骤 3 和 4 重复一定数量的采样步骤,例如 20 次。
第5步。最后,VAE的解码器将潜在图像转换回像素空间。这是运行映像到映像后获得的图像。


所以现在你知道什么是图像到图像:它所做的只是设置带有一点噪声和一点输入图像的初始潜在图像。将去噪强度设置为 1 等效于文本到图像,因为初始潜在图像完全是随机噪声。


修复(Inpainting)


修复实际上只是图像到图像的一个特殊情况。杂色将添加到要上色的图像部分。噪声量同样由降噪强度控制。


Depth-to-image


Depth-to-image是对图像到图像的增强;它使用深度图生成具有附加条件的新图像。
第 1 步。输入图像被编码为潜在状态


第 2 步。MiDaS(AI深度模型)估计输入图像的深度图。


第 3 步。噪点被添加到潜在图像中。降噪强度控制添加的噪声量。如果降噪强度为 0,则不添加噪声。如果去噪强度为 1,则添加最大噪声,使潜在图像成为随机张量。

第 4 步。噪声预测器估计潜在空间的噪声,由文本提示和深度图调节


 5. 从潜在图像中减去潜在噪声。这将成为您的新潜在图像


对采样步骤数重复步骤 4 和 5。
第 6 步。VAE的解码器对潜在图像进行解码。现在,您可以获得从深度到图像的最终图像。


什么是CFG值?


如果不解释无分类器引导(Classifier-Free Guidance,CFG),这篇文章将是不完整的,这是AI艺术家每天调来调去的值。要了解它是什么,我们需要首先触及它的前身,分类器引导(Classifier Guidance)。


分类器引导(Classifier Guidance)

分类器引导是一种在扩散模型中合并图像标签的方法。您可以使用标签来指导扩散过程。例如,标签“猫”引导反向扩散过程生成猫的照片。


分类器指导强度(classifier guidance scale)是用于控制扩散过程应与标签保持多近的参数。


假设有 3 组带有标签“猫”、“狗”和“人类”的图像。如果扩散是无指导的,模型将从每个组的总数据中(译者:我觉得这里应该有“均匀”的意思)提取样本,但有时它可能会绘制适合两个标签的图像,例如男孩抚摸狗。

分类器指南。左:无指导。中:小引导尺度。右:大引导比例尺。


高分类器指导下,扩散模型生成的图像将偏向极端或明确的例子。如果你向模型询问一只猫,它将返回一个明确的猫的图像,没有别的。
分类器指导强度(classifier guidance scale)控制遵循指导(guidance)的紧密程度。在上图中,右侧的采样具有比中间的分类器指导量表更高的分类器指导量表。实际上,此刻度值只是具有该标签的数据的漂移项的乘数。


无分类器指导(Classifier-free guidance)

尽管分类器指导实现了破纪录的性能,但它需要一个额外的模型来提供该指导。这给培训带来了一些困难。
用作者的话来说,无分类器指导是一种实现“没有分类器的分类器指导”的方法。他们没有使用类标签和单独的模型作为指导,而是建议使用图像标题并训练一个条件扩散模型,就像我们在文本到图像中讨论的那样。
他们将分类器部分作为噪声预测器U-Net的条件,在图像生成中实现所谓的“无分类器”(即没有单独的图像分类器)指导。
文本提示以文本到图像的形式提供此指导。


CFG 值


现在我们通过条件反射有一个无分类器的扩散过程,我们如何控制应该遵循多少指导?
无分类器引导 (CFG) 刻度是一个值,用于控制文本提示对扩散过程的调节程度。当图像生成设置为 0 时,图像生成是无条件的(即忽略提示)。较高的值将扩散引导向提示。


Stable Diffusion v1 与 v2


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


模型差异(Model difference)


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

  • OpenClip 的规模扩大了五倍。较大的文本编码器模型可提高图像质量。
  • 尽管Open AI的CLIP模型是开源的,但这些模型是使用专有数据训练的。切换到 OpenClip 模型使研究人员在研究和优化模型时更加透明。更有利于长远发展。

训练数据差异(Training data difference)


Stable Diffusion v1.4 训练使用

  • 在 laion237B-en 数据集上以分辨率 256×256 执行 2k 步。
  • 高分辨率分辨率 194×512 的 512k 步长。
  • 在“laion-aesthetics v225 512+”上以 512×2 处执行 5k 步,
    文本条件下降 10%。


Stable Diffusion v2 训练

  • 在 LAION-550B 子集的分辨率下以 5k 步长过滤露骨的色情材料,使用 LAION-NSFW 分类器和美学分数 >= 。256x256punsafe=0.14.5
  • 在具有分辨率的图像上,在同一数据集上的分辨率下以 850k 步长。512x512>= 512x512
  • 在同一数据集上使用 v 目标的 150k 步。
  • 在图像上恢复了另外 140k 步。768x768

Stable Diffusion v2.1 在 v2.0 上进行了微调

  • 同一数据集上的额外 55k 步骤(使用punsafe=0.1)
  • 另外 155k 额外步骤punsafe=0.98

所以基本上,他们在最后的训练步骤中关闭了NSFW过滤器。


结果差异(Outcome difference)


用户通常发现使用Stable Diffusion v2 来控制风格和生成名人更难。虽然稳定性 AI 没有明确过滤掉艺术家和名人的名字,但它们的效果在 v2 中要弱得多。这可能是由于训练数据的差异。Open AI的专有数据可能有更多的艺术品和名人照片。他们的数据可能经过高度过滤,因此所有内容和每个人都看起来很好,很漂亮。

一些有趣的内容

  • Stable Diffusion v1.4 press release
  • Stable Diffusion v2 press release
  • Stable Diffusion v2.1 press release
  • High-Resolution Image Synthesis with Latent Diffusion Models – research paper introducing Stable Diffusion
  • The Illustrated Stable Diffusion – Some good details in model architecture
  • Stable Diffusion 2 – Official model page
  • Diffusion Models Beat GANs on Image Synthesis – Research paper introducing classifier guidance
  • Classifier-Free Diffusion Guidance – Research paper introducing classifier-free guidance
  • Deep Unsupervised Learning using Nonequilibrium Thermodynamics – Reverse diffusion process

感觉有帮助的朋友,欢迎赞同、关注、分享三连。^-^

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

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

相关文章

51单片机驱动 mg996r金属舵机 STC89C52单片机直接驱动金属大舵机

/*无论是大舵机&#xff0c;还是小舵机&#xff0c;控制方法都一样会区别在 大舵机只能接P0口&#xff08;此口外接上拉&#xff0c;驱动电流最大&#xff09;小舵机任意口 */ //#include<reg51.h> //#define uint unsigned int //#define uchar unsigned char //sbit S…

10、架构:组件通信设计

通信是一个应用中不可或缺的一个功能&#xff0c;现如今前端视图类框架大多数都是由数据驱动&#xff0c;通过数据来进行视图层的展示渲染。举个简单的例子如下&#xff0c;这是一个常见的 React 列表渲染&#xff1a; // each const numbers [1, 2, 3, 4, 5]; const listIte…

应用级监控方案Spring Boot Admin

1.简介 Spring Boot Admin为项目常用的监控方式&#xff0c;可以动态的监控服务是否运行和运行的参数&#xff0c;如类的调用情况、流量等。其中分为server与client&#xff1a; server&#xff1a; 提供展示UI与监控服务。client&#xff1a;加入server&#xff0c;被监控的…

C语言王国探险记之函数的简单概念

王国探险记系列 文章目录&#xff08;5&#xff09; 目录 王国探险记系列 文章目录&#xff08;5&#xff09; 前言 一&#xff0c;函数的基本概念 二&#xff0c;调用外部函数和main()函数区别 2.1如果我们将函数的定义放到后面&#xff0c;可不可以呢&#xff1f; 总结…

插值应用案例1

案例1 一阶线性插值 待加工零件外形根据工艺要求在一组数据(x,y)给定&#xff08;如下表&#xff09;&#xff0c;用程控铣床加工时每一刀只能沿着x方向或y方向走非常小的一步&#xff0c;需要从已知数据得到加工步长很小的(x,y)的坐标。 下表中所给x,y数据位于机翼断面的下…

使用Vue脚手架

(193条消息) 第 3 章 使用 Vue 脚手架_qq_40832034的博客-CSDN博客 初始化脚手架 说明 1.Vue脚手架是Vue官方提供的标准化开发工具&#xff08;开发平台&#xff09; 2.最新的版本是4.x 3.文档Vue CLI脚手架&#xff08;命令行接口&#xff09; 具体步骤 1.如果下载缓慢…

Libvirt Event Loop简介

文章目录 前言实现原理处理框架编程接口 原理验证事件订阅服务监听验证流程 前言 Event Loop顾名思义就是事件循环&#xff0c;整个程序是一个大的循环&#xff0c;通过事件来驱动程序要做的事情。传统编程模型是顺序的&#xff0c;程序运行一次然后终止&#xff0c;这种模型简…

JavaScript Day10 DOM详解

DOM DOM是JS操作网页的接口&#xff0c;全称为“文档对象模型”&#xff08;Document Object Model&#xff09;。它的作用是将网页转为一个JS对象&#xff0c;从而可以用脚本进行各种操作&#xff08;比如增删内容&#xff09;。 • 文档 – 文档表示的就是整个的HTML网页文档…

19-Linux 权限

目录 1.用户操作 1.1.创建用户 1.2.配置密码 1.3. 切换用户 2.三种角色 3.文件类型和访问权限 3.1.文件类型 3.2.基本权限 4.修改文件权限 1.用户操作 Linux下有两种用户&#xff1a; 超级用户&#xff08;root&#xff09;普通用户 超级用户&#xff1a;可以再lin…

【Cache】Redis主从复制哨兵模式集群

文章目录 一、Redis 持久化1. 主从复制2. 哨兵模式3. 集群 二、 Redis 主从复制1. 概述2. 主从复制的作用3. 主从复制流程4. 搭建 Redis 主从复制4.1 环境准备4.2 安装 Redis4.3 修改 Master 节点配置文件4.4 修改Slave节点配置文件&#xff08;Slave1和Slave2配置相同&#xf…

【vant移动端表格数据排版】用vant2简单实现一个把PC端表格数据展示在移动端的排版。上拉加载更多,下拉刷新页面,新增,编辑,删除功能

前言 上次做了一个移动端的表格功能&#xff0c;纯表格的那种。 跟PC一样&#xff0c;但是我一直觉得在移动端上写表格很糟糕的体验&#xff0c;毕竟手机就那么大。这不合理。 但是我这公司又需要把PC端的表格的数据展示在移动端。 导致我只能去试试看怎么排版比较好。由于网上…

【Qt-14】QT小知识点

1、关闭程序时报错 解决方案&#xff1a; 报这个错误可能是内存溢出&#xff0c;申请的空间与注销的空间不一致导致&#xff0c;排查了好久&#xff0c;我不是因为这个原因&#xff0c;我的问题如下&#xff0c;没有new窗体。 2、固定QT窗体大小 this->setMinimumSize(QSi…

NLP实战6:seq2seq翻译实战-Pytorch复现-小白版

目录 一、前期准备 1. 搭建语言类 2. 文本处理函数 3. 文件读取函数 二、Seq2Seq 模型 1. 编码器&#xff08;Encoder&#xff09; 2. 解码器&#xff08;Decoder&#xff09; 三、训练 1. 数据预处理 2. 训练函数 四、训练与评估 &#x1f368; 本文为[&#x1f51…

【算法集训之线性表篇】Day 02

文章目录 题目一思路分析代码实现效果 题目二思路分析代码实现效果 题目一 01.设置一个高效算法&#xff0c;将顺序表L的所有元素逆置&#xff0c;要求其空间复杂度为O(1)。 思路分析 首先&#xff0c;根据题目要求&#xff0c;空间复杂度度为O(1),则不能通过空间换时间的方…

为什么编程更关注内存而很少关注CPU?

我们知道&#xff0c;我们编写的程序&#xff0c;不管是什么编程语言&#xff0c;最后执行的时候&#xff0c;基本上都是CPU在完成。之所以说基本上&#xff0c;是因为还有GPU、FPGA等特殊情况。 但不知道大家发现没有&#xff0c;我们编程的时候&#xff0c;经常在关注内存问…

大促转化率精准预估优化论文随笔记

这是一篇阿里妈妈的论文【KDD’23 | 转化率预估新思路&#xff1a;基于历史数据复用的大促转化率精准预估】 常规的销量预测&#xff0c;遇到一些特大事件&#xff0c;直播、大促&#xff0c;一般很难预估得准确。而且现在电商机制也比较多样&#xff0c;预售、平台折扣等。 本…

初识MySQL:了解MySQL特性、体系结构以及在Linux中部署MySQL

目录 MySQL简介 MySQL特性 MySQL体系结构 SQL的四个层次&#xff1a; 连接层&#xff1a; SQL层&#xff1a; 插件式存储引擎&#xff1a; 物理文件层&#xff1a; 一条SQL语句的执行流程&#xff1a; MySQL在Linux中的安装、部署 首先需要下载mysql软件包&#xff…

月入9000+的CSGO游戏搬砖项目操作细节和疑问 ?给您一一解答

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 01 海外CSGO游戏搬砖项目是什么&#xff1f; csgo搬砖是在外服steam上购买包含印花枪皮等等…

9.2、增量表数据同步

1、数据通道 2、Flume配置 1&#xff09;Flume配置概述 Flume需要将Kafka中topic_db主题的数据传输到HDFS&#xff0c;故其需选用KafkaSource以及HDFSSink&#xff0c;Channel选用FileChannel。 需要注意的是&#xff0c; HDFSSink需要将不同mysql业务表的数据写到不同的路径…

2023.7.4 Dataloader切分

一、 如果文件夹路径是 path/to/folder with spaces/&#xff0c;使用以下方式输入 path/to/folder\ with\ spaces/或者使用引号包裹路径&#xff1a; "path/to/folder with spaces/"这样可以确保命令行正确解析文件夹路径&#xff0c;并将空格作为路径的一部分进…