论文翻译:Residual Attention Network for Image Classification

摘要

        在这项工作中,我们提出了“残余注意力网络”,这是一种使用注意力机制的卷积神经网络,可以以端到端的训练方式与最新的前馈网络体系结构结合。我们的剩余注意力网络是通过堆叠注意力模块构建的,这些模块会生成注意力感知功能。随着模块的深入,来自不同模块的注意力感知功能会自适应地变化。在每个注意模块中,自下而上,自上而下的前馈结构用于将前馈展开并将反馈注意过程反馈到单个前馈过程中。重要的是,我们提出了注意力残差学习以训练非常深入的残差注意力网络,该网络可以轻松扩展到数百层。
        对CIFAR-10和CIFAR-100数据集进行了广泛的分析,以验证上述每个模块的有效性。我们的残留注意力网络可在三个基准数据集上实现最先进的物体识别性能,包括CIFAR-10(3.90% error),CIFAR-100(20.45% error)和ImageNet(4.8% single model and single crop, top-5 error)。请注意,与ResNet-200相比,我们的方法可实现0.6%的top-1精度提高,躯干深度为46%,前向FLOP为69%。该实验还证明了我们的网络对于嘈杂的标签具有较强的鲁棒性。

1 Introduction

        不仅友好的面孔,而且红色也会吸引我们的注意力。注意的混合性质已在先前的文献中进行了广泛的研究[34、16、23、40]。注意不仅可以用来选择一个位置,而且可以增强在该位置上物体的不同表示。以前的工作将注意力漂移表示为连续过程,以捕获不同的参与方面。然而,据我们所知,尚未将注意力机制应用于前馈网络结构以实现图像细化任务的最新结果。图像分类的最新进展集中于使用“非常深”的结构训练前馈卷积神经网络[27、33、10]。
受到注意力机制和深度神经网络最新进展的启发,我们提出了残差注意力网络,这是一个在“非常深”的结构中采用混合注意力机制的进化网络。剩余注意力网络由多个注意力模块组成,这些模块会生成注意力感知功能。随着层次的不断深入,来自不同模块的注意力感知功能会自适应地变化。
        除了注意力机制带来的更具区分性的特征表示外,我们的模型还具有以下吸引人的特性:
(1)增加注意力模块会导致性能持续改进,因为广泛捕获了不同类型的注意力。图1显示了热气球图像的不同注意类型的示例。天空注意遮罩会减少背景响应,而气球实例遮罩会突出显示气球的底部。
(2)能够以端到端的培训方式与最新的深度网络结构相结合。具体来说,我们的网络深度可以轻松扩展到数百层。我们的残留注意网络在CIFAR-10,CIFAR-100和具有挑战性的ImageNet [5]图像分类数据集上的表现都优于最新的残留网络,并且计算量大大减少(69%的前向FLOP)。
所有上述特性(使用以前的方法难以实现)都可以通过以下方式实现归因:
(1)堆叠的网络结构:我们的剩余注意力网络是通过堆叠多个注意力模块而构建的。堆叠结构是混合注意力机制的基本应用。因此,可以在不同的注意模块中捕获不同类型的注意。
(2)注意残差学习:直接堆叠注意模块会导致明显的性能下降,因此,我们提出了注意残差学习机制,以优化具有数百层的非常深的残差注意网络。
(3)自下而上的自上而下的前馈注意:自下而上的自上而下的前馈结构已成功地应用于人体姿态估计[24]和图像分割[22、25、1]。
        我们将这种结构用作“注意模块”的一部分,以对要素添加软权重。这种结构可以在单个前馈过程中模拟自下而上的快速前馈过程和自上而下的注意力反馈,这使我们能够开发出具有自上而下的注意力的端到端可训练网络。在我们的工作中,自下而上,自上而下的结构不同于堆叠式沙漏网络[24],它的目的是引导特征学习。

图一 Left: an example shows the interaction between features and attention masks. Right: example images illustrating that different features have different corresponding attention masks in our network. The sky mask diminishes low-level background blue color features. The balloon instance mask highlights high-level balloon bottom part features.

