第十四章:Context Encoding for Semantic Segmentation ——语义分割的上下文编码

本文提出了一种名为ContextEncoding的模块,用于改善语义分割任务的性能。该模块通过捕捉全局上下文信息,选择性地强调与类别相关的特征图,从而帮助网络更好地理解场景。在PASCAL-Context、PASCALVOC2012和ADE20K数据集上,这种方法展示了优越的性能,同时在CIFAR-10数据集上也改善了浅层网络的图像分类能力。
摘要由CSDN通过智能技术生成

原文信息

原文题目:《Context Encoding for Semantic Segmentation》

原文引用:Zhang H, Dana K, Shi J, et al. Context encoding for semantic segmentation[C]//Proceedings of the IEEE conference on Computer Vision and Pattern Recognition. 2018: 7151-7160.

原文链接:https://openaccess.thecvf.com/content_cvpr_2018/papers/Zhang_Context_Encoding_for_CVPR_2018_paper.pdficon-default.png?t=N6B9https://openaccess.thecvf.com/content_cvpr_2018/papers/Zhang_Context_Encoding_for_CVPR_2018_paper.pdf

0.摘要

        近期的研究在使用全卷积网络(FCN)框架改善像素级标注的空间分辨率方面取得了显著进展,通过采用扩张/空洞卷积、利用多尺度特征和细化边界等方法本文通过引入上下文编码模块来探索全局上下文信息对语义分割的影响,该模块捕捉场景的语义上下文,并选择性地突出显示类别相关的特征图。所提出的上下文编码模块在几乎不增加额外计算成本的情况下显著改善了语义分割结果,我们的方法在PASCAL-Context数据集上取得了新的最先进结果,mIoU达到了51.7%,在PASCAL VOC 2012上达到了85.9%的mIoU。我们的单一模型在ADE20K测试集上取得了0.5567的最终得分,超过了COCO-Place Challenge 2017的获胜模型。此外,我们还探索了上下文编码模块如何改善相对较浅网络在CIFAR-10数据集上的图像分类的特征表示。我们的14层网络在错误率方面达到了3.45%,与拥有10倍以上层数的最先进方法相当。完整系统的源代码公开可用。

图1:准确地为场景进行逐像素标注对于语义分割算法来说是一个挑战。即使对于人类来说,这个任务也很具有挑战性。然而,根据场景上下文缩小可能类别列表可以使标注变得更容易。受此启发,我们引入了上下文编码模块,该模块选择性地突出显示类别相关的特征图,使网络对语义分割的处理更加容易。(来自ADE20K数据集的示例。)

