浅谈多模态领域的Transformer

本次跟大家简单聊下,从最早的纯视觉单模态模型卷积神经网络(CNN) ,到多模态视觉模型 Transformer

大家想了解单模态模型,建议大家看下我上一篇写的 # 单模态视觉识别模型:从应用到原理的初步解析

它们是从单模态模型 ,通过卷积核 进行识别图片,然后一步一步的,用Transformer 来替代卷积神经网络 ,进行视觉识别

然后到CLIP 的横空出世,第一次 打通了人类的语言与视觉的间隔,让他们一一对应,一对图文对它的相似度就是最高的。这样的理论为后面的多模态模型 产生非常大的影响,也让之后的模型可以做更多的事情。

再到文生图模型 ,你给一个文字,我生成一个图片,我把你这个文字形成向量,然后通过Transformer Decoder(解码器) 还原成一个相似度高的图片向量,在把图片向量还原成图片。

Transformer Decoder 是自回归的

多模态模型 的诞生,并不意味着卷积神经网络 的淘汰,世间万事万物都有其规律,存在即合理

简单说下,当模型 做的很小,所属的场景很窄,比如该模型 专门识别零件上的缺陷,正常工厂内的流水线上,每生产一万个零件,总会有几个零件存在缺陷。这个时候使用Transformer模型 效果就会比较差,还不如用卷积神经网络效果好。

原因是Transformer 适合做场景多、通用类型,很多活都能干,而且要做的很大,就特别适合用Transformer

卷积神经网络就恰恰相反,它的模型小,适合场景窄。

我们在挑选模型时,要根据使用场景,做到性能最大话,这也是AI大模型开发工程师的能力之一。

在文生图领域中大多数使用的是扩散模型 ,当文生图扩散到文生视频等领域。Transformer 可以很好的跟扩散模型 做交融,并且可以得到非常牛逼的效果,如果只用扩散模型是达不到这样的效果,后面我们会聊到为什么会这样。

多模态模型:

  • ResNet: Residual neural network,残差学习框架;

  • ViT: Vision Transformer,视觉版的Transformer;

  • Swin Transformer: 视觉版的Transformer;

  • CLIP: Contrastive Language-Image Pre-training,视觉与语言的统一学习;

  • ViLT: Vision-and-Language Transformer

ResNet(残差学习框架)

参考资料: ResNet论文

当你把神经网络 层数变得越来越多时,越靠后的层能提取更深度的特征

# 揭秘Transformer架构设计 2(补全版) 的有讲到Tansformer Decoder(解码器) ,Tansformer Decoder(解码器) 内部会进过96轮次解码 操作,层度越深,它就能找到更深层次的语义信息 ,甚至一些句子与句子之间的隐含关系也可以提取出更深的特征信息。

按正常道理来说,神经网络 层数越多,它能提取的特征信息 也就越深度,你用它来做图像识别,它的准确率应该越高,而且在模型 比较小的时候,确实也是这样。所以当时的模型神经网络就做到了几十到上百层。

这里声明:卷积神经网络 的层数与Transformer 的层数不是一个概念,卷积神经网络 的一层不是相当于Transformer 的一层,Transformer的一层有非常多的神经网络。

但是慢慢的,人们发现一个问题,层数越多,效果并没有越来越好。然后他们就做了很多测试,同样的卷积核的逻辑,当我把20层提到56层的时候,56层的表现不如20层,如下图所示:

有些物体,我们光看轮廓是知道它是什么东西,有些物体,光看轮廓是不知道它是什么东西,

有时候我们不需要提取那么深度的特征 ,有时候神经网络 层度过深的时候,它会提取出来没有必要的特征信息

我们以 # 单模态视觉识别模型:从应用到原理的初步解析飞机图片案例 来说,

在飞机图片上,有草地,草地上的草有些是深绿色、有些是墨绿色,有些是枯色,有些草在一起,有些草有高有低等等。这都属于图片的细节,这些细节并不是我们希望模型去提取出来的,我们不希望模型去把周边的不重要的细节去提取特征,在下面这张图,草地里草长什么样,是否有护栏,护栏长什么样,这些树有多高等等信息,对于整张图片来说,这些都属于噪声,所以当我们网络层数变多时,它没有必要有那么深的层数,因为网络层数变多,会把算力、时间消耗在那么没有必要的噪声上。

