了解扩散概率模型 (DPM)

news2024/11/16 9:42:47

一、介绍

        对复杂的概率分布进行建模是机器学习的核心问题。如果这个问题可以出现在不同的形状下,最常见的设置之一如下:给定仅由一些可用样本描述的复杂概率分布,如何生成新样本?

        所有生成模型都依赖于相同的基本思想,即将简单分布转换为我们感兴趣的复杂分布。换句话说,假设随机变量 X 服从简单分布(例如高斯分布),我们正在寻找一个函数 G,使得 G(X) 服从我们的目标分布。当然,函数 G 非常复杂,不能显式给出。一种可能的方法是使用将从可用数据中学习的神经网络对 G 进行建模。然后,我们讨论深度学习生成模型,如VAE,GAN或DPM,它们都依赖于不同的机制来定义和训练这个建模G的生成网络。

        生成模型旨在学习一个函数,该函数从简单分布中获取数据并将其转换为来自复杂分布的数据。

        早在2013年,Kingma和Welling就推出了变分自动编码器(VAE)。简而言之,VAE的想法是训练具有正则化潜在空间的自动编码器。然后,正则化编码器被迫将数据编码为接近高斯的分布,而解码器则从潜在空间重建数据。这样做,我们最终得到一个可以作为函数 G 的解码器,从高斯分布中获取数据并从原始分布中生成新数据。更多细节可以在我们之前关于VAE的文章中找到。

        一年后的2014年,Ian Goodfellow推出了生成对抗网络(GAN)。简而言之,这个想法是假设如果生成网络 G 从目标分布中生成样本,那么这些样本应该与真正的可用样本无法区分。因此,可以推导出GAN所依赖的对抗性训练的概念。生成网络 G 被训练为接受随机输入(例如,来自高斯)并从目标分布输出数据。训练判别网络 D 以区分真实数据和生成的数据。两种模型同时训练,并在竞争中变得更好(G试图愚弄D,D试图不被G愚弄)。在这个训练过程中,G 必须始终产生更有说服力的数据来欺骗 D,换句话说,正如预期的那样,遵循目标分布的数据。更多详细信息可以在我们之前关于 GAN 的文章中找到。

        如果深度学习生成模型多年来已经受到了很多关注,那么近年来(甚至几个月)随着一些能够产生出色结果的图像或视频生成模型的提高,它们变得更加暴露。一个接一个,大型科技公司首先发布了图像生成模型(来自Open AI的DALL-E 2,来自Google的Imagen,来自Meta的Make-A-Scene),然后再解决视频生成问题(来自Google的Imagen Video,来自Meta的Make-A-Video)。尽管存在差异,但这些宣布该领域光明未来的伟大模型都依赖于相同的基本概念:扩散概率模型(DPM)。

        Make-A-Scene,Imagen,DALL-E 2是扩散概率模型,能够从文本提示生成高质量的图像。上述示例由 Meta Make-A-Scene 模型生成,该模型从文本提示和基本草图生成图像,以实现更高水平的创意控制。

        扩散概率模型于2015年首次出现在Sohl-Dickstein的一篇论文中,并且由于使用它们所取得的巨大成果而获得了越来越多的关注。基本上,DPM 的想法是学习定义明确的随机过程的反向过程,该过程逐渐破坏信息,从我们的复杂目标分布中获取数据并将它们带到简单的高斯分布中。然后,这种反向过程将采用相反方向的路径,将高斯噪声作为输入并从感兴趣的分布中生成数据。

事不宜迟,让我们一起(重新)发现 DPM!

二、大纲

在本文中,我们将重点介绍深入了解 DPM 由什么组成所需的主要思想。在第一部分中,我们将回顾一些与随机过程相关的概念,并介绍什么是扩散过程。然后,在第二部分,我们将给出理解扩散概率模型的主要直觉。特别是,我们将看到如何使用扩散过程来逐步破坏信息,以及如何学习逆转此过程以逐步从噪声中生成信息。在第三部分中,我们将形式化我们的直觉,并对扩散模型进行数学描述。最后,在最后一节中,我们将在这个理论框架的基础上进行构建,看看扩散模型是如何在实践中训练的。特别是,我们将闭环,看看训练和采样的实际实现如何很好地表达我们给出的第一个直觉。请注意,尽管我们将讨论它们所依赖的许多基本概念,但我们不会详细介绍前面提到的特定模型(Make-A-Scene,Imagen,DALL-E 2等),这些模型将成为以后帖子的主题。

