【论文阅读】Learning Deconvolution Network for Semantic Segmentation

论文地址:https://arxiv.org/abs/1505.04366v1

 

目录

【概要】

一、介绍

二、相关工作

三、系统结构

3.1 结构

3.2 用于分割的反卷积网络

3.3 系统概述

四、训练

4.1 批标准化(Batch Normalization)

4.2 两步训练

五、推断

5.1 汇总实例级别的分割映射

5.2 与FCN进行集成

六、实验

6.1 实施细节

6.2 在PASCAL VOC上进行评估

七、总结

【参考文献】


 

【概要】

    我们提出了一个新颖的通过学习反卷积网络来进行语义分割的算法。我们在来自VGG16层的卷积层之上来学习网络。反卷积网络由反卷积和反池化层组成,用来确定像素级别的类别标签预测分割掩码。对于每个输入图像,我们将训练好的网络应用到每一个方案中,然后通过一个简单的方式将所有方案的结果结合,来构建最后的语义分割映射。我们提出的算法通过整合深度反卷积网络和每个方案的预测结果,减轻了现有的基于全卷积网络的方法的限制;我们的分割方法常常自然地确定精细的结构,并且处理多个尺度的物体。我们的网络在PASCAL VOC 2012数据集上展现出杰出的性能,我们在那些没有额外数据的训练方法中,通过与全卷积网络整合,最终获得了72.5%的准确率。

一、介绍

    卷积神经网络(CNN)在图像分类、目标检测、语义分割和动作识别等各种视觉识别问题表现出很好的性能。CNN的表示能力导致了成功的结果;从CNN中抽取出的特征描述的结合,再加上简单的现成的分类,在实践中可以取得很好的效果。受到分类问题成功的鼓舞,研究者开始将CNN应用到结构预测问题,例如语义分割、人类姿势评估等。

    最近的语义分割算法基于CNN解决结构化的像素级标注问题。他们将一个现成的用于分类的CNN架构转换成一个全卷积网络(FCN)。他们通过对图像中每个局部区域的分类,来从网络中获得粗略的标签映射,然后通过双线性插值进行一个简单的反卷积,来完成像素级别的标注。条件随机场(CRF)可以选择用于将输出映射到更好分类。基于FCN模型的主要优点是网络将整个图像作为输入,并且进行快速而准确的推断。

    基于FCN的语义分割有许多关键的限制。首先,由于固定大小的感受野,网络只能解决图像中单个尺度大小的语义分析。因此远大于或远小于感受野的目标会被分割或者错误地标注。换句话说,对于大物体来说,标签预测仅依靠局部信息,如图1所示,同一物体的不同像素可能会有不一致的标签。同样的,小物体经常被忽略而被分类为背景。尽管有一些尝试使用跳过结构(skip architecture)来回避这个限制,但这不是根本的解决方法,因此性能的提高不是特别明显。其次,由于作为反卷积层输入的标签映射太过粗略,而且反卷积过程总体上来说十分简单,因此物体的精细结构经常被丢失或者被平滑。注意到,在原始的FCN中,标签映射的大小只有16*16,通过双线性插值的方法来反卷积生成原始输入大小的分割结果。在论文1和17中真正的反卷积的缺失使得很难取得好的结果。然而,最近的方法通过CRF来改善这个问题。

    为了克服这些限制,我们使用一个基于CNN的完全不同的策略来进行语义分割。我们主要的贡献总结如下:

1、我们学习了一个多层反卷积网络,它由反卷积、反池化和ReLU层组成。对于语义分割来说,学习反卷积网络是十分有意义的,但是据我们所知还没有人尝试过。

2、训练的模型被用来进行单个物体的提出,以获得实例级别的分割,并最终结合到语义分割中。这种模型消除了在基于FCN模型中发现的尺度问题,同时更好的确定了物体的细节。

3、我们使用反卷积网络,在仅在PASCAL VOC 2012数据集上训练的情况下就取得了很好的效果,通过利用我们的算法相对于基于FCN模型的异质性和互补性,与FCN模型进行集成并获得了最好的准确率。

    我们相信上述这三点贡献帮助我们取得了在PASCAL VOC 2012基准测试上的目前的业界最好水平。

    本篇论文的剩余部分如下组织。我们在第二节首先回顾了相关工作,并在第三节描述了我们的网络架构。学习一个有监督的反卷积网络的细节过程将在第四节被讨论。第五节展示了如何利用学习好的反卷积网络来进行语义分割。实验结果将在第六节被展示。

 

