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

【综述】An Introduction to Vision-Language Modeling【一】

介绍

发表在预印本上的综述,长达76页,其中正文46页。
来自Meta 在Meta工作期间完成 ‡蒙特利尔大学, Mila ♡麦吉尔大学, Mila †多伦多大学 ♠卡内基梅隆大学 ♣麻省理工学院 ∧纽约大学 △加州大学伯克利分校 ▽马里兰大学 ♢阿卜杜拉国王科技大学 •加拿大CIFAR AI主席

这项工作对视觉语言模型进行介绍,解释了什么是视觉语言模型,怎么训练的,如果基于各种研究目标来有效评估它。这项工作不是一个现有工作的综述,而是对视觉语言模型进行清晰易理解的介绍,以便更好入门。

1、首先介绍了几种训练范式。对比学习、基于掩码策略、生成式、基于预训练骨干网络。

2、然后提出了训练 VLM 的典型方法。例如:鉴于不同的研究目标,哪些数据集是合适的?哪种数据管理策略?是否需要训练文本编码器还是可以利用预训练的LLM?对比损失对于视觉理解是否足够?生成组件是否关键?

3、然后通过讨论现有 VLM 能力评估基准的优点和缺点,阐明未来的挑战以提高对 VLM 的理解。

本篇文章对第一节VLM家族的内容释读。

在这里插入图片描述

1 VLM家族

什么是VLM:将计算机视觉和自然语言处理领域技术结合起来,形成的模型。
本文关注的是基于Transformer的最新技术,并将这些相关工作分为四种不同的训练范式。
对比学习策略、掩码学习、基于预训练骨干、基于生成式的视觉语言模型。

1.1 基于ransformer 的 VLM 早期研究

BERT诞生后就超过了当时所有的语言建模方法。不久后被扩展用来处理视觉数据。visual-BERT 和 ViLBERT 是其中两个代表,它们的做法是将文本与图像 token 组合到一起。

这些模型有两个训练目标:1) 经典的掩码建模任务,目标是预测给定输入中缺失的部分;2) 句子 - 图像预测任务,目标是预测图像标注是否描述了图像内容。

通过利用这两个目标,这些模型在多种视觉 - 语言任务上表现出色,这主要是得益于 Transformer 模型有能力学会通过注意力机制将词与视觉线索关联起来。

1.2基于对比的 VLM

使用正例和负例对来训练模型。将正例的图像和文本预测出更相似的表示,为负例的预测出更不相似的表示。

基于对比的训练往往能通过 《基于能量的模型》 (EBM)来更好地解释,即模型E(θ)的训练目标是为观察到的变量分配低能量,为未被观察到的变量分配高能量。来自目标分布的数据的能量应该较低,其它数据点的能量应该较高。为了训练这些模型,我们考虑输入数据x与一个能量函数Eθ(x),该能量函数由参数θ给出。相应的学习目标的玻尔兹曼分布密度函数可以写成:
在这里插入图片描述
然而,上述方法需要从模型分布 𝑃𝜃(𝑥) 中采样出样本 𝑥−,而这样的样本可能难以得到。目前有几种技术可以近似地模拟这种分布:
一种方法依赖于马尔可夫链蒙特卡罗(MCMC)技术,通过迭代过程找出能够最小化预测能量的样本。
第二种方法依赖于得分匹配和去噪得分匹配
准则,它们通过只学习输入数据相对于概率密度的梯度来移除归一化因子。
另一类方法,最近在自监督学习(SSL)和视觉语言模型(VLM)的研究中使用最多的,是噪声对比估计(NCE)。

NCE背后的直觉是,不用从模型分布中采样负样本,而是从一个噪声分布 𝑢′∼p_𝑛(𝑢′)中进行采样,在某些情况下可能可以足够好的近似从模型分布样本。尽管从理论上难以证明这种方法为何可行,但在最近的自监督学习 (SSL) 文献中,有充足的经验证据表明基于 NCE 的方法取得了成功。原始的NCE框架可以描述为一个二元分类问题,模型应当为来自真实数据分布的样本预测标签 𝐶=1,而为来自噪声分布的样本预测 𝐶=0。通过这种方式,模型学会了区分真实数据点和噪声数据点。因此,损失函数可以定义为具有交叉熵的二元分类, 其中 𝑥𝑖 是从数据分布中采样的,而 𝑥𝑗∼𝑝𝑛(𝑥),𝑗≠𝑖 是从噪声分布中采样的:
在这里插入图片描述
InfoNCE损失不是简单地预测一个二元值,而是利用如余弦相似度这样的距离度量,在模型的表示空间中进行计算。这就需要计算正样本对之间的距离,以及所有负样本对之间的距离。通过Softmax函数,模型学习预测在表示空间中最相近的一对样本,同时将较低的概率赋予其他所有的负样本对。

在如SimCLR [Chen et al., 2020]这样的自监督学习(SSL)方法中,正样本对被定义为一张图片及其经过手工数据增强的版本(例如,对原始图片应用灰度转换),而负样本对则是用一张图片与mini-batch中的所有其他图片构建。InfoNCE方法的主要缺点是引入了对小批量内容的依赖性。这通常需要大的小批量来使得对比训练准则在正负样本之间更为有效。

