【同步智客】

同步智客

【代理加盟】

代理加盟

【综合商城】

软件商城

【微商必备】

微商必备

【营销必备】

营销必备

【知识付费】

知识付费

【代理项目落地训练营】

项目落地训练营

深入理解变分自动编码器(VAE):人工智能绘画的基石 (深刻把握了变与不变)

suetone 2024-04-04 3浏览 0评论

引言

变分自动编码器(VAE)是一种强大的神经网络模型,它在人工智能绘画和其他生成任务中发挥着至关重要的作用。VAE 利用了概率推理的强大原理,可以在高维数据中发现隐含的表示,并用于生成逼真的新样本。

VAE 的工作原理

VAE 的工作原理可以分为两个阶段:编码和解码。

编码阶段

编码器网络将输入数据(例如图像)转换为一组参数,这些参数定义了一个概率分布。该概率分布捕获了输入数据的变异性和不变性。变异性是指输入数据中的噪声或随机性,而不变性是指输入数据中不变的特征。

解码阶段

解码器网络将编码器产生的概率分布作为输入。解码器网络从该概率分布中采样一个向量,并用采样后的向量生成新数据。新数据与输入数据具有相似的分布,但它可能包含一些变异性。

VAE 的优势

VAE 具有以下优势:生成逼真的数据:VAE 可以生成与训练数据相似的逼真的新数据。捕捉数据分布:VAE 能够捕获数据分布的变异性和不变性。降维:VAE 可以将高维数据编码为一组低维参数。表示学习:VAE 学习的潜在表示可以用于其他任务,例如聚类和分类。

VAE 在人工智能绘画中的应用

VAE 在人工智能绘画中发挥着至关重要的作用。它可以用于:生成新图像:VAE 可以从噪声数据生成新的图像,这些图像与训练数据具有相似的风格和内容。编辑图像:VAE 可以通过修改潜在表示来编辑图像,从而改变图像的风格或内容。图像风格迁移:VAE 可以将一种图像的风格转移到另一种图像中。超分辨率:VAE 可以通过增加潜在表示的维度来生成更高分辨率的图像。

VAE 的局限性

尽管 VAE 具有许多优势,但它也有一些局限性:训练困难:VAE 的训练过程可能很复杂,并需要大量的训练数据。模式崩溃:VAE 可能会生成过于相似的图像,从而导致模式崩溃。生成质量:生成图像的质量可能因训练数据和超参数的选择而异。

结论

变分自动编码器(VAE)是一种强大的神经网络模型,它在人工智能绘画和其他生成任务中具有广泛的应用。VAE 利用概率推理的原理,可以发现数据中的变异性和不变性,并用于生成逼真的新样本。尽管 VAE 有其局限性,但它仍然是人工智能绘画领域的一个强大工具。

进一步阅读

