《Deep Residual Learning for Image Recognition》ResNet论文翻译

《Deep Residual Learning for Image Recognition》论文探讨了深度神经网络训练中精度下降的问题,并提出了残差网络框架。通过学习残差映射而非原始映射,深度残差网络更容易优化,且随着深度增加,性能提升,解决了深度网络的退化问题。在ImageNet和CIFAR-10数据集上的实验表明,残差网络在深度增加时精度提高,且避免了训练误差的增加。这种方法对于其他视觉任务也有广泛的应用潜力。
摘要由CSDN通过智能技术生成

《Deep Residual Learning for Image Recognition》

作者:Kaiming He,Xiangyu Zhang,Shaoqing Ren,Jian Sun

摘要

神经网络越深,训练越困难。我们提出了一种减轻网络训练负担的残差学习框架,这种网络比以前使用过的网络层次更深。我们把层重定义为以本层输入为参考进行学习的残差函数,而不是不以本层输入为参考进行学习的函数。我们提供了全面的经验数据表明这些残差网络更容易优化并且可以通过增加深度来提升精度。我们在ImageNet数据集上用152层(8倍于VGG网络[41])的深度来测试残差网络,但它仍具有较低的复杂度。在ImageNet测试集中,组合使用的残差网络的误差为3.57%。该结果在ILSVRC2015分类任务中赢得了第一。此外,我们还在CIFAR-10数据集上分析了100层和1000层的深度残差网络。

对于大部分视觉识别任务,表示的深度是十分重要的。在COCO目标检测数据集上,仅由于极深的表示,我们就得到了28%的相对提升。深度残差网络是我们参加ILSVRC和COCO2015竞赛的基础 ,而且我们在ImageNet的图像检测和图像定位,COCO图像检测和COCO图像分割中,都获得了第一名。

1.引言

深度卷积神经网络[22,21]在图像分类[21,50,40]方面,引发了一系列突破。深度网络以端到端多层的方式整合低/中/高水平的特征[50]和分类器,并且特征的“等级”会随着网络的加深而增加。最近的证据[41,44]表明网络深度是至关重要的,在ImageNet数据集挑战赛[36]中取得领先的团队[41,44,13,16],都利用了“很深”的模型[41],深度从十六[41]至三十[16]。而且很多特殊的视觉识别任务[8,12,7,32,27]也从深度模型中大大受益。

由于网络深度的重要意义,人们提出了一个问题:训练更好的网络是否和叠加层数一样简单?解决该问题的一大障碍是臭名昭著的梯度爆炸/消失问题[1,9],它从一开始就阻碍了收敛。然而,这个问题很大程度上被正态初始化[23,9,37,13]和中间归一化层[16]解决了,它确保几十层的网络在使用随机梯度下降(SGD)进行反向传播的时候可以收敛[22]。

当更深的网络能够收敛时,暴露出了“退化”问题:随着网络深度的增加,精度开始饱和(这也许并不令人吃惊)然后迅速下降。意料之外的是,这种退化并不是由过拟合造成的。在深度适当的模型中增加更多的层数,会造成更高的训练误差,这种现象在[11,42]中被指出,我们的实验对其进行了验证。图1展示了一个经典的实例。
在这里插入图片描述
精度的退化表明并不是所有的系统都同样容易优化。我们考虑一个较浅的网络结构和一个与它结构相似但是带有更多层的网络结构。有这样一种方法来建立一个较深的模型:添加恒等映射层,这种层直接拷贝上一层的输出作为自己的输出,其他层直接从训练好的模型中复制过来。这表明至少存在一种方法,向一个网络中添加更多的层,且并不会增加他的训练误差。但实验显示我们目前无法找到一个与用这种方法构造出来的网络一样好,或者更好的解决方案(或者无法在可行的时间内完成)。