1.引言

        语义分割为给定的图像分配每个像素的对象类别预测,从而提供了包括对象类别、位置和形状信息在内的全面场景描述。最先进的语义分割方法通常基于全卷积网络(FCN)框架。深度卷积神经网络(CNN)的应用受益于从不同图像集中学习到的丰富的对象类别和场景语义信息。通过堆叠具有非线性和下采样的卷积层,CNN能够捕捉具有全局感知野的信息表示。为了解决与下采样相关的空间分辨率损失问题,近期的研究使用扩张/空洞卷积策略从预训练网络中产生密集的预测。然而,这种策略也会使像素与全局场景上下文相隔离,导致像素被错误分类。例如,在图4的第三行中,基线方法将一些窗玻璃像素错误分类为门。

        最近的方法通过使用基于多分辨率金字塔表示的方法,扩大感受野,取得了最先进的性能。例如,PSPNet采用了空间金字塔池化,将特征图汇集到不同的尺寸并在上采样之后进行级联[57],而Deeplab提出了一种采用大空洞卷积的空洞空间金字塔池化方法[5]。虽然这些方法确实提高了性能,但上下文表示并不明确,这引出了一个问题:捕捉上下文信息与扩大感受野的大小是否相同?考虑对一个包含150个类别的大型数据集(如ADE20K [59])中的图像进行标注,如图1所示。假设我们有一个工具允许标注员首先选择图像的语义上下文(例如卧室)。然后,该工具可以提供一个更小的相关类别子列表(例如床、椅子等),这将大大减少可能类别的搜索空间。同样地,如果我们能设计一种方法充分利用场景上下文与类别概率之间的强相关性,那么对于网络来说,语义分割变得更容易。

        经典的计算机视觉方法具有捕捉场景语义上下文的优势。对于给定输入图像,可以使用SIFT或滤波器响应密集提取手工设计的特征。然后,通常会学习视觉词汇(字典),并使用经典编码器(如词袋(BoW)、VLAD或Fisher Vector)描述全局特征统计信息。经典表示通过捕捉特征统计信息来编码全局上下文信息。虽然CNN方法极大地改进了手工设计的特征,但传统方法的整体编码过程便捷且强大。我们能否利用经典方法的上下文编码与深度学习的优势?最近的研究在CNN框架中广泛推广了传统编码器[1,56]。张等人引入了一个编码层,将整个字典学习和残差编码流程整合到单个CNN层中以捕捉无序表示。该方法在纹理分类方面取得了最先进的结果[56]。在这项工作中,我们扩展了编码层,以捕捉全局特征统计信息来理解语义上下文。

        作为本文的第一个贡献,我们引入了一个上下文编码模块,其中包括语义编码损失(SE-loss:Semantic encoding-loss),这是一个利用全局场景上下文信息的简单单元。上下文编码模块整合了一个编码层,以捕捉全局上下文,并选择性地突出显示与类别相关的特征图。为了理解,考虑到我们希望在室内场景中减弱车辆出现的概率。标准的训练过程只使用了每像素的分割损失,这并没有充分利用场景的全局上下文信息。我们引入了语义编码损失(SE-loss)来规范训练过程,让网络预测场景中物体类别的存在,以强制网络学习语义上下文。与每像素损失不同,SE-loss对大对象和小对象的贡献相等,并且我们发现在实践中小对象的性能通常会得到改善。所提出的上下文编码模块和语义编码损失在概念上非常直观,并且与现有的基于FCN的方法兼容。

        本文的第二个贡献是设计和实现了一个新的语义分割框架Context Encoding Network (EncNet)。EncNet通过在预训练的Deep Residual Network (ResNet)[17]中加入一个Context Encoding Module来增强网络,如图2所示。我们使用预训练网络的扩张策略[4,52]。所提出的Context Encoding Network在PASCAL VOC 2012数据集上的mIoU达到了85.9%,在PASCAL in Context数据集上达到了51.7%。我们的EncNet-101单模型的得分为0.5567,超过了COCO-Place Challenge 2017 [59]的获奖作品。除了语义分割,我们还研究了Context Encoding Module在CIFAR-10数据集[28]上的视觉识别能力,通过使用所提出的Context Encoding Module显著改善了浅层网络的性能。我们的网络仅使用了3.5M个参数,错误率为3.96%。我们发布了完整的系统,包括最先进的方法,以及我们实现的同步多GPU批归一化[23]和内存高效的编码层[56]

2.上下文编码模块

        我们将CNN模块称为上下文编码模块,模块的组成部分如图2所示。

 上下文编码理解和利用上下文信息对于语义分割非常重要对于在多样化图像集上预训练的网络[10],特征图编码了场景中的物体的丰富信息。我们使用编码层[56]来捕捉特征统计信息作为全局语义上下文。我们将编码层的输出称为编码语义。为了利用上下文,我们预测一组缩放因子,以选择性地突出显示与类相关的特征图。编码层学习了一个固有的字典,携带了数据集的语义上下文,并输出具有丰富上下文信息的残差编码器。为了完整起见,我们简要描述了编码层的先前工作。

        编码层将形状为C×H×W的输入特征图视为一组具有C维输入特征的集合X={x1,...xN},其中N是由H×W给出的特征总数。编码层学习一个包含K个码字(视觉中心)的固有码本D={d1,...dK}和一组视觉中心的平滑因子S={s1,...sK}。编码层通过聚合带有软分配权重ek的残差输出残差编码器,其中ek=PNi=1eik,eik=exp(−skkrikk2)exp(−skkrikk2)PKj=1exp(−sjkrijk2)rik,(1),而残差由rik=xi−dk给出。我们对编码器进行聚合而不是连接。即e=PKk=1φ(ek),其中φ表示带有ReLU激活的批归一化,避免使K个独立编码器有序,并减少特征表示的维度。