1.2.1典型模型举例CLIP

一个常用的使用InfoNCE损失的对比方法是对比语言-图像预训练(CLIP)[Radford et al., 2021]。正样本对被定义为一张图像及其对应的真实描述文字,而负样本则是相同的图像配上mini-batch中描述其他图片的所有其他描述文字。CLIP的一个创新之处在于训练一个模型将视觉和语言整合到一个共享的表示空间中。CLIP训练随机初始化的视觉和文本编码器,通过对比损失将图像和其描述文字的表示映射到相似的嵌入向量中。原始CLIP模型通过在4亿个从网络上收集的图像-描述文字对上进行训练, 显示出了显著的零样本分类迁移能力。具体来说,使用ResNet-101架构的CLIP达到了与受监督ResNet[He et al., 2015]模型相匹配的性能(实现了76.2%的零样本分类准确率),并在多个鲁棒性基准测试中超越了它。(why)

SigLIP [Zhai et al., 2023b] 类似于CLIP,不同之处在于它使用基于二元交叉熵的原始NCE损失,而不是使用基于InfoNCE的CLIP的多类别目标。这一改变使得在比CLIP更小的batch大小上获得了更好的零样本表现。

潜在语言图像预训练(Llip)[Lavoie et al., 2024]考虑到一幅图像可以有多种不同的描述方式,它提出通过一个交叉注意力模块, 根据目标描述文字来条件化图像的编码(how)。考虑到字幕的多样性可以增加表示的表现力,通常能够提高下游零样本迁移分类和检索的性能。

1.3 基于掩码的VLMs

通过给定的未掩码文本字幕重构图像中缺失部分来训练。类似地,通过在字幕中掩码词语,也可以训练VLM来重构给定未掩码图像中的这些词语。

masking是深度学习研究中常用的技术。它可以被视为一种特殊形式的降噪自编码器[Vincent等人,2008],其中噪声具有空间结构。它也与修复策略相关,Pathak等人[2016]使用它来学习强大的视觉表征。更近期地,BERT [Devlin等人,2019] 在训练期间使用掩码语言建模(MLM)来预测句子中缺失的标记。masking尤其适用于transformers架构[Vaswani等人,2017],因为输入信号的分词化使得更容易随机丢弃特定的输入标记。在视觉方面,也有一些工作通过使用掩码图像建模(MIM)来学习表征,如MAE[He等人,2022]或I-JEPA[Assran等人,2023]。很自然地,也有一些工作将这两种技术结合起来训练VLM。首先是FLAVA[Singh等人,2022],它利用包括掩码在内的多种训练策略来学习文本和图像表征。其次是MaskVLM[Kwon等人,2023],这是一个独立的模型。最后,我们对信息论和masking策略之间的关系进行了一些探讨。

1.3.1 FLAVA

第一个基于掩码方法的例子是基础语言和视觉对齐模型 (FLAVA),其架构包括三个核心组件,每个都基于transformer框架并针对特定的模态进行了定制。

图像编码器采用ViT [Dosovitskiy等人,2021]来处理图像,将其分割为用于线性嵌入和基于transformer表征的小块,包括分类标志([CLSI])。
文本编码器使用transformer[Vaswani等人,2017]对文本输入进行标记并嵌入到向量中以进行上下文处理,并输出隐藏状态向量和分类标志([CLST])。
这两个编码器都采用掩码技术进行训练。
在此基础上,多模态编码器融合了图像和文本编码器的隐藏状态,利用Transformer框架内学习到的线性投影和交叉注意力机制,将视觉和文本信息整合起来,并通过一个附加的多模态分类标记([CLSM])突出显示。
该模型采用了综合训练方案,结合了多模态和单模态掩码建模损失以及对比目标。它在七千万公开可用的图像和文本对的数据集上进行了预训练。通过这种方法,FLAVA展现出了卓越的多功能性和功效,在涵盖视觉、语言和多模态基准的 35 种不同任务中实现了最先进的性能,从而说明了该模型理解和整合不同领域信息的能力。

1.3.2 MaskVLM

FLAVA的一个局限是使用了像dVAE [Zhang等人,2019]这样的预训练的视觉编码器。为了打造一个对第三方模型依赖性更小的VLM,Kwon等人[2023]引入了MaskVLM,它直接在像素空间和文本标记空间应用掩码。使它在文本和图像上均有效的关键是使用来自一种模态到另一种模态的信息流动;文本重建任务接收来自图像编码器的信息,反之亦然。

1.3.3 VLM 目标的信息论视角