在本论文中,介绍了一个深度残差学习框架来解决精准度下降问题。我们明确地让一些层拟合残差映射,而不是寄希望于每一个层直接拟合一个理想的映射。形式上,把H(x)作为理想的基本映射,让一些非线性层拟合另一个映射F(x)≔H(x)-x。那么原映射便转化成:F(x)+x。我们假设优化残差映射比优化原来的没有参照的映射更容易。在最极端的情况下,如果恒等映射是最佳的,那么为了拟合恒等映射,将残差推到零,比使用很多非线性层来拟合更容易。
在这里插入图片描述
公式F(x)+x可以通过在前馈神经网络中添加“跨层”实现(图2)。跨层连接指的是那些跨过网络中的一层或多层的连接[2,34,49]。在我们的情景中,跨层连接扮演恒等映射的角色,而且,它们的输出会添加到这些层的输出中(图2)。恒等跨层连接既不会添加额外的参数,也不会增加计算的复杂度。整个网络仍然可以端到端地使用SGD进行反向传播训练,并且可以在不修改解决方案的情况下很容易的使用公开库(例如Caffe[19])进行实现。

我们在ImageNet上进行详细实验[36]展示精准度下降问题,并评估我们的方法。我们发现:①我们的极其深的残差网络很容易优化,对应的“朴素”网络(即简单的增加层)在深度增加时表现出更高的训练误差。②深度残差网络的精度能够从深度的增加中获取更大的收益,实验结果明显优于以前的网络。

相似的现象同样出现在了CIFAR-10数据集中[20],这表明了我们的方法的优化的难易度和有效性的并不依赖于一个特定的数据集。我们在这个数据集中成功的训练出了超过100层的模型,并探索了超过1000层的模型。

在ImagNet分类数据集中[36],通过极深的残差网络,我们得到了非常好的结果。我们的152层的残差网络是在ImageNet上训练的最深网络,但依旧拥有比VGG[41]更低的复杂度。我们的组合模型在ImageNet测试集上的top-5 错误率为3.57%,取得了ILSVRC2015分类任务的冠军。这种极深的网络在其它识别任务方面也有出色的泛化性能,我们在ILSVRC-2015和COCO-2015的以下项目中赢得了第一:ImageNet图像检测、ImageNet图像定位、COCO图像检测和COCO图像分割。这有力的证据表明,残差学习的原理是普适的,我们期望它适用于其它的视觉和非视觉问题。

2.相关工作

残差表示   ~   在图像识别中,VLAD[18]是一种被残差向量编码的关于一个字典的表示,Fisher 向量[30]可以被表述成概率版本的VLAD。它们两个对于图像检索与分类都是有效的浅层表示[4,48]。对于矢量化,编码残差向量比编码[17]原始向量更有效。

在低层次视觉和计算机图形学中,为了解偏微分方程(PDEs),它们广泛的使用多重网格法[3],将系统重构成多尺度的子问题,每个子问题负责更粗和更细规模之间的残差求解。多重网格的一种替代方法是分层的基础预处理[45,46],它依赖于表示两个尺度之间的残差向量的变量。[3,45,46]表明这些解决方案的收敛速度比不使用残差性质的标准解法快得多。这些方法表明,一个好的方法或预处理可以使网络优化更简单。

跨层连接跨层连接[2,34,49]的方法和理论已经被研究了很长时间。训练多层感知机(MLPs)的早期实践是添加一个线性层连接网络的输入和输出[34,39]。在[44,24]中,一些中间层直接连接到辅助分类器,来解决梯度爆照/消失问题。论文[39,38,31,47]提出有关中心层响应、梯度和传播误差的方法,该方法通过跨层连接实现。在[44]中,一个“inception”层是由一个跨层连接分支和一些更深的分支组成。

与我们工作同时进行的“highway networks”[42,43]提出了具有开关的跨层连接。这些连接是与数据相关的并带有参数,而我们的恒等跨层连接无需参数。当一个带开关的跨层连接“关闭”(接近零)时,highway network中的层代表非残差函数。相反的是,我们的方法是总是学习残差函数。我们的恒等跨层连接不曾关闭,伴随额外学习的残差函数,所有信息总会通过。此外,highway network并没有表现出通过层次加深而获得的精度提高(例如,超过100层)。

3.深度残差学习

3.1残差学习

令H(x)为由几个层拟合的(不一定是整个网络)基础映射,用x表示这些层中的第一层的输入。假设足够多的非线性层能逼近复杂的函数 ,也就相当于假设它们可以逼近残差函数,例如H(x)-x(假设输入和输出是同一维度的)。因此我们希望这些层能够逼近于残差函数F(x):=H(x)-x,而并非H(x)。所以原函数变成了:F(x)+x。尽管两种形式都能逼近期望函数(就像假设的那样),但训练它的难易度可能不同。