[变分自动编码器简介](变分自动编码器教程](变分自动编码器在人工智能绘画中的应用](

变分自编码器的目的是什么

学习数据的隐含表示、编码和解码过程、优化目标、无监督学习。 1、学习数据的隐含表示:VAE假设存在一个可以生成观察到数据的隐含变量,并通过学习这个隐含变量的分布来生成新的数据。 2、编码和解码过程:编码器部分的作用是学习输入数据到隐含空间的映射,即将输入数据压缩为一个潜在空间中的点,这个点的坐标由潜在向量表示。 解码器部分的作用是学习从隐含空间到输入数据的反向映射,即从编码器产生的潜在向量中采样,然后试图将这个采样点恢复为原始的输入数据。 3、优化目标:VAE的优化目标包括两部分:重构损失,即解码的数据与原始输入数据的差异;KL散度损失,即编码器得到的潜在变量分布与事先假设的分布(比如标准正态分布)的差异。 4、无监督学习:VAE属于自监督学习,它可以从无标注数据中学习到数据的分布,这对于获取数据对应的标签信息比较困难的情况尤为重要。 通过以上步骤,VAE能够对数据进行概率建模,生成与训练数据类似的新数据,并在训练过程中不断优化模型参数,以达到更好的性能。

综述:广义的分布外检测(异常检测、开集识别、OOD检测)

Generalized Out-of-Distribution Detection: A Survey Jingkang Yang, Kaiyang Zhou, Yixuan Li, and Ziwei Liu分布外(Out-Of-Distribution,OOD)检测对确保机器学习系统的可靠性和安全性至关重要。例如,在自动驾驶中,当遇到它从未见过、无法给出安全决策的非常规情形或物体,我们需要驾驶系统发出警告并且将控制权交给人类。自2017年被提出起,这个问题越来越受研究者关注,各种解决方案层出不穷,大致包括:基于分类的、基于密度的、基于重构的、基于距离的方法。与此同时,其他几个问题在动机和方法上与分布外检测紧密相关,这些问题包括:异常检测(Anomaly Detection,AD)、新类检测(Novelty Detection)、开集识别(Open Set Recognition,OSR)和离群检测(Outlier Detection,OD)。尽管他们各自定义和问题设定不同,这些问题经常使读者和实践者感到困惑,这导致有些现有工作误用了这些术语。实际上,AD、ND、OSR、OOD、OD这五个问题能够统一在广义的分布外检测框架下,都可以视作分布外检测的特例或子任务,并且能够轻易地被区分。这篇综述通过总结最新的技术发展对这五个问题做了深入的回顾,并以该领域的开放挑战和潜在的研究方向作结。

可信的视觉识别系统不仅仅在已知的情境下能给出精确预测,还应该能检测到未知的样本并且丢弃或将它们交给用户来做安全地处理。

比如,一个训练良好的食物分类器应该丢弃像用户自拍照之类的非食物图片,而不是胡乱判定其属于某已知的食物类别。在安全要求极高的应用中,比如无人驾驶,系统应该在它碰到不寻常的、未在训练中见到的情形或物体时发出警告并将控制权交给司机。

大多数现有机器学习模型都基于封闭世界假设(the closed-world assumption)来训练,即测试集和训练集独立同分布,或者说两者来源于同一分布(in-distribution)。然而,当模型被部署在开放世界场景(open-world scenario)中,测试样本的分布可以是取自不同于训练集分布的分布的(out of distribution),因而需要被谨慎处理。分布的变化可能是语义漂移(比如,OOD样本取自别的类别)、协变量漂移(也称输入漂移,比如OOD样本取自其他领域??)。

只考虑语义漂移和协变量漂移两类漂移。

异常检测目的在于在测试阶段检测异常的样本,“异常”指的是偏离预定义的“正常”。这种偏离可能是协变量漂移或是语义漂移导致的。异常检测可以分为两个子任务:

与异常检测的区别 :1) 动机上,新类检测中并不像异常检测把没见过的“新”样本看做错误的或是有害的,而是将珍视这些新样本为后续模型的学习资源;2)新类检测首要关注的是语义漂移;3)新类检测中,没有限制ID样本属于单个类,在训练集中可以有多个类别的样本。

新类检测目的在于检测出不属于任何训练类别的测试样本。检测到的新奇样本通常预备用于未来程序的构建,比如特异性更强的分析、当前模型的增量学习等。依据训练类别数量的差异,新类检测分为:

OSR需要一个多类别分类器来同时1)精确地分类 训练类别的 测试样本(ID);2)识别出测试样本中 不属于训练类别 的样本(OOD)。

OSR = multi-class ND

需要模型拒绝标签迁移的样本以保证预测可靠性和安全性

分布外检测目的在于检测测试样本

当某个样本显著区别于其他的样本时,认为它是“离群”的。在异常检测、新类检测、开集识别、分布外检测的问题设定中,都存在这训练-测试的流程,要挑出测试中出现的不属于训练分布的样本。

而离群检测无“训练分布”、“测试分布”,而是直接挑出所有可见样本中显著区别于其他的那些样本。

给定同构的ID数据,最直接的方法是1)基于密度的方法,这些方法估计ID的密度,拒绝那些偏离估计的OOD的测试样本。其他的方法包括:2)依靠图片重构的质量来识别异常样本,3)直接学习一个决策边界来区分ID和OOD样本,4)基于距离的方法,5)基于元学习的方法