Federici等人[2020]首先表明,VLM 可以被理解为解决一个速率失真问题,通过减少多余信息和最大化预测信息。Dubois等人[2021]更具体地显示,我们可以将对数据X进行的任何变换f(X),理解为隐式地引入一个等价关系,该关系将空间f(X)划分成不相交的等价类。目的是限制条件密度在一个区域内是常数,即𝑓(𝑥)∼𝑓(𝑥′)⇒𝑝(𝑧∣𝑓(𝑥))=𝑝(𝑧∣𝑓(𝑥′)),其中Z是X的学习表示。这一视角统一了掩码和其他形式的数据增强,以及两种数据模态之间的选择函数;所有这些都可以被表示为对数据的某种变换。
在这里插入图片描述
其中log⁡𝑞(𝑧)是一个熵瓶颈,限制了速率𝐼(𝑓(𝑋);𝑍),移除了多余的信息。请注意,在掩码VLM中的熵瓶颈通常由一个常数界定,而这个常数取决于掩码移除的信息量。对于多模态VLM,𝑍中的信息量被减少到源头中最小量的信息。log⁡𝑞(𝑥∣𝑧)限制了失真𝐻(𝑍∣𝑋)并确保信息的保存,从而最大化了预测信息,在实践中通过自编码实现。相反,对比损失可以被看作无需数据重构的压缩。这里的失真(infoNCE),对两种表示的等价性进行评分。InfoNCE通过分类哪个𝑍与等效示例𝑋相关联来保留必要的信息。

根据信息论的观点,我们将对比损失和自动编码损失理解为失真的实现,而速率主要由所使用的数据转换决定。

1.4 基于生成的VLM

之前的训练范式几乎都是在潜在空间中构建图像或文本抽象然后相互映射的,与之不同的是,生成范式考虑了文本和/或图像的生成。一些方法,如CoCa [Yu 等人,2022b],学习了一个完整的文本编解码器,使得图片字幕的生成成为可能。其他方法,如Chameleon Team [2024] 和 CM3leon [Yu 等人,2023],是明确训练目标为生成文本和图像的多模态生成模型。最后,一些模型只训练基于文本生成图像,比如Stable Diffusion [Rombach 等人,2022],Imagen [Saharia 等人,2022] 和 Parti [Yu 等人,2022c]。然而,即使它们只受训于生成图像,它们也可以用于处理多个视觉-语言理解任务。

1.4.1 CoCa:学习文本生成器

Contrastive Captioner(CoCa) 除了使用了在CLIP中效果良好的对比损失之外,还采用了生成损失,这是由多模态文本解码器生成字幕对应的损失,该解码器采用 (1) 图像编码器输出和 (2) 单模态文本解码器生成的表征为输入。新的损失允许执行新的多模态理解任务(例如,视觉问答VQA)而无需使用多模态融合模块进行进一步适应。CoCa 通过简单地将带注释的图像标签视为文本来从头开始进行预训练。预训练依赖于两个数据集:包含约1.8B张带有替代文本的图片的ALIGN,以及由>29.5k个类别作为标签的内部数据集JFT-3B,但将标签视为替代文本。

1.4.2 Chameleon和CM3leon:多模态生成模型的示例

Yu等人[2023]介绍了CM3Leon,一个用于文本到图像和图像到文本生成基础模型。CM3Leon借用了Gafni等人[2022]的图像分词器,将256×256的图像编码为来自8192词汇表的1024个标记。它借用了张等人[2022]的文本分词器,词汇表大小为56320。它引入了一个特殊的标记来表示模态之间的转换。这种标记化方法允许模型处理交错的文本和图像。然后,将标记化的图像和文本传递给一个仅解码器的transformer模型[Brown等,2020,Zhang等,2022],该模型参数化了CM3Leon模型。

CM3Leon模型经历了两阶段的训练过程。第一阶段是检索增强的预训练。这个阶段使用一个基于CLIP的编码器[Radford等,2021]作为一个密集的检索器来获取相关的、多样的多模态文档,并将这些文档添加到输入序列的前面。然后,模型基于输入序列的下一个令牌预测进行训练。检索增强有效地增加了在预训练期间可用的令牌,从而提高了数据效率。第二阶段涉及到监督的微调(SFT),其中模型进行多任务指令调整。这个阶段允许模型处理和生成不同模态的内容,显著提高了其在包括文本到图像生成和语言引导的图像编辑等各种任务上的性能。这些阶段共同使CM3Leon在多模态任务中实现了最先进的性能,显示了自回归模型处理文本和图像之间复杂交互的能力的显著提高。

这项工作的扩展是Chameleon,这是一个新的混合模态基础模型系列,可以生成和推理交错的文本和图像内容的混合序列。这种能力允许进行全面的多模态文档建模,超越了典型的多模态任务,如图像生成、图像理解和仅文本的语言模型。Chameleon从一开始就被独特地设计成混合模态,使用统一的架构从头开始以端到端的方式在所有模态的混合上进行训练——图像、文本和代码。这种集成方法采用了对图像和文本都完全基于令牌的表示。通过将图像转换为离散的令牌,类似于文本中的单词,可以将相同的transformer架构应用到图像和文本令牌的序列上,而不需要为每种模态提供单独的编码器。这种早期融合策略,即所有模态从一开始就映射到一个共享的表示空间,使得在不同模态之间的推理和生成变得无缝。然而,这也引入了重大的技术挑战,特别是在优化稳定性和扩展性方面。这些挑战通过一系列的架构创新和训练技术得到了解决,包括对transformers架构的新颖修改,如q-k归一化和修订的层归一化位置,这对于在混合模态环境中的稳定训练至关重要。此外,他们演示了如何将用于仅文本语言模型的监督微调方法适应到混合模态的环境,实现了大规模的强对齐。(解码器词典是怎么设置的)