特征图注意力 为了利用编码层捕捉到的编码语义信息,我们预测特征图的缩放因子作为反馈回路,以强调或减弱与类别相关的特征图。我们在编码层之上使用一个全连接层和一个sigmoid作为激活函数,输出预测的特征图缩放因子γ=δ(We),其中W表示层的权重,δ是sigmoid函数。然后,模块的输出由Y =X ⊗γ给出,其中 ⊗ 表示逐通道乘法,X表示输入特征图,γ表示缩放因子。这种反馈策略受到了风格转移[22,55]和最近的SE-Net[20]中调整特征图尺度或统计量的先前工作的启发。作为对该方法实用性的直观示例,考虑强调天空场景中飞机的概率,但减弱车辆的概率。

语义编码损失 在标准的语义分割训练过程中,网络是从孤立的像素(对于给定的输入图像和真实标签,使用像素级交叉熵损失)中学习的。网络可能在没有全局信息的情况下难以理解上下文。为了规范化上下文编码模块的训练,我们引入了语义编码损失(SE损失),它以非常小的额外计算成本迫使网络理解全局语义信息。我们在编码层之上构建了一个附加的全连接层,并使用sigmoid激活函数进行个别预测,以判断场景中是否存在对象类别,并使用二元交叉熵损失进行学习。与像素级损失不同,SE损失同等考虑大和小的对象。实际上,我们发现小物体的分割结果通常会得到改善。总之,图2所示的上下文编码模块捕获语义上下文,预测一组缩放因子,以选择性地突出显示与类别相关的特征图,用于语义分割。

图2:所提出的EncNet的概述。给定一张输入图像,我们首先使用预训练的CNN提取密集的卷积特征图。我们在顶部构建了一个上下文编码模块,包括一个编码层,用于捕捉编码的语义信息并预测依赖于这些编码语义的缩放因子。这些学习到的因子有选择地突出显示与类别相关的特征图(用颜色可视化)。在另一个分支中,我们使用语义编码损失(SE损失)来规范训练,让上下文编码模块预测场景中是否存在某些类别。最后,上下文编码模块的表示被输入到最后一个卷积层中进行每个像素的预测。

(符号说明:FC表示全连接层,Conv表示卷积层,Encode表示编码层[56],N表示通道间乘法)

图3:扩张策略和损失。每个立方体代表不同的网络阶段。我们将扩张策略应用于第3和第4阶段。语义编码损失(SE损失)被添加到基础网络的第3和第4阶段。

(D表示扩张率,Seg-loss表示每像素分割损失。)

2.1.上下文编码网络(EncNet)

        通过所提出的上下文编码模块,我们使用预训练的ResNet [17]构建了一个上下文编码网络(EncNet)。我们按照之前的工作,在第3和第4阶段的预训练网络上使用了扩张网络策略[6,53,57],如图3所示。我们在最终预测之前的卷积层上构建了我们提出的上下文编码模块,如图2所示。为了进一步提高上下文编码模块的性能并规范化训练,我们建立了一个单独的分支来最小化SE损失,该分支以编码的语义信息为输入并预测对象类别的存在。由于上下文编码模块和SE损失非常轻量级,我们在第3阶段之上建立了另一个上下文编码模块,以最小化SE损失作为额外的正则化,类似于PSPNet [57]的辅助损失,但比较廉价。SE损失的地面真值直接从地面真实分割掩码中生成,无需任何额外的注释。我们的上下文编码模块可微分,并且在现有的FCN流程中插入,无需任何额外的训练监督或框架修改。在计算方面,所提出的EncNet对原始扩张FCN网络仅引入了边际的额外计算。

