[DL]深度学习_扩散模型
扩散模型原理
深入浅出扩散模型
一、概念简介
1、Denoising Diffusion Probalistic Models,DDPM
1.1 扩散模型运行原理

- 首先sample一个都是噪声的图片向量,这个向量的shape和要生成的图像大小相同。
- 通过Denoise过程来一步一步有规律的滤去噪声。
- Denoise的次数是事先规定的,给每一个步骤给定编号,最终步骤编号为1。
- 从噪声到图像的过程称为Reverse Process
雕像已经在大理石里边了,我只是把不要的部分凿掉。--米开朗基罗
1.2 Denoise Model

将相同的Denoise model反复进行图像去噪过程,但是每一个步骤阶段输入的噪声图像之间差别很大。则如果每个不同阶段都使用完全相同的Denoise model或许表现不会很好。
解决方案是,设计Denoise时候,去噪过程中,输入元素不仅是该阶段的噪声影像,还同时输入当前图像的噪声覆盖严重程度指标(即当前是第几步骤)。Denoise model根据输入的噪声程度采取不同的去噪操作。
1.3 Denoise model内部构造

- Noise Predictor的作用是预测输入图像中的噪声分布。
- Noise Predictor通过接收输入噪声图像和噪声覆盖程度参数,生成预测的该噪声图像中的噪声分布图。
- 输出的预测噪声图与输入的噪声图相减,得出Denoise操作后的结果。
1.4 如何训练Noise Predictor

在训练预测噪声分布的时候是需要有Ground Truth来进行监督的,则需要首先制造Ground Truth标签来提供Noise Predictor训练。

- 首先,拿出一张训练影像,随机从高斯分布Gaussian distribution中sample一个噪声加到训练影像中,产生有点噪声的影像,并记录这是第几步增加噪声。
- 重复每一步骤增加噪声的过程,最后会得到一个完全被噪声覆盖的影像。
- 将训练集中的影像都进行这样增加噪声的处理。
- 做完增加噪声处理过后,就得到训练Denoise Predictor的每一噪声覆盖程度的Ground Truth数据了。
- 这个增加噪声的过程称为Forward Process(Diffusion Process)
1.5 文字提示的生成影像Text-to-Image

- 需要训练一个由文字生成影像的模型,则需要文本和影像成对的训练数据,如LAION数据集具有58.5亿张成对影像。
- 在训练过程中,通过在每一个Denoise步骤中加入文字描述条件来进行影响去噪。
- 即在Noise Predictor模组中同时输入文字描述条件。

- 每一张训练影像都有对应的文字描述,先将图片进行Diffusion Process增加噪声之后
- 在训练时不仅要给Noise Predictor输入该步骤的影像和步骤参数还包括文字描述。
- Noise Predictor根据输入的三者数据产生适当的噪声预测。
2、Stable Diffusion
2.1 框架Framework

经典Stable Diffusion框架由三个关键部件组成:Text Encoder文本编码器、Generation生成器、Decoder解码器。文本编码器将文本描述编码为向量嵌入;生成器则利用Diffusion model,输入一个噪声矩阵与文本编码输出一个“中间产物”,即高维度的编码影像;最后经过解码器来将编码影像解码输出生成的影像。通常三个模组是单独训练的,最后将其组合在一起。
2.1.1 Text Encoder

文本编码器的大小会影响到模型生成图像的质量好坏。图中的FID值越小越好,CLIP Score值越大越好。由图中的实验结果可以看出,当文本编码器的参数量越大时,模型生成后的图像质量越高。
edges:

- FID(Fréchet Inception Distance)一种用于评估生成模型的图像质量的指标。
- 先有一个预训练好的CNN分类模型,将影像输入CNN模型中,得到CNN模型的潜在representation,之后将真实影像的representation和生成影像的representation画出来。
- 若两组representation之间的距离越接近则表示生成的图像与真实图像越相近,则生成质量越高。
- 假设两者representation的分布为高斯分布,FID通过计算两组representation之间的Fréchet距离,FID值越小越好。
- FID存在的问题是需要sample出很多的影像才能计算,如FID-10k就是sample了10k张影像来评估模型的生成性能。