基于密度的方法尝试去建模正常数据(ID数据)的分布,这种做法基于一个实践假设:异常的测试样本在估计的密度模型下游较低的概率值,而正常样本概率值较高。

参数密度估计假设ID样本的密度能够被表示为某种定义好的分布。一种方法是在训练数据上拟合一个多变量高斯分布,并且度量测试样本与训练样本的期望之间的马氏距离(协方差距离,计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系)。其他的工作采用了更复杂的假设,认为训练分布是混合的高斯分布或是泊松分布等。

非参数密度估计考虑了更贴合实际的情形:预定义的分布不能够建模真实分布。可以简单地用直方图对训练分布进行建模。核密度估计(KDE)进一步使用核函数作为离散直方图的连续替代版,它可以灵活地使用点权重和带宽去控制估计的分布。

虽然经典的密度估计方法在很多任务上获得了很好的AD性能,但它们更适合低维任务。 对于计算机视觉任务中的高维数据,这些方法的计算性和可伸缩性受到影响。为缓解维数灾难,有些方法通过特征工程降维[277],[278]。

通过由潜在嵌入重建出输入,自编码器能学到无标签数据的高效表达。变分自编码器将输入的图片编码为服从高斯分布的潜在向量。习得的潜在嵌入可被视为输入的低维表示。传统密度估计方法可以应用在这些深度表示之上。

生成对抗网络由一个生成网络和一个判别网络构成,两者在零和博弈中相互竞争。典型地,生成网络学习从潜在空间到所研究数据分布的映射,而判别网络试图分辨生成器生成的数据和真实数据。然而,不同于基于自编码器/变分自编码器的范式,少了一个编码器使得GAN难以直接为一张输入图片找到相应的嵌入。针对这个问题,ADGAN [90] 对一个给定的样本,在潜在空间搜索一个好的表示。如果找不到这样的表示,这个样本被认为是异常的。该方法计算代价极高。

规范化的流描述了一个概率分布经过一系列可逆映射的转化过程。通过重复施加变量变化的规则,初始的密度“流”过了一系列可逆映射。因此,使用规范化的流的方法能够直接估计输入空间的可能性。基于流的方法有优雅的数学表示,但是它们同样仅对低维特征敏感。若不进行降维,基于流的方法计算代价高。

除通过生成式模型获取可视化嵌入外,一些方法主要通过扩充模型容量来增加提取到的特征的表示能力,这或许可以让正常(ID)能被更精确地特征化为密度估计。这些策略包括数据增强,对抗训练,蒸馏,损失函数增强,使用浅表/局部特征。

基于能量的方法使用一个标量能量评分来表述变量概率密度,这个标量采用非标准化的负对数概率,

然而,和标准的深度学习模型相比,训练基于能量的方法代价昂贵,因为马尔可夫链蒙特卡罗法(MCMC,在概率空间,通过随机采样估算兴趣参数的后验分布)采样和估计需要积分运算。

为解决这个难题,研究者提出了评分匹配方法和随机梯度之类的方法来支持高效训练。

现有工作也探索了使用频域分析方法做异常检测。人类通过图片的低频信息来理解图片,而CNN更多依赖高频信息来做决策。人们提出了CNN核平滑和谱引导的数据增强之类的方法去抑制高频分量的影响。还有一些工作发现,对低频分量的对抗攻击也很难被检测到,因此提出

基于频率的方法专注于感官异常检测(尤其是检测对抗样本),或许不适用于语义异常检测。

基于重构的方法的核心在于在ID数据上训练得到的编解码器(encoder-decoder)框架通常对ID和OOD样本返回不同的效果。

模型表现的差异可以被用作异常检测的指标。模型表现的差异可以用特征空间的差异或是重构误差来度量。

系数重构假定每个正常样本都能被有限个基础函数精确重构,而异常数据的重构开销则更大,因此生成了稠密表示。稀疏表示的典型技巧包括基于L1正则的核PCA和低阶嵌入网络。

