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

CLIP-LoRA: Low-Rank Few-Shot Adaptation of Vision-Language Models

文章汇总

当前的问题

当前的视觉语言模型(VLMs)小样本的研究主要在提示学习和适配器上,这通常依赖于繁重的训练程序(提示学习)和/或精心选择的任务特定超参数(适配器),这可能会阻碍其适用性。作者在VLMs的小样本学习中引入了低秩自适应(LoRA),并与当前最先进的基于提示和基于适配器的方法进行了比较。

贡献

贡献点1:总结常见四种高效微调(PEFT)

贡献点2:将LoRA应用在VLMs上

实验结论如下:

平均而言,调整两个编码器可以获得最佳结果。除了EuroSAT之外,单独调整视觉编码器显示出更好的稳定性,同时调整两个编码器是最有效的策略,导致显著的增强。这与最近的方法相一致,这些方法结合了额外的视觉标记[5,26],以提高性能,超出了仅使用文本提示调优所能达到的效果,如CoOp[63]所示。

调整更多的注意力矩阵可以带来更好的结果,但是…… 在研究的四种注意矩阵中,自适应值或输出矩阵( W v W_v Wv W o W_o Wo)似乎是最好的策略,表现出相当一致的性能差异。此外,正如最初的LoRA论文和随后的著作[21,60]所讨论的那样,采用更多的权重矩阵可以获得更好的结果。然而,它也会降低性能,正如ImageNet和StanfordCars的rank所证明的那样。这与最近旨在动态调整矩阵秩的方法一致[48,60]。

选择LoRA模块的位置需要仔细考虑。LoRA模块位置的影响——无论是对下半部分(下)还是对上半部分(上)的影响——在图3的条形图中进行了说明,这些条形图具有不同的性能,没有明显的赢家。我们发现跨所有层添加LoRA模块更有效。相比之下,在LLM的背景下,AdaLoRA[60]建议将更大的秩分配给中间和最后一层而不是第一层,可以获得更好的结果。应用于VLMs的类似策略可能为未来的研究揭示有希望的途径。

需要思考的地方?

图中有个不合理(可改进)的现象:

添加文本编码器的微调反而将本身很好的视觉编码器拖累了!

如果这个现象还存在在其他数据集上,那么是可以考虑改进的一个点。

摘要

最近在视觉语言模型(VLMs)的小样本自适应方面取得的进展进一步提高了它们的泛化能力,代价是在目标下游任务中只牺牲了几个标记样本。然而,这些有希望的,已经相当丰富的小样本几篇文献主要集中在提示学习上,并且在较小程度上,集中在适配器上,忽略了参数有效微调(PEFT)的最新进展。此外,现有的VLMs的小样本学习方法通常依赖于繁重的训练程序和/或精心选择的任务特定超参数,这可能会阻碍其适用性。作为回应,我们在VLMs的小样本学习中引入了低秩自适应(LoRA),并与当前最先进的基于提示和基于适配器的方法相比,在11个数据集上展示了其潜力。令人惊讶的是,我们简单的CLIP-LoRA方法显示出实质性的改进,同时减少了训练时间并在所有目标任务中保持相同的超参数,即在所有数据集和样本(shot)数量上。当然,我们令人惊讶的结果并没有忽视提示学习和基于适应的研究的潜力。然而,我们相信我们的强基线可以用于评估这些新兴学科在小样本VLMs中的进展。

1. 介绍

视觉语言模型(VLMs),如CLIP[42],已经成为学习跨模态表示的强大工具[23,31,42,54,58,59]。在具有对比目标的大量图像-文本对集合上进行预训练[42],VLMs学习对齐这两种模式,通过匹配图像的视觉嵌入和代表目标任务的文本描述(提示)来实现零样本预测。这个空间的视觉和文字特征的联合表示也为预训练、微调和预测范式开辟了新的可能性,通过对非常有限的特定任务的标记数据进行适应[61,63,64],即小样本适应。尽管如此,它们的效能通常依赖于基于transformer的架构[49],其中较大的变体明显优于较小的变体。

例如,在CLIP中,ViT-L/14模型在ImageNet上的精度明显超过ViT-B/16版本超过6%[9],即使对模型进行少量的调整,这种差异仍然存在。这强调了对可扩展到大型模型的高效视觉语言微调方法的需求。最近涌现的一些视觉语言文献,尽管已经相当丰富,但迄今为止都忽略了微调策略的计算开销和内存占用。这就是所谓的适配器,它为模型提供额外的可训练参数[61],以及流行的提示学习方法[63],它对输入文本提示进行微调。这可能会增加计算需求和这些已经非常庞大的模型的规模。