1.4.3 使用生成式文本到图像模型进行下游视觉语言任务

近期在语言条件下的图像生成模型取得了巨大的进步,从像Stable Diffusion和Imagen这样的扩散模型到像Parti这样的自回归模型。虽然重点一直在他们的生成能力上,实际上这些生成模型可以直接用于分类或字幕预测等判别性任务,无需重新训练。

这些生成模型经过训练,能够估计给定文本提示𝑐时图像𝑥的条件可能性𝑝𝜃(𝑥∣𝑐)。然后,给定一个图像𝑥以及一组𝑛个文本类别{𝑐𝑖}𝑖=1𝑛,通过贝叶斯定理可以轻松地完成分类:在这里插入图片描述

其中𝑝𝜃由自回归VLM参数化。考虑到分词化是自回归VLM的关键部分,人们可能会问:我们如何训练图像分词器?当前多数图像分词器基于向量量化-变分自编码器(VQ-VAE)框架,它将一个自编码器(负责创建优质的压缩连续表征)与一个向量量化层(负责将连续表征映射到离散表征)结合起来。这种架构通常是一个卷积神经网络(CNN)编码器,紧接着是一个向量量化层,然后是一个CNN解码器。实际的离散化步骤发生在向量量化层中,它将编码器的输出映射到学习过的嵌入表中最近的嵌入中(“学习”在此表示嵌入表在训练过程中更新)。分词器的损失函数是重建损失(例如,输入像素与重建像素之间的L2距离)和码本承诺损失的结合,以鼓励编码器输出和码本嵌入彼此靠近

大多数现代图像分词器在这个VQ-VAE框架的基础上进行改进,要么是通过添加不同的损失,要么是通过改变编码器/解码器的架构。值得注意的是,VQ-GAN 加入了感知损失和对抗损失(涉及在真实图像和重建图像之间包含一个判别器),以捕捉更细微的细节。VIT-VQGAN 使用视觉Transformer代替CNN作为编码器和解码器的架构。

使用扩散模型进行似然估计。用扩散模型获得密度估计更具挑战性,因为它们不直接输出𝑝𝜃(𝑥∣𝑐)。相反,这些𝜖𝜃网络通常被训练用于估计带噪图像𝑥𝑡中的噪声𝜖。因此,基于扩散的分类技术为条件图像似然预测一个变分下界(通常是被重新加权的):在这里插入图片描述
噪声预测误差越低,条件可能性𝑝𝜃(𝑥∣𝑐)就越高。方程中的下界依赖于重复采样以获得蒙特卡洛估计。Li 等人和Clark和Jaini开发了一种技术可以减少所需样本数量,通过动态地将样本分配给最可能的类别,并确保增加的噪声𝜖在所有潜在类别中是一致的。然而,即使采用了这些技术,基于条件的扩散模型的分类仍然计算成本很高,随着类别数量的增加而增加,并且每个测试图像需要数百个甚至数千个网络估值。因此,尽管基于扩散模型的分类性能相当好,但在进一步优化之前,推理是不切实际的。

生成式分类器的优势。尽管这些生成分类器的推断成本更高,但它们确实有显著的优势。生成分类器具有更高的“有效鲁棒性”,这意味着在给定内部分布准确性的条件下,它们具有更好的超出分布的性能[Li等人,2023a]。在像Winoground [Thrush 等人,2022]这样的组合推理任务上,生成分类器远远优于像CLIP [Li等人,2023a; Clark和Jaini,2023]这样的判别方法。无论是自回归(比如Parti)还是基于扩散的(比如Imagen),生成分类器都显示出更多的形状偏见,并且更符合人类的判断[Jaini等人,2024]。最后,生成分类器可以在测试时与判别模型一起使用仅未标记的测试样本进行联合调整[Prabhudesai等人,2023]。这已被证明可以提高分类、分割和深度预测任务的性能,特别是在在线分布转移场景中。

1.5 基于预训练主干网络的VLM

从头开始训练VLM的缺点是训练成本高昂。它们通常需要数百到数千个GPU,并且需要使用数亿张图片和文本对。因此,已有许多研究工作试图利用现有的大型语言模型和/或现有的视觉提取器,而不是从头开始训练模型。这些工作的动机在于许多大型语言模型是开源的,因此可以轻松使用。通过利用这些模型,可以仅学习文本模态和图像模态之间的映射。学习这样的映射使得LLM能够在需要较低计算资源的情况下回答视觉问题。在本节中,我们仅介绍其中的两个模型,第一个是首次利用预训练LLM的Frozen,然后介绍Mini-GPT模型家族。

1.5.1 Frozen

Frozen 是第一个利用预训练LLM的模型示例。这项工作提出通过一个轻量级映射网络将视觉编码器连接到已冻结的语言模型,该网络将视觉特征投影到文本标记嵌入中。视觉编码器(NF-ResNet-50)和线性映射从头开始训练,而语言模型(在C4上训练的7B参数transformer)保持冻结(这对于保持预训练模型已经学到的特征至关重要)。该模型使用简单的文本生成目标进行监督。在推理时,语言模型可以条件化在交错的文本和图像嵌入上。作者展示了该模型能够快速适应新任务,快速访问一般知识,并快速绑定视觉和语言元素。尽管性能只是适中,Frozen已经是朝向当前能够进行开放式多模态零/少次学习的多模态LLM的重要第一步。