- CLIP Score代表通过使用经由400 million个影像-文本对上预训练的CLIP模型,将生成的影像和该影像对应的文本描述同时输入预训练好的CLIP模型中。
- CLIP模型利用图像编码器和文本编码器将输入的影像和文本描述编码为特征向量。
- 给影像向量与文本向量之间计算相似性,相似性越高证明生成的影像和文本描述越贴合,则生成的影像质量很高。
2.1.2 Generation Model

经研究之后,Generation中的Diffusion Model的大小对生成图像的质量影响非常小。上图的U-Net size表示Diffusion Model中的Noise Predictor的大小。
训练过程

- Noise需要添加在中间产物(小图或潜在表征)上。
- 先利用Encoder将一幅影像进行编码,得到潜在表征。
- sample一个噪声,添加在潜在表征上,重复添加噪声的过程,直到最后得到的潜在表征变为纯粹的噪声。
- 将某一step添加噪声的潜在表征作为输入,该step的编号代表当前噪声的覆盖程度作为输入,还有对原始图像的文本描述进行编码之后得到的文本潜在向量作为输入。
- 训练Noise Predictor来预测当前的step的噪声潜在表征,当前step添加进去的噪声分布作为Ground Truth进行监督。
生成过程

- 首先纯粹从高斯分布(正态分布)中sample出的潜在表征输入Denoise。
- 对当前生成的文本描述进行编码之后作为条件输入Denoise。
- Denoise通过训练好Noise Predictor预测噪声来去除一些潜在表征在文本描述条件下的噪声。
- 重复去除噪声的步骤。
- 直到产生的潜在表征达到质量要求之后,将潜在表征输入训练好的Decoder来解码为最终的生成影像。
2.1.3 Decoder
Decoder在训练时不需要影像配对的文本描述。
Generation输出为低分辨率影像时对Decoder训练的策略

- 可以将训练影像都进行下采样操作,得到成对的下采样后影像与原始图像对。
- 利用低分辨率和原始影像对进行Decoder的训练。
Generation输出为潜在表征时对Decoder训练的策略

- 训练一个Auto-encoder,将输入的影像进行编码之后得到潜在表征。
- 将潜在表征通过Decoder还原为原始影像。
- 训练目的是将Decoder还原的影像与原始影像越接近。
- 训练好Decoder之后,Decoder就可以执行将输入的潜在表征解码为生成的最终影像。
3、Diffusion Model的数学原理
3.1 Denoising DIffusion Probabilistic Models的算法
3.1.1 Training过程

- repeat---表示一直重复步骤1到步骤5的内容,直到converged结束。
---首先sample一张干净的影像
,即所需要生成的影像。
---从1到T之间sample一个整数t,T通常会设定一个较大的数值,例如T=1000。
---从一个高斯分布(正态分布)中sample一个noise为
,该正态分布的平均值mean为0,每一个维度的方差variance为1。sample的noise
的shape与原始影像相同。
---公式中红色框中所做的事是
和
进行权值相加,权值是事先定好的一组权重
,通常设计是由大到小,
最大,则如果第三步sample的t值越大,代表
越小,代表原始图像占比越小,noise占比越多,则t值sample到越大,代表噪声添加的越多。进行权值相加之后得到的是一个加了噪声的影像,作为
函数的输入,这个
代表Noise Predictor network,通过输入一个加了噪声的影像和sample到的数值t,得到一个预测的noise分布。学习的目标是Noise Predictor预测出的Noise与第四步sample到的Ground Truth噪声
十分接近。

- 概念中的Diffusion Model运行应该是一点一点在原始影像上添加噪声,每次训练Noise Predictor的时候是把有噪声的影像作为输入,再输入step的数值来预测这个step添加进来的噪声分布,还原的时候将有噪声的影像还原为该step添加噪声之前的状态。想象中是噪声是一点一点添加进去,Denoise时候也是一点一点去除噪声。
- 实际上DDPM的运行是给原始的影像直接按照权重比例添加一个噪声,得到有噪声的影像。训练时就是将有噪声的影像和 t 作为输入,直接预测添加的噪声分布。实际上噪声并没有一步一步添加进来,并没有多次添加噪声,而是一次直接将噪声添加进去,在Denoise时候也是一次就将噪声去除。
3.1.2 Sampling过程