2.2.与其他方法的关系

        在计算机视觉任务中,包括语义分割在内,卷积神经网络(CNN)已成为事实上的标准。早期的方法通过对区域提议进行分类来生成分割掩码[14,15]。全卷积神经网络(FCN)开创了端到端分割的时代[36]。

        然而,由于使用了原本设计用于图像分类的预训练网络,从下采样的特征图中恢复细节信息是困难的。为了解决这个问题,

        一种方法是学习上采样滤波器,即分数步卷积或解码器[3,40]。

        另一种方法是在网络中采用Atrous/扩张卷积策略[4,52],该策略保留了较大的感受野并生成了密集的预测。

        先前的工作采用密集条件随机场(CRF)来对FCN的输出进行细化分割边界[5,7],CRF RNN实现了与FCN的端到端CRF学习[58]。最近的基于FCN的工作通过使用更大率的扩张卷积或全局/金字塔池化来增加感受野,极大地提升了性能[6,34,57]。然而,这些策略不得不牺牲模型的效率,例如PSPNet [57]在金字塔池化和上采样之后对平面特征图应用卷积,DeepLab [5]采用了大率扩张卷积,在极端情况下会退化为1×1卷积。我们提出了上下文编码模块,以有效利用全局上下文进行语义分割,仅需要边际的额外计算成本。此外,所提出的上下文编码模块作为一个简单的CNN单元与所有现有的基于FCN的方法兼容。

        通道级特征图注意力的策略受到一些开创性工作的启发。空间变换网络(Spatial Transformer Network)[24]学习了一个在输入条件下的网络内部变换,为特征图提供了空间注意力,无需额外的监督。批量归一化(Batch Normalization)[23]将数据的均值和方差规范化为网络的一部分,成功地允许更大的学习率,并使网络对初始化方法的敏感性降低。最近的风格迁移工作通过操作特征图的均值和方差[11,22]或二阶统计量,实现了网络内部的风格切换[55]。一个非常近期的工作SE-Net通过探索跨通道信息学习了通道级的注意力,在图像分类方面取得了最先进的性能[20]。受到这些方法的启发,我们使用编码的语义信息来预测特征图通道的缩放因子,这提供了一种机制,可以根据场景上下文强调或减弱单个特征图的显著性。

3.实验结果

        在本节中,我们首先提供了EncNet和基线方法的实现细节,然后我们在Pascal-Context数据集[39]上进行了完整的消融研究,最后我们报告了在PASCAL VOC 2012 [12]和ADE20K [59]数据集上的性能。除了语义分割,我们还探讨了上下文编码模块如何提升在CIFAR-10数据集上浅层网络的图像分类性能(第3.5节)。

图4:理解场景的上下文信息对于语义分割非常重要。例如,基线的FCN在不知道上下文的情况下将沙子分类为土地,如第一个例子所示。在第二和第四行中,很难区分建筑物、房屋和摩天大楼,没有语义信息。在第三个例子中,由于分类孤立的像素而没有全局感知/视角,FCN将窗玻璃识别为门。(来自ADE20K数据集的视觉示例。)

3.1.实现细节

        我们的实验系统,包括预训练模型,基于开源工具箱PyTorch [41]。我们对预训练网络的第3和第42阶段应用了膨胀策略,输出尺寸为1/8 [4,52]。使用双线性插值将输出预测上采样8倍以计算损失[6]。我们按照之前的工作[5,57]使用学习率调度lr = baselr * (1 - total iter/iter)^power。对于ADE20K数据集,基本学习率设置为0.01,其他数据集设置为0.001,幂值设置为0.9。动量设置为0.9,权重衰减设置为0.0001。在PASCAL Context [39]和PASCAL VOC 2012 [12]上进行50个epoch的训练,在ADE20K [59]上进行120个epoch的训练。我们随机打乱训练样本,并丢弃最后一个mini-batch。为了数据增强,我们随机翻转和缩放图像在0.5到2之间,然后随机旋转图像在-10到10度之间,如果需要的话,使用零填充将图像裁剪成固定尺寸。对于评估,我们根据[34,43,57]的方法,在多个尺度上平均网络预测。

        在实践中,更大的裁剪尺寸通常会提供更好的语义分割性能,但也会占用更大的GPU内存,导致批量归一化[23]的工作批量大小变小,从而降低训练效果。为了解决这个问题,我们使用NVIDIA CUDA和NCCL工具包在PyTorch中实现了跨GPU批量归一化。这样可以将工作批量大小增加到全局mini-batch大小。我们在训练过程中使用的mini-batch大小为16。为了与我们的工作进行比较,我们使用扩张的ResNet FCN作为基线方法。在训练EncNet时,我们在编码层中使用32个码词。SE-loss的真实标签是通过“unique”操作生成的,该操作找到给定的真实分割掩码中出现的类别。最终的损失是每个像素分割损失和SE-Loss的加权总和。

        评估指标 我们使用像素准确率(pixAcc)和平均交集联合(mIoU)作为标准评估指标。对于PASCAL VOC 2012数据集中的对象分割,我们使用官方评估服务器计算mIoU时将背景视为其中一个类别。对于整个场景解析数据集PASCAL-Context和ADE20K,我们遵循标准竞赛基准[59],通过忽略背景像素来计算mIoU。