注意:这篇文章的某些部分比其他部分在数学上更密集。如果所有部分都不是完全独立的,我们尽可能让读者跳过某些部分。然后可以跳过介绍扩散过程的部分和给出扩散模型数学定义的部分,因为其他两个部分包含与扩散模型相关的大部分直觉和实际考虑因素。

三、什么是扩散过程?

        顾名思义,扩散概率模型在某种程度上与扩散过程有关。因此,让我们从头开始,看看扩散过程是什么以及它的性质是什么。当然,由于它不是本文的核心主题,因此我们将不得不进行一些简化,以保持足够简短,同时仍然提供基本想法。

        扩散过程是具有连续样品路径的连续时间马尔可夫随机过程。让我们分解这个非常尴尬的定义,以更好地了解我们在说什么。随机过程是随机变量的集合,通常由正整数索引

        然后我们讨论离散时间随机过程,或正实数

        然后我们讨论连续时间随机过程。与称为样本的简单随机变量的实现类似,我们将随机过程的实现称为样本路径或轨迹。对于连续时间随机过程,如果可以随机观察到的所有可能轨迹都是连续的,我们说它具有连续的样本路径。

不同类型的随机过程,在时间和空间上是离散的或连续的。

最后,马尔可夫过程是一个没有记忆的随机过程。这意味着根据现在和过去的过程的未来行为仅取决于现在。过去的信息可以被丢弃,因为它不提供任何其他信息。换句话说,这个过程的未来状态并不取决于我们如何达到现在的状态,而只取决于现在的状态。在数学上,它可以写成

任何扩散过程都可以用随机微分方程(SDE)来描述,该方程以以下形式编写

其中a称为漂移系数,σ称为扩散系数,W为维纳过程。维纳过程更广为人知的是布朗运动。粗略地说,与维纳过程相关的总和的正确部分是使这个微分方程“随机”的原因。如果没有这第二项,我们将处理一个简单的微分方程。维纳过程带来了一些具有独立高斯增量的(连续)随机性,使得

如果我们稍微离散微分方程以使事情更容易掌握,我们得到

也可以写

然后我们可以看到 X_{t+dt} 的值是X_t的值,我们在其中添加一个确定性漂移项和一个随机扩散项,该值由正态随机变量定义,方差与扩散系数的平方成正比。因此,扩散系数表示要应用的随机性的强度。

扩散处理不同随机微分方程和相关(非随机)微分方程的样本。我们可以看到,漂移项给出了趋势,而扩散项带来了一些随机性。扩散系数越高,随机性越大。

最后,让我们以扩散过程的一个有趣属性来结束,这将在本文后面有用。如果X_t是一个扩散过程,使得

则逆时间过程 X̄_t = X_{T-t} 也是具有相同泛函形式的扩散过程,由以下随机微分方程描述

其中 p(X_t) 定义了X_t和

称为评分函数。