二、相关工作

    CNN在许多视觉识别问题上十分流行,同时也被积极地应用于语义分割。我们首先总结了基于有监督学习的现有的语义分割算法。

    有许多基于分类的语义分割方法。Mostajabi等人和Farabet等人将多尺度的超像素分类到预定义的类别,并将分类结果整合到像素级别的标签中。一些算法将候选区域进行分类,并将图像级别的分割映射进行优化从而获得最终的分割。

    全卷积网络(FCN)促使了最近的机器学习在语义分割方面的突破。在这个方法上,在标准CNN中的全连接层被解释为大感受野的卷积,分割是使用前馈一个输入图像而获得的粗糙的分类结果映射得到的。在这项工作中一个有趣的想法是一个简单的插值滤波被用来反卷积,只有网络中的CNN部分进行微调从而间接地学习反卷积。令人惊喜的,网络输出在PASCAL VOC基准测试集上展示了令人印象深刻的结果。Chen等人在FCN框架下用更深的分数映射来预测像素级别的标签,并使用全连接CRF进行优化标签映射。

    除了基于有监督学习的方法,一些在弱监督情况下的语义分割技术被提出。当只有边框标记被投入输入图像时,论文2和19通过迭代过程将标记进行优化,并最终获得了准确的分割输出。另一方面,论文20仅仅基于图像级别的标记,在多实例的学习框架下进行语义分割。

    语义分割在概念上涉及到反卷积,但是训练反卷积网络并不普遍。反卷积网络在论文25中被介绍,用来重构输入图像。由于最大池化层的存在,输入图像的重构是不平凡的,该论文提出了通过保存池化位置从而进行反池化操作。使用反卷积网络,输入图像可以从特征表示进行重构。这个方法也被用来可视化在CNN训练中的活跃特征,并为了提升性能而更新网络结构。这种可视化对于理解训练的CNN模型的行为是十分有用的。

 

三、系统结构

    这一节讨论了我们的反卷积网络的结构,并且描述了整个语义分割算法。

3.1 结构

    图2展示了整个深度网络的配置细节。我们训练的网络由卷积网络和反卷积网络两部分组成。卷积网络与将输入图像转化到多维度特征表示的特征抽取相对应,而反卷积网络是一个从卷积网络得到的抽取的特征来陈胜目标分割的的形状生成器。网络最终的输出使用和输入图像大小一致的概率映射,表明了每个像素属于某一预定义分类的概率。

    我们使用去除了最后分类层的VGG16层网络作为卷积部分。我们的卷积网络一共有13个卷积层,在卷积层之间有时有规范化和池化操作,在最后增加两个全连接层来进行特定类的映射。我们的反卷积网络是卷积网络的镜像版本,有多个系列的反池化、反卷积和规范化层。与卷积网络中通过前馈来减少激活大小不同,反卷积网络

通过将反池化和反卷积操作结合来增大激活大小。提出的反卷积网络的更多细节将在后面的小节中介绍。

3.2 用于分割的反卷积网络

    我们现在详细地讨论我们的反卷积网络中的两个主要的操作,反池化和反卷积。

3.2.1 反池化

    池化在卷积网络中被设计用来通过在一个感受野内抽取一个代表值来过滤噪声。尽管这通过在上层仅保留鲁棒的像素点来帮助分类,但是在池化的过程中感受野内的空间信息丢失了,这对于语义分割所需要的精确位置来说是十分关键的。

    为了解决这个问题,我们在反卷积网络中使用反池化层,它进行池化的逆操作,并像图3所展示的那样重构至原始大小的图像。为了实施反池化操作,我们采用在论文24、25中提出的相似的方法。它在转换变量(switch variables)中记录了在池化操作时选择的最大像素的位置,并在反池化时将像素复原到其原来的位置。这种反池化策略在重建输入物体的结构时尤其有用。