图5:SE-loss和码词数量的消融研究。

左图:mIoU和pixAcc作为SE-loss权重α的函数。

经验上,SE-loss在α=0.2时效果最好。

右图:mIoU和pixAcc作为编码层中码词数量K的函数,其中K=0表示使用全局平均池化。

这些结果使用单尺度评估进行测试。(注意:左右两侧的坐标轴不同。)

表2:在PASCAL-Context数据集上的分割结果。

注意:mIoU是基于60个类别(包括背景)的评(估)

3.2.在PASCAL-Context数据集上的结果

        PASCAL-Context数据集[39]为整个场景提供了密集的语义标签,其中有4998张用于训练,5105张用于测试。我们遵循之前的工作[5,31,39],使用最常见的59个对象类别以及背景(总共60个类别)的语义标签。在对EncNet进行消融研究时,我们使用59个类别的pixAcc和mIoU作为评估指标。为了与先前的工作进行比较,我们在表2中还报告了使用60个类别的mIoU(将背景视为其中一个类别)。

消融研究为了评估EncNet的性能,我们进行了不同设置的实验,如表1所示。与基准FCN相比,简单地在顶部添加一个上下文编码模块可以得到78.1/47.6(pixAcc和mIoU)的结果,这只引入了约3%-5%的额外计算量,但明显优于基准结果73.4/41.0。为了研究SE-loss的效果,我们测试了不同的SE-loss权重α={0.0,0.1,0.2,0.4,0.8},我们发现α=0.2在性能上表现最好,如图5(左)所示。我们还研究了编码层中码词数量K的效果,如图5(右)所示,我们使用K =32,因为改进已经饱和(K =0表示使用全局平均池化代替)。更深的预训练网络可以提供更好的特征表示,使用ResNet101的EncNet在mIoU上获得额外的2.5%改进。最后,多尺度评估得到了我们的最终得分,pixAcc为81.2%,mIoU为52.6%,包括背景在内的mIoU为51.7%。我们提出的EncNet在不使用COCO预训练或更深模型(ResNet152)的情况下,超过了先前的最先进方法[5,31](请参见表2和图6中的结果)。

3.3.在PASCAL VOC 2012数据集上的结果

        我们还在PASCAL VOC 2012数据集[12]上评估了提出的EncNet的性能,这是语义分割的黄金标准基准之一。我们按照[6,9,36]的做法使用扩充的注释集[16]进行评估,该集合包括10,582张、1,449张和1,456张图片用于训练、验证和测试集。模型在训练+验证集上进行训练,然后在原始的PASCAL训练集上进行微调。EncNet在mIoU3上取得了82.9%的结果,优于所有以前的工作,而且在许多类别中都取得了优越的性能,如表3所示。为了与最先进的方法进行比较,我们按照在MS-COCO数据集[33]上进行预训练的程序进行操作。从MS-COCO数据集的训练集中,我们选择包含与PASCAL数据集共享的20个类别的图像,其中标记像素超过1,000个,共得到6.5K个图像。所有其他类别被标记为背景。我们使用基础学习率为0.01进行预训练,然后使用上述设置在PASCAL数据集上进行微调。EncNet在mIoU4上取得了85.9%的最佳结果,如表3所示。与PSPNet [57]和DeepLabv3 [6]的最先进方法相比,EncNet具有更少的计算复杂度。

表3:在PASCAL VOC 2012测试集上的逐类结果。EncNet在不使用和使用COCO数据集预训练的情况下优于现有方法,并分别达到82.9%和85.9%的mIoU。

(每列中最好的两个结果用灰色标记。注意:不包括使用额外COCO数据的结果[6,38,48]。)

