卷积神经网络与视觉变压器(ViTs)的比较

介绍

过去十年中,视觉识别系统经历了重大变革。在计算机视觉的早期,研究人员依赖手工制作的特征和机器学习算法来检测和分类图像中的物体。然而,这种方法受限于特征的质量和从业者的专业知识。2010年代卷积神经网络(CNNs)的出现,彻底改变了这个领域,将计算机视觉任务推向了新的高度,使得物体识别的准确性和效率得到了显著提高。

在过去的十年里,CNNs已经成为视觉识别任务的事实上的标准。它们由卷积层、池化层和全连接层组成的层次结构,使其能够学习视觉数据的复杂表示,在广泛的任务上实现了最前沿的性能。然而,深度学习世界最近的发展引入了计算机视觉领域的一种新竞争者:视觉变换器(ViT)。

原本设计用于自然语言处理任务的变换器架构已被证明在多个领域具有多样性和有效性。2020年,研究人员将变换器模型适应用于图像识别任务,于是诞生了视觉变换器(ViT)。通过将图像分割成非重叠的补丁,编码位置信息,并使用自注意力机制,ViTs迅速展示了超越CNNs的准确性和效率的潜力。

随着ViTs继续获得关注,一个迫切的问题浮现出来:视觉变换器是否会取代CNNs,成为计算机视觉应用的首选架构?在本文中,我们将探讨CNNs和ViTs的工作原理,深入它们的优缺点,并提供全面比较,以确定它们在计算机视觉未来中各自的角色。

卷积神经网络(CNN)

卷积神经网络(CNNs)是一类专门设计用于处理和分析类似图像这样的网格状数据的深度学习模型。受人类视觉系统的启发,CNNs因其从原始像素数据自动学习有意义特征的能力而成为计算机视觉任务的基石。典型的CNN架构由三种主要类型的层构成:卷积层、池化层和全连接层。这些层以不同的配置堆叠起来,创建出能够学习视觉数据层次化表示的深且复杂的网络。

  • 卷积层:这些层执行卷积运算,涉及将一组可学习的滤波器(或核)滑动过输入图像。滤波器用于从输入中提取局部特征,如边缘、纹理和形状。当滤波器在图像上滑动时,它们产生一张特征图,该特征图表示不同空间位置上学习到的特征的存在。
  • 池化层:这些层减少特征图的空间维度,从而降低所需的计算量和过拟合的风险。池化层,如最大池化或平均池化,应用下采样操作,仅保留输入特征图中最重要的信息。
  • 全连接层:这些层通常位于CNN的末端,用于生成最终输出,如图像分类任务中的类别概率。全连接层处理卷积层和池化层提取的高级特征,并将它们映射到期望的输出空间。

一些在计算机视觉领域产生了重大影响的流行CNN架构包括:

LeNet-5:由Yann LeCun和他的同事在1990年代开发的LeNet-5是最早的CNN之一。它最初是为手写数字识别的目的设计的,并为后续的CNN架构奠定了基础。

AlexNet:由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年提出的AlexNet在ImageNet大型视觉识别挑战赛(ILSVRC)中取得了突破性成果,大幅超越了传统方法。它普及了使用更深更大的CNN进行图像识别的做法。

VGG:由牛津大学视觉几何组在2014年开发的VGG展示了使用深层网络搭配小尺寸(3x3)卷积滤波器的优势。其简单而模块化的架构使其成为在各种应用中进行迁移学习和微调的热门选择。

ResNet:由Kaiming He和他的同事在2015年提出,ResNet通过使用跳跃连接解决了深层网络中的梯度消失问题,使得网络能够学习残差函数。ResNet的架构使得训练更深的网络成为可能,显著提高了在各种计算机视觉基准测试中的性能。

DenseNet:由高亢和他的团队在2016年提出,DenseNet引入了层与层之间的密集连接,这减轻了梯度消失问题并鼓励了特征重用。与传统的CNN相比,这导致了更加紧凑和高效的模型。

这些架构以及许多其他的架构塑造了计算机视觉研究和应用的景观。它们展示了CNN的力量和灵活性,为该领域的新进展铺平了道路。

CNNs的缺点