3.2.2 反卷积

    反池化层的输出大小扩大了,但仍然是稀疏的映射。反卷积层通过多层类似卷积的滤波,将由反池化层获得的稀疏图增加密度。然而,与将多个输入像素通过滤波窗口变成一个像素的卷积层不同,反卷积层将一个输入像素与多个输出相联系,如图3所示。反卷积层的输出是扩大而且变密的像素。我们将扩大的像素映射的边缘裁去,以保持输出大小和之前的反池化层一致。

    在反卷积层中学习的滤波是重建输入物体的形状的基础。因此,与卷积网络相似,反卷积层的层次结构被用来获取不同类的形状细节。底层的滤波倾向于获取一个物体的整体形状,特定类的精细细节被编码在高层滤波中。通过这种方式,网络直接在语义分割时考虑到了特定类的形状信息,这一点在其他仅仅基于卷积层的方法中是经常被忽略的。

3.2.3 反卷积网络的分析

    在提出的算法中,反卷积网络对于精确的物体分割来说是一个重要的组成部分。与在论文17中用在稀疏像素映射中的简单反卷积,我们的算法使用深度反卷积网络,通过连续的反池化、反卷积和规范化操作来获得稠密的像素级的类概率映射,从而生成物体分割掩码。

    图4展示了网络中不同层的输出,这对于理解我们反卷积网络的内部操作很有帮助。我们观察到通过反卷积层的传播,物体结构被由粗糙到细致地重构;底层倾向于获得一个物体的粗略的总体构造(位置、形状和区域),而在高层会发现更复杂的特征。注意到反卷积和反池化在构建分割掩码时扮演不同的角色。反池化通过追踪强激活像素退回到图像空间的原始位置,来获得特定样例的结构。这有效地在更高的分辨率下重建了物体的细节结构。另一方面,在反卷积层学习的滤波倾向于获取特定类的形状。通过反卷积层,与特定类紧密相关的激活像素被丰富,而其他区域的噪声像素被有效抑制。通过反池化和反卷积的结合,我们的网络生成了准确的分割映射。

    图5展示了从FCN-8s和我们的网络中获得的输出结果。与FCN-8s的稀疏的激活映射相比,我们的网络使用反卷积网络构建了稠密且准确的激活映射。

 

3.3 系统概述

    我们的算法将语义分割定位为一个实例级别的分割问题。也就是说,网络将一个可能包含物体的子图像(我们后面当成实例)作为输入并且产生像素级的类预测作为输出。对于我们的网络,在整个图像上的语义分割通过将网络应用到每个从图像中抽取出的候选区域,再将所有候选区域的输出聚合到原始图像空间而获得。

    实例级别的语义分割相比于图像级别的预测有一些优势。它可以有效地处理不同尺度的物体,并且确定物体的精细结构,然而固定感受野大小的方法对于这些问题会无法解决。同时,它可以通过减少搜索预测空间和减少训练所需的内存来降低训练复杂度。

 

四、训练

    在前面小节描述的整个网络很深,并且有大量相关参数。另外,与网络的规模相比,用来训练语义分割的训练样例数相对较小——训练集和验证集一共有12031 PASCAL图像。用有限的样例来训练一个深度网络并不容易,我们使用下面的想法成功地训练了网络。

4.1 批标准化(Batch Normalization)

    大家普遍知道,由于internal-covariate-shift问题,深度神经网络很难优化;在训练过程中,由于前一层的变量不断被更新,每一层的输入分布也随着迭代不断变化。这在优化很深的网络时会造成困难,因为随着层间的传播,分布的变化十分丰富。

    我们使用批标准化来减少internal-covariate-shift,通过将每一层的输入分布标准化到标准高斯分布。为了达到这个目的,在每个卷积和反卷积层的输出后增加了一个批标准化层。我们观察到批标准化对于优化我们的网络来说至关重要;如果没有批标准化,网络会最终达到一个较差的局部最优解。

 