---首先从正态分布中sample一个全是Noise的影像
。
---Reverse process过程生成影像,需要循环T次。
---每次生成图的时候,都要先从正态分布中sample一个Noise z。
---其中
是上一轮循环中得到的,减去带有权重的Denoise中的Noise Predictor预测的噪声分布
。式子中的关键点为最后需要加上一个噪声
,这里
是一个常数。最终得到的影像为
。
3.2 影像生成模型本质上的共同目标

影像生成模型本质上的共同目标是在输入端有一个简单已知的概率分布,通常是高斯分布。从高斯分布中sample出一个向量z出来,输入到一个Network中G(z)=x,输出为一张影像x。就算输入是很简单的高斯分布sample,通过一个Network之后转换为一个非常复杂的影像x,该影像x应该与真实的影像分布越接近。

更常见的应用是给一段文本描述,根据描述来生成图形。这段文本描述称之为条件Condition,但是对应的影像是千变万化的,此时模型的目标是产生出的影像分布与真实影像的分布越接近越好。
3.3 最大似然估计Maximum Likelihood Estimation
3.3.1 概述
最大似然估计(Maximum Likelihood Estimation,简称MLE)是统计学中一种用于估计概率分布参数的方法。MLE的目标是找到最大化似然函数的参数值,其中似然函数衡量观测数据与分布之间的拟合程度。
MLE的基本思想是找到使观测数据最有可能发生的参数值。这是通过计算在不同的参数值下获得观测数据的概率来实现的。为了进行MLE,需要根据对概率分布的假设定义似然函数。然后通过对参数求导并令导数等于零来最大化似然函数。这将得到一组方程,可以通过数值求解来获得参数估计值。

如何去衡量两个分布之间的距离,常用影像生成模型的衡量方法是最大似然估计。
- 假设Network的参数用
表示,根据Network生成的分布用
表示,真实分布用
表示。
- 首先从
中sample出影像
,这些影像是训练模型时所需要的训练数据。
- 假设能够计算Network
能够生成的某一张影像
的几率
(实际上因为
过于复杂有可能是做不到的)。
- 要得出的模型参数
即可以让从真实域中sample出的影像
,被Network产生出来的概率最大的参数
。

- 目标函数为上图公式,
代表需要寻找一组参数
,这个参数
需要让
部分的值最大。
代表对sample出的每一幅影像,都采用
来计算出模型可以生成该幅影像的概率,之后将每一张的概率相乘。
- 最终得到的
为模型学习所需要得到的参数。
3.3.2 目标函数详解

- 因为arg max操作的目的是取最大值,则给原式取log不影响最终结果。
---左边式子中和最大,近似于每个
的概率最大,也就近似于右边式子的期望越大。切比雪夫大数定律,当m足够大时收敛于均值的m倍。
---等同于对x做积分。
---不会影响结果
,只跟data本身有关。但是加入这一项之后有助于公式合并。
---则此时与KL散度Kullback-Leibler Divergence等价。KL散度作用是计算两个概率分布之间的差异程度。KL散度的值越大就代表两个概率分布之间的差异越大。
- 在求取模型参数的目标中,最大似然估计等价于最小化KL散度。
3.4 VAE与DDPM的相似推导
3.4.1 VAE的推导