卷积神经网络(CNNs)在各种计算机视觉任务中已经证明了它们的高度有效性,但它们并非没有局限性。CNNs的一些主要缺点包括:

需要大量标注数据:CNNs通常依赖于大型的标注数据集进行训练。标注和注释图像数据是一个耗时且昂贵的过程,这成为开发新模型的一个重要瓶颈。这也限制了CNNs在标注数据稀缺或难以获取的情况下的适用性。

计算复杂度:CNNs的深层次和复杂结构在训练和推理过程中都需要大量的计算资源。这可能对部署CNNs在资源受限的设备上构成挑战,例如手机和平板电脑,并且可能增加与训练和运行大规模CNN模型相关的碳足迹。

难以扩展到高分辨率图像:由于与大输入尺寸相关的内存和计算要求增加,CNNs往往难以扩展到高分辨率图像。这导致了各种技术的发展以解决这个问题,如使用扩张卷积或降低输入图像的采样率。然而,这些方法可能会损害模型捕捉高分辨率图像中细节的能力。

缺乏对可变大小输入的原生支持:传统CNNs被设计成处理固定大小的输入图像,要求输入图像被缩放到或填充以匹配网络的输入维度。这可能导致扭曲、信息丢失或引入伪影,从而有可能影响模型的性能。尽管提出了一些解决方案,如全卷积网络(FCNs)或自适应池化层来处理可变大小的输入,但对可变大小输入的原生支持并不是CNN架构的标准功能。

这些局限性凸显了在计算机视觉任务中使用CNNs所关联的一些挑战,并激励了探索替代架构,如视觉变换器(Vision Transformers),它们可能在应对这些挑战方面提供了改进的性能和灵活性。

视觉变换器

视觉变换器(Vision Transformers, ViTs)已经成为计算机视觉任务中卷积神经网络(CNNs)的一个有前景的替代方案。最初设计用于自然语言处理,变换器架构已经证明了其在包括图像识别在内的多个领域的多样性和有效性。

视觉变换器的一般概念:ViTs 采用了最初为自然语言处理中的序列到序列任务提出的原始变换器架构,以处理图像作为输入。与使用卷积操作处理图像不同,ViTs 将图像视为一系列不重叠的补丁,将每个补丁转换为扁平向量,并应用位置编码以保留空间信息。然后将生成的向量序列输入到变换器层,这些层利用自注意力机制来建模长距离依赖关系,并学习有意义的视觉特征。

VITs的工作机制

图像打补丁:将输入图像分割成非重叠的补丁,通常大小相等,比如16x16或32x32像素。然后将每个补丁重塑成一维向量。

嵌入:使用可学习的嵌入矩阵,将重塑后的补丁向量线性嵌入到所需的维度空间中。

位置编码:给补丁嵌入添加位置嵌入,以整合空间信息,确保变换器模型能够区分图像中不同的补丁位置。

变换器层:将结合后的补丁和位置嵌入传递给多个变换器层,这些层由多头自注意力机制和前馈神经网络组成,使模型能够学习补丁之间的复杂交互。

输出:变换器层的最终输出由分类头处理,通常是带有softmax激活函数的全连接层,以生成所需的预测,例如图像分类任务中的类别概率。

流行的ViT架构:提出了几种ViT架构,具有不同的模型大小和配置,以满足不同的要求,并在准确性和计算效率之间进行权衡。一些流行的ViT架构包括:

ViT-B:基础尺寸的ViT架构,具有适中数量的变换器层和注意力头,在性能和计算复杂度之间提供了良好的平衡。

ViT-L:比ViT-B更大的尺寸,拥有更多的变换器层和注意力头,以提高性能,但代价是增加了计算需求。

DeiT:数据高效的图像变换器(DeiT)是一系列ViT,旨在通过在训练过程中融入蒸馏和mixup等技术减少对大规模标注数据的依赖,从而产生更数据高效和泛化能力强的模型。

ViTs已经展示了在多种计算机视觉任务上超越传统CNNs的潜力,提供了一个利用变换器架构优势的新视觉识别范式。

卷积神经网络(CNNs)与视觉变换器(ViTs)的比较

CNNs和ViTs的内部表示