新的构思源于反常的精准度下降问题(图1,左)。如我们在简介中讨论的一样,如果添加的层可以被构造为恒等映射,那么一个更深模型的训练误差,不应大于与其相应的更浅的模型训练误差。精度下降问题表明,多个非线性层构成的解决方案在拟合恒等映射方面有困难。在残差学习过程中,如果恒等映射是最佳的方法,那么求解方案可以简单地使多个非线性层的权重趋向于零,以便逼近恒等映射。

在现实情况中,恒等映射未必是最优的,但我们的方法可能有助于预先处理该问题。如果最优函数相比于零映射更趋近于恒等映射,那么与学习一个新函数相比,求解方案更容易找到关于恒等映射的响应。我们的实验证实(图7),所学到的残差函数一般有小的响应,这表明恒等映射提供了合理的预处理。
在这里插入图片描述

3.2跨层恒等映射

我们对每一个层都采用残差学习。一个网络单元如图2所示。在这里插入图片描述
形式上,我们把一个网络单元定义为:
y = F ( x , { W i } ) + x (1) y=F(x,\{W_i\})+x \tag{1} y=F(x,{Wi})+x(1)
其中 x x x y y y是层的输入和输出向量。函数 F ( x , W i ) F(x,{ W_i}) F(x,Wi)代表需要学习的残差函数。如图2所示,一个网络单元含有两个层, F = W 2 σ ( W 1 x ) F=W_2\sigma(W_1x) F=W2σ(W1x),其中 σ \sigma σ表示ReLU[29],为了简化符号,偏置项已经忽略。 F + x F+x F+x的操作是由跨层连接和逐元素的加法进行的。在相加之后我们采用了第二个非线性函数(例如σ(y),见图2)。

公式(1)中介绍的跨层连接,没有额外的参数和复杂的计算。这不仅在实践中有吸引力,还在对比普通网络和残差网络方面也显得重要。当普通网络和残差网络有着相同数量的参数,深度,宽度和计算成本时(除了可以忽略不计的基于元素的加法),我们可以对它们进行公平的对比。

在式(1)中x和F的维度必须相同。如果不同(例如改变了输入或输出通道)我们可以通过对跨层连接的输出进行线性投影W_s来匹配维度:
y = F ( x , { W i } ) + W s x (2) y=F(x,\{W_i\})+W_sx \tag{2} y=F(x,{Wi})+Wsx(2)
我们也可以在式(1)中使用一个方阵 W s W_s Ws。但我们会通过实验表明,恒等映射足以用于解决精准度下降的问题且该方法是非常经济的,因此只有在匹配维度时,才使用W_s。

残差函数 F F F的形式是灵活的,本文的实验涉及的函数F拥有两层或三层(图5)尽管更多的层也是可行的。在这里插入图片描述
但如果 F F F仅仅只有1层,式(1)就类似于线性层: y = W 1 x + x y=W_1 x+x y=W1x+x,因此我们没有观察到这样做的优势。

我们同时也注意到,虽然上面的符号为了简单起见是关于全连接层的,但它们也适用于卷积层。函数 F ( x , W i ) F(x,{ W_i}) F(x,Wi)可以代表多个卷积层。这时,逐元素的加法就变成了两个特征图之间逐通道的加法。

3.3网络架构

我们测试了不同的普通网络和残差网络,并且观察到了一致的现象。下面描述了两个以ImageNet为数据集的模型实例。

普通网络   ~  我们的普通网路基准(图3,中)主要受启发于VGG网络[41]理论(图3,左)。在这里插入图片描述
卷积层大多数都是3X3的卷积核,并遵循两个简单的设计规则:(1)如果两个层输出了相同大小的特征图,则他们拥有相同数量的滤波器;(2)特征图的大小被减半,过滤器的数量变为原来的2倍,以保持每层的时间复杂度。我们在步长为2的卷积层后面直接进行下采样。在网络的最后,有一个全局平均池化层和一个1000节点的全连接层,最后使用Softmax分类器。带有权值的层总共有34个。见图3(中)。