2. Related Work

        来自人类感知过程的证据[23]显示了注意力机制的重要性,该机制使用顶部信息来指导自下而上的前馈过程。近来,在将注意力投入到深度神经网络方面已经做出了努力。 Deep Boltzmann机器(DBM)[21]在训练阶段通过其重构过程引起了自上而下的关注。注意机制也已广泛应用于递归神经网络(RNN)和长期短期记忆(LSTM)[13],以解决顺序决策任务[25、29、21、18]。热门信息是按顺序收集的,并决定在哪里参加下一个功能学习步骤。
提出了残差学习[10]来学习身份映射的残差。该技术大大增加了前馈神经元网络的深度。与我们的工作类似,[25、29、21、18]使用带有注意机制的残差学习从残差学习中受益。使用注意力机制捕获两个信息源(查询和查询上下文),以在工作中互相帮助。在我们的工作中,单个信息源(图像)被分为两个不同的信息源,并反复组合。残差学习被应用来减轻重复分割和合并带来的问题。
        在图像分类中,自上而下的注意力机制已使用不同的方法应用:顺序过程,区域提议和控制门。顺序过程[23、12、37、7]将图像分类建模为顺序决策。因此,可以与上述类似地施加注意力。这种公式允许使用RNN和LSTM进行端到端优化,并可以以目标驱动方式吸引不同种类的注意力。
        区域生成[26、4、8、38]已成功用于图像检测任务。在图像分类中,在前馈分类之前添加了一个附加的区域生成阶段。生成的区域包含重要信息,并在第二阶段用于特征学习。与图像检测不同,图像检测的区域生成依赖大量监督,例如the ground truth bounding boxes or detailed segmentation masks[6],无监督学习[35]通常用于图像分类的区域生成。
        控制门已在LSTM中广泛使用。在attention的图像分类中,神经元的控制门会根据最新信息进行更新,并在训练过程中影响前馈过程[2,30]。但是,在训练过程中会涉及到一个新的过程,即强化学习[30]或优化[2]。Highway Network[29]扩展了控制门以解决深度卷积神经网络的梯度退化问题。
        然而,图像分类的最新进展集中在使用“非常深”的结构来训练前馈卷积神经网络[27,33,10]。前馈卷积网络模仿了人类皮质的自下而上的路径。各种方法被提出以来进一步提高深度卷积神经网络的判别能力。为了训练出更深的网络,已经提出了VGG [27],Inception [33]和残差学习[10]。用Stochastic depth[14],BN[15]和Dropout[28]利用正则化来收敛并避免过度拟合和退化。
        在最近工作[3,17]中的Soft attention可以用于训练端到端的卷积网络。我们RAN以一种创新的方式将软注意力整合到快速发展的前馈网络结构中。最近提出的空间变换器模块[17]实现了关于门牌号码识别任务的最新结果。捕获顶级信息的深度网络模块用于生成仿射变换。仿射变换应用于输入图像以获取有人参与的区域,然后喂入另一个深度网络模块。整个过程可以通过使用进行空间变换的可区分网络层进行端到端训练。缩放注意[3]使用软注意作为缩放选择机制,并在图像分割任务中获得了最新技术成果。
        在RAN中软注意结构的设计是受面向定位任务的最新发展启发的,即分段[22,25,1]和人体姿势估计[24]。 这些任务激励研究人员探索具有细粒度特征图的结构。 框架倾向于将自下而上和自上而下的结构进行级联。 自下而上的前馈结构产生具有强语义信息的低分辨率特征图。 之后,自上而下的网络会生成密集的特征以推断每个像素。 底部和顶部特征图之间使用了跳过连接[22],并在图像分割方面获得了最新技术成果。 最近的堆叠式沙漏网络[24]融合了多种尺度的信息以预测人体姿势,并从对全局和局部信息进行编码中受益。