在本节中,我们将探讨CNNs和ViTs的内部工作原理,即它们如何处理图像以及计算它们的内部表示。了解它们内部表示的差异可以为我们提供洞察,每种架构是如何捕获和处理视觉信息的。

内部表示分析:由于CNNs和ViTs中属性的多样性分布在大量神经元中,因此调查这些网络中(隐藏)层表示是困难的。中心核对齐(CKA)方法已被用来通过评估不同层的内部表示之间的相似性,使得跨网络的表示比较变得有意义。

在这里插入图片描述

表示结构:ViTs和如ResNet模型的CNNs具有不同的表示结构。ViTs保持相对一致的层相似性结构,具有明显的网格布局,且下层与上层之间相似度较高。相比之下,ResNet模型在相似性结构上表现出分离的阶段,下层与上层之间相似度分数较低。

对比ViT和ResNet层:使用CKA热图比较所有ViT层与所有ResNet层时,发现ResNet下层的一半对应于ViT下层的四分之一。ResNet的后半部分大约相当于ViT后三分之一的层,而ViT的顶层层既不同于下层也不同于上层的ResNet层。

ViT层中的注意力机制:ViT中的注意力机制在不同层之间变化。下层层同时关注局部和全局信息,而上层层主要关注全局信息。通过分析ViT中最低两层和最高两层的注意力头均值距离,可以看出下层层关注的是局部和全局信息的混合,而上层层仅关注全局信息。

ViT的局部注意力头与ResNet层:通过使用CKA相似性将ViT的注意力头子集(从最局部关注的头到最全局关注的头)与ResNet的最底层表示进行比较,可以清楚地看到,ResNet的下层与ViT的局部注意力头学习的特征最为相似。随着越来越多的全局信息被整合,相似度单调递减,表明全局头学习了质的不同的特征。

这些分析强调了CNNs和ViTs在处理和表示视觉信息方面的差异,这些差异促成了它们在各种计算机视觉任务中的独特优势和劣势。通过理解这些差异,研究人员可以在为特定应用选择架构时做出更明智的决策,并继续发展技术,以利用每种架构的优势,提高性能。

卷积网络vs.Transform模型:视觉表征的可转移性

周洪宇等人在2021年国际计算机视觉会议(ICCV)工作坊上发表的一项研究,题为“ConvNets vs. Transformers: Whose Visual Representations Are More Transferable?”提供了有关卷积神经网络(CNNs)和视觉变换器(ViTs)学习的视觉表示的可转移性的宝贵见解。该研究比较了这些架构在微调有限数量标注训练数据时在各种计算机视觉任务上的性能。作者进行了15项单任务和多任务性能评估。他们发现,在这15项任务中,有13项中视觉变换器(ViTs)表现更优。这包括诸如细粒度分类、场景识别(包括分类、分割和深度估计)、开放域分类、人脸识别等多种任务。

转移学习是机器学习中的一种技术,其中一个为特定任务开发的模型被重新使用,或“转移”到第二个相关任务上。这种方法在初始任务和新任务共享共同视觉数据时特别有效。

在这里插入图片描述

在精细分类和场景识别领域,研究发现视觉变换器在大多数情况下优于卷积神经网络。精细分类涉及区分高度相似的类别,ViTs展示了更强的能力去捕捉细微差异。这一点在包含花朵和鸟类图片的Flower102和CUB200数据集上有所观察。

场景识别任务涉及理解图像内物体之间的关系,ViTs也在此领域超越了ConvNets。研究者注意到,ViTs展示了更优越的能力去理解复杂场景,这对于场景识别至关重要。

在开放领域分类和面部识别方面,论文进一步指出了视觉变换器的优势,这涉及到从广泛类别中分类图像的任务。在这里,测试的三个ViT模型占据了WikiArt和COVID-19数据集上前三名的位置。这一发现证明了基于变换器的表示具有强大的可转移性。面部识别是一个与ImageNet预训练数据集不直接相关的任务,用于测试两种架构的可转移性和泛化能力。视觉变换器再次超越了卷积神经网络,表明它们处理开放领域问题的能力得到了增强。

在多任务评估中,研究发现视觉变换器有效地利用了两个任务中隐藏的互补信息,从而在性能上超过了卷积神经网络。这在场景分割和深度估计等任务中有所观察。即使是在处理来自截然不同领域的任务时,如艺术风格和通用对象识别,基于变换器的模型相比于卷积神经网络表现出了更少的性能下降。