---要去计算x被生成的概率需要去看每一个z被生成的概率,再看每个z生成x的概率,再对所有的z求积分。其中每个z被生成的概率是已知,如从高斯分布中sample的z。
---代表每个z经过Network生成x的概率。式子中,若一个z经过Network生成的影像完全逐像素相等于x,此时概率为1,反之就是0。但是生成的影像几乎不可能和原始影像x逐像素完全相同,这样定义的坏处是每张生成的影像的概率都可能是0。
- VAE中的假设是,输入z,输出G(z),G(z)代表高斯分布的mean均值。
---式子中
的随机发生的概率Probability Density正比于G(z)与x的距离的第二范式,取负号,再取e的指数函数。假设G(z)代表高斯分布的均值mean,
的概率密度函数与后边式子成正比,如果某一张影像x与G(z)越接近,
的概率就越大。
3.4.2 VAE中logP(x)的下界

在VAE中无法直接最大化P(x),通常真正最大化的是P(x)的下界。
---无论是什么分布,等式都成立。logP(x)与z无关,提出积分符号外边之后,积分里边的值等于1。
---根据贝叶斯公式可以得到。
---为
与
的KL散度。KL散度衡大于等于0,
。
---则对其取期望值,就得到概率
的下界。
- 在VAE中
是Encoder。
- 在做VAE时就相当于是寻找一个好的方法来最大化下界。
3.4.3 DDPM的推导

当DDPM生成影像时,可以把过程想成生成了一个高斯分布的mean,如果
与生成的
完全相同,此时概率最大。(假设为高斯分布并不完全合理,且假设每个维度都是固定的,文献中的实验都证明将方差考虑进来并不会提升性能。假设输出为高斯分布因为对中间部分推导有益)

整个DDPM在生成某一幅影像的概率可以写成上式。对所有可能的
做积分。
3.4.4 q(x_t|x_t-1)的推导

先有一张
与
相乘,
为事先设定好的超参数,可以调整。
乘上从高斯分布中sample出的噪声。
- 则
概率分布其实也是高斯分布,均值为
,方差为
,每个维度的方差都相同。
的计算实际上是可以直接算出的,并不需要按照步骤计算。

- 每一个step中从高斯分布中sample出的噪声之间是相互独立的。
- 将上一个step的
公式带入到
中,可以得到
与
之间的关系。

- 在同一个高斯分布中sample出两个噪声,并乘上两个不同的权重,加起来之后的概率分布项可以简化成只从高斯分布中sample一次噪声乘上一个权重。相互独立的高斯分布的和仍然是高斯分布。

- 以此类推,整个扩散过程可以整合为图中式子。
- 为了公式简化,设定为
,
。
- 实际上整个扩散过程是一步到位的只需要从高斯分布中sample一次噪声。
3.4.5 DDPM中logP(x)的下界

- DDPM的下界在形式上与VAE十分相似,且推导过程也是相同步骤。
- DDPM中的
为扩散过程Diffusion Process。

- 需要最大化的下界在整理之后得到可以计算的公式。

- 第一项是
的概率分布,对
取期望值。
- 第二项为
与
的KL散度。(第二项可以不用计算,
是从一个高斯分布中sample出的噪声的概率,与Network参数
无关。
是扩散过程,人工设定好的)
- 第三项中期望值的概率分布是
,要计算的是两个分布中的KL散度

---假设已经看到
并且做了t次扩散之后得到
,但是中间的过程还不可知,此时这个式子就是代表
的分布。
- 可以算出的是
、
、
。
- 同经公式变换化简之后得到
,已知化简后式子中都是高斯分布。

- 通过推导
的均值mean和方差variance可以得出。

如何去最小化KL散度
- 并不需要实际的计算出KL散度,只需要最小化KL散度。
是一个高斯分布,该高斯分布的均值mean和方差variance是固定的,因为该分布是人工设定好的,与Network参数无关。
是由Denoise Model决定的,但是均值variance也是固定的,假设输出的高斯分布的每个维度的方差都是固定值。也有文献讨论过均值variance方差但是并不影响结果。均值mean取决于Denoise Model,如果目标是让两个分布的KL散度越大,即让两个分布越接近越好。
- 其中
的分布固定,
分布的均值variance固定,均值mean可以变化。则需要使两个分布越接近越好,通过将
分布的均值mean与
分布的均值mean越接近越好。
- 实际上的操作是,
的均值mean已知,
的均值mean是将
输入Denoise之后输出的
。通过训练Denoise Model,让
与
的均值mean越接近。