四、扩散模型的直觉

        通过一些精心选择的系数,扩散过程具有逐渐破坏任何相关信息的效果。实际上,具有“收缩”漂移系数 (|a|<1) 和非零扩散系数的扩散将逐渐将数据从任何复分布转换为来自简单各向同性高斯噪声(高斯,其协方差矩阵为对角线,这意味着所有维度都是独立的高斯)的数据。让我们首先用一个简单的一维示例来说明这一点。

        扩散过程具有逐渐破坏信息的效果。在此一维示例中,任何初始分布都将转换为高斯分布(渐近)。

        在这个一维示例中,我们将“离散扩散过程”定义为

        我们说,对于任何X_0,这个过程最终都会趋向于高斯分布。让我们对这一事实进行非正式演示,这也将证明我们系数中的这些平方根是合理的。在给定的步骤 T 之后,我们可以写

        其中所有高斯都是独立的,这意味着第二项可以表示为单个高斯,其方差是所有方差的总和。对于足够大的步骤 T 的许多,我们有

        我们看到第一项变得可以忽略不计,方差之和收敛于 1,这意味着对于任何起点,我们倾向于在一维示例中的标准高斯分布。

        当然,同样的想法可以应用于更高的维度。例如,大小为 100*100 的图像分布是一个非常复杂的高维分布,可以逐渐转换为相同维数的非常简单分布:100*100 各向同性噪声。在这种情况下,扩散过程将以类似于我们在 1D 示例中描述的方式起作用,但它将针对每个像素的每个 RGB 通道执行此操作。

        扩散过程可以定义为将图像等高维数据转换为各向同性高斯噪声。

        到目前为止,我们知道我们可以使用扩散从复分布到简单的各向同性高斯噪声。从本文开头讨论的内容来看,我们可以概述我们对反向过程更感兴趣:从简单分布到复杂分布。最重要的是,从复分布到简单分布并不难,因为我们可以简单地将复分布的任何点随机投影到简单分布中,因为我们知道如何从最后一个点中采样。

        那么在这里使用扩散的真正意义是什么?简单的答案是,它为我们提供了一种渐进的结构化方法,可以从复分布到各向同性高斯噪声,这将简化反向过程的学习。让我们对最后一点有一个直觉。

        正如我们提到的,将任何给定的图像随机投影到各向同性高斯噪声中非常容易。相反,逆转这个过程是非常困难的:看着一些给定的噪声,我们不能从先前的图像中说太多,因为没有结构可以依赖。

一次从纯噪声到高质量样品可能是一项相当复杂的任务。

        现在让我们假设这些图像中的每一个都不是直接的,而是通过扩散过程逐渐投影到各向同性高斯噪声的。看着最后一步,基本上是我们之前得到的噪音,我们仍然不能说太多。然而,从中间步骤来看,我们显然有一些线索可以指导我们逆转这个过程。

从纯噪声到高质量样本逐渐出现中间步骤,我们可以依靠这些步骤来简化生成任务。

        这里重要的一点是:中间步骤是强度扩散模型所依赖的。在这一点上,人们确实可以观察到,尽管扩散过程是逐步完成的,但扩散过程最终会从初始复分布中获取任何数据点,并将其从简单分布中转换为随机点。所以,最后,既然我们可以一次性从复杂到简单分布,为什么还要为中间步骤而烦恼呢?与其学习多步反向过程,为什么不学习一个大的反向过程,即多步骤过程的展开版本?我们甚至不能认为它会完全相同吗?

        乍一看,人们可能会认为学习T小模型或单个大模型是这些小模型的组合是非常相似的。

        如果有人想坚持这种推理,事实是,将过程分解为中间步骤会带来两件事。首先,所有反向步骤彼此之间并不完全不同,这意味着在实践中,我们不必为每个反向步骤学习完全不同的模型,而只需要将步骤作为参数来调整其行为的通用模型。它大大减少了要学习的模型的大小。其次,除了需要学习更多参数之外,一次性展开版本更难训练,因为它需要从纯噪声到最终的高质量数据,这使得任务和梯度下降学习更加复杂。相反,渐进式模型不需要一次处理整个复杂性,并且可以在早期阶段首先引入粗略信息,然后再添加越来越精细的信息。从某种意义上说,中间步骤也可以被视为指导培训过程以使其更容易的一种方式。

        然后,我们可以将扩散模型的主要思想总结如下。我们定义了一个逐渐破坏信息的扩散过程,并学习其期望恢复信息的反向过程。这种反向过程也是渐进的,我们可以依靠这一事实来使其学习更有效率。在实践中,建模和训练确实可以利用要学习的过程的迭代性质,而不能依赖这些有价值的中间步骤的一次性模型。

        渐进式逆向过程的学习可以利用问题的迭代结构,而直接模型则不能。明显的缺点是采样需要多个步骤,因此更长。

        退一步说,我们可以观察到,VAE的总体思路与VAE相去甚远:编码器以结构化的方式将初始复分布转换为简单分布,以便能够学习相反方向的解码器。DPM 和 VAE 之间的主要区别如下。首先,编码器是一个多步骤过程,而不是单步编码器。其次,编码器是完全固定的,不需要学习,因为要学习的解码器(反向过程)将直接依赖于扩散过程带来的结构,而不是依赖于训练过程中学习的结构。第三,潜在空间与输入具有完全相同的维度,与VAE的潜在空间相反,VAE的维度比编码输入低几个数量级。最后,学习的解码器是扩散过程的反向过程,因此是一个多步骤过程,而不是单个传递函数。

        DPM 的明显缺点是采样需要多个步骤,这意味着生成过程将比 GAN 或 VAE 更长,因为这些类型的模型需要一次通过。这一根本差异提出了许多问题。假设参数数量相同,当第一个输出进行多次传递时,将 DPM 输出与 GAN 和 VAE 输出进行比较是否完全公平(因此需要更多时间)?如果DMP的力量来自其生成过程的渐进性,那么尝试馏出DMP有多大意义?我们不会在这里回答这些问题,但它们肯定是值得思考的有趣问题。