4.2 两步训练

    尽管批标准化方法帮助摆脱了局部最优解的问题,相比于训练数据的数量,语义分割空间仍然十分大,这导致在实例级的分割中使用反卷积网络的优势消失了。然后,我们使用了两步训练方法来解决这个问题,我们首先用简单的样本来训练网络,然后用更具有挑战性的样本来对网络进行调优。

    为了构建第一步训练的训练样本,我们用标准标记将物体实例从图像中裁剪出,这样使得物体在裁剪出的边框的正中央。通过限制物体的位置和大小变量,我们大大减少了语义分割的搜索空间,从而成功地使用很少的训练样本训练出了网络。在第二步,我们利用候选物体来构建更复杂的样本。具体来说,候选区域与被选来用于训练的标准分割充分地交叠。使用这些候选区域来作为训练数据使得网络对于测试时非对齐的区域更加鲁棒,但是这使得训练更加具有挑战性,因为物体的大小和位置可能根据训练样品变化很大。

五、推断

    我们提出的网络被训练用来进行单个实例的语义分割。给定一个图像输入,我们首先生成充分多的候选区域,然后用训练好的网络来获取每个候选的语义分割映射。然后我们整合所有候选区域的输出来产生整个图像的语义分割。可选地,我们将我们的模型与FCN进行集成来进一步提升模型性能。我们下面来描述详细的步骤。

5.1 汇总实例级别的分割映射

    由于一些候选框会因为物体的不对齐或者背景的混乱而导致错误的预测,我们应该在聚合的过程中减少这样的噪声。与每个类的像素级的得分映射的最大值或者平均值对于获得鲁棒的结果来说已经十分有效了。

    在原始图像空间中的分类条件概率映射通过在上述两式获得的聚合映射上应用softmax函数得到。最后,我们在输出映射上使用全连接CRF来获得最后的像素级标注,可以从像素级分类条件概率映射上获得到单一的分类结果。

5.2 与FCN进行集成

    我们基于反卷积网络的算法对于依赖于FCN的方法还有着补充的特性;我们的分卷积网络十分合适来获取物体的细节,然后FCN是典型地善于提取物体的整体形状。另外,实例级的预测对于有不同尺度的物体来说是十分有用的,然后稀疏尺度的FCN擅长于获取图像中的上下文语境。利用这些不同的特性可以带来更好的结果,因此我们通过集成两个算法吸收了他们的优点。

    我们采用一个简单的方法来将两个算法的输出结合。给定两个分别通过我们提出的方法和FCN在输入图像上独立计算出来的分类条件概率映射集合,我们计算两个输出映射的平均值,然后使用CRF来获得最终的语义分割。

 

 

六、实验

    这一节首先描述我们的实施细节和实验设置。然后我们从各种方面分析和评估了我们提出的网络。

6.1 实施细节

【网络配置】

    表2总结了我们在图2中展示的网络的配置细节。我们的网络有对称配置的卷积和反卷积网络,并且最中间为第二个全连接层。输入和输出层和输入图像和分类条件概率映射相对应。网络总共大约有252M的变量。

【数据集】

    我们使用PASCAL VOC 2012分割数据集来训练和测试我们提出的深层网络。我们在训练时使用从[8]中获得的额外的分割标记,其中所有的训练和验证图像都被用来训练我们的网络。我们的网络性能在测试图像上评估。值得注意的是在我们的实验中只使用了PASCAL VOC2012的数据集中的图像来训练,然后现在最好的一些其他算法使用了额外的数据来提升性能。

 

【训练数据构造】

    我们使用了两步训练策略,并且在每步中使用单独的训练集。为了构建第一步的训练样本,我们对训练图像中的每个标记物体画了一个紧的边框,并且将边框放大1.2倍来使其包括物体的局部上下文语境。然后我们将拓展的边框从图像中裁剪出,从而获得了训练样本。每个裁剪出的区域的分类标签仅仅由中央物体决定,而其他像素被标记为背景。在第二步中,训练样品从候选区域中提取[26],所有相关的类标签用来标记。我们使用和第一步中一样的后处理,从而来包括上下文语境。对于所有的数据集,我们通过对样本数少的类别增加大量的样本,从而来保持不同类

别的样本数的平衡。为了增大训练数据,我们将输入样本缩放250*250,然后通过和[22]中类似的可选水平平移来随机地将图像裁剪至224*224。第一步和第二步中的训练样本数量分别为0.2M和2.7M,这对于使用scratch来训练反卷积网络来说是足够大的。

 

 