重构误差方法依赖于以下假设:在正常数据上训练得到的重构模型在输入为正常测试样本时会输出更高质量的结果。深度重构模型(包括自编码器AE、变分自编码器VAE、生成对抗网络GAN和U-Net等)都能够被用作这类方法的backbone。

除去这种结合AE/VAE和重构误差这种标准做法,其他方法使用了更加精细的策略,比如通过memorized normality重构,调整模型架构、部分/有条件的重构。

在半监督设定下的异常检测中,CoRA分别在ID样本和OOD样本上训练,得到两个自编码器。这两个自编码器的重构误差被用作异常检测的指标。

GAN中的判别器本质上是 通过计算重构误差 实现异常检测。更进一步,GAN的变种,比如去噪声的GAN和类别-条件GAN通过 增加重构难度 获得了更好的性能。有些方法 利用重构图片在下游任务中的表现来进一步放大异常样本的重构误差 。集成也能够优化模型性能。

异常检测、单类别的新类检测通常被形式化为无监督学习问题,将所有的ID样本看做一类。

【283】做了完全有监督的异常检测

半监督的异常检测中,模型训练时用到了无标签数据。

PU学习针对这个问题被提出

自监督方法3.3.3

单个类别分类直接学到一个决策边界

未完成

共性:ID样本的类别(训练类别)为多个。

差异:开集识别还需要精确地给ID样本分类,而新类检测只需得到区分ID/OOD的二分类器。

由于开集识别和多类别新类检测的训练类别为多个,大多数方法都是基于分类的。其余方法包括基于ID原型的以及基于重构的。极少数模型是基于密度的。

为了解决

开集识别和多类新类检测都关注ID样本包含多个类别的情形。分类问题中,一般采用独热编码来编码类别信息。然而,独热编码忽略了类别间的内在联系。举例来说,“狗”-“猫”,“狗”-“车”之间有相同的距离显然不合情理。有些工作考虑这一点,尝试利用新类的标签空间上的信息来解决这个新类检测问题。重分配大的语义空间,形成已知类别的层次化分类

基于标签组织重设,自上而下的分类策略和分组softmax训练被证实有效。应一组工作使用词向量嵌入来自动地构建标签空间。【169】中稀疏独热标签被几组产生自不同NLP模型的稠密词向量替代,形成了多个回归头来做鲁棒的训练。

测试时,标签(同所有不同头给出的嵌入向量距离最小的标签被作为预测结果输出,

如果这个最小距离超出阈值,这个样本被分类为“新”。近期工作进一步采用语言-图片预训练模型输出的特征来更好地检测新类,图片编码空间中也包含来自标签空间的丰富特征。)

基于距离的开集识别方法需要“原型”来实现class-conditional。维持ID样本的分类性能。

基于类别的聚类和原型(prototyping)操作在分类器提取到的视觉特征上进行。

OOD样本能够通过计算样本与聚类之间的距离而被识别。

有些方法还引入了对比学习来为已知类别学到更加紧密的聚类,从而拉远ID和OOD样本之间的距离。

CROSR【177】通过拼接分类器和用于距离计算的重构模型给出的可视化嵌入来在拓展的特征空间中得到强化的特征。除了使用分类器给出的特征,GMVAE【178】使用重构VAE来提取特征,将训练集的嵌入建模为一个多中心的混合高斯分布以便后续基于距离的操作。使用最近邻的分类器也适用于开集识别问题。通过存储训练样本,最近邻距离比值被用于在测试中识别未知样本。

基于重构的方法希望ID和OOD样本被重构时表现不同。这种差异能够在潜在特征空间或重构图片的像素空间中被捕捉到。

通过将已知类别的图片转化为稀疏表示,开集样本由于相对稠密能被识别出。用于稀疏编码的技巧包括:疏密指数(sparsity concentration index)【180】和核虚空间方法(kernel null space method)【181,182】。

通过固定在ID样本训练得到的多分类视觉编码器来维持在ID样本上的分类性能,C2AE训练一个以表情按向量为条件的解码器,使用极值理论估计重构后的图片来区分未知类别。后续的工作使用条件高斯分布,使得不同潜在特征逼近类内(class-wise)高斯模型,以达到在分类已知类别样本的同时能拒绝未知类别样本。其他方法生成反事实(counterfactual)图片来帮助模型更关注语义。对抗防御【186】也以这种思路去增强模型鲁棒性。