3. Residual Attention Network 

        RAN是通过堆叠多个注意模块而构建的。 每个注意模块都分为两个分支:掩码分支和主干分支。 The trunk branch performs feature processing,并且可以适应任何最新的网络结构。在这项工作中,我们使用预激活残差单元[11]---ResNeXt [36]和Inception [32]作为RAN的基本单元来构建注意模块。 干线分支(trunk branch)的输入x对应输出T(x),在mask branch中使用自下而上,自上而下的结构[22、25、1、24]来学习得到具有相同大小的mask M(x),从而方便加权输出特征T(x) 。自下而上,自上而下的结构模仿了快速前馈和反馈注意过程。 输出mask用作干线分支神经元的控制门,类似于Highway Network[29]。 Attention Module H的输出为: H_{i,c}(x)=M_{i,c}(x) \times T_{i,c}(x),其中i覆盖所有的空间位置,且c\epsilon \left \{1, ..., C \right \}是通道的索引。整个结构可以端到端地训练。
        在Attention Modules,attention mask 不仅可以在前向推理期间用作特征选择器,而且还可以在向后传播期间更新过滤器。 在soft mask branch中,关于输入特征的梯度为:\frac{\partial M(x,\theta)T(x,\phi)}{\partial \phi} =M(x,\theta) \frac{\partial T(x,\phi)}{\partial \phi}, 其中\phi是主干分支上的参数,\theta是掩码分支上的参数。这一属性使Attention Modules对嘈杂的标签具有鲁棒性。Mask分支可以防止错误的梯度(来自嘈杂的标签)来更新中干线上的参数。 第4.1节中的实验显示了RAN对嘈杂标签的鲁棒性。
        在我们的设计中除了堆叠注意模块之外,一个简单的方法是使用单个网络分支来生成软权重掩码,类似于空间转换器层[17]。但是,这些方法在具有挑战性的数据集(如ImageNet)上有几个缺点。首先,背景混乱,场景复杂且外观变化较大的图像需要通过不同类型的注意力进行建模。在这种情况下,需要使用不同的attention masks对来自不同图层的特征进行建模,使用单个掩码分支将需要指数数量的通道来捕获不同因素的所有组合。其次,单个Attention Module只能修改一次功能。如果在图像的某些部分上修改失败,则后面网络模块不会再有机会。
        而RAN可以缓解上述问题。在Attention Module中,每个主干分支都有自己的mask分支,以学习专门针对其功能的注意。如图1所示,在热气球图像中,底层的蓝色特征具有相应的天空遮罩以消除背景,而顶层的部分特征则通过气球实例遮罩进行细化。此外,堆叠网络结构的渐进性质可以逐渐改善对复杂图像的关注。

3.1. Attention Residual Learning

        但是,简单的堆叠Attention Module会导致明显的性能下降。 首先,掩模范围从零到一的重复点的产生将降低深层中特征的值。 其次,软掩码可能会破坏主干分支的良好属性,例如,残差单元的恒等映射。
        我们提出了attention residual learning以缓解上述问题。 类似于残差学习中的思想,如果可以将soft mask unit构造为恒等映射,则其性能应该不比没有Attention的情况更差。 因此,我们将注意力模块的输出H修改为H_{i,c}(x)=(1+M_{i,c}(x)) \times F_{i,c}(x), 其中M(x)的取值范围是[0,1],当M(x)近似为0时,H(x)则近似为原始的特征F(x),称这种方法为Attention Residual Learning。
        我们的Attention Residual Learning不同于Residual Learning。在原始的ResNet中,Residual Learning的形式是H_{i,c}(x)=x + F_{i,c}(x)。在我们的公式中,F_{i,c}(x)指的是有深度卷积网络生成的特征,关键在于我们的mask分支M(x),它们作为特征选择器可以增强好的特征而抑制来自主干特征的噪声。
        此外,堆叠的Attention Modules通过其增量性质来强化attention residual learning。 attention residual learning可以保持原始特征的良好性能,而且也使它们能够绕过soft mask分支向前进到顶层,从而削弱mask分支的特征选择能力。堆叠的Attention Modules可以逐步完善特征图。 如图1所示,深度越深,特征就越清晰。 通过使用注意力残差学习,生成的RAN可以通过更大的深度增加来持续改善性能。 如实验部分所示,RAN的深度增加到452层时,其在CIFAR数据集上的性能大大超过ResNet-1001。

3.2. Soft Mask Branch 

        遵循先前在DBN [21]中的attention机制,我们的mask分支包含快速前馈扫描和自上而下的反馈步骤。 前一种操作快速收集整个图像的全局信息,后一种操作将全局信息与原始特征图结合在一起。 在卷积神经网络中,这两个步骤展开为自下而上,自上而下的全卷积结构。
        从输入开始,执行了最大池化以在少量Residual Units后迅速增加接收场。达到最低分辨率后,然后通过对称的自上而下的体系结构扩展全局信息以指导每个位置的输入特征。对Residual Units后的输出以线性插值进行上采样。双线性插值的数量与最大池化的数量相同,以使输出特征图的大小与输入的相同。然后,在两个连续的1×1卷积层之后,使用sigmoid将输出范围归一化到[0,1]。我们还在自下而上和自上而下的部件之间添加了skip connections,以捕获不同比例的信息, 完整的模块如图2所示。