【最优化】

    我们使用基于Caffe的框架来实现了我们提出的网络。最优化时采用了带有冲量的标准随机梯度下降,初始学习率、动量和衰减权重分别为0.01、0.9和0.0005。我们在卷积网络中使用ILSVRC中预训练的VGG-16层网络作为初始化权值,而在反卷积网络中我们使用零均值的高斯分布作为初始值。由于批标准化的存在,我们移除了drop-out层,并且当验证准确率不再提高时按数量级减小学习率。尽管我们最后的网络同时在训练集和验证集上学习,根据我们的经验基于验证准确率来调整学习率仍然能起到作用。网络在第一步和第二步的训练中,使用64个样本的mini-batch,大约分别在20K和40K次的随机梯度下降迭代后网络收敛。在12G内存的单个Nvidia GTX Titan X GPU中训练花费六天(第一步训练花费两天,第二步训练花费四天)。

 

【推断】

    我们使用边缘边框来生成候选区域。对于每个测试图像,我们生成大约2000个候选物体,然后基于他们的物体评分选取分数最高的50个候选区域。我们观察到在实际中50个已经足够得到准确的分割。为了获得整个图像的像素级分类条件概率映射,我们像公式1中计算像素级最大值来聚合每个候选的预测。

 

6.2 在PASCAL VOC上进行评估

    我们在PASCAL VOC2012 基准测试集上评估我们的网络,其中包含了1456张测试图像,有20类物体。我们

采用基于标准标注和预测分割的IoU来计算得分的 comp6 评估协议。

    我们所提出的算法和其他的竞争模型的量化结果如表1所示,其中我们的模型记为DeconvNet。DeconvNet的性能和业界最高水平相比是有竞争力的。将CRF作为后处理大约提升了1%的性能。我们进一步通过和FCN-8s进行集成来提升性能。这相对于FCN-8s和我们的DeconvNet分别提升了10.3%和3.1%的平均IoU,考虑到FCN-8s的准确率较低,这个提升非常显著。我们相信这是由于我们的模型和FCN正如5.2节中讨论的,有互补的特性;这个性质将我们的算法和基于FCN的现存算法区别开。我们的与FCN-8s集成的算法记作EDeconvNet,它在所有的仅在PASCAL VOC 数据上训练的模型中取得了最高的准确率。

    图6展示了准确分割时,实例级别预测的有效性。我们按照候选区域的大小的降序来聚合候选区域,并且观察分割的过程。随着聚合的候选区域的增多,算法确定物体更加精细的结构,这通常是由小的候选区域来获取的。

    DeconvNet、FCN和它们的集成模型的量化结果在图7中展示。总体来说,DeconvNet相比于FCN产生了更好的分割结果,并且通过实例级别的预测有效地处理多尺度目标。由于固定的感受野大小,FCN趋向于在标注太大或太小的目标时失败(图7(a))。当候选区域没有对齐或位于背景区域中时,我们的网络有时会返回带有噪声的预测(图7(b))。和FCN-8s集成的模型产生了更好的模型,正如图7(a)和图7(b)中观察到的。注意到有时一些FCN和DeconvNet都错误预测的会被集成的模型正确分类,如图7(c)所示。在集成模型中增加CRF提高了量化性能,尽管这个提升不是特别显著。

 

 

七、总结

    我们提出一个新奇的语义分割算法,学习一个反卷积网络。提出的反卷积网络适合于生成密集并且精确的物体分割掩码,因为通过一系列的反卷积操作,一个物体的结构会从粗糙到精细地逐步重建。我们的基于实例级别的预测算法善于通过消除在全卷积网络中固定感受野的限制来解决物体的尺度变化。我们进一步提出了将反卷积算法和基于FCN方法的输出相结合的集成方法,并且由于进行两种算法的特性互补,它取得了很大的性能提升。我们的网络在PASCAL VOC 2012分割基准测试集上展示了目前业界最优的性能,并且仅仅在该数据集上训练,并没有使用额外的数据。

 

 

【参考文献】