五、扩散模型的数学

        现在我们已经建立了直觉,让我们给出一个更正式的 DPM 数学公式。尽管存在扩散模型的连续和离散时间公式,但我们将在这篇文章中重点介绍后面的内容。这意味着我们将假设正向扩散过程和向后反向过程已被离散化为有限数量的T步长。请注意,对于正向和反向过程,用高斯转移概率核而不是扩散过程谈论马尔可夫链更准确,但思路是相同的。

        让我们表示x_0来自我们想要从中采样的分布中的数据,以及分布本身的 q(x_0)。我们用高斯转移概率(扩散核)定义正向过程,如下所示

其中β_t指示每一步要保留的上一步信息与要添加的新噪声之间的权衡。我们也可以写

在这里,我们可以清楚地识别离散扩散过程。我们可以很容易地用一个简单的递归论证来证明,链中的任何步骤x_0都可以根据

哪里

        根据马尔可夫性质,我们可以将给定前进轨迹的概率写为

        我们在上一节中描述过,我们的目标是学习这个正向扩散过程的逆过程,或者更准确地说,这个正向马尔可夫链的逆链。我们之前提到,在漂移和扩散系数的一些假设下(这里满足),扩散过程的逆向也是相同功能形式的扩散过程(具有相同的扩散系数,但我们稍后会回到这一点)。通过足够小的时间步长(大T,意味着小β_t),我们可以对我们正在寻找的反向链进行相同性质的近似,这也应该是具有高斯转移概率的马尔可夫链。相反的过程

        然后可以近似为

        其中 μ_θ 和 Σ_θ 是由 θ 参数化的两个函数。使用马尔可夫性质,给定后向轨迹的概率可以近似为

        其中 p(x_T) 是不依赖于 θ 的各向同性高斯分布

数学设置的图示。

        现在我们已经定义了我们的正向过程并模拟了它的反向过程,这就出现了一些大问题。我们如何学习 μ_θ 和 Σ_θ 参数?需要优化的损失是多少?我们从反向过程中主要期望的是p_θ(x_0)接近q(x_0)。换句话说,反向过程的最终采样步骤后生成的数据的分布应与目标分布相同。因此,反向过程的学习在于找到 μ_θ 和 Σ_θ,以最小化 q(x_0) 和 p_θ(x_0) 之间的 KL 散度,或者等价地最小化 q(x_0) 下 p_θ(x_0) 的负对数可能性。在数学上,我们希望找到最小化的 μ_θ 和 Σ_θ

        在现阶段,尚不清楚中间步骤在哪里发挥作用,但很快就会发挥作用。让我们先稍微修改一下括号中的表达式。

        然后,对数函数是凹的,我们从詹森不等式得到

        因此,我们可以定义一个更高的界限到L

        与其最小化L,我们可以最小化L的上限,这更容易处理。在推导的这一点上,至少从理论的角度来看,我们已经更清楚了如何通过从正向过程迭代采样并调整参数以最小化上限的负对数比率来学习逆过程的参数。但是,让我们做最后的努力,将推导推得更远一点,以获得更方便的上限形式。

        使用贝叶斯定理,我们有

        等等

        第一项不依赖于 μ_θ 和 Σ_θ,因此在优化过程中不需要考虑。最后一个术语是不言自明的,并不难优化。最后,其余项是高斯分布之间的KL散度。事实上,我们已经看到

        我们可以证明这一点

        此处

        具有闭合形式的 2 个高斯分布之间的 KL 散度,我们将在下一节中看到,这个上限定义了一个非常容易处理的损失函数,在训练过程中需要最小化。