围绕微调阶段的这些问题引发了人们对NLP的广泛兴趣,其中基础模型的规模正在快速增长,一些模型拥有超过1760亿个参数[50],甚至高达5400亿个参数[7]。为了应对这些挑战,参数有效微调(PEFT)方法获得了大量关注[33],该方法试图对少量参数进行微调(与原始的大型模型相比)。流行的PEFT方法包括选择现有参数的子集[56],添加称为适配器的小型可训练模块[6,20,25,34,44],或添加可训练的(提示)令牌[24,29,32]。最近,一种仅由微调低秩矩阵组成的新方法被称为低秩自适应(low-rank Adaptation, LoRA),这是一种很有前途的实用方法[21]。

PEFT方法,如LoRA,使大型语言模型的微调民主化,甚至可以在单个GPU上管理十亿参数模型[11]。不仅仅是提高计算能力效率方面,经验证据表明,在大规模微调设置下,LoRA可以匹配甚至超过更新所有模型参数的性能[21]。尽管非常有前途/流行,而且令人惊讶的是,这种快速增长的PEFT文献[11,21,27,48,60,65]在小样本视觉语言中几乎没有发现共鸣,其中主要的方法主要集中在提示调优[3,5,53,62 - 64]或适配器[14,55,61]。

原始CLIP论文表明,更好的文本描述可以极大地影响零样本预测[42]。这一观察结果是提示调优出现的强烈动机[29],在CoOp的开创性工作[63]之后,这一策略在视觉语言社区中被广泛采用。事实上,CoOp在小样本VLMs的设置中推广了提示调优。这引发了最近相当多的文献关注于提高VLMs的提示学习性能,包括在小样本[3,5,10,36,53,62 - 64]和无监督设置[13,22,38,57]。虽然提示学习方法提高了小样本性能,但它们会带来沉重的计算负载进行微调,并且可能难以优化,因为输入的每次梯度更新都需要在整个模型中反向传播;训练时间见表1。

表1。16张ImageNet任务的训练时间。实验在一台A100 80Gb上进行,原始代码由作者提供。对于PLOT++,报告的时间包括两个训练阶段。

除了不断扩展的提示调优文献之外,也有一些尝试提出了针对小样本VLMs的替代方法,通常依赖于适配器[14,55,61]。然而,这种适配器的性能在很大程度上依赖于一组超参数(如学习率、epoch数或控制图像和文本嵌入混合的参数)[45],必须为每个目标数据集专门找到这些参数。这是通过对验证集的密集搜索来完成的,这需要额外的标记样本并产生计算开销,从而降低了它们对新任务的可移植性。

贡献

在这项工作中,我们研究了低秩自适应(LoRA)在小样本VLMs背景下的部署,这是一个新兴的,已经相当丰富的以提示学习和基于适配器的策略为主的文献。我们彻底检查了在这种情况下部署LoRA的不同设计选择,即编码器(视觉、语言或两者)的选择、要适应的特定权重矩阵的选择以及矩阵的秩。我们对11个数据集进行了全面的实证分析和比较,强调了我们的基线的最佳设计选择,并将其与现有的最先进的基于提示和适配器的方法并置。令人惊讶的是,我们的LoRA基线在减少计算开销的同时,在小样本VLMs中超过了最先进的水平。此外,它减少了在特定于数据集的验证集上密集搜索超参数的需要,在所有目标任务中保持一致的超参数配置。虽然我们令人惊讶的结果并没有使提示学习和基于适配器的策略的效果无效,但我们相信这个强大的基线可以用来评估这些突发主题在小样本VLMs中的进展。

2. 相关工作

参数有效微调(PEFT)

(a) Prompt、Adapter和Low-rank技术为训练引入了额外的参数,与选择性方法相比,这可能会延长训练时间和/或内存占用。然而,它们的优点是更灵活,而且通常更容易使用。

(b) Prefix和Adapter方法在适应后会导致额外的参数,相对于vanilla模型可能会增加推理时间和内存占用。相反,LoRA将新训练的低秩矩阵与原始冻结的矩阵合并,在推理时消除额外的参数。

图1所示。不同类别的参数有效微调(PEFT)方法在(a)训练和(b)推理。