值得注意的是,我们的模型比VGG[41](图3,左)有着更少的滤波器和更低的复杂度。作为基准的34层网络有36亿FLOPs(乘法和加法),这只有VGG-19的18%(196亿FLOPs)。

残差网络   ~  基于上面的普通网络,我们插入跨层连接(图3,右),将网络转变成其对应的残差版本。当输入和输出的维度相同的时候(实线,图3),跨层连接(公式(1))可以直接使用。当维度不同时(虚线,图3),我们考虑了两个选项:(A)添加0以进行延拓。该选项不会引入额外的参数;(B)使用公式(2)中的投影操作,用于匹配维度(通过1×1卷积完成)。无论使用哪种策略,跨层连接都跨越两个层。

3.4实现

我们遵循了[21,41]中的方法,在ImageNet进行了实现。对图片进行缩放以进行数据扩充[41],缩放时图像的短边在[256,480]中随机取值。从原图和它的水平翻转图中随机取样出224x224大小的结果,并减掉像素均值[21]。使用了[21]中的标准颜色增强。在每一次卷积之后和激活之前,我们采用了BN算法(batch normalization)[16]。我们如[13]中一样初始化权重,并从零开始训练普通网络和残差网络。我们使用SGD(随机梯度下降)进行训练,mini-batch为256,学习率从0.1开始,并在误差稳定时除以10,训练迭60× 1 0 4 10^4 104次,权值衰减为0.0001,动量为0.9。依据[16]中的经验,我们不使用dropout[14]。

测试中,为了对比我们采用标准的10-crop试验[21]。为达到最佳效果,我们采用完全卷积形式如[41,13]中所示,并且平均了多尺度下的成绩(图片进行了大小调整,短边的长度取值为{224,256,384,480,640})。

4.实验

4.1 ImagetNet分类

我们在ImageNet-2012分类数据集[36]中评估了我们的方法,该数据集含有1000类图片。在128万张训练图像中训练模型,并且在5万张验证图像上进行了评估。测试服务器报道,我们也在10万张的测试图像中获得了最终结果。我们评价top-1和top-5错误率。

普通网络   ~  
我们首先评估了18层和34层普通网络网。34层的普通网络在图3(中)中。18层普通网络形式是类似的。详细架构见表1。在这里插入图片描述
表2显示的结果表明,较深的34层普通网络具有比较浅的18层普通网络更高的验证错误率。在这里插入图片描述
为了揭示原因,在图4(左)中,我们比较了训练过程中的训练和验证错误。在这里插入图片描述
我们观察到退化问题——–在整个训练过程中34层的普通网络错误更多,尽管18层普通网络的解空间是34层网络的解空间的一个子空间。

我们主张优化困难不太可能是由梯度消失问题导致的。所有的普通网络都是通过BN[16]训练的,保证了向前传播的信号是非零的。此外我们也验证了反向传播的梯度在BN中表现出良好。所以无论是向前或是向后传播的信号都没有消失。事实上,34层的普通网络仍然可以达到可观的精确度(如表3),而这在一定的程度上也暗示了求解方案的工作范围。在这里插入图片描述
我们猜想深度普通网络的收敛率可能会指数级的降低,而收敛率影响了训练错误的降低 (我们尝试增加训练迭代次数(变为原来的三倍),退化问题仍然出现,这表明简单的增加迭代次数并不能解决这个问题)。此类优化问题会在未来进行研究。

残差网络   ~  接下来评估18层和34层的残差网络(ResNets)。作为基准的网络架构与普通网络一样,每一对3×3卷积层之间增加一条跨层连接(图3,右)。在第一个比较中(表2和图4,右),我们在维度不同时,通过补0进行延拓(方案A)。所以与普通网络相比,残差网络并没有额外的参数。

我们从表2和图4中得出3个主要结论。在这里插入图片描述
在这里插入图片描述
第一,在残差学习模式上出现了与普通网络相反的情况–34层网络比18层网络表现要好(2.8%左右)。更重要的是,34层ResNet表现出低得多的训练误差,并且可以推广到验证数据。这表明在这种情况下可以很好地解决退化问题,并且我们设法通过增加深度来获得准确性。

第二,与普通网络相比,34层残差网络将最低错误率降低了3.5%(如图2所示)。这一比较证实了残差学习在超深系统中的优越性。