六、实践中的扩散模型

        到目前为止,我们已经定义了一个正向过程q作为我们的(离散)扩散过程,它逐渐破坏信息

        以及一个反向过程 p_θ 建模要学习并应该逐步恢复信息的反向过程

        然后,我们已经看到,训练我们的反向过程包括找到最小化上限的 μ_θ 和 Σ_θ

        在这一点上,值得注意的是,如果我们省略要学习的反向模型的参数在步骤之间共享,则上限表达式中的不同项是相互独立的。因此,假设我们的模型有足够的容量,最小化整个上限类似于最小化其每个项。

        现在让我们做一些假设,看看在实践中如何进行培训。首先,为了使事情变得更容易,我们可以决定将逆过程的方差设置为未经训练的时间相关常数,以便

        第一个选项匹配 q(x_{t-1} | x_t) 的方差,假设时间步长足够小(大 T,意味着小β_t),因此,反向过程具有与正向过程具有相同“扩散系数”的属性。第二个选项匹配 q(x_{t-1} | x_t, x_0) 的方差。在实践中,研究似乎表明这两种选择给出了相似的结果。我们现在将假设第二个选项。

        它只允许我们学习一个模型来学习反向过程的均值。提醒

        使用两个高斯的KL散度的闭合形式可以证明,

        然后,我们可以看到,上界的每个KL散度项对应于给定的时间步长,其优化仅包括最小化模型之间的L2距离和以x_0为条件的反向过程的平均值,两者都在考虑的时间步长进行评估。

如果这个公式已经非常方便,通常最好根据噪声重新参数化模型。首先,我们注意到

        这意味着

        因此,我们可以通过定义来重新参数化模型

        因此

        通过这种新的参数化,我们不再学习代表反向过程均值的模型,而是代表已添加到x_0以获得x_t的噪声的模型。现在,上限的每个KL散度项的最小化包括最小化模型和噪声之间的L2距离。

        到目前为止,我们已经省略了我们想要最小化的上限中的最后一项

        尽管需要注意以适当的方式处理,但根据所选的参数化,该术语也可以很好地用 μ_θ(x_1, 1) 或 ε_θ(x_1, 1) 来表示。最后,整体表达式相对于模型参数 θ 是可以很好地微分的,并且可以通过最小化这个上限来完成训练。

        但是,如果确切的上限可用于训练,则建议使用以下更简单的变体,并且在实践中经常使用

        该变体定义了要实现的更简单的损失函数,并且已被证明有利于样品质量。

        作为与初始上限的主要区别,可以观察到期望不再是在整个随机前向轨迹上,而是在定义随机前向轨迹的单个步长的随机三元组(初始数据、步长、噪声)上。这种变化可以用上限项的独立性来解释(忽略要优化的参数是共享的)。正如我们前面已经提到的,这种独立性意味着最小化整个上限相当于最小化其每个条款。在迭代训练过程中,对单个步骤进行采样并优化相应的项实际上比对完整的前向轨迹进行采样并针对所有项进行优化要容易得多。这是使这种变体如此吸引人的原因之一。

        归根结底,我们只剩下这个非常简洁的损失函数需要优化。对噪声进行建模的神经网络几乎可以采用任何形状,具体取决于数据的性质。在图像的情况下,许多论文使用以U-Net形状组织的卷积和注意力块,但其他架构也可以适应。然后,训练只需迭代采样一些三元组(初始数据、步长、噪声)并针对损失函数应用梯度下降步长。