图2  我们在注意模块的设计中使用了三个超参数:p,t和r。 超参数p表示在切分成主干分支和掩码分支之前的预处理残差单元的数目。 t表示主干分支中的Residual Units数。r表示mask分支中相邻池化层之间的Residual Units数。 在我们的实验中,我们使用以下超参数设置:{p = 1,t= 2,r = 1}。 软掩码Residual Units和相应的主干分支中的通道数相同。

 

Figure 3: The receptive field comparison between mask branch and trunk branch.

        自下而上,自上而下的结构已应用于图像分割和人体姿势估计。 但是,我们的结构与前一个结构的区别在于它的意图。 我们的Mask分支旨在改善主干分支的功能,而不是直接解决复杂的问题。在4.1节中进行了的实验以验证上述论点。

3.3. Spatial Attention and Channel Attention 

        在我们的工作中,mask分支提供的attention会随着主干分支功能而自适应地变化。但是,在soft mask输出之前,通过改变激活函数中的归一化步骤,仍然可以将attention约束添加到mask分支中。 我们使用三种类型的激活函数,分别对应mixed attention,channel attention和spatial attention。 没有额外限制的mixed attentionf1对每个通道和空间位置使用简单的sigmoid。 channel attentionf2对每个空间位置的所有通道进行L2归一化,去除空间信息。 spatial attentionf3在每个通道的特征图中执行归一化和softmax,得到仅与空间信息相关的soft mask。

其中i的取值范围包括所有空间位置,c的取值范围包括所有的通道,mean_cmean_c表示c通道特征图的均值和标准差,x_i表示第i个空间位置上的特征向量。
        实验结果如表1所示,mixed attention具有最佳性能。先前的作品通常只关注一种attention类型,例如scale attention[3]或spatial attention[17],这会通过权重共享或归一化对soft mask施加其他约束。然而,正如我们的实验所支持的那样,在不附加约束的情况下,通过自适应地改变attention具有最佳性能。【所以作者应该在后面使用的是mixed attention】

 

4. Experiments

        在本节中,我们评估了在一系列基准数据集(包括CIFAR-10、CIFAR-100[19]和ImageNet[5])上提出的RAN的性能。我们的实验包括两个部分。在第一部分中,我们分析了RAN中各部分的有效性,包括attention residual learning机制和attention模块中soft mask的不同架构。在此基础上,研究了噪声的抗噪性能。在计算资源有限的情况下,我们选择CIFAR-10和CIFAR-100数据集进行实验。最后,我们将我们的网络与CIFAR数据集的最新结果进行了比较。在第二部分中,我们先后用inception模块、ResNeXt替换了Residual Unit,并分别在RAN上进行训练,以证明我们的RAN在参数效率和最终性能上都优于原始网络。【这一章,作者挨个分析了各个模块的性能】

4.1. CIFAR and Analysis

        Implementation。CIFAR-10和CIFAR-100数据集分别包含10类和100类6万张32×32张彩色图像,其中训练图像5万张,测试图像1万张。广泛应用的最先进的网络结构ResNet,被用作基准方法。为了公平比较,我们保持大多数设置与ResNet paper[10]相同。图像每边填充4个像素,填充0值,得到40×40的图像【ResNet没填充呀,人家用的是224*224】。从图像或其水平翻转中随机剪裁32×32,减去每个像素的RGB平均值。我们在之前的研究[9]的基础上,采用相同的权值初始化方法,使用nesterov SGD对残差注意网络进行训练,并设置mini-batch size为64。我们使用的权值衰减为0.0001,动量为0.9,并将初始学习率设置为0.1。在第64k和96k迭代时,学习率除以10。我们在160k迭代时终止训练。 
        整个网络架构和超参数设置如表2所示。该网络由3个阶段组成,与ResNet[10]相似,每个阶段堆叠相同数量的Attention Modules。此外,我们在每个阶段添加两个Residual Units。主干分支的参数为36m+20,其中m是在一个阶段的Attention Modules数。在测试时,我们使用原始的32×32图像。