3.4.在ADE20K上的结果

        ADE20K数据集[59]是一个最近的场景解析基准,包含了150个物体/物体类别的密集标签。该数据集包括20K/2K/3K张用于训练、验证和测试的图像。我们在训练集上训练EncNet,并在验证集上使用Pix Acc和mIoU进行评估。如图4所示,所提出的EncNet在视觉示例中明显优于基准FCN。EncNet-101在使用更浅的基础网络的情况下实现了与最先进的PSPNet-269相当的结果,如表4所示。我们在train-val集上对EncNet-101进行了额外的20个时期的微调,并在测试集上提交了结果。EncNet取得了0.55675的最终得分,超过了PSP-Net-269(2016年第一名)和COCO Place Challenge 2017中的所有结果(如表5所示)。

表4:ADE20K验证集上的分割结果。

表5:ADE20K测试集上的结果,在COCO-Place挑战赛2017中的排名。我们的单一模型超过了PSP-Net-269(2016年第一名)和COCO-Place挑战赛2017的获奖作品[59]。

3.5.在CIFAR-10上的图像分类结果

        除了语义分割之外,我们还在CIFAR-10数据集[28]上进行了图像识别的上下文编码模块的研究,该数据集包含了10个类别的50K训练图像和10K测试图像。目前的最先进方法通常依赖于非常深和大的模型[17,19,21,51]。在本节中,我们探索了上下文编码模块对相对较浅的网络(14层ResNet [17])性能的提升。

实现细节。为了与我们的工作进行比较,我们首先实现了一个更宽的预激活ResNet[19]版本和最近的Squeeze-and-Excitation Networks(SE-Net)[20]作为我们的基准方法。ResNet由一个具有64个通道的3×3卷积层组成,然后是3个阶段,每个阶段有2个基本块,并以全局平均池化和一个10路全连接层结束。基本块由两个具有身份快捷方式的3×3卷积层组成。我们在第2和第3阶段进行两次下采样,当进行下采样时,特征图通道加倍。我们通过在每个ResNet的基本块上方添加一个Squeeze-and-Excitation单元(形成一个SE-Block)来实现SE-Net[20],该单元使用跨通道信息作为反馈循环。我们遵循原始论文,在SE Block中使用缩减因子16。对于EncNet,我们在ResNet的每个基本块顶部构建上下文编码模块,该模块使用全局上下文来预测保留网络中的恒等映射的缩放因子。对于上下文编码模块,我们首先使用1×1卷积层将通道减少4倍,然后应用编码层,将编码器的连接串联起来,然后进行L2归一化。

        在训练过程中,我们采用了MSRA权重初始化[18],并在加权层上使用了批归一化[23]。我们使用了0.0005的权重衰减和0.9的动量。模型使用128个小批量大小在两个GPU上进行训练,使用余弦学习率调度[21]进行600个时期。我们遵循标准的数据增强[17]进行训练,即在每个边界上将图像填充4个像素,并随机裁剪为32×32的大小。在训练EncNet时,我们收集了编码层缩放因子sk的统计数据,并发现它趋向于0.5,方差较小。在实践中,将sk应用于类似于dropout [45]/shakeout [27]的正则化可以改善训练达到更好的最优解,通过在训练的前向和后向传递中随机分配编码层中的缩放因子sk,绘制一个介于0和1之间的均匀分布,并在评估时将sk设置为0.5。

        我们发现我们的训练过程(使用余弦学习率调度的更长训练时期)很可能提高所有方法的性能。EncNet在模型复杂度相似的情况下优于基准方法。实验结果表明,上下文编码模块利用全局上下文在网络的早期阶段改进了网络的特征表示,而标准网络架构仅由卷积层、非线性和下采样组成,很难学习到全局上下文。我们的实验表明,具有14层和上下文编码模块的浅层网络在CIFAR10数据集上的错误率为3.45%,如表6所示,与最先进的方法[21,51]相当。

表6:在CIFAR-10上的模型深度、参数数量(M)、测试错误率(%)的比较。

d表示网络第一阶段的维度/通道数,k表示编码网络中的码字数。

4.总结

        为了捕捉和利用语境信息进行语义分割,我们引入了一个上下文编码模块,该模块选择性地突出显示类别相关的特征图,并为网络“简化”了问题。所提出的上下文编码模块在概念上很直观,轻量级,并且与现有的FCN基础方法兼容。实验结果表明,所提出的EncNet具有卓越的性能。我们期望上下文编码的策略和我们的最新实现(包括基准、同步跨GPU批归一化和编码层)对社区中的场景解析和语义分割工作有益。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值