最后,我们注意到18层的普通和残差网络的正确率比较相近(表2),但是18层的残差网络收敛的更快(图4右VS左)。在这里插入图片描述
当网络没有“过深”(如18层)时,当前的SGD求解程序依然可以在使用普通网络的情况下找到好的解决方案。在此情况下,残差网络在早期阶段通过提供更快的收敛能使网络的优化更容易一些。

恒等与投影跨层连接作对比   ~  我们发现无参数的恒等跨层连接能帮助训练。接下来我们会研究投影式跨层连接(公式2)。在表3中我们比较了三种方案:(A)需要增加维度的时候使用补零延拓,且所有的跨层连接都无参数(如表2和图4,右);(B)需要增加维度时使用投影,而其他的跨层连接都是恒等式的;(C)所有的跨层连接都进行投影。在这里插入图片描述
表3显示三个方案就普通网络比较而言都表现得更出色。B比A表现略好。我们认为这是因为A中使用零填充增加的维度没有参与残差学习。C比B表现稍好,我们将此归功于那些(13个)被投影式跨层连接引入的额外参数。但是A/B/C之间差别很小,不足以证明采用投影操作的跨层连接对于解决退化问题必不可少。所以为了控制空间和时间复杂度和模型规模,在本文的剩余部分我们不使用方案C。恒等跨层连接对于不增加下面介绍的瓶颈架构的复杂性尤其重要。

更深层次的瓶颈结构   ~  接下来描述我们在ImageNet上使用的更深的网络。鉴于我们能接受的训练时间是有限的,我们改变了网络单元的结构,将其变成瓶颈式设计。对于每个残差函数F,我们使用3层而不是2层网络的单元(图5)。在这里插入图片描述
这3层分别是1×1,3×3和1×1的卷积层。1×1层用于减少和增加(恢复)维度,让3×3层的输入和输出维度更小,这就是所谓的“瓶颈”。图5展示了一个例子,这两个设计的时间复杂度都一样。

无参数恒等跨层连接对于瓶颈式结构尤为重要。如果把图5(右)中的恒等跨层连接换成投影式跨层连接,由于它连接的是两个高维端,时间复杂度和模型规模都会翻倍。所以,恒等映射可以使瓶颈式设计更有效。

50层的残差网络 我们用3层的瓶颈式网络单元取代34层网络结构中的2层单元,这时34层结构就会变成50层残差结构。我们使用B方案增加维度。这一模型有38亿FLOPs。

101层和152层的残差网络   ~  我们通过使用3层的瓶颈式网络单元构建101层和152层的残差网络(表1)。让人惊讶的是,尽管深度显著增加,152层的残差网络(113亿FLOPs)复杂性较VGG-16/19网络(153/196亿FLOPs)更小。

50/101/152层的网络明显比34层的更准确(表3,表4)。网络没有出现退化问题。更深的层次带来了更高的准确率。表3和表4在各种程度上体现了深度增加带来的收益。在这里插入图片描述
与之前最优方案比较 在表4中,我们比较了之前单一模型所取得的最好结果。我们作为基准的34层残差网络取得了不错的准确度。152层ResNet的单模型前五项误差为4.49%。而这也超过之前所有网络的成绩(表5)。我们结合6种不同深度的模型形成一个整体(最终提交版本中只包含两个152层的模型),这一模型在测试中的前五项错误率只有3.57%(表5),这一结果在ILSVRC-2015中取得了冠军。在这里插入图片描述

4.2 CIFAR-10和分析

我们在CIFAR-10数据集中进行更多的研究[20],CIFAR-10包括五万张的训练图像和一万张的测试图像,这些图像被分成了10类。我们将会展示在训练集中训练和在测试集中评估的试验。我们关注的焦点在于超深网络的行为,而不在于取得最好结果,所以我们有意的使用了简单的结构。

所有普通/残差网络都遵循图3(中,右)的流程。网络输入32×32的图像,每个像素都减去了图像均值。第一层是3×3卷积层。接下来是6n层的3×3卷积层,特征图的大小依次为{32,16,8},每个特征图大小持续使用2n层。卷积层后面的池化层步长为2。网络的末端有一个全局平均池化层,一个10路全连接层,最后是softmax分类器。总共有6n+2个带有权重的层。下表总结了其结构构成:在这里插入图片描述
使用跨层连接时,它们连接一组组的3×3层,这样总共有3n条跨层连接。在此数据集中,我们在所有的情况下都使用恒等跨层连接(A方案),所以我们的残差模型与普通模型有完全一样的深度,宽度和参数数量。