表2 Residual Attention Network architecture details for ImageNet. Attention structure is described in Fig. 2. We make the size of the smallest output map in each mask branch 7×7 to be consistent with the smallest trunk output map size. Thus 3,2,1 max-pooling layers are used in mask branch with input size 56×56, 28×28, 14×14 respectively. The Attention Module is built by pre-activation Residual Unit [11] with the number of channels in each stage is the same as ResNet [10].


        Attention Residual Learning。在本实验中,我们评估了attention residual learning机制的有效性。由于attention residual learning(ARL)的概念是一个新的概念,没有之前的方法可以比较,因此我们使用“naive attention learning”(NAL)作为基准。具体来说,“naive attention learning”使用Attention Modules,该模块的特征不使用ARL学习,而是直接通过soft mask进行点积。我们设置每个阶段的Attention Modules数m ={1, 2, 3, 4}。在Attention Modules上,分别是Attention-56(按主干层深度命名)、Attention-92、Attention-128和Attention-164。
        我们使用不同的机制训练这些网络,并在表3中显示结果。如表3所示,使用attention residual learning技术训练的网络始终优于使用基准方法训练的网络,证明了我们方法的有效性。在应用attention residual learning时,attention modules的数量越多,学习效果越好。而使用“naive attention learning”方法训练的网络,随着attention modules数量的增加,其性能明显下降。

        为了了解注意剩余学习的好处,我们计算了每个阶段输出层的平均绝对响应值。我们使用Attention-164来进行这个实验。如图4所示,与使用ARL训练的网络相比,使用NAL训练的网络在经过四个注意模块后,在第二阶段产生的响应很快消失。注意模块通过在特征与软掩模之间应用点积的方法,在保持有用信息的同时能够抑制噪声。然而,重复的点积会导致有用和无用信息的严重退化。注意剩余学习可以缓解恒等映射的信号衰减,增强了特征的对比度。因此,该算法在不损失大量信息的情况下,从降低噪声中获益,使得优化变得更加容易,同时也提高了对所代表特征的识别能力。在剩下的实验中,我们使用这种技术来训练我们的网络。【该阶段主要是证明了ARL的有效性】

        Comparison of different mask structures 。通过与不进行下采样或上采样的局部卷积进行比较,验证了编码器译码器结构的有效性。局部卷积soft mask由三个剩余单元组成,每个单元有相同的 FLOPs。Attention-56分别用于构造Attention-Encoder-Decoder-56和AttentionLocal-Conv-56。结果如表4所示。Attention-Encoder-Decoder-56网络的测试误差比AttentionLocal-Conv-56网络的测试误差低,为5.52%,低了0.94%。结果表明,软注意优化过程将受益于多尺度信息。

        Noisy Label Robustness。在这个实验中,我们证明了我们的残差注意网络在CIFAR-10数据集上具有抗噪声的性能。我们实验中的混淆矩阵Q设为:

其中r表示整个数据集的干净标签比率。 
        我们比较了不同噪声水平下的ResNet-164网络和Attention-92网络。表5显示了结果。在相同噪声水平下,Attention-92网络的测试误差明显低于164网络。另外,当增大噪声比时,与ResNet164网络相比,Attention-92的测试误差下降更缓慢。这些结果表明,我们的剩余注意网络即使在高水平的噪声数据下也能表现良好。当标签有噪声时,相应的掩码可以防止标签误差引起的梯度,从而更新网络中的主干分支参数。这样,只有主干分支在学习错误的监控信息,而软掩码分支在掩盖错误的标签。

        Comparisons with state-of-the-art methods。 我们在CIFAR-10和CIFAR-100数据集上用最先进的方法(包括ResNet[11]和Wide ResNet[39])比较残余注意力网络。结果如表6所示,我们的Attention-452优于CIFAR-10和CIFAR-100数据集上的所有基准方法。注意,在相似的参数大小下,Attention-92网络在CIFAR10上的测试误差为4.99%,在CIFAR-100上的测试误差为21.71%,而在ResNet-164网络上,在CIFAR-10和CIFAR100上的测试误差分别为5.46%和24.33%。此外,Attention-236仅使用一半的参数就优于ResNet-1001。这表明,我们的注意模块和注意剩余学习方案可以有效地减少网络中的参数数量,同时提高分类性能。