很明显,视觉转换器(ViT)比卷积神经网络(ConvNets)提供更具可转移性的视觉表示。它们在各种任务上都一致超越了ConvNets,并且在多任务学习场景下也表现出更稳健的性能。特别是,Swin Transformer模型作为顶级性能者出现,表明了其在该领域未来应用的潜力。

然而,值得注意的是,选择架构将取决于当前任务的具体情况,同时考虑到这些架构在不同上下文中的优缺点。

另一方面,李等人在《ViTGAN:使用视觉转换器训练GAN》一文中,探讨了将视觉转换器(ViTs)用作生成对抗网络(GANs)中的生成器和判别器进行图像合成任务的潜力。该论文调查了ViT在GANs上下文中与传统卷积架构相比的性能。

从论文中得出的关键发现包括:

基于ViT的GANs性能与卷积GANs相当:结果表明,使用ViT作为生成器和判别器的ViTGAN,在图像合成质量方面与传统的卷积GANs(如StyleGAN2)有相似的性能。

改进的架构灵活性:ViTGAN相对于卷积GANs提供了增强的架构灵活性。作者展示了通过调整转换器层数或令牌数量而不改变空间维度,ViTGAN可以进行扩展,使得模型更容易适应不同的计算预算和问题大小。

有效的迁移学习:研究显示,预训练的ViT模型可以成功地作为GANs中的生成器进行微调,大幅减少了训练时间,同时保持了竞争力的性能。这一发现强调了使用预训练ViTs进行图像合成任务中迁移学习的潜力。

对输入变化的鲁棒性:ViTGAN对于输入分布的变化表现出鲁棒性,实验中使用了被篡改和分布外样本的结果证明了这一点。作者认为,ViT中的注意力机制有助于这种鲁棒性,使模型能够有效处理输入数据的变化。

总之,这项研究突出了在生成对抗网络中使用视觉转换器进行图像合成任务的优势。发现表明,基于ViT的GANs在图像质量、架构灵活性和迁移学习潜力方面超过了传统的卷积GANs。这些见解可以指导研究人员和实践者选择适合图像合成应用的架构,并进一步探索该领域中视觉转换器的潜力。

视觉转换器和卷积神经网络的鲁棒性

最近的研究深入探讨了视觉转换器(ViTs)和卷积神经网络(CNNs)的鲁棒性,以了解这些架构如何应对对抗攻击、输入分布变化以及其他具有挑战性的场景。在本节中,我们将使用一篇题为“Transformers是否比CNNs更健壮?”的论文中的见解来比较ViTs和CNNs的鲁棒性。关于鲁棒性的关键发现如下:

对抗鲁棒性:作者发现,与CNNs相比,ViTs对对抗扰动更具鲁棒性。他们对这两种架构进行了对抗攻击的实验,并观察到ViTs对输入空间中的小扰动不太敏感。这种增强的鲁棒性可以归因于ViTs中的注意力机制,它允许它们专注于输入最相关的部分,同时忽略无关噪声。

几何不变性:与CNNs不同,后者设计用来对平移具有不变性,ViTs并不天生对这类几何变换具有不变性。这是因为ViTs中的注意力机制考虑了全局信息,使得模型对位置变化更加敏感。然而,通过在训练期间采用数据增强技术可以减轻这种敏感性,从而提高模型在几何变换下的性能。

在这里插入图片描述

对输入分布变化的敏感性:ViTs和CNNs都对输入分布的变化敏感,但研究表明,在某些场景下ViTs表现出更强的鲁棒性。

对图像腐败的鲁棒性:与CNNs相比,ViTs对常见的图像腐败和扰动显示出更好的鲁棒性。他们将这种鲁棒性归功于ViTs的全局感受野,这使它们能够捕捉长距离依赖关系和上下文信息。然而,值得注意的是,通过适当的训练策略,如使用鲁棒损失函数或融入对抗训练,可以提高这两种架构的性能。