PEFT试图通过集中(重新)训练相对较少的参数来减少对大规模模型进行微调的高昂费用。这些技术可以分为四类,主要由训练参数的选择来区分[33]。这通常会导致在内存占用、计算开销和性能之间进行权衡。图1描述了一个总结。

避免完全微调的最直接的方法是通过选择性方法,它专注于现有模型权重的一个子集。其中,BitFit[56]仅微调变压器块中注意力层和MLP层的偏差,而其他方法则对模型进行修剪以创建特定于任务的参数子集[15,19]。

其次,适配器将额外的可训练模块集成到原始的冻结架构中[6,20,25,34,44];例如,通过移动和缩放深度特征[34]。

它们在各种涉及视觉和语言的任务中也表现出了多功能性和有效性[47]。尽管如此,使用适配器的主要缺点是自适应后参数的额外数量,这可能导致更高的推理延迟,尽管最近的一些研究旨在缓解这个问题[41]。

第三,有提示调优或基于令牌的调优[24,29,32],这涉及到在输入或中间序列中添加可学习的令牌。这种策略在视觉语言的少样本和零样本学习中特别流行,用可学习的软提示代替难以设计的模板提示[38,63]。最初应用于文本提示,最近的作品已将该技术扩展到基于transformer的体系结构中训练视觉标记[24]。这一研究方向已经开始引起少样本视觉语言领域的兴趣[26]。

最后,低秩自适应(Low-Rank Adaptation, LoRA)[21]在保持原始参数不变的情况下,加入低秩矩阵来显式表示权重变化。然后,这些显式更改可以与原始权重合并,与香草模型相比,不会产生额外的推理延迟。LoRA的运行假设是,微调过程所需的更新表现出较低的“固有秩”[1,30],我们可以通过每个权重变化矩阵的秩直接控制这一属性。在这方面,LoRA可以被视为一种适配器方法,但它通过提供其模块的直接聚合来提供选择性方法的优点,从而消除了对推理阶段的额外参数需要。原始LoRA的几个版本已经出现,一些版本侧重于使每个矩阵的秩自适应[48,60],另一些版本则提高其性能[4,27,65]或通过量化减少其内存占用[11,43]。

视觉语言的小样本学习

大规模VLMs在多个视觉任务中显示出优异的效果[59]。这一成功引起了人们对开发利用其一般知识的适应技术的兴趣[51]。其中,提示调优[29]已成为适应标记数据较少的VLMs的主要方法[3,5,10,36,53,62 - 64]。CoOp[63]优化了附加在类名上的可学习的公共连续令牌,称为上下文优化。CoCoOp[62]训练神经网络生成基于图像的实例条件令牌。进一步的努力,如ProGrad[64]和KgCoOp[53]等[3],将提示引导到预定义的手工制作的提示,例如,由于梯度投影[64],在学习过程中保留了初始知识。

在提示学习作品中,PLOT[5]是最早采用文本和图像两种模式的作品之一。他们建议通过最优的传输公式将学习到的提示与更细粒度的视觉特征结合起来。请注意,正如第6节所讨论的,这种跨模式适应也是我们方法中的一个关键因素。遵循类似的轨迹,MaPLe[26]在视觉和文本编码器中引入了中间可学习的标记,同时使它们在每个级别上相互依赖。他们进一步证明,适应这两种模式分支可以在下游任务中获得更大的灵活性。

基于适配器的方法提供了一种替代策略,并且在视觉语言中得到了越来越多的研究[14,55,61]。CLIP-Adapter[14]学习视觉适配器来结合改编和原始特征。其他一些方法建议利用这些模型的知识,同时只访问它们的最终嵌入状态。例子包括零样本场景的无参数插件关注[16],或在小样本学习中使用缓存模型的Tip-Adapter(-F)[61]。类似地,TaskRes[55]保持原始文本权重不变,并引入任务残差调优,以学习基于初始知识构建的特定于任务的适配器。

3. VLMs的小样本微调

本节概述了最近为VLMs设计的小样本微调方法,如图1所示。首先,让我们介绍一些基本的符号和定义。