我们设置权重衰减为0.0001,动量为0.9,使用了[13]中的权值初始化方法和[16]中的BN方法,没有使用dropout,mini-batch设为128,使用两个GPU进行训练。我们开始的学习率是0.1,经过32000次和48000次迭代后将学习率除以10,在64000迭代时结束训练。这是由45K/5K的训练/验证比值决定的。我们使用了[24]中的简单的数据扩增方法:每一边填充4像素,再从填充完的图像或者其水平翻转中随机选取大小为32×32的结果。测试时我们只使用32×32的原始图像。

我们比较n={3,5,7,9},即20层、32层、44层和56层的网络结构。图6(左)展示的是普通网络的表现。普通网络随着深度的增加错误率也会变高。这与在ImageNet(图4,左)和MNIST[42]上得到的结论是类似的,这说明对于普通网络,这种优化问题是一个基础性问题。

图6(中)向我们展示了ResNet的表现。与在ImageNet上类似(图4,右),ResNet克服了优化问题:随着深度的增加,准确率提高了。在这里插入图片描述
当n=18,即残差网络达到110层时,我们发现初始学习率为0.1对于收敛还是太高了 。在这种情况下,我们发现初始学习速率0.1太大,无法开始收敛。因此,我们使用0.01来预热训练,直到训练误差低于80%(约400次迭代),然后返回到0.1并继续训练。接下来的步骤如之前所述。110层的网络收敛的十分好(图6,中)。比之于其他模型,如FitNet[35]和Highway[42],ResNet的参数量更少,但是结果却是十分的优秀(6.43%,表6)。

层响应分析   ~  图7显示了层响应的标准偏差(std)。在这里插入图片描述
层响应指在BN之后非线性之前每个3×3卷积层的输出。对于ResNet,此分析揭示了残差函数的响应强度。图7显示ResNet的响应通常比普通响应小。这些结果支持了我们的基本想法(第3.1节),即残差函数通常比非残差函数更接近零。我们还注意到,更深的ResNet具有较小的响应范围,如图7中的ResNet-20、56和110的比较所证明。在这里插入图片描述
当有更多层时,ResNets的单个层往往会减少对信号的修改。

探索1000层以上的网络   ~  我们探索了一个超过1000层的深层模型。我们将n设置为200,这将导致1202层网络的运行,如上所述。我们的方法没有优化困难,该103层网络能够实现<0.1%的训练误差(图6,右)。其测试误差仍然相当不错(7.93%,表6)

但是,在这种积极深入的模型上仍然存在未解决的问题。尽管这两个1202层网络的训练误差相似,但它们的测试结果比我们的110层网络的测试结果差。我们认为这是由于过度拟合。对于这个小的数据集,1202层网络是不必要大的(19.4M)。使用强正则化(例如maxout [10]或dropout [14])在此数据集上获得最佳结果([10、25、24、35])。在本文中,我们不使用maxout / dropout,而只是通过设计通过深度和精简架构强加正则化,而不会分散对优化困难的关注。但是,结合更强的正则化可能会改善结果,我们将在以后进行研究。

4.3 在PASCAL和MSCOCO上的目标检测

我们的方法在其他的识别任务中有较好的泛化表现。表7和表8显示了在PASCAL VOC 2007和2012[5]、COCO[26]上的目标检测基准结果。在这里插入图片描述
我们采用Faster R-CNN[32]作为检测方法。我们对于使用ResNet取代VGG-16[41]方法所获得的进步很感兴趣。两种模型所使用的目标检测的具体实现(见附录)是一样的,所以所获结果的差别取决于网络结构。值得注意的是,在极具挑战性的COCO数据集中,我们在COCO的衡量标准(mAP@[.5,.95])下取得了6.0%的进步,即28%的相对进步。这种进步完全得力于模型的深度。

基于深度残差网络,我们赢得了ILSVRC&COCO2015比赛的数个任务的冠军:ImageNet图像检测,ImageNet定位,COCO图像检测和COCO图像分割。详情请见附录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值