总之,与卷积神经网络相比,视觉变换器在对抗扰动和某些输入分布变化方面展现出更强的鲁棒性。然而,它们在几何变换方面的固有不变性较弱,可以通过训练期间的数据增强技术来缓解。这些发现可以帮助研究人员和实践者在选择最适合特定计算机视觉任务的架构时,考虑到应用程序的鲁棒性要求。

Transformer模型在视觉识别领域的显著成功促使研究者评估并比较它们与传统卷积神经网络(CNNs)的鲁棒性。尽管之前的研究表明Transformers更加鲁棒,但由于模型规模、训练数据集和策略等实验条件的差异,这些比较的公平性受到了质疑。

为了建立公平的竞争环境,最近的研究提供了Transformers和CNNs的全面比较,主要关注两个鲁棒性方面:对抗稳健性和对非分布样本的稳健性。

对抗稳健性

对抗示例是故意篡改的图像,旨在欺骗机器学习模型,这对这些模型的完整性构成了重大威胁。在这项研究中,使用了几种方法测试了对抗

CNNs(卷积神经网络)和Transformer是两种被广泛使用的深度学习模型,它们在处理不同类型的数据时有各自的优势。

首先,CNNs通过卷积层来检测局部模式并保持空间信息。这种结构使得CNNs在处理图像数据时非常有效,因为图像通常包含许多局部的、相关的特征,如边缘、角点等。此外,CNNs还具有强大的层次化表示学习能力,能够从低级特征到高级特征逐层进行抽象和概括。这使得CNNs在图像分类、目标检测、语义分割等计算机视觉任务中表现出色。

相比之下,Transformer模型采用了一种完全不同的机制——自注意力机制。这种机制能够让模型在处理输入数据时,根据每个部分的重要性进行加权。这种加权的方式使得Transformer能够更好地捕捉到输入数据中的全局信息和依赖关系,而不仅仅是局部的模式。因此,Transformer在处理序列数据(如自然语言处理中的文本)时表现非常出色。

然而,由于Transformer缺乏像CNNs那样的卷积结构,它在处理图像数据时可能会遇到一些挑战。具体来说,Transformer的自注意力机制在处理高维数据(如图像)时可能会受到计算资源的限制。此外,Transformer也缺乏像CNNs那样的局部感受野,这可能会导致它难以捕捉到图像中的局部细节。

尽管如此,近年来一些研究开始探索将Transformer应用于图像处理领域的可能性。例如,Vision Transformer(ViT)就是一种尝试将Transformer应用于图像分类任务的模型。ViT将图像划分为多个小块(patches),然后将这些小块作为序列输入到Transformer中进行处理。这种方法虽然在某些方面表现出与传统CNNs相似的性能,但也展示了Transformer在处理图像数据时的潜力。

总的来说,CNNs和Transformer各有所长,它们在处理不同类型的数据时都有自己的优势。未来的研究可能会继续

CNNs和Transformers都是深度学习模型,但它们在处理数据的方式上存在显著差异。CNNs通过卷积层来检测局部模式并在网络中保持空间信息,这使得它们在图像分类、目标检测、语义分割等计算机视觉任务中表现出色。相比之下,Transformers首先将输入数据序列化,然后通过自注意力机制来加权每个部分的重要性,这种机制允许它灵活地捕捉全局依赖关系,但可能在保持空间信息方面不如CNNs强。

此外,与CNN相比,Transformer有一个更弱的归纳偏置,这意味着它可以更加灵活地检测特征。然而,这也可能导致Transformer需要更多的数据来学习有效的特征表示。

最后,该研究提出了一种新的简单网络架构——Transformer,该架构完全基于自注意力机制,摒弃了递归和卷积。这种架构已经在自然语言处理领域取得了巨大成功,并且正在逐渐应用于计算机视觉任务中。虽然Transformer在保持空间信息方面可能不如CNN强大,但其灵活性和全局依赖关系捕捉能力使其成为一个非常有前途的替代方案。

比较ViT和ResNet层:作者使用中心核对齐(CKA)相似性创建了一个热图,将所有ViT层与所有ResNet层进行比较。结果显示,ResNet的下半部分与ViT的下四分之一层相似,而ResNet的后半部分大致相当于随后的三分之一ViT层。ViT的顶层与上下ResNet层差异显著,进一步凸显了两种架构在内部表示上的区别。