当处理基于视觉语言模型的分类任务时,给定一组 K K K个候选类,创建文本描述,即所谓的提示[35],每个提示对应于一个类,例如, c k c_k ck是a photo of a [kth class name],的照片的标记化版本, k = 1 , … , K k=1,\ldots,K k=1,,K t k = θ t ( c k ) t_k=\theta_t(c_k) tk=θt(ck)记为对应的规范化(单位超球)文本嵌入表示, θ t \theta_t θt表示语言编码器的参数。类似地,每个图像 x i , i = 1 , … , N x_i,i=1,\ldots,N xi,i=1,,N使用视觉编码器 θ v : f i = θ v ( x i ) \theta_v:f_i=\theta_v(x_i) θv:fi=θv(xi),将 N N N投影到相同维数的归一化嵌入空间上。

零样本预测是使VLMs适应下游任务的最简单形式,它遵循它们的预训练过程[42]。将每个文本嵌入 t k t_k tk与测试图像 x i x_i xi的视觉嵌入 f i f_i fi配对,可以测量它们的余弦相似度,得到预测logit:

这也产生了一个概率预测,在给定测试输入 x i x_i xi的情况下,以 k k k类的后验softmax概率的形式:

式中 τ \tau τ为软最大温度参数1。因此,通过找到后验概率最高的类来对图像 x i x_i xi进行零样本分类: k ^ = argmax k p i , k \hat k=\text{argmax}_k p_{i,k} k^=argmaxkpi,k

在小样本微调设置中,为了进一步调整这些模型,我们假设我们有 N / K N/K N/K个标记样本,用于每个目标类,即所谓的支持集。 N N N表示支持样本的总数, N / K N/K N/K(每个类的样本次数)通常很小(小于16)。令 y i k y_{ik} yik表示有标签的支持图像 x i x_i xi的单热编码标签,即如果 k k k是图像 x i x_i xi的类, y i k = 1 y_{ik}=1 yik=1,否则为0。然后,我们最小化交叉熵(CE)损失:

这可以通过(i)微调输入提示, c k , k = 1 , … , K c_k,k=1,\ldots,K ck,k=1,,K,是继CoOp开创性工作之后的提示调谐方法[5,26,53,62 - 64];或者(ii)通过更新一组附加参数,如适配器[14, 55, 61]。请注意,其他方法建议调优额外的中间令牌[26],我们将其包含在“提示调优”类别下,以获得更一般的术语。

现在我们将详细介绍VLMs中使用的两种当前策略:提示调优§和适配器(A)。

提示调优§

在VLMs中执行提示的方式可能会显著影响随后的性能[42]。为了解决这个问题,软提示调优[29,32]优化了文本输入令牌,这可以扩展到中间层[32]。类似地,如果使用基于transformer的[49]架构,这些可学习的标记可以插入到视觉模型中[24]。在few-shot VLMs的背景下,[63]的作者引入了上下文优化(CoOp),将文本输入 c k c_k ck构建为连续可训练向量:

式中 M M M为超参数, ( v k l ) 1 ≤ l ≤ M (v^l_k)_{1\le l\le M} (vkl)1lM为可训练文本令牌, [ c l a s s k ] [class_k] [classk]为固定令牌。后者是第 k k k类名称的词嵌入向量。通过使用Eq.(3)中的标准监督CE分类损失,以及少量标记样本,这些可训练向量被更新为特定于任务的文本提示。与基于适配器的方法相比,提示调优有一个明显的优势:它们不需要启发式地选择文本提示[63],文本提示是专门为每个任务设计的,其选择可能会显著影响性能。虽然提示调优方法显著提高了分类的性能,但它们会导致 大量的计算负载用于微调,并且可能难以优化,因为文本输入的每次梯度更新都需要通过整个模型进行反向传播(参见表1中报告的训练时间)。

适配器(A)

另一类称为适配器的方法不是更新文本提示,而是用额外的参数增强预训练模型,同时保持现有的参数不变[20]。这提供了一种有效的方法来控制可训练参数的数量。这个想法最近已经在小样本视觉语言设置中进行了探索[14,55,61]。在这种情况下,适配器可以被视为特征转换,通过一些多层模块,附加到编码器的瓶颈。这样可以学习混合图像和文本特征的转换,logits采用以下形式:

式中 θ α \theta_{\alpha} θα表示适配器的附加可训练参数。这些通过最小化(3)中的CE损失来进行微调,使用标记的支持集,但现在使用logits l i , k l_{i,k} li,k转换通过(5)。例如,CLIP-Adapter[14]增加了一个多层感知器来修改特征。Tip-Adapter[61]添加了一个模块,该模块通过标记样本特征之间的一些两两相似性来评估类分数,并将这些分数与文本提示的嵌入集成在一起。与提示技术相比,这类方法减少了计算负荷。然而,正如最近在[45]中的实验中指出的那样,它们的表现似乎强烈依赖于一些关键的超参数,这些参数必须针对每个下游任务进行专门调整。这是通过对验证集的密集搜索来完成的,这需要额外的标记样本[61]并产生计算开销,这降低了它们对新任务的可移植性。