这个时候就衍生了ResNet ,在视觉任务时,神经网络 层数变多,它就能提取更深度的特征 ,但是我的浅层/纹理特征也很重要。

曲线identity也叫残差链接

Transformer - Decoder(解码器) 来解释:

案例:有一段1300字的文案,给Transformer去理解,输出理解后的新1300个数学向量。

1300个12288维数学向量 输入到Decoder解码器 内,Decoder解码器 输出新1300个12288维向量

这里面每个12288维数学向量 都做了特征提取以及信息聚合 ,如果把Decoder里面做的工作叫做F(x)

你输入一个X(1300个12288维数学向量)过来,我对你做了F(Decoder解码器)计算,然后输出F(x)(新1300个12288维向量)

输入的X与输出的F(x)不一样,就像Transformer - Decoder (解码器) ,输入的1300个12288维数学向量 与输出的新1300个12288维数学向量是不一样

这个链接线的意思是,我把X直接传送到输出端,不经过F计算,在输出端会进行计算F(x) + X

再用Transformer - Decoder 解码器 来看,输入1300个12288维数学向量 ,经过Decoder解码器 ,得到新的1300个12288维向量 ,然后把新的向量 + 输入的向量
X 输入的向量:[a1, a2, a3, ..., a1299]

F(x)新的向量:[b1, b2, b3,..., b1299]

F(x) + X输出的向量:[a1 + b1, a2 + b2, a3 + b3, ..., a1299 + b1299]

为什么要这样做?

你输入X向量 进来,经过一系列的计算,在输出端有F(x) ,然后X向量 也通过identity曲线 把传送到输出端,输出端就等于F(x) + X,这样的好处有2个:

  • 如果没有identity曲线X向量 传送到输出端,输出端只有F(x) ,那么经过多层神经网络 处理后,图片的纹理信息就会丢失,但是通过F(x) + X 的话,每次输出都会把X向量 带上,它的纹理信息就不会丢失,越深层的卷积层,处理的都是结构和形状信息,越浅层,它处理的都是纹理与颜色信息,所以这样做到信息不丢。

  • 神经网络 较深时,担心神经网络 没事干,它会对一些噪声信息进行提取特征 ,层数越多,累加的噪声信息也越多,对最后的向量 有很大的影响。但是有了这个结构后,你的F(x) 计算可以把这个概率趋近于0,它只会把X向量 传递给下一轮次。在神经网络不添乱的情况下,F(x) = 0 的话,我也可以把原始信息X向量向下传导。

如下图所示,同样是34层网络,左边不加任何的残差链接 ,右边是每一层都加了残差链接

对于右边来说,右边有机会把所有的神经网络 都跳跃,也可以全部不跳过,或者只跳过部分,哪些层在我整个过程当中扮演的是重点,哪些层在当前影响会轻点,完全可以在模型训练 过程确定,对于整个神经网络来说都是可调配的。

对于左边来说,每层神经网络 都要先卷积,再池化 ,而且必须串行执行,一溜串的计算下来,你的特征图 势必会越来越小,你的特征值 就必须要越来越长,而且特征值 越来越长、特征图越来越小的情况下,你的每一层只能从上一层提取特征,这样就会导致你的细节、纹理的信息会越来越被折损,越来越被抹杀掉,越来越靠近下一个阶层,甚至到最下面的阶层时,可能你的细节都被抹杀没了。

还是以Transformer - Decoder 解码器来解释:

1300个12288维数学向量 通过Decoder解码器 ,到第49层的时候,发现信息量过多,提取的特征 是无用或者是噪声,导致总误差变大,这个时候就会调整Wq,Wk,Wv 的参数是0,让这一层不做任何事情,避免影响总误差 ,1300个12288维的数学向量 怎么进来的,就怎么出去,这也是残差链接 的作用,进行调控神经网络 ,避免神经网络 层数过多,导致效果不如神经网络层次少的好。

不加任何残差链接 的情况下,34层的神经网络 比18层的神经网络错误率 还高,训练出来的模型进行识别图片的错误率,如下图所示:

残差链接 的情况下,34层的错误率就是低于18层,如下图所示:

有了ResNet 后,神经网络才开始爆发性的成长,能做到几百到上千层。

ResNet 是在卷积神经网络 后面发明出来的,它是让卷积神经网络视觉识别这件事情上做到了非常高的识别正确率。

ResNet论文\]([\[1512.03385\] Deep Residual Learning for Image Recognition](https://arxiv.org/abs/1512.03385)) 这个论文最大的贡献就是**残差链接** ,它让整个**神经网络** 变得越来越深,并且进化到了**深度神经网络**。 比如一个10分钟的视频,并且有问答文案,**模型** 要进行回答。 首先会用一个**维度** 特别高的**数学向量** 容纳这10分钟的**特征信息** 、并且进行**信息聚合** ,这是需要一个**深度神经网络** ,里面的层数比较多,要不然很难提取10分钟的视频,10分钟的视频信息特征比较多,因为有了**ResNet** ,使**神经网络**的层级没有了瓶颈。 **ResNet论文的出现是2015年,在Transformer论文是2017年发出的早好几年。** **Transformer - Decoder** 是抄了卷积神经网络的多头**卷积核** ,转换为**多头** ,然后拿了**ResNet的残差链接**,进行组合创新。 ## ViT(Vision Transformer) 参考资料:[ViT论文](https://arxiv.org/abs/2010.11929) **ViT是视觉版的Transformer,架构图:** ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a5393a676c6149eb84f00b9c6868288e.png) 在**ViT** 内部使用了**Transformer Encoder(编码器)** ,它设定的场景比较简单,只做最简单的图片识别。 因为**Transformer Encoder(编码器)** 比较适合做分析、理解工作,**Transformer Decoder(解码器)** 比较适合做生成,所以**ViT** 内部使用了**Transformer Encoder(编码器)**。 **ViT**设定的场景比较简单,只做最简单的图片识别。 虽然**卷积神经网络(CNN)** 比较适合做图片与视频的识别,但是我只想用**Transformer** 来替代**卷积神经网络(CNN)** ,如果能成功的话,未来是不是就有可能形成**大一统的多模态模型架构**,这也是这个论文的思路。 这个**ViT** 有一个新概念**Patch** ,与**大语言模型(LLM)** 的**Token**的概念类似。 把图片切成9个小方块,每个小方块就是一个**Patch**: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/52ab2b38e554471ca8c7195d85577afd.png) **Token**是有总数的,比如10万个、20万个,是有字典的,并且可穷举。 但**Patch** 不同,它是任何一个图片都可以切成小方格,每个小方格都是一个**Patch** ,所以**Patch**不能被穷举,也没有定数。 **Transformer** 只知道怎么处理序列数据,所以就要把9个小方块摆成一排。 每个**Patch** 就是一张小图片,每个图片里面都有像素,每个像素都是0 \~ 255的数值,每个图片都可以转换成**向量** ,比如 16 \* 16 像素的图片,就等于 256个数值,每个数值都是 0 \~ 255的数值,相当于**256维向量** ,就等于每个**Patch** 可以转换为一个**256维的数学向量**。 每个**256维的数学向量** 基于**Linear线性层** 做一个处理,就会得到一个新的**向量**。 **Linear Projection of Flattened Patches** 类似**Transformer Encoder(编码器)** ,9个**Patch** 经过**Linear线性层** 输出为9个**新向量** ,并且每个**新向量** 都有**位置编码Position**。 然后让它做图片识别任务,就要在**向量集** 最前面加个 **"0 \* " 向量** ,专门用来做抽取,本来有9个**向量** ,加上**抽取向量** ,就是**10个向量**。 这**10个向量** 输入到**Transformer - Encoder(编码器)** 进行**特征提取、信息聚合** ,最后 **"0 \* " 向量** 涵盖整个图片的信息,又因为它的初始不涵盖任何其他信息,具有**中立性质** ,所以把 **"0 \* " 向量**做为输出口。 然后把 **"0 \* " 向量** 输入到一个**线性层** ,也叫**全连接层(MLP Head) 或者叫分类头** ,输出的**向量数据** 最后再通过**softmax归一化**,输出类型的概率。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8e484a995c1742d9b3ed98e18c4f4166.png) **VIT模型有3个版本** * **ViT-Base:** 基础款,有**12层** 编码器,每层有**768维数学向量** ,有**3072个分类头** ,有**12头** 自注意机制,模型有**86M**参数。 * **ViT-Large:** 大尺寸款,有**24层** 编码器,每层有**1024维数学向量** ,有**4096个分类头** ,有**16头** 自注意机制,模型有**307M**参数。 * **ViT-Huge:** 超大尺寸款,有**32层** 编码器,每层有**1280维数学向量** ,有**5120个分类头** ,有**16头** 自注意机制,模型有**632M**参数。 ## ST(Swin Transformer) **参考资料:[ST论文](https://arxiv.org/abs/2103.14030)** **ST** 是在**ViT** 上做了优化,也属于**视觉版的Transformer**。 **ST的基于ViT模型改进**: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d4ad359bd18140b0a1b2043134fec85b.png) **ViT** 是把每个图片都切成若干个小方格,每个小方格都是一个**向量** ,每一个小方格都会做**多头自注意力机制** ,并且都会进行**相关度系数**计算。 视觉任务与文字任务是不一样的,文字任务,哪怕你有一万个字,你最开始的一个段落讲的一件事情和最后段落讲的一件事情可能都会有相关性。 但是图片不一样,图片里出现的东西,都是**物理世界客观存在的东西,物理世界是有一定客观规律的** ,比如一个人站在图片里,人脑在左上角,手在右上角,人的肚子在左下角,这样的情况是不可能出现的。这也叫**刚性知识** 。在**物理世界里物体都是具有刚性属性的** ,这样**刚性属性就注定着它是有连接的**,极少有物体,一个物体的某部分在左上角,另一个部分在右上角。 基于**刚性属性** ,可以得到这样的结论:2个距离比较远的**Pacth** ,它们的**相关度系数** 最低,**模型**无需去进行相关计算,避免资源的浪费。 **简而言之,这2个Patch不需要做任何的信息交换,或者是信息聚合。** **ST(Swin Transformer)** 只让红色方格内的小灰色方格进行**自注意力机制** 操作,计算**相关度系数与信息聚合** 。然后到达下一轮时,红色方格会进行重新拼接组成更大的红色方格,它的**自注意力机制** 也仅在红色方格内,让灰色小方格做**相关度系数计算与信息聚合**,以此类似,每个轮次都是进行类似的操作,红色方格与红色方格是不会进行交换数据。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0375f84bfa774d2b9cd364dd22f4dfdc.png) 最开始第一层时,红色小方块都很小,**ST** 只允许,灰色的小方格在红色小方格里,通过**自注意力机制做聚合和信息交换**。 到了第二层,我的红色小方格就变大一点,我就允许灰色小方格,在更大的红色小方格里,通过**自注意力机制做信息聚合与信息交换**。 然后再到第三层,我把红色小方格变得更大,我允许任一灰色小方格通过**自注意力机制做相关度系数计算与信息聚合**。 **ST模型** 用这样的方式进行处理,它每一层还是**Transformer** ,但是**ST** 在每一层限制了哪些**Patch** 之间可以做**信息聚合** 和信息交换,而且这样的话,**自注意力机制** 进行计算,它的计算量也会小很多,比如在第一层红色小方格里,灰色小方格也就16个**patch** ,16个**patch** 之间做**相关度系数** 计算,它的计算量就很小,如果按照**ViT模型** ,它就会把左下角的**patch** 与右上角的**patch** 做**相关度系数** 计算,它的计算量就会很大,每2个**patch** 都会计算**相关度系数**,这个计算量是很大很大了。 **ST模型** 内,颗粒度一层层变大,是为了**尺度** 这件事情。在图片上,一个**数学向量** 代表什么区域,比如第一层一个**向量** 只能代表非常小的一个格子,每一层**向量** 在原图上所代表的区域会越来越大,直到顶层的**向量**表达的灰色小格子,就很大了。 在**视觉领域** 里面,**尺度** 的概念是很重要的,一个东西离近看就是能看到很多细节,离远的来看,我只能看到一个轮廓,**细节的特征与轮廓的特征** 都很重要,一定不能把**尺度**的事情给忘记了。 **ViT模型** 做的过于极致,它没有**微观与宏观** 的概念,所以也没有**细节与形状** 的概念,它的概念太过理想化了。人们为了推进**多模态模型的大一统** ,对于整个**人工智能领域** 来说是非常重要的,但是**ViT** 做的太过极致,如果**ViT**能为了图片稍微做些改变,它的性能一定能得到显著的提升。 而**ST(Swin Transformer)** 的创新就在于针对**Patch**进行改变,它的性能得到了极大的提升,如下图所示: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7b7c0a4d63b54440ba0d2ed3ac9386a4.png) **ST模型** 在每一层的每个灰色的小格子都是一个**向量** ,也能说一个**向量**可以代表一个小的图片。 在**视觉领域** 里面一个**向量** 代表一个**patch** ,一个**patch** 就是一小格图片。它在同一层**Transformer - Encoder(编码器)** 里面,其实要做**2次自注意力机制** 的计算,它就把**Transformer** 做了升级,在每一层里面都要做**2次自注意力机制**的计算。 第一次会让4个大方格内的小灰格子做**自注意力机制** 计算的**信息聚合** ,就是在每个大红色方格里面,让灰色小格子与灰色小格子(**patch与patch** )做**信息聚合和信息交换**。 第二次,它会把红色方格打乱顺序,变成**Layer 1 + 1** 的结构,这里也会要求,灰色的小方格只能在各自的红色小方格内做**自注意力机制** 计算,做**信息聚合和信息交换** ,这样的好处是它通过**间接的形式** ,让左上角的**patch信息** 可以与右下角的**patch信息** 做**信息聚合与数据交换** 。 然后通过**不断变换的窗口window** 进行切不同的红色方块,每个红色方块都会在内部,让灰色方块做**自注意力机制**。 ## CLIP(视觉与语言的统一学习) **参考资料:[CLIP论文](https://arxiv.org/abs/2103.00020)** 在同一时期,2021年也是**多模态** 爆发的一年,出现了**CLIP** ,它是**OpenAI** 研发的。 跟**ViT模型** 类似,但是在**模型**上走的是另外一条路径。 因为**ViT模型** 是**Google** 研发的,**Google** 擅长在**模型和算法结构** 上做创新。 **OpenAI** 擅长简单的东西,甚至从别人那里拿东西过来,然后把整个**模型** 做大,用足够大的**数据集** ,通过简单的方式做到比较好的效果,这也是**CLIP**的背景由来。 当时很多视觉识别的任务,都有很多**数据集** ,我做为一个**模型** ,比如刚刚讲到的**ResNet模型** ,我要去不同的**数据集** 上,重新做一些**模型训练** ,每个**模型** 最后都有个**Linear层** ,我前面的那些**卷积层** 的参数可能会固定不变,但是我去不同的榜单里面,去刷榜单,我就要根据榜单的**数据集** ,做**模型训练** ,调整我的**Linear层** 的**分类数据类型**。 一般来说,那些视觉识别的任务,它都要把**模型的Linear层** 重新训练下,甚至有些**模型** 是整个**模型** 都会在那个榜单所对应的**数据集**里面重新训练下。 在当时最有名的榜单**ImageNet** ,**ImageNet**里面有1400万张照片,里面的标签都是物理世界内真实的标签/ID。 **CLIP模型比ViT模型还要创新,它在2021年,第一次直接打通了人类的语言与视觉。** **ViT、Swin Transformer模型** 表现都很不错,但是毕竟还都是**单模态** 的东西,你的**模型**输入就是一张图片,你的输出就是标签,模型也不直接输出的"狗、猫、车、人"是什么东西,它只给标签,也只知道标签。 **Transformer** 是很强大的,可以做文字的处理,也可以做图片的处理。但是不能说**ViT、Swin Transformer模型**很强大。 **CLIP** 的强大在于它把非常多的**数据集** ,它利用**互联网上的4亿对文字-图片数据** 进行**预训练** ,实现了**零样本图像分类**,可以用一段文字或者一句话,去对应一张图片。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/33d1809573d44c25a8d89eba59a90486.png) **Text Encoder ==\> Transformer Encoder** **Image Encoder ==\> ViT** **把对角线的数值相加 - 不在对角线的数据之和 = 这个数值越大越好,它的总误差值就越小,这也是这个模型训练的目的。** **对角线的数值一定是最大的,因为它们是文字与图片一一对应的,它们的相关度系数是最高,非对角线的T/I向量数值要尽可能的小,它们的原图与原文字是不对应的,它们的相似度肯定是最低的。** **由此可以得出,对角线之和 - 非对角线之和 = 新数值,这个新数值肯定是最大的,如果数值比较小,就说明这个总误差肯定很大,就需要调整模型内的参数。这也叫对比学习,因为有2个模型需要调整。** 只要在新数值实在没办法变得更大时,**模型训练**才会结束。 **CLIP模型**训练完成后,就会去各大榜单去刷榜。 每次刷榜,都会获取榜单内的**测试数据** ,**CLIP模型** 拿榜单的**测试数据**进行识别,是比较吃亏的。 **因为CLIP模型训练是通过一句话或者一段话做为参数进行训练的。** 但是**CLIP** 用了一个很巧妙的做法,它用了一个**模板话术** 来套用**测试数据** 的标签,比如 **A photo of a {object}** ,**object** 里面就是放**测试数据的标签**。 **CLIP模型** 内就有很多这样的**文字模板** ,直接把标签套进来,就能形成一句话或者一段话。然后通过**CLIP模型** ,输入图片、标签,**CLIP模型** 把标签套到相应**文字模板** 内形成一句话,然后用这句话与图片进行**相关度系数**计算,最后输出数值最高的标签/图片。 过去的**图像识别模型的Linear层** 都需要做修改的,要提前告诉它有多少类别才能参加训练的。如果**Linear层** 有200个类型,它就要输出200个**概率** ,所以导致没有任何一个**模型**在换另外一个数据集之后,类别数据会自动改变的。 但是**CLIP模型** 做到了,它不需要修改**Linear层** 的类别,它是先把标签通过**文字模板** 变成一句话,然后拿图片与这句话对比相似度就可以了,这也是**CLIP模型** 的强大,**第一次打通了人类的文字与图片**。 这也对之后的**文生图、文生视频** 做了很好的奠基,并且对之后的**多模态模型** 产生了**非常大的影响** ,之后的**多模态模型也很好的借鉴了CLIP模型**。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b459a59f0574458bb98358c2c8f5e035.png) **CLIP模型的核心思想:它要像人类一样学习,我们人类小时候学东西,都是语言与物体做对应进行学习。** **神经网络本来就是在尽可能的模拟人脑,所以学习方式也要一样。** ## ViLT(Vision-and-Language Transformer) **参考资料:[ViLT论文](https://arxiv.org/abs/2102.00333)** **ViLT模型** 是基于**CLIP模型** 与**ViT模型**理论演变而来。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6cbb368e1f0547d3894e7a25ab478c95.png) **ViLT模型** 跟**ViT模型** 差不多,它是在**ViT模型** 的基础上,加上文字的组合。**文字向量与图片向量** 通过"1 0 \* " 分割符拼接到一起,形成一个**长向量** ,这个**长向量** 再给**Transformer Encoder(编码器)** ,最后输出一批**数学向量** ,通过这批**数学向量** 可以识别这句话与图片是不是对应的,或这句话说的是不是图片上的事情,**这句话的语义信息是不是在描述图片上的事情**。

相关推荐
Dontla2 小时前
kiro介绍(亚马逊AI Agent 集成开发环境(Agentic IDE))(Specs规范驱动开发、需求驱动开发、Spec模式)对标Cursor、Claude Code
人工智能
大囚长2 小时前
AI安全研究员现状
人工智能·安全
冰西瓜6002 小时前
深度学习的数学原理(二十五):缩放点积注意力
人工智能·深度学习
泰恒2 小时前
学习神经网络
人工智能·深度学习·机器学习
Spey_Events3 小时前
首发定档!2026中国航空维修制造及航材供应链展览会将于10 月在上海举办!
人工智能·制造
DeepModel3 小时前
机器学习非线性降维:局部线性嵌入 LLE
人工智能·机器学习
lUie INGA3 小时前
rust web框架actix和axum比较
前端·人工智能·rust
新缸中之脑3 小时前
HDRI-Generator: 环境贴图生成AI
人工智能·贴图