局部注意力头与较低ResNet层之间的相似性:研究揭示,较低的ResNet层最类似于ViT的局部注意力头学习到的特征。随着越来越多全局信息的整合,相似性单调减少,这表明ViT中全局注意力头与CNN相比,学习了量的不同特征。

总之,CNNs和ViTs之间的内部表示差异揭示了这些架构在处理和学习输入图像方面的对立方式。虽然CNNs依赖于具有明显层相似性结构的层级表示,ViTs展现出更一致的层相似性以及跨层的局部和全局注意力的结合。理解这些差异可以帮助研究人员和实践者在选择最适合其计算机视觉任务的架构时做出明智的决策,同时考虑到每个模型的独特表示属性。

性能比较:CNNs和ViTs

在选择最适合计算机视觉任务的架构时,重要的是要比较卷积神经网络(CNNs)和视觉变换器(ViTs)在分类准确性和速度方面的性能。在本节中,我们将讨论这两种架构之间的性能差异。

分类准确性:多年来,无论是CNNs还是ViTs都在图像分类任务中取得了卓越的性能。起初,像AlexNet、VGG、ResNet和DenseNet这样的CNNs通过设置新的基准,在分类准确性方面领先于领域。然而,随着ViTs的引入,研究者在某些情况下观察到了类似或甚至更好的性能。ViTs在各种图像分类基准测试中,如ImageNet,经常超越其CNN对手,展示了最佳性能。这种改进的准确性可以归因于ViT中的注意力机制,它允许它们更有效地捕捉长距离依赖关系和上下文信息。

计算效率:传统上,CNNs被认为在计算效率方面具有优势,尤其是与早期的深度学习模型相比。然而,ViTs在这方面也被证明具有竞争力。尽管在训练初期ViTs可能需要更多计算,但它们通常收敛得更快,并且在达到与CNN相似或更好的性能时需要较少的周期数。此外,ViTs提供了更多的架构灵活性,使其更容易通过调整变换器层或令牌的数量来适应不同的计算预算和问题规模。

推理速度:在推理速度方面,这两种架构各有优劣。对于较小的输入尺寸,CNNs通常具有更快的推理速度,而ViTs由于能够直接关注全局信息,因此能够更有效地处理较大的输入图像。然而,每种架构的具体速度会根据硬件、实现和模型大小等因素而变化。因此,在比较推理速度时,必须考虑应用程序的具体要求。

总之,无论是CNNs还是ViTs,在分类准确性和速度方面都表现出强劲的性能。虽然ViTs已经显示出有前景的结果并在一些情况下优于CNNs,但重要的是要认识到每种架构都有其优势和劣势。最终,选择CNNs还是ViTs取决于应用程序的特定要求,包括所需的分类准确性、计算效率和推理速度。

结论

在本文中,我们从架构、内部表示、鲁棒性和性能等方面对卷积神经网络(CNNs)和视觉变换器(ViTs)进行了比较。这一比较凸显了两种方法各自独特的优势和劣势,ViTs在各种计算机视觉应用中作为CNNs的一个有前景的替代品脱颖而出。

在某些情况下,ViTs在分类准确率和对抗扰动的鲁棒性方面表现出更优越的性能。它们还展示了独特的内部表示结构,特点是层之间的一致性相似性以及跨层的局部和全局注意力的结合。然而,ViTs在几何变换的固有不变性方面相对较弱,可能需要在训练期间使用数据增强技术来解决这一限制。

另一方面,CNNs多年来一直是计算机视觉任务的基石,为较小的输入尺寸提供计算效率和更快的推理速度。它们的分层表示和层之间的一致性相似性结构有助于其在各种任务中实现稳健的性能。然而,CNNs在扩展至高分辨率图像方面面临挑战,并且需要大量标注数据进行训练。

总之,选择CNNs还是ViTs取决于应用的具体要求以及在分类准确率、鲁棒性和计算效率之间所期望的权衡。研究人员和实践者应仔细考虑每种架构的独特属性,并相应地调整他们的模型,以实现其计算机视觉任务的最佳性能。尽管ViTs近期的进展显示了巨大的潜力,但重要的是要认识到在可预见的未来,CNNs和ViTs都将继续在计算机视觉应用的发展中发挥关键作用。

  • 36
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值