4. CLIP-LoRA

低秩自适应(Low-Rank Adaptation, LoRA)[21]基于下游任务的“固有秩”思想,将预训练权重的增量更新建模为两个小矩阵 A A A B B B的乘积。对于输入 x x x,隐藏状态 h h h,权矩阵 W ∈ R d 1 × d 2 W\in R^{d1\times d2} WRd1×d2,应用LoRA模块后,修改后的正向传递为:

其中 A ∈ R r × d 2 , B ∈ R d 1 × r , Δ W ∈ R d 1 × d 2 A\in R^{r\times d2},B\in R^{d1\times r},\Delta W\in R^{d1\times d2} ARr×d2,BRd1×r,ΔWRd1×d2,秩为 r r r,其中 r r r通常 ≪ { d 1 , d 2 } \ll \{d1,d2\} {d1,d2} γ \gamma γ为比例因子。 A A A中的值通过Kaiming初始化随机初始化,而B则用零填充。这意味着在训练之前没有增量更新,因此输出保持不变。

在原始的LoRA论文中,将低秩矩阵应用于基于transformer的体系结构的注意力矩阵[49]。它们通常由 L L L个堆叠块组成,每个块包含一个多头注意(MHA)模块:

其中 d d d为比例因子, W K i , W Q i , W V i , W o W_{K_i},W_{Q_i},W_{V_i},W_{o} WKi,WQi,WVi,Wo为权重矩阵,分别对应键、查询、值和输出矩阵。请注意,其他作品将这种方法扩展到前馈模块的权重矩阵[17]。

VLMs的LoRA

在视觉语言中应用LoRA的一种直接方法是将其应用于视觉和文本编码器的所有矩阵。然而,由于few-shot设置固有的相对较小的监督,我们只对 r = 2 r = 2 r=2的查询、键和值矩阵应用低秩矩阵。我们通过 p = 0.25 p = 0.25 p=0.25的dropout层对LoRA模块的输入进行正则化[21]。迭代次数设置为500乘以 N / K N/K N/K(每个类的标记样本数量)。我们使用 2 ∗ 1 0 − 4 2*10^{-4} 2104的学习率,余弦调度器和32的批处理大小,这样所有的训练都可以在24 Gb的单个GPU上执行。这些超参数在所有实验中都是固定的。输入提示符简单地设置为a photo of a [kth class name], k = 1 , … , K k=1,\ldots,K k=1,,K,以强调CLIP-LoRA的适用性,而无需诉诸复杂的初始手动提示。请注意,LoRA模块位于两个编码器的每个级别。第6节研究了LoRA模块位置的影响,并提供了证据,证明适应这两种模式对于某些任务是必要的。

5. 小样本学习

表2。以ViT-B/16为视觉主干的11个数据集的详细结果。报告了3个随机种子的平均精度最高。最高值以粗体突出显示,次高值以下划线突出显示。

CLIP-LoRA的性能在不同的视觉编码器上是一致的。如图2所示,CLIP-LoRA平均优于其他使用vitb /32架构和更大的vitl /14架构的少量拍摄方法。这进一步支持了我们方法的多功能性。三个主干的详细结果可在附录中找到。

CLIP-LoRA具有计算和内存效率。表1比较了领先的提示学习方法的训练时间;CLIP-LoRA在较短的训练时间内获得更好的性能。此外,性能最好的适配器方法,即Tip-Adapter-F,依赖于一个大型缓存模型,该模型存储跨每个类的所有实例的嵌入。相比之下,LoRA在推理阶段合并其适应的矩阵,从而消除了对原始模型所需的额外内存的需求。

图2。在10个细粒度数据集和使用ViT-B/16视觉主干的ImageNet上详细的小样本学习结果。viti - b /16, viti - b /32和viti - l /14在相同的11个数据集上的平均性能分别在最后三个图中报告。

6. VLMs如何应用LoRA ?