后处理检测的方法优点在于无需修改训练程序和目标就可以轻易应用。这一点对现实生产环境中的OOD检测方法很重要。早期的ODIN是一个使用temperature scaling和输入扰动来放大ID/OOD差别的后处理方法。该方法中,一个足够大的temperature有很强的平滑作用,能够将softmax值转换到logit空间(),从而有效区分ID和OOD样本。注意这种方式与信心校准不同,它采用了更温和的T

而校准更关注表达ID样本真实的正确概率

ODIN的评分最大化了ID和OOD样本之间的差异,可能从预测信心的角度看不再有意义。

基于这个见解,近期【189】提出使用能量分值来做OOD检测,该方法不需要超参数并且性能与ODIN相当甚至更好。能量函数将logit输出通过便捷的 logsumexp 运算符映射为标量。能量值相对低的测试样本被认为是ID的,反之为OOD。

【55】进一步提出了联合能量值(JointEnergy score)

为OOD检测定制的基于信心的方法能够通过设计信心估计分支和类别数据增强(结合leaving-out留一策略、对抗训练、更强的数据增强、不确定性建模、利用理想深度的特征)来实现。

特别地,为了增强对协变量偏移的敏感性,一些方法关注神经网络中间层的隐藏表示。泛化的ODIN通过使用DeConf-C作为训练目标来扩展ODIN,选择ID数据上的扰动尺度作为超参。

由于ODIN需要模型训练过程,它未被归类到后处理方法。

为了得到质量更优的隐藏层特征以便进行密度估计,分层的 Mahalanobis距离、 Gram Matrix等技巧被引入。

OOD检测的另一分支利用收集到的OOD样本集(离群样本集),在训练中帮助模型学到ID和OOD的差异。

总的来说,采用离群点暴露的OOD检测能达到明显更优的性能。然而,其性能受给定OOD样本和真实OOD样本间相关性强弱影响明显,如何将OOD由已经暴露的OOD泛化到更广泛的OOD还需进一步探索。

离群点暴露方法依赖于OOD训练数据可获取这一强假设,该条件在实际可能不成立。在OOD数据不可获取时,一些方法尝试去合成OOD样本从而让ID和OOD可区分。现有工作利用GAN来生成OOD训练样本并使模型输出均匀(uniform 正态???)的预测,从而在低密度区域生成边界样本,或者类似地,生成高置信度的OOD样本。

现有的OOD检测方法主要依赖输出或特征空间来给出OOD评分,而忽视了梯度空间的信息。ODIN【188】首次探索了使用梯度信息检测OOD。ODIN使用经过预处理的输入,其预处理为施加由输入梯度得来的细微扰动。ODIN扰动的目标在于增强模型对预测标签的信心从而增加任何给定输入的softmax值。最终,可以找到能使ID和OOD输入的softmax评分差异更大的扰动,从而使得它们更能被区分,使得OOD检测性能更好。ODIN仅隐式地通过扰动来利用梯度。GradNorm则使用梯度向量的范数,从softmax输出和正态概率分布的KL散度反向传播。

贝叶斯模型是一类统计模型,应用贝叶斯法则来推测模型中所有的不确定性。其中,最有代表性的是贝叶斯神经网络,该方法通过马尔可夫链蒙特卡洛方法、拉普拉斯方法、变分推断来构成模型的认知不确定性,从模型的后验分布中采样。它们最明显的缺陷在于预测不精确,计算代价高使得它们难以用于实际。近期工作尝试了几种less principled(理论性较弱??)的近似,包括 MC-dropout [224] 和深度融合 [225],299] 用于更快、更好地估计不确定性。这些方法在OOD不确定性估计上不太有竞争力。更进一步的探索需要在保留贝叶斯原理的优势的同时,采用自然梯度变分推理,从而能够采用实用且可负担的现代深度学习训练。狄利克雷先验网络Dirichlet Prior Network (DPN) 也在OOD检测中被运用,使用对模型不确定性、数据不确定性以及分布不确定性三个不同来源的不确定性进行不确定性建模,出现了一系列工作 [227], [228], [229]。