1.5.2 MiniGPT模型

MiniGPT-4的应用

从Flamingo等模型开始,近期的趋势是训练多模态语言模型,其中输入包含文本和图像,输出包含文本(可选图像)。MiniGPT-4 接受文本和图像输入,并产生文本输出。在MiniGPT-4中,使用了一个简单的线性投影层来对齐图像表示(使用与BLIP-2 中相同的视觉编码器,该编码器基于Q-Former和ViT主干)与Vicuna语言模型的输入空间。鉴于视觉编码器和Vicuna语言模型已经预训练并作为现成产品使用,MiniGPT-4仅需要训练线性投影层,该训练分为两轮进行。第一轮包括20k训练步骤(批量大小为256),相当于大约500万个来自Conceptual Caption、SBU和LAION 的图像-文本对。作者仅使用四个A100 GPU大约十小时,因为只需要训练线性投影层的参数。第二轮训练利用了高度策划的数据,采用指令调整格式,仅需要400个训练步骤(批量大小为12)。

MiniGPT-5的扩展

MiniGPT-5扩展了MiniGPT-4,使输出可以包含文本及图像。为了同时生成图像,MiniGPT-5使用了生成性标记,这些特殊的视觉标记可以通过transformer layer映射到特征向量,然后被输入到已冻结的Stable Diffusion 2.1模型中。作者在下游任务(例如,多模态对话生成和故事生成)上使用了监督训练。

MiniGPT-v2的多任务应用

LLM已经可以作为多种语言任务的通用接口(例如,通用聊天机器人),受此启发,MiniGPT-v2提出通过统一的接口执行各种视觉语言任务,如图像字幕生成、视觉问答和目标定位。为了有效地实现这些目标,MiniGPT-v2在训练时为不同任务引入了独特的标识符,使模型能够轻松区分每个任务指令并高效学习。在视觉问答和视觉定位基准测试上的实验结果表明,MiniGPT-v2展示了强大的视觉语言理解能力。

1.5.3 使用预训练主干的其他热门模型

Qwen模型

与MiniGPT-4类似,Qwen-VL和Qwen-VL-Chat模型依赖于LLM、视觉编码器和一种将视觉表示对齐到LLM输入空间中的机制。在Qwen中,LLM从Qwen-7B初始化,视觉编码器基于ViT-bigG,并使用了一层交叉注意模块将视觉表示压缩为固定长度(256)的序列,然后输入到LLM中。

BLIP-2模型

BLIP-2是一个视觉语言模型,接受图像输入并生成文本输出。它利用预训练的冻结模型大大缩短了训练时间:视觉编码器(如CLIP)产生图像嵌入,这些嵌入被映射到LLM(如OPT)的输入空间。训练一个相对较小的组件(约100-200M参数)Q-Former进行该映射——它是一个Transfomer,接收固定数量的随机初始化的“查询”向量;在前向传递中,查询通过Q-Former中的交叉注意与图像嵌入相互作用,随后通过一个线性层将查询投影到LLM的输入空间

相关文章:

【综述】An Introduction to Vision-Language Modeling【一】

介绍 发表在预印本上的综述,长达76页,其中正文46页。 来自Meta 在Meta工作期间完成 ‡蒙特利尔大学, Mila ♡麦吉尔大学, Mila †多伦多大学 ♠卡内基梅隆大学 ♣麻省理工学院 ∧纽约大学 △加州大学伯克利分校 ▽马里兰大学 ♢阿卜杜拉国王科技大学 •…...

MySQL常用函数详解及SQL代码示例

MySQL常用函数详解及SQL代码示例 引言当前日期和时间函数字符串函数数学函数聚合函数结论 引言 MySQL作为一种广泛使用的关系型数据库管理系统,提供了丰富的内置函数来简化数据查询、处理和转换。掌握这些函数可以大大提高数据库操作的效率和准确性。本文将详细介绍…...

Unity教程(二十二)技能系统 分身技能

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…...

‌RTSPtoWeb, 一个将rtsp转换成webrtc的开源项目

RTSPtoWeb是一个开源项目,旨在将RTSP流转换为可在现代web浏览器中消费的格式,如Media Source Extensions (MSE)、WebRtc或HLS。该项目完全使用golang编写,不依赖于ffmpeg或gstreamer,确保了高效的性能和轻量…...

AIAgent有哪些不错的开源平台

AIAgent领域有许多优秀的开源平台和框架,以下是一些值得推荐的开源平台: AutoGPT AutoGPT 是一个基于 OpenAI 的 GPT-4 和 GPT-3.5 大型语言模型的开源框架,能够根据用户给定的目标自动生成所需提示,并利用多种工具 API 执行多步骤…...

Java---JavaSpringMVC解析(1)

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC" 1.MVC MVC是Model View Controller的缩写&#…...

Vector 的模拟实现:从基础到高级