- 期望
中
是先给定的,是从训练集中sample出的一张真实影像。需要通过将
乘一个系数,从高斯分布中sample的噪声
乘以一个系数,
sample出来。

- Denoise Model接受输入
和 t ,输出的结果需要与
的均值mean越接近越好,这个均值是
和
的某种插值interpolation。
的均值mean相当于
的分布,但是实际上均值mean的公式中中并没有
。
- 再将
均值进行化简,
和
之间的关系是已知的,经过移项处理过后将
代进去。

- 在要真实生成的目标中,Network真正需要去预测的是加到影像中的噪声
,
与
均为设定好的超参数,
为输入。
- 在DDPM论文中视图训练
与
,但是对表现并没有提升。
3.5 补充说明部分
3.5.1 Sampling算法中需要额外添加噪声猜想

- 需要考虑的是为什么在Sampling算法中还需要多添加一个噪声。
- 在Denoise model输出的是一个高斯分布的均值mean,在做sample时候需要加上一个噪声代表考虑高斯分布的方差variance。
- 若直接取均值mean,代表取高斯分布中的概率密度函数最大的输出。
猜想:

- Diffusion Model其实是一种Autoregressive Model妥协的结果。
- Autoregressive Model的一次到位的结果通常不好,将其改为N个step。
- 每次Denoise的步骤相当于Autoregressive的一个step,在做Autoregressive时每个step需要添加一点噪声,即一点随机性结果才会好,也许在Denoise时也加一点噪声,随机性会好。