[1] L.-C. Chen, G. Papandreou, I. Kokkinos, K. Murphy, and A. L. Yuille. Semantic image segmentation with deep convolutionalnetsandfullyconnectedCRFs. InICLR,2015. 1, 2, 4, 7

[2] J. Dai, K. He, and J. Sun. Boxsup: Exploiting bounding boxes to supervise convolutional networks for semantic segmentation. arXiv preprint arXiv:1503.01640, 2015. 2, 6, 7

 [3] J. Dai, K. He, and J. Sun. Convolutional feature maskingfor joint object and stuff segmentation. In CVPR, 2015. 2, 7

[4] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. FeiFei. Imagenet: Alarge-scalehierarchicalimagedatabase. In CVPR, 2009. 6

[5] M. Everingham, L. Van Gool, C. K. Williams, J. Winn, and A. Zisserman. The pascal visual object classes (voc) challenge. IJCV, 88(2):303–338, 2010. 6, 7

[6] C. Farabet, C. Couprie, L. Najman, and Y. LeCun. Learning hierarchicalfeaturesforscenelabeling. TPAMI,35(8):1915– 1929, 2013. 1, 2

[7] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014. 1

 [8] B.Hariharan,P.Arbel´aez,L.Bourdev,S.Maji,andJ.Malik. Semantic contours from inverse detectors. In ICCV, 2011. 6

[9] B. Hariharan, P. Arbel´aez, R. Girshick, and J. Malik. Simultaneous detection and segmentation. In ECCV, 2014. 1, 2

[10] B.Hariharan, P.Arbel´aez, R.Girshick, andJ.Malik. Hypercolumns for object segmentation and fine-grained localization. In CVPR, 2015. 2, 7

[11] S. Ioffe and C. Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift. arXiv preprint arXiv:1502.03167, 2015. 5

[12] S. Ji, W. Xu, M. Yang, and K. Yu. 3D convolutional neural networks for human action recognition. TPAMI, 35(1):221– 231, 2013. 1

[13] Y.Jia,E.Shelhamer,J.Donahue,S.Karayev,J.Long,R.Girshick, S. Guadarrama, and T. Darrell. Caffe: Convolutionalarchitectureforfastfeatureembedding. arXivpreprint arXiv:1408.5093, 2014. 6

[14] P. Kr¨ahenb¨uhl and V. Koltun. Efficient inference in fully connectedcrfswithgaussianedgepotentials. InNIPS,2011. 1, 2, 6, 7

[15] A. Krizhevsky, I. Sutskever, and G. E. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012. 1

[16] S. Li and A. B. Chan. 3D human pose estimation from monocular images with deep convolutional neural network. In ACCV, 2014. 1

[17] J. Long, E. Shelhamer, and T. Darrell. Fully convolutional networks for semantic segmentation. In CVPR, 2015. 1, 2, 4, 5, 7, 8

[18] M. Mostajabi, P. Yadollahpour, and G. Shakhnarovich. Feedforwardsemanticsegmentationwithzoom-outfeatures. arXiv preprint arXiv:1412.0774, 2014. 1, 2, 7

[19] G. Papandreou, L.-C. Chen, K. Murphy, and A. L. Yuille. Weakly-andsemi-supervisedlearningofaDCNNforseman

tic image segmentation. arXiv preprint arXiv:1502.02734, 2015. 2, 6, 7

[20] P.O.PinheiroandR.Collobert. Weaklysupervisedsemantic segmentation with convolutional networks. In CVPR, 2015. 2

[21] K. Simonyan and A. Zisserman. Two-stream convolutional networks for action recognition in videos. In NIPS, 2014. 1

[22] K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. In ICLR, 2015. 1, 3, 5, 6

[23] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich. Going deeper with convolutions. arXiv preprint arXiv:1409.4842, 2014. 1

[24] M. D. Zeiler and R. Fergus. Visualizing and understanding convolutional networks. In ECCV, 2014. 2, 3

[25] M. D. Zeiler, G. W. Taylor, and R. Fergus. Adaptive deconvolutional networks for mid and high level feature learning. In ICCV, 2011. 2, 3

[26] C. L. Zitnick and P. Doll´ar. Edge boxes: Locating object proposals from edges. In ECCV, 2014. 6

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值