近期工作推进了更贴近实际应用的大规模OOD检测。研究的两个方向是:将OOD检测扩展到大的语义空间、利用大型的预训练模型。例如,【168】指出,在基于CIFAR benchmark数据得到的方法在语义空间更大的benchmark ImageNet上并不奏效,这强调了在大型真实设定下评估OOD检测的必要性。为解决上述挑战,MOS的关键理念是将大的语义空间解构为有相似概念的更小的群组,这简化了已知和未知数据之间的决策边界。强有力的预训练模型在各种任务、模态都达到了惊人的性能。同期的工作 [171], [230], [231] 证实预训练过的transformer在特定的困难的OOD任务上性能显著改善。

OOD检测领域中,基于密度的方法用一些概率模型显式地建模分布内数据,并将低密度区域的测试数据标记为OOD。即使OOD检测在分布内数据为多类别的情形下和异常检测不同,3.1.2节中的密度估计方法能够通过将分布内数据统一成一个整体而直接适用于OOD检测。当分布内含多个类别时,class-conditional高斯分布能够显式地建模分布内数据,因而分布外样本能够根据输出的预测概率而被识别【207】。基于流的方法 [92], [232], [233], [234]也可被用于概率建模。直接估计OOD概率似乎是一种自然的解决方法,也有一些方法 [235], [236], [237] 通过给OOD样本输出更高的概率预测值来实现OOD检测。【238】尝试使用likelihood ratio来解决这个问题。【239】发现,对输入复杂度,概率值存在明显偏差,提出了一种基于概率值比例的方法来削减输入复杂度的影响。近期的方法转而使用新的评分,例如likelihood regret【240】或是集成多个密度模型【236】。整体上,生成式模型的训练和优化难度几乎是不可接受的,它们的性能也往往落后于基于分类的方法(3.3)

基于距离的方法基本理念在于,测试中OOD样本应当相对远离分布内类别的中心(centroid)或原型(prototype)。【207】使用相对所有类别中心的最小Mahalanobis距离来检测。一个后续工作【241】将图片分为前景和背景,再计算这两个空间间的Mahalanobis距离比例。一些工作使用测试样本特征和类别特征间的余弦相似度来确定OOD样本【242】、【243】。被训练特征的的第一奇异向量一维的子空间

更进一步,其他工作利用了径向基函数核距离(distance with radial basis function kernel)、输入的嵌入向量到类别中心的欧拉距离。

OOD检测领域自出现以来发展迅速,其解决方案从基于分类的、基于密度的、再到基于距离的。在多类别设定下,典型的OOD检测是开集识别问题(第4节),在类别空间Y中精确分类分布内的测试样本,并且丢弃语义不被Y所支持的分布外样本。然而,OOD检测包含了更广泛的学习任务(比如,多标签分类)和解法(比如,密度估计和离群点暴露)。一些方法放宽了开集检测的限制条件,并且达到了更强的性能。

离群检测需要所有样本可见,其目标是检测出那些显著偏离大多数的分布的样本。离群检测方法通常是转导式的,而不是归纳式的。 [13], [14], [15], [16]综述主要回顾了数据挖掘领域的离群检测方法。以下主要回顾离群检测方法,尤其是为计算机视觉设计的使用深度神经网络的方法。即使深度学习方法极少能直接解决离群检测问题,数据清洗程序(从开集脏数据学习的先决条件)和开集半监督学习的方法也在解决离群检测问题。

离群检测模型的基本理念是将整个数据集建模为一个高斯分布,将偏离均值超过三杯标准差的样本标记为离群【300】【301】。其他带参数的概率方法利用Mahalanobis距离[266] 和高斯混合模型 [302]来建模数据密度。和“三倍标准偏离”规则类似,四分位距也可通过构建传统的无参数概率模型来检测离群样本【247】。为了鲁棒和简化,局部离群因子(local outlier factor)方法【248】借助给定点的邻居和它自身局部可达性的比值,去估计给定点的密度。RANSAC【252】迭代地估计数学模型的参数来拟合数据并且找到对估计贡献较少的样本作为离群点。