去噪扩散概率模型训练的训练过程图示。

        在采样时,我们将首先从各向同性高斯分布中采样一些噪声,然后,我们将使用我们学习的逆过程从目标分布生成数据。在生成过程的每一步,噪声参数化意味着模型同时获取噪声数据和当前步骤,并估计噪声分量。然后可以计算x_0的近似值,并用于定义以该接近x_0为条件的反向过程的平均值。

        乍一看,人们可能会在我们的采样过程中发现一些令人费解的行为:在第一步(以及所有后续步骤,事实上)我们估计噪声数据中的噪声,从而可以计算出x_0的估计值。那么,为什么要为所有后续步骤而烦恼呢?为什么不只保留第一个估计x_0作为要返回的最终数据?答案是,该模型根本不被认为足够强大,无法一次性消除所有噪点。因此,x_0的第一个估计值预计不会是完美的,但它表明下一个采样步骤要遵循的粗略方向,因为我们将从以该估计为条件的反向过程中进行采样。

        以x_0(μ_t(x_t, x_0))为条件的反向过程均值的公式是x_t和x_0之间的线性组合(见上等式),它清楚地表明了我们的下一个采样步骤x_{t-1}将以某种方式混合当前步骤和估计x_0。可以粗略地说,我们将在“当前步骤和x_0之间的某个地方”对下一步进行采样。考虑到这一点,我们可以将生成模型想象如下:首先,我们从随机噪声中采样最后一步x_T,然后逐步从当前状态估计x_0并根据当前状态生成上一步,并将此估计作为某种“目标”。我们提到过,在第一步中,x_0估计不会很好,因为模型预计不具有这样做的预测能力,但是一次又一次的迭代,这些估计将指导反向生成过程,并且会变得越来越好,直到我们得到高质量的最终样本。

去噪扩散概率模型的采样过程图示。

        最后,我们可以弥合我们建立的第一个直觉和我们刚刚给出的更正式的 DPM 描述之间的差距。我们可以“在数学上”看到渐进式生成过程(如 DPM)相对于单次传递生成过程的优势。经过训练的模型不需要一次性处理所有生成。相反,该模型可以首先在早期阶段引入粗略的信息,然后在保持降噪的同时逐渐添加越来越多的细节。最重要的是,在对这种反向去噪过程进行建模时,我们利用了这样一个事实,即对具有不同噪声水平的图像进行降噪并不是完全不同的任务,而是依赖于可以通过单个神经网络相互化和学习的类似机制。

七、总结

        本文的主要内容是:

  • 生成过程都针对同一个目标,即定义一个函数,该函数从简单分布中获取数据并将其转换为来自复杂分布的数据。
  • 学习一个函数(由神经网络表示),该函数获取一些高斯噪声并从目标复分布中输出数据可能是一项非常困难的任务
  • 扩散过程,或其离散版本,具有高斯核的马尔可夫链,可用于逐步破坏信息,这意味着它们可用于从复杂分布(例如有意义的图像)中获取数据,并通过添加噪声将它们逐渐转换为来自非常简单分布(例如高斯噪声)的数据
  • 扩散概率模型的想法是学习扩散的反向过程,期望通过消除噪声从一些高斯噪声逐渐进入复杂分布
  • 任务的迭代性质使其更简单,因为经过训练的模型不需要一次性处理整个生成,并且可以先引入粗略的信息,然后在不断降噪的同时逐步添加越来越多的细节。
  • 要学习的模型依赖于这样一个事实,即对具有不同噪声水平的图像进行去噪是类似的任务,依赖于可以通过训练单个神经网络共享的通用机制。

        在本文中,我们描述了理解扩散概率模型基础知识的主要概念。当然,还有很多知识需要探索,从我们在本文中描述的基本设置的可能改进,到去噪扩散隐式模型(DDIM)的想法,通过条件反射和指导的概念(基于分类器和无分类器),这是我们这些天在互联网上随处可见的惊人生成模型的核心。约瑟夫·罗卡

         这篇文章已经相当长和密集了。因此,在此处输入与 DPM 相关的更高级机制的详细信息将涉及太多信息。但是,我们强烈建议感兴趣的读者阅读上面链接的论文,以加深其知识和对该领域的理解。而且,也许,我们会写另一篇文章来解决我们现在留下的这些概念......一步一步来,就像我们的 DPM 一样。

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

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