文章目录 1. 引言2. vector的核心设计3. vector的常用接口介绍3.1 构造函数和析构函数3.1.1 默认构造函数3.1.2 带初始容量的构造函数3.1.3 析构函数 3.2 拷贝构造函数和拷贝赋值运算符3.2.1 拷贝构造函数3.2.2 拷贝赋值运算符 3.5 数组长度调整和动态扩容3.5.1 调整大小&#…...

【大模型科普】大模型:人工智能的前沿(一文读懂大模型)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…...

[漏洞修复]用yum update修openssh漏洞

[漏洞修复]用yum update修openssh漏洞 1. 需求2. 更新Yum仓库2.1 生成本地仓库2.2 生成内网仓库2.3 将Openssh的包更新到仓库 3. 客户端升级3.1 客户端repo文件配置3.2 升级Openssh3.3 升级后的确认 1. 需求 最近经常有朋友问Openssh 漏洞修复的问题,我也在自己的gitee仓库里更…...

[RH342]iscsi配置与排错

[RH342]iscsi配置与排错 1. 服务端配置1.1 安装targetcli1.2 准备磁盘1.3 服务端配置1.4 防火墙配置 2. 客户端配置2.1 安装客户端软件2.2 配置客户端2.3 连接登录服务端2.4 挂载使用 3. 安全验证扩展3.1 服务端3.2 客户端 4. 常见的排错点4.1 服务端常见错误4.2 客户端常见错误…...

Nginx 代理访问一个 Web 界面时缺少内容