- 通过验证这种说法,当
与原文设定相同时,同样的
可以正常生成影像。
- 当
时,就无法生成正常影像。
相关文章:
[DL]深度学习_扩散模型
扩散模型原理 深入浅出扩散模型 一、概念简介 1、Denoising Diffusion Probalistic Models,DDPM 1.1 扩散模型运行原理 首先sample一个都是噪声的图片向量,这个向量的shape和要生成的图像大小相同。通过Denoise过程来一步一步有规律的滤去噪声。Den…...
AI学习记录 - 如何快速构造一个简单的token词汇表
创作不易,有用的话点个赞 先直接贴代码,我们再慢慢分析,代码来自openai的图像分类模型的一小段 def bytes_to_unicode():"""Returns list of utf-8 byte and a corresponding list of unicode strings.The reversible bpe c…...
JAVA中的数组流ByteArrayOutputStream
Java 中的 ByteArrayOutputStream 是一个字节数组输出流,它允许应用程序以字节的形式写入数据到一个字节数组缓冲区中。以下是对 ByteArrayOutputStream 的详细介绍,包括其构造方法、方法、使用示例以及运行结果。 一、ByteArrayOutputStream 概述 Byt…...
S3C2440中断处理
一、中断处理机制概述 中断是CPU在执行程序过程中,遇到急需处理的事件时,暂时停止当前程序的执行,转而执行处理该事件的中断服务程序,并在处理完毕后返回原程序继续执行的过程。S3C2440提供了丰富的中断源,包括内部中…...
《数据分析与知识发现》
《数据分析与知识发现》介绍 1 期刊定位 《数据分析与知识发现》(Data Analysis and Knowledge Discovery)是由中国科学院主管、中国科学院文献情报中心主办的学术性专业期刊。期刊创刊于2017年,由《现代图书情报技术》(1985-20…...
IaaS,PaaS,aPaaS,SaaS,FaaS,如何区分?
IaaS, PaaS,SaaS,aPaaS 还有一种 FaaS ,这几个都是云服务中常见的 5 大类型: IaaS:基础架构即服务,Infrastructure as a Service PaaS:平台即服务,Platform as a Service aPaaS&…...
软件测试工具分享
要想在测试中旗开得胜,趁手的“武器”那是相当重要(说人话,要保证测试质量和效率,测试工具也很重要)。现在,小酋打算亮一亮自己的武器库,希望不要闪瞎你的眼(天上在打雷,…...
word翻译工具有哪些?5个工具助你快速翻译Word文件
无论是商业沟通还是文化交流,都需要跨越语言障碍。而文档翻译则是这一过程中的重要环节之一。 想象一下,当你需要将一份重要的Word文档从一种语言翻译成另一种语言时,如果手动逐句翻译不仅耗时耗力,还可能因为文化差异导致误解。…...
【51单片机】ds18b20驱动,11.0592MHZ,使用DS18b20
文章目录 ds18b20.h #include <reg52.h> #include <intrins.h> #include <math.h>// 管脚定义 sbit DS18B20_DATA_PIN = P1 ^ 0; // DS18B20数据口定义/******************************************************************************* * 函 数 名 …...
Vue 导航条+滑块效果
目录 前言代码效果展示导航实现代码导航实现代码导航应用代码前言 总结一个最近开发的需求。设计稿里面有一个置顶的导航条,要求在激活的项目下面展示个下划线。我最先开始尝试的是使用 after 的伪类选择器,直接效果一样,但是展示的时候就会闪现变化,感觉不够自然,参考了一…...
Android:使用Gson常见问题(包含解决将Long型转化为科学计数法的问题)
一、解决将Long型转化为科学计数法的问题 1.1 场景 将一个对象转为Map类型时,调用Gson.fromJson发现,原来对象中的long类型的personId字段,被解析成了科学计数法,导致请求接口失败,报参数错误。 解决结果图 1.2、Exa…...
【Win开发环境搭建】Redis与可视化工具详细安装与配置过程
🎯导读:本文档提供了Redis的简介、安装指南、配置教程及常见操作方法。包括了安装包的选择与配置环境变量的过程,详细说明了如何通过修改配置文件来设置密码和端口等内容。同时,文档还介绍了如何使用命令行工具连接Redisÿ…...
Compose知识分享
前言 “Jetpack Compose 是一个适用于 Android 的新式声明性界面工具包。Compose 提供声明性 API,让您可在不以命令方式改变前端视图的情况下呈现应用界面,从而使编写和维护应用界面变得更加容易。” 以上是Compose官网中对于Compose这套全新的Androi…...
python-study-day5
urllib中handler的使用 import urllib.request url "http://www.baidu.com" headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0 } # 请求地址的定制 reques…...
Telegram mini app 本地开发配置
前言: 为了能在telegram里本地调试mini app,参考了网上很多方案,踩了不少坑。最后整了一个适合自己的方案,记录一下。 这个方案一定不是最好的,不过是目前适合我上手开发的方案了。 本文章适合需要在 telegram 本地…...
python发票查验接口助您拒绝做糊涂账、发票ocr
发票识别发票查验接口让发票真假立现。仅需一键上传发票图片,即可实现发票真伪的秒速、批量验证,操作简单方便,避免因人工核验失误所导致“错账”现象的发生,减轻财务工作负担,提升企业工作效率,降低因假票…...
【Linux】线程控制|POSIX线程库|多线程创建|线程终止|等待|线程分离|线程空间布局
目录 编辑 POSIX线程库 多线程创建 独立栈结构 获取线程ID pthread_self 线程终止 return终止线程 pthread_exit pthread_cancel 线程等待 退出码问题 线程分离 测试 线程ID及地址空间布局 编辑 POSIX线程库 pthread线程库是 POSIX线程库的一部分…...
JimuReport 积木报表 v1.8.0 版本发布,开源可视化报表
项目介绍 一款免费的数据可视化报表工具,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完…...
性能优化理论篇 | swap area是个什么东西
我们知道每台计算机的内存(RAM)都是有限的,而我们的应用程序需要加载到内存才能被运行,如果一台机器运行多个应用程序时,内存可能会耗尽。Linux 系统中的“交换空间(也称为交换分区)”可以帮助缓…...
Photoshop (PS)下载安装win/mac版
目录 一、概述 下载 二、安装步骤 三、使用教程 四、快捷键汇总 一、概述 Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件。它主要处理以像素所构成的数字图像,涵盖了诸多领域,如图像编辑、图像合成…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