总体上,经典的异常检测的密度方法比如,核密度估计(3.1节),也可应用于离群检测。即便这些方法由于图片数据维度太高而应用困难,也可以通过降维方法【253,254】和基于最近邻的密度方法(3.1节)来缓解。

检测离群的一个简易方法是计数某特定半径内的邻居数量,或者度量第k近邻居的距离【303,304】。以下主要介绍基于聚类的方法和基于图的方法。

DBSCAN【255】依照基于距离的密度来积聚样本构成聚类。处在主要聚类之外的样本被识别为离群样本。后续工作通过考虑聚类标签的信心改良了聚类的方式【256】。

另一类方法利用数据点之间的关系,并构造邻域图[305], [306](或其变体[307]),利用图的属性和图挖掘技巧来找到异常的样本【257,258】,比如图聚类[259], [260]、图分割【308】、使用图神经网络的标签传播【261】。

StableDiffusion教程AI绘画原理

Stable DIffusion原理卜原理

让每个人都看懂

AI绘画基本原理

01Stable Diffusion原理介绍

1.什么是扩散?

首先, 大家要明确(Stable Diffusion) 是一个算法, 我们说的StableD if uusi on webUI是基于这个算法的一个工具。

我们不妨先来学习一下英语:Stable Diffusion中的Stable是稳定的(adj.) , Diffusion是扩散(n.) , 所以Stable

Diffusion的简单理解就是一种稳定的扩散的算法。

在图像领域中,扩散算法是通过一定规则去噪(反向扩散)或加噪(正向扩散)的过程。

如下图展示的就是以prompt为**a red flower**做扩散的过程,从最开始的灰色噪点块、逐渐去噪到最终的清晰的过程:

2.扩散(Diffusion) 是怎么能被稳定(Stable) 控制的?

我们以文生图为例, 给大家看一下Stable Diffusion的原理:

这里的过程, 大家可以把它抽象理解为一个大函数Fsd

(prompt) , 即:我们输入一段自然语义prompt, 经过一系列函数运算和变化,最终输出一张图的过程。

:我们输入的文字prompt是如何起作用的?

我们先来看第一个部分,我们输入了一段咒语,这段咒语是如何起作用的?

让我们咒语起作用的是一段叫做CLIP的算法, CLIP是Text

Encoder算法的一种, Text Encoder大家从字面意思也能够理解,是把文字转化为代码的一种算法,他的主要功能是把自然

深入理解变分自动编码器(VAE):人工智能绘画的基石 (深刻把握了变与不变) 第1张

语义prompt转变为词特性向量(Embedding) 。

如下图所示, 我们举个例子, 比如我们输入了一个prompt:**可爱的女孩**, CLIP算法作自然语义处理的时候会根据之前被程序员调教的经验,大概感知到可爱的女孩可能具有哪些特征?

比如他们可能有”大大圆圆的眼睛“,可能有”白皙的肌肤“,可能有”可爱的神态“等等,然后这些可能得特征被转化为77个等长的token词向量(每个向量包含768个维度) , 这就是我们说的Embedding。

这里需要注意的是, UNET去噪的时候, 原理比上图描述的复杂很多,它其实并不是一步一步去噪就能得到对应效果的,如果仅仅是一步一步的去噪,效果往往很差,并不能精确得到描述文本的图片。

所以在这里我会稍微讲得深入一些, 介绍一下Classifier Free Guidance引导方法:

为了保证我们的prompt最终的精确性, 在UNET分步去噪的时候,比如我设置的去噪步长为20,他会在每一步都生成一个有prompt特征引导的图和一个没有prompt特征引导的图, 然后把两者相减,就得到了每一个去噪步骤中单纯由文字引导的特征信号,然后将这个特征信号大很多倍,这就加强了文本引导。

同时,在第N+1步去噪结束后,它还会用第N+1步去噪的信息特征减去第N部的特征,然后继续方法很多倍,这样保证