4.2. ImageNet Classification 

        在本节中,我们使用ImageNet LSVRC 2012数据集[5]进行实验,该数据集包含1,000个类,包含120万张训练图像、50,000张验证图像和100,000张测试图像。对ImageNet LSVRC 2012验证集的非黑名单图像进行评价。我们使用Attention-56和Attention-92进行实验。网络结构和超参数如表2所示。 

表2 Residual Attention Network architecture details for ImageNet. Attention structure is described in Fig. 2. We make the size of the smallest output map in each mask branch 7×7 to be consistent with the smallest trunk output map size. Thus 3,2,1 max-pooling layers are used in mask branch with input size 56×56, 28×28, 14×14 respectively. The Attention Module is built by pre-activation Residual Unit [11] with the number of channels in each stage is the same as ResNet [10].

        Implementation.我们的实现遵循之前研究[20]的实践。我们对原始图像应用比例和长宽比增强[33]。在一个增广图像或其水平翻转进行224×224的随机剪裁,每像素的RGB减去均值除以标准差使其规模在[0,1]之间。我们采用标准的增色[20]。网络使用SGD进行训练,动量为0.9。我们将初始学习率设置为0.1。在200k、400k和500k迭代时,学习率除以10。在530k迭代时终止训练。
        Mask Influence.在本实验中,我们探讨了所提出的残差注意网络的有效性。我们比较了attention-56和ResNet-152[10]。ResNet-152有50个主干剩余单元,60.2×106个参数,而Attention-56有18个为主干剩余单元,31.9×106个参数。我们在ImageNet验证集上使用单一剪裁方案对模型进行了评估,结果如表7所示。Attention-56网络的性能大大优于ResNet-152,Top-1错误减少了0.4%,Top-5错误减少了0.26%。更重要的是,与ResNet-152相比,attention-56网络仅52%的参数和56%的FLOPs就获得了更好的性能,这表明所提出的attention机制可以在降低模型复杂度的同时显著提高网络性能。

        Different Basic Units. 实验表明,利用不同的基本单元,残差注意网络可以很好地泛化。我们使用三个流行的基本单位:Residual Unit、ResNeXt[36]和Inception[32]来构建我们的残余注意网络。为了将参数和FLOPs的数量保持在相同的范围内,我们简化了初始化过程。结果如表7所示。
        ResNeXt-101相同,而参数和FLOPs明显小于ResNeXt-101。对于Inception,AttentionIncepiton-56比incepated - resnet -v1[32]的性能好得多,Top-1的错误减少了0.94%,Top-5的错误减少了0.21%。结果表明,该方法适用于不同的网络结构。
        Comparisons with State-of-the-art Methods. 我们使用最先进的算法,在ILSVRC 2012验证集上使用单一剪裁对我们的attention-92进行评估,表7显示了结果。我们的Attention-92远远超过了ResNet-200。Top-1的错误减少了0.6%。注意,ResNet-200网络包含的参数比Attention-92多32%。如表7所示,attention-92的计算复杂度表明,与ResNet-200相比,我们的网络通过增加注意力机制和减少主干深度,减少了近一半的训练时间。以上结果表明,我们的模型具有较高的效率和良好的性能。

5. Discussion 

我们提出了一个RAN,它堆叠了多个注意模块。我们的网络有两个好处:它可以捕获mixed attention,是一个可扩展的卷积神经网络。第一个好处是不同的注意模块捕获不同类型的注意来指导特征学习。我们对激活函数形式的实验也验证了这一点:自由形式的混合注意比受约束的(包括单一)注意具有更好的性能。第二个好处是将自顶向下的注意机制编码为自底向上的自顶向下的前向卷积结构。因此,基本注意模块可以组合成更大的网络结构。而且,残差注意学习可以训练非常深层的残差注意网络。我们的表现模型超越了最先进的图像分类方法,即CIFAR-10上的ResNet(3.90%的错误)、CIFAR-100上的ResNet(20.67%的错误)和挑战性的ImageNet数据集(0.6%的前1位精度改进),只有46%的主干深度和69%的前向错误(与ResNet-200相比)。未来,我们将利用深度RAN的不同应用,如检测和分割,更好地探索针对特定任务的混合注意机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值