在本节中,我们深入研究了LoRA模块的使用,确定了三个主要的设计考虑因素:(1)调整视觉编码器,文本编码器或两者之间的选择,包括要调整的特定层;(2)选择注意矩阵进行调谐;(3)确定这些矩阵的合适秩。

我们通过三个数据集来探索这些方面:ImageNet、Stanford Cars和EuroSAT。ImageNet因其广泛的多样性而被选中,而后两者因其独特的行为而被选中。图3描述了七组不同的适应注意矩阵和增加秩值的结果。

平均而言,调整两个编码器可以获得最佳结果。除了EuroSAT之外,单独调整视觉编码器显示出更好的稳定性,同时调整两个编码器是最有效的策略,导致显著的增强。这与最近的方法相一致,这些方法结合了额外的视觉标记[5,26],以提高性能,超出了仅使用文本提示调优所能达到的效果,如CoOp[63]所示。

调整更多的注意力矩阵可以带来更好的结果,但是…… 在研究的四种注意矩阵中,自适应值或输出矩阵( W v W_v Wv W o W_o Wo)似乎是最好的策略,表现出相当一致的性能差异。此外,正如最初的LoRA论文和随后的著作[21,60]所讨论的那样,采用更多的权重矩阵可以获得更好的结果。然而,它也会降低性能,正如ImageNet和StanfordCars的高排名所证明的那样。这与最近旨在动态调整矩阵秩的方法一致[48,60]。

选择LoRA模块的位置需要仔细考虑。LoRA模块位置的影响——无论是对下半部分(下)还是对上半部分(上)的影响——在图3的条形图中进行了说明,这些条形图具有不同的性能,没有明显的赢家。我们发现跨所有层添加LoRA模块更有效。相比之下,在LLM的背景下,AdaLoRA[60]建议将更大的秩分配给中间和最后一层而不是第一层,可以获得更好的结果。应用于VLMs的类似策略可能为未来的研究揭示有希望的途径。

图3。当低秩矩阵位于编码器的每一层时(所有),注意块的不同矩阵的4个样本精度为Top-1。第四个条形图研究了仅将低秩矩阵定位在最后半层(Up)、前半层(Bottom)或每个层(All)上的影响。报告的前1名准确率是3个随机种子的平均值。

7. 结论

我们在使用固定超参数的视觉语言模型(VLMs)的小样本自适应中始终优于基于提示和适配器的方法,从而建立了一个强大的基线。我们希望我们的工作能够启发未来的设计方法,这些方法要么保持固定超参数的简单性和效率,要么为自适应超参数设置提供明确的指导方针。此外,我们还证明了选择要适应的矩阵并确定相应的秩以使用LoRA模块最大化性能是非常重要的。我们相信我们工作的这些方面为未来的研究提供了一个有希望的领域。

参考资料

论文下载(2024 CVPR workshop)

https://github.com/MaxZanella/CLIP-LoRA

代码地址

https://github.com/MaxZanella/CLIP-LoRA


http://www.kler.cn/a/419667.html

相关文章:

  • 1、C++ 介绍
  • 新手学习:网页前端、后端、服务器Tomcat和数据库的基本介绍
  • 【C#】书籍信息的添加、修改、查询、删除
  • MySQL常见面试题(二)
  • 【AI系统】CANN 算子类型
  • SpringMVC:参数传递之日期类型参数传递
  • 密码学和CA证书
  • Elasticsearch优化汇总
  • phpmyadmin导出wordpress数据教程
  • 在 CentOS 上安装 Docker:构建容器化环境全攻略
  • 《Python基础》之正则表达式--re模块
  • 【QNX+Android虚拟化方案】124 - VLAN配置 之 QNXAndroid 修改简单记录
  • java原生反序列化利用链7u21的学习
  • CCNA_SEC 第五天作业
  • 一款适用于教育行业的免费word插件
  • Stable Diffusion介绍
  • ARM 嵌入式处理器内核与架构深度剖析:解锁底层技术逻辑
  • Java中Logger定义的三种方式
  • 多点DMALL启动招股:将在港交所上市,聚焦数字零售服务
  • 在anaconda中为jupyter安装Nbextensions扩展
  • C++初阶——动态内存管理
  • android studio引用so库
  • 【Linux】文件操作的艺术——从基础到精通
  • 深度学习-52-AI应用实战之基于Yolo8的目标检测自动标注
  • 剖析go协程池实现原理
  • (简单5步实现)部署本地AI大语言模型聊天系统:Chatbox AI + grok2.0大模型