prompt在每一步都能有足够权重比参与运算。

上面那一段大家看不懂也没关系,用通俗的大白话来说,就是这个方法加强了prompt的权重。这个方法在Stable Diffusion webUI中被直译为提示词相关性, 是一个常用参数, 他的数值决定了生成的图与提示词的相关程度。

讲到这里你们会说,诶,不对啊,你看同样是关键词,你的为啥就这么好看,我的生成出来就很丑?那是因为,当我们输入同一个prompt, 我们的text encoder过程是一样, 也就是你得到的词向量是一致的,但是后面的去噪算法依赖模型不同,生成的效果千差万别。

那么接下来我们来讲一下SD里最重要的UNET算法。

:扩散模型的工作原理

UNET他是一种根据词向量的扩散算法, 他的工作原理如下图所示, 在上面说到的Clip算法会根据我们输入的prompt输出对应机器能识别的词向量(Embedding) , 这个Embedding大家也只需要粗浅理解为他是一个函数,包含(Q、K、V)三个参数就好了。

这三个参数会根据我们输入的对应扩散步长, 作用于UNET去噪算法的每一步,比如下图中,我设置了去噪步长为20步,大家能看到这张图逐渐扩散生成的效果。

说完了文生图, 我们大概也说一下图生图, 咱们在使用Stable Diffusion webUI的时候用图生图的功能, 往往是给一张图,然后再输入一段prompt, 比如我们还是设置扩散步数N=20,这时候,它的原理是先把我们提供的图进行逐步加噪,逐步提取图片信息, 使它变成一张完全的噪点图, 再让prompt起作用, 结合上面的UNET算法逐步去噪, 得到既有素材图片特征也有prompt特征的最终效果图。

5.理解VAE的编解码过程

最后我们简单来理解一下CAE编解码的过程, VAE全称变分自编码器,这里大家不需要做太多理解,只需要知道他是一个先压缩后解压的算法就好了。

需要注意的是, 我们上面写的UNET算法不是直接在图片上进行的,而是在”负空间“进行的,大家理解为在代码层面即可。

VAE他的原理如下图所示, 假如我们要生成的图是512x 512的,VAE算法在一开始的时候, 会把它压缩到八分之一, 变成

64x 64, 然后走UNET算法的时候, 会把图形数据带在噪点图中, 这个过程叫Encoder, 然后再走完UNET算法后, 我们得到了一个带有所有图片特征的噪点图, 此时VAE再进行

Decoder过程, 把这张图解析并放大成512x 512, 知道到这里即可,不要深究。

1.机器是如何认识图片的?

首先,我们先来看看机器是如何认识图片的。相信大家都听说过,最初计算机视觉训练认识物体的时候,采用的是成对训练的方法,通过“图”+“对应描述”成对训练。运用图像识别、自然语义处理与卷积神经网络等一系列技术让计算机能够识别这个图形。

如上图所示,我们不停的给计算机喂成千上亿张狗的图,然后告诉他,你看这是狗,这也是狗,这还是狗,然后机器会不断归纳狗的特征,重复学习亿遍后,它就认识狗了。

2.可供调用的模型是如何训练的?

好了,假设这时候,机器已经能识别万物了,这时候机器由于学习的图片风格都不同,生成的图片有可能不满足我们的期望,举个例子:

假设程序员经过十年的努力后,让机器正确认识了小女孩的特征,不会出现三个眼睛两个嘴巴。

当我们输入一个**acute girl**, 生成的是图A, 这时候假如A 的风格与我们想要的完全不同,比如我们想要的是B这种,这时候程序员们就会不断调整函数中的各种算法和参数,使得产出的图形A无限接近图像B, 然后停止训练, 此时整个Fsd(x)函数的所有调整的参数, 就被保存为一个 pt的文件, 这个叫checkpoint的文件就是程序员训练好的可供调用的A I绘图大模型,他能保证我们每次生成的图偏向于某种特征集合。

整个过程如下图所示:

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

深入理解变分自动编码器(VAE):人工智能绘画的基石 (深刻把握了变与不变) 第2张
发表评论
欢迎你第一次访问网站!