相关文章

基于PyQt+mysql图书管理系统

1 需求分析 针对图书馆的图书管理系统数据库设计&#xff0c;分别对图书馆的读者、一般工作人员和部门负责人进行详细地分析&#xff0c;总结出如下的需求信息: &#xff08;1&#xff09;图书馆中的图书具有书号、书名、作者、馆藏册数、在馆册数、价格、出版社及摘要等必要信…

AMEYA360:芯力特SIT1043Q CAN FD收发器振铃抑制功能实现原理及实际应用

01、SIT1043Q CAN收发器 振铃抑制功能简述 随着新能源汽车与自动驾驶技术的深入发展&#xff0c;CAN通信的速率从基础的125kbps速率提升到目前8Mbps速率的应用&#xff0c;通信速率越高对CAN收发器差分信号的质量要求越来越高。芯力特研发工程师在SIT1043Q芯片中内置振铃抑制电…

PSP - 基于 OpenFold 训练的 Finetuning 模型与推理逻辑评估

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132410296 AlphaFold2 以其能够以极高的准确度预测蛋白质结构的能力&#xff0c;彻底改变了结构生物学。然而&#xff0c;AlphaFold2 的实现&…

Qt开发环境安装(版本5.14.2)

1.Qt下载 下载地址&#xff1a;https://download.qt.io/archive/qt/ 界面如下&#xff1a; 因为从qt 5.15开始&#xff0c;qt不再提供安装包&#xff0c;需要自行编译。本次我们选择5.14.2进行操作。 我们是在windows下安装&#xff0c;所以选择windows版本进行下载 下载完成…

使用 ChatGPT 的代码解释器进行数据科学的 5 种方法

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 通过代码解释器集成&#xff0c;ChatGPT 现在可以在沙盒环境中编写和执行 Python 代码&#xff0c;以提供更准确和精确的答案。这允许它通过代码执行&#xff08;而不仅仅是文本预测&#xff09;执行复…

sdk manager (ubuntu20.4) 安装

1、首先下载sdk manager 1.9.3 下载链接 https://www.baidu.com/link?urlVXJhUqxxhS3eFK3bOPTzi5LFl6ybeW3JwDY1CwANaPf1gvO3IxQKzY547NIe53x1blJxnAXg7FTRTvs-cnfnVa&wd&eqida22baa7b0004ca980000000664e2d426 当然要登录自己的账号才能成功下载&#xff0c;下载对应…

MyBatis-Plus 详解

文章目录 MyBatisPlus一、入门案例1.1 准备表结构和数据1.2 添加依赖1.3 yml 配置1.4 添加 Factor 实体1.5 创建Mapper接口1.6 创建Mapper.xml 文件1.7 测试操作1.8 日志输出 二、CRUD操作2.1 插入因子2.2 更新因子2.3 删除因子① 根据id删除② 批量删除③ 通过Map删除 2.4 查询…

系统架构合理性的思考 | 京东云技术团队

最近牵头在梳理部门的系统架构合理性&#xff0c;开始工作之前&#xff0c;我首先想到的是如何定义架构合理性&#xff1f; 从研发的角度来看如果系统上下文清晰、应用架构设计简单、应用拆分合理应该称之为架构合理。 基于以上的定义可以从以下三个方面来梳理评估&#xff1…

标签准备——labelIMG工具使用

当我们已经准备了大量用于图片标注所需的图片后,便需要使用labelIMG工具进行打标签的操作了。 1、标签规划 在我们开始打标签之前,首先需要注意的是,打标签是我们开展训练、识别工作的基础,我们需要准确最好标签的规划,明确都有哪些标签,并在venv/Lib/site-packages/la…

怎么压缩视频?一分钟学会视频压缩技巧