1. 资源路径问题 Web 页面中的静态资源(如图片、CSS、JavaScript 文件)可能使用了相对路径或绝对路径,而这些路径在代理后无法正确加载。 解决方法: 检查资源路径:打开浏览器的开发者工具(按 F12&#xf…...

HOVER:人形机器人的多功能神经网络全身控制器

编辑:陈萍萍的公主一点人工一点智能 HOVER:人形机器人的多功能神经网络全身控制器HOVER通过策略蒸馏和统一命令空间设计,为人形机器人提供了通用、高效的全身控制框架。https://mp.weixin.qq.com/s/R1cw47I4BOi2UfF_m-KzWg 01 介绍 1.1 摘…...

SEO新手基础优化三步法

内容概要 在网站优化的初始阶段,新手常因缺乏系统性认知而陷入技术细节的误区。本文以“三步法”为核心框架,系统梳理从关键词定位到内容布局、再到外链构建的完整优化链路。通过拆解搜索引擎工作原理,重点阐明基础操作中容易被忽视的底层逻…...

遨游科普:三防平板是哪三防?有哪些应用场景?

在工业智能化与数字化转型的浪潮中,电子设备的耐用性和环境适应性成为关键需求。普通消费级平板电脑虽然功能强大,但在极端环境下往往“水土不服”。而三防平板凭借其独特的防护性能,正逐步成为“危、急、特”场景的核心工具。 AORO P300 Ult…...

Etcd 服务搭建

💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Etcd 服务搭建预编译的二进制文件安装下载 etcd 的…...

C++《红黑树》

在之前的篇章当中我们已经了解了基于二叉搜索树的AVL树,那么接下来在本篇当中将继续来学习另一种基于二叉搜索树的树状结构——红黑树,在此和之前学习AVL树类似还是通过先了解红黑树是什么以及红黑树的结构特点,接下来在试着实现红黑树的结构…...

Axios 请求取消:从原理到实践

Axios 请求取消:从原理到实践 在现代前端开发中,网络请求是不可或缺的一部分。Axios 是一个基于 Promise 的 HTTP 客户端,广泛应用于浏览器和 Node.js 环境中。然而,在某些场景下,我们可能需要取消正在进行的请求&…...

【css酷炫效果】纯CSS实现照片堆叠效果

【css酷炫效果】纯CSS实现照片堆叠效果 缘创作背景html结构css样式完整代码基础版进阶版(增加鼠标悬停查看) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492022 缘 创作随缘,不定时更新。 创…...

论文精度:Transformers without Normalization

前言 论文题目:Transformers without Normalization 作者:Jiachen Zhu 1,2 , Xinlei Chen 1 , Kaiming He 3 , Yann LeCun 1,2 , Zhuang Liu 1,4,† 论文地址:https://arxiv.org/pdf/2503.10282 摘要 这篇论文探讨了现代神经网络中广泛使用的归一化层是否是必不可少的。…...

基于香橙派 KunpengPro学习CANN(3)——pytorch 模型迁移

通用模型迁移适配可以分为四个阶段:迁移分析、迁移适配、精度调试与性能调优。 迁移分析 迁移支持度分析: 准备NPU环境,获取模型的源码、权重和数据集等文件;使用迁移分析工具采集目标网络中的模型/算子清单,识别第三方…...

微软远程桌面即将下架?Splashtop:更稳、更快、更安全的 RDP 替代方案

近日,Windows 官方博客宣布:将于2025年5月27日起,在 Windows 10 和 Windows 11 应用商店中下架“Microsoft 远程桌面”应用,建议用户迁移至新的 Windows App。这一变动引发了广大用户对远程访问解决方案的关注。作为全球领先的远程…...

【Python】Python与算法有应用关系吗?

李升伟 整理 是的,Python与算法有着密切的应用关系。Python作为一种高级编程语言,因其简洁的语法和强大的库支持,被广泛应用于算法设计、实现和应用中。以下是Python与算法之间的一些主要应用关系: 1. 算法学习与教学&#xff1…...

js,html,css,vuejs手搓级联单选

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>级联选择器</title><script src"h…...

将Django连接到mysql

将Django连接到mysql 文章目录 将Django连接到mysql一.按照我的文章 在Django模型中的Mysql安装 此篇 的步骤完成mysql的基础配置二.Django配置 一.按照我的文章 ‘在Django模型中的Mysql安装’ 此篇 的步骤完成mysql的基础配置 基础配置具体内容 1.打开PowerShell 安装mysql的…...

每天五分钟深度学习框架pytorch:基于pytorch搭建循环神经网络RNN

本文重点 我们前面介绍了循环神经网络RNN,主要分析了它的维度信息,其实它的维度信息是最重要的,一旦我们把维度弄清楚了,一起就很简单了,本文我们正式的来学习一下,如何使用pytorch搭建循环神经网络RNN。 RNN的搭建 在pytorch中我们使用nn.RNN()就可以创建出RNN神经网络…...

【力扣刷题实战】无重复的最长字串

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 力扣题目&#xff1a; 无重复的最长字串 题目描述 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码&#xff08;C&#xff09; 兄弟们共勉 &#xff01;&#xff01;&#xff01; 每篇前言 博客主页&#x…...

vulhub/joker 靶机----练习攻略

1. 靶机下载地址 https://download.vulnhub.com/ha/joker.zip 下载下来是ova文件&#xff0c;直接双击&#xff0c;在VMware打开&#xff0c;选择保存位置&#xff0c;点击导入。 2. 设置网卡模式为NAT&#xff0c;打开靶机 3.老规矩&#xff0c;打开kali&#xff0c;扫同C…...

Nuxt2 vue 给特定的页面 body 设置 background 不影响其他页面

首先认识一下 BODY_ATTRS 他可以在页面单独设置 head () {return {bodyAttrs: {form: form-body}};},设置完效果是只有这个页面会加上 接下来在APP.vue中添加样式...

【Go】运算符笔记

基本数学运算 Go 语言支持常见的 算术运算符&#xff0c;用于执行数学计算。 运算符说明加法-减法*乘法/除法%取余自增--自减 整数运算只能得到整数部分 package mainimport ("fmt""math" )func main() {go_math() }func go_math() {x, y : 8, 5fmt.Pr…...

常见的前端安全问题

前端安全是 Web 开发中至关重要的一环&#xff0c;以下是常见的前端安全问题及对应的防御措施&#xff1a; 1. XSS&#xff08;跨站脚本攻击&#xff09; 攻击原理 攻击者向页面注入恶意脚本&#xff08;如 JavaScript&#xff09;&#xff0c;在用户浏览器中执行&#xff0c;…...

基于Spring Boot的项目申报系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

SPI驱动(九) -- SPI_Master驱动程序

文章目录 参考资料&#xff1a;一、SPI传输概述二、SPI传输的两种方法2.1 旧方法2.2 新方法 参考资料&#xff1a; 参考资料&#xff1a; 参考内核源码: drivers\spi\spi.c 一、SPI传输概述 SPI控制器的作用是发起与它下面挂接的SPI设备之间的数据传输&#xff0c;那么控制…...

Transformer网络发展概述2025.3.18

一.Transformer概述 1.1 定义与原理 Transformer是一种基于自注意力机制的深度学习模型&#xff0c;在处理序列数据时表现卓越。其核心原理包括&#xff1a; 自注意力机制 &#xff1a;允许模型同时考虑输入序列中的所有位置&#xff0c;捕捉语义关系多头注意力 &#xff1a…...

3.4 二分查找专题:LeetCode 69. x 的平方根

1. 题目链接 LeetCode 69. x 的平方根 2. 题目描述 给定一个非负整数 x&#xff0c;计算并返回 x 的平方根的整数部分&#xff08;向下取整&#xff09;。 示例&#xff1a; 输入&#xff1a;x 4 → 输出&#xff1a;2输入&#xff1a;x 8 → 输出&#xff1a;2&#xff0…...

机器人曲面跟踪Surface-Tracking

定义 机器人曲面跟踪&#xff08;Surface-Tracking&#xff09;是指机器人通过实时感知工件曲面的三维形貌&#xff0c;动态调整运动轨迹和位姿&#xff0c;以精确跟随曲面进行加工&#xff08;如打磨、抛光、喷涂等&#xff09;的技术。 力 - 位姿协同控制 力控模式&#xff…...

opencv中stitch图像融合

openv版本: opencv249 vs &#xff1a;2010 qt : 4.85 #include "quanjing.h"#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <open…...

深入解析ES6+新语法:复杂的迭代器与生成器

一、迭代器&#xff08;Iterator&#xff09;&#xff1a;数据遍历的统一协议 1. 迭代器协议的本质 **迭代器协议&#xff08;Iterator Protocol&#xff09;** 是一种标准化的数据访问接口&#xff0c;它要求对象实现一个 next() 方法&#xff0c;每次调用返回包含 { valu…...

【C语言】自定义类型:结构体

一、结构体类型的声明 我们前面学习操作符的时候已经接触过结构体了&#xff0c;下面我们回顾一下结构体的基本内容。 创建结构体的语法如上所示&#xff1a; struct是创建结构体的关键字&#xff0c;然后tag就是我们结构体的名称&#xff0c;member-list是结构体的成员列表&…...

微服务即时通信系统---(五)框架学习

目录 ODB 介绍 安装 build2安装 odb-compiler安装 ODB运行时库安装 mysql和客户端开发包安装 boost profile库安装 总体打包安装 总体卸载 总体升级 头文件包含和编译时指明库 ODB常见操作介绍 类型映射 ODB编程 类与接口介绍 mysql连接池对象类 mysql客户端…...

蓝桥杯练习day1:自除数

前言 自除数 是指可以被它包含的每一位数整除的数。 例如&#xff0c;128 是一个 自除数 &#xff0c;因为 128 % 1 0&#xff0c;128 % 2 0&#xff0c;128 % 8 0。 自除数 不允许包含 0 。 给定两个整数 left 和 right &#xff0c;返回一个列表&#xff0c;列表的元素…...

0基础 | 上下拉电阻典型应用场景

三极管典型运用&#xff1a; 上拉电阻 下拉电阻 限流电阻 此处开关为三极管 左侧电阻&#xff1a;驱动电阻【限流电阻】 &#xff08;控制mos管&#xff09; 下面电阻&#xff1a;下拉电阻【关断电阻】 %%作用1&#xff1a; &#xff08;因为IO口输出信号分为低电平&…...

MySQL数据高效同步到Elasticsearch的四大方案

目录 引言 一、为什么需要MySQL到ES的同步&#xff1f; 二、四大同步方案对比 三、方案详解与代码实战 1. 应用层双写&#xff1a;简单但强耦合 2. 定时任务同步&#xff1a;可控的准实时 3. Logstash JDBC&#xff1a;离线迁移利器 4. Binlog监听&#xff1a;生产级实…...

Docker详解

云是一种服务理念。在云里docker是业务的最小载体 doker是管理容器的引擎&#xff0c;为应用打包、部署平台、而非单纯的虚拟化技术 1.轻量级虚拟化 2.一致性 4.高效的资源利用 5.易于部署和扩展 docker和虚拟机的区别&#xff1a; 虚拟机&#xff1a;真机需要一个操作系…...

清晰易懂的Maven安装教程(含自定义依赖包位置)

初学者也能看懂的 Maven 安装教程&#xff08;含自定义依赖包位置&#xff09; Maven 是一个强大的项目管理和构建工具&#xff0c;广泛用于 Java 项目的依赖管理和构建自动化。本教程将手把手教你如何在 Windows 系统上安装 Maven&#xff0c;并配置环境变量&#xff0c;同时…...

王道数据结构6.3

顶点x的第一个邻接点以及下一个邻接点 int first_neighbor(Algraph G, int x){if(G.vertices[x].firstarc! nullptr){return G.vertices[x].firstarc->adjvex;}else return -1; }int next_neighbor(Algraph G,int x,int y){ArcNode *pG.vertices[x].firstarc;while(p! null…...

【Linux操作系统——学习笔记二】Linux简单导航命令操作

一、前言 学习Linux&#xff0c;本质上是学习在命令行下熟练使用Linux的各类命令。 命令行&#xff1a;是一种通过输入命令和参数与计算机系统进行交互的方式&#xff0c;可以使用各种字符化命令对系统发出操作指令&#xff0c;打开Linux终端&#xff0c;进入命令行界面。 …...

贪心算法——c#

贪心算法通俗解释 贪心算法是一种"每一步都选择当前最优解"的算法策略。它不关心全局是否最优&#xff0c;而是通过局部最优的累积来逼近最终解。优点是简单高效&#xff0c;缺点是可能无法得到全局最优解。 一句话秒懂 自动售货机找零钱&#xff1a;用最少数量的…...

SPI 总线协议

1、协议介绍 SPI&#xff0c;是英语 Serial Peripheral interface 的缩写&#xff0c;顾名思义就是串行外围设备接口。是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。 SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线。主节点或子节点的数据在…...

单片机开发资源分析的实战——以STM32G431RBT6为例子的单片机资源分析

目录 第一点&#xff1a;为什么叫STM32G431RBT6 从资源手册拿到我们的对STM32G431RBT6的资源描述 第二件事情&#xff0c;关心我们的GPIO引脚输出 第三件事情&#xff1a;去找对应外设的说明部分 第一点&#xff1a;为什么叫STM32G431RBT6 对于命名规则不太熟悉的朋友看这里…...

物联网(IoT)架构中,平台层的应用与技术

在物联网(IoT)架构中,平台层是连接物理设备(感知层)和应用服务(应用层)的核心部分。它负责数据的采集、处理、存储、分析以及设备管理等功能,是物联网系统的“大脑”。以下是平台层的主要功能及其技术实现手段: 平台层的主要功能 设备管理: 功能:管理物联网设备的注…...