现在拍摄的视频文件体积都比较大&#xff0c;如果再加上后期的剪辑处理&#xff0c;动不动就是几个GB起步&#xff0c;这样一来不仅占用空间&#xff0c;还不方便传输&#xff0c;今天就围绕这个问题给大家分享几个压缩视频的方法&#xff0c;需要的朋友可以参考下。 方法一&am…

如何拥有观影氛围感?极米投影仪H6为你打造美好之夜

当前人们对于家庭舒适度的要求越来越高&#xff0c;“仪式感”也被越来越多的人关注起来&#xff0c;对于喜欢看电影的年轻人来说&#xff0c;在家里的观影氛围感当然也不能少。今天&#xff0c;笔者就为大家带来了一款打造观影氛围感好物极米H6。 作为极米H系列首款4K分辨率的…

Docker基本操作命令(一)

Docker基本操作命令 1、搜索镜像 docker search命令搜索存放在 Docker Hub中的镜像,此命令默认Docker会在Docker Hub中搜索镜像&#xff0c;可以配置了其他镜像仓库 [rootzch01 ~]# docker search centos NAME:镜像仓库名称DESCRIPTION:镜像仓库描述STARS&#xff1a;镜像仓…

探索聊天型AI进阶:从ChatGPT到提示工程入门

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 导言 近年来&#xff0…

滑动验证组件---设置movable-view组件的x属性在微信小程序端失效的问题

场景 采用uniapp的movable-view组件实现滑动验证组件。 流程 滑块未滑到最右端时&#xff0c;回弹到原点滑块滑到最右端时&#xff0c;则显示滑动结束&#xff0c;不可再滑动 问题 频繁设置uniapp的movable-view组件的x属性&#xff0c;在H5端正常&#xff0c;但在微信小程…

实时操作系统与非实时操作系统

一、实时操作系统 实时操作系统&#xff08;RTOS&#xff09;是指当外界事件或数据产生时&#xff0c;能够接受并以足够快的速度予以处理&#xff0c;其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应&#xff0c;调度一切可利用的资源完成实时任务&am…

win10 版本21H2 + vs2022 + Windows 11 版本 22H2 WDK

打开VS&#xff0c;工具–>获取工具和功能–>单个组件。在里面搜索SDK Windows 11 SDK(10.0.22621.0) Windows 11 版本 21H2 WDK 不支持 Visual Studio 2022。 若要使用 Visual Studio 2022 开发和测试驱动程序&#xff0c;请下载 Windows 11 版本 22H2 WDK。 #include…

自定义目录高亮的锚点计算位移

如果可以实现记得给个星星&#xff0c;谢谢老铁&#xff5e; 一、问题的描述 一个支持目录树形结构&#xff0c;自定义目录高亮的锚点计算位移,且支持选中该目录后锚点对应的内容。这里只提供左边的组件思路&#xff0c;右边展示对应的内容最好自己自定义组件控制更为灵活&am…

MyBatis(一)执行流程概述

目录 一、简介二、MyBatis执行流程1.读取核心配置文件 mybatis-config.xml2.构建会话工厂 SqlSessionFactory3.创建会话 SqlSession4.Executor 执行器5.MappedStatement 对象6.输入参数处理&#xff08;map,list,String,Integer,pojo&#xff09;7.操作数据库8.输出结果处理&am…

[C语言]分支语句和循环语句

[C语言]分支语句和循环语句 文章目录 [C语言]分支语句和循环语句C语言语句分类分支语句if语法结构else的匹配规则switch语句switch语句中的breakswitch语句中default 循环语句while循环while循环中的break和continuefor循环for循环中的break和continuefor循环的变种do while循环…

ARM汇编【1】:数据类型

与高级语言类似&#xff0c;ARM支持对不同数据类型的操作。我们可以加载或存储的数据类型可以是有符号和无符号字、半字或字节。这些数据类型的扩展名是&#xff1a;-h或-sh表示半字&#xff0c;-b或-sb表示字节&#xff0c;不表示字的扩展名。有符号数据类型或无符号数据类型之…