第十章:PSPNet——金字塔场景解析网络

原文信息

原文题目:《Pyramid Scene Parsing Network》

原文引用:Zhao H, Shi J, Qi X, et al. Pyramid scene parsing network[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 2881-2890.

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

0.摘要 

        场景解析对于无限制的开放词汇和多样化的场景是具有挑战性的。在本文中,我们通过金字塔池化模块和提出的金字塔场景解析网络(PSPNet:Pyramid Scene Parsing Network),利用全局上下文信息的能力,通过基于不同区域的上下文聚合,来处理场景解析任务。我们的全局先验表示在场景解析任务上能够产生高质量的结果,而PSPNet为像素级预测提供了优越的框架。该方法在各种数据集上实现了最先进的性能。它在2016年ImageNet场景解析挑战赛、PASCAL VOC 2012基准和Cityscapes基准中名列前茅。单个PSPNet在PASCAL VOC 2012上实现了新的mIoU准确度记录,达到了85.4%,在Cityscapes上的准确度为80.2%。

1.引言

        基于语义分割的场景解析是计算机视觉中的一个基本主题。其目标是为图像中的每个像素分配一个类别标签。场景解析提供了对场景的完全理解,它预测了每个元素的标签、位置和形状。这个主题在自动驾驶、机器人感知等潜在应用中具有广泛的兴趣。场景解析的难度与场景和标签的多样性密切相关。先驱的场景解析任务[23]是对LMO数据集[22]上的2,688张图像进行33个场景的分类。更近期的PASCAL VOC语义分割和PASCAL上下文数据集[8,29]包括更多具有类似上下文的标签,例如椅子和沙发,马和牛等。而新的ADE20K数据集[43]是最具挑战性的,具有大规模和不受限制的开放词汇表和更多的场景类别。图1展示了一些代表性的图像。为这些数据集开发出有效的算法需要克服一些困难。

        最先进的场景解析框架大多基于全卷积网络(FCN)[26]。基于深度卷积神经网络(CNN)的方法提升了动态物体的理解能力,然而在考虑不同场景和无限制词汇时仍面临挑战。图2的第一行展示了一个例子,其中一艘船被误认为是一辆汽车。这些错误是由于物体的外观相似导致的。但是,当考虑到场景的上下文先验,即场景被描述为靠近一条河流的船屋时,应该能够得出正确的预测。

        为了实现准确的场景感知,知识图谱依赖于场景上下文的先验信息。我们发现,当前基于FCN的模型主要问题是缺乏合适的策略来利用全局场景类别线索。在典型的复杂场景理解中,以前为了获取全局的图像级特征,广泛采用了空间金字塔池化[18],其中空间统计提供了对整体场景解释的良好描述。空间金字塔池化网络[12]进一步增强了其能力。与这些方法不同,为了融合适当的全局特征,我们提出了金字塔场景解析网络(PSPNet)。除了传统的扩张FCN [3,40]用于像素预测外,我们将像素级特征扩展到特别设计的全局金字塔池化特征上。局部和全局线索共同使最终预测更可靠。我们还提出了一种带有深层监督损失的优化策略。我们提供了所有的实现细节,这些细节对于我们在本文中表现出色是关键,并且我们公开提供了代码和训练模型。

        我们的方法在所有可用的数据集上取得了最先进的性能。它是ImageNet场景解析挑战赛2016 [43]的冠军,并在PASCAL VOC 2012语义分割基准测试[8]和城市场景Cityscapes数据[6]中获得了第一名。这些表明PSPNet为像素级预测任务提供了一个有希望的方向,甚至可能在后续工作中对基于CNN的立体匹配、光流、深度估计等任务产生影响。我们的主要贡献有三个方面:

        •我们提出了一个金字塔场景解析网络,将复杂的场景上下文特征嵌入到基于FCN的像素预测框架中。

        •我们基于深度监督损失为深度残差网络(ResNet)[13]开发了一种有效的优化策略。

        •我们构建了一个实用的系统,用于最先进的场景解析和语义分割,其中包括所有关键的实现细节。

图1. ADE20K数据集中复杂场景的插图。

2.相关工作

        在接下来,我们将回顾场景解析和语义分割任务的最新进展。受到强大的深度神经网络[17,33,34,13]的推动,像场景解析和语义分割这样的像素级预测任务通过将分类中的全连接层替换为卷积层[26]取得了巨大的进展。为了扩大神经网络的感受野,[3,40]的方法使用了膨胀卷积。Noh等人[30]提出了一种粗到细的结构,使用解卷积网络来学习分割掩码。我们的基线网络是FCN和膨胀网络[26,3]。其他工作主要在两个方向上进行。一条线[26,3,5,39,11]是通过多尺度特征融合。因为在深度网络中,更高层的特征包含更多的语义信息和较少的位置信息。将多尺度特征组合起来可以提高性能。

        另一个方向是基于结构预测。先驱性工作[3]使用条件随机场(CRF)作为后处理方法来优化分割结果。随后的方法[25,41,1]通过端到端建模来优化网络。两个方向都改善了场景解析的定位能力,使得预测的语义边界与物体相匹配。然而,在复杂场景中仍然有很大的空间来利用必要的信息。为了充分利用全局图像级的先验知识进行多样化的场景理解,[18,27]的方法使用传统特征而不是深度神经网络来提取全局上下文信息。类似的改进也在目标检测框架[35]下进行了。刘等人[24]证明了FCN中的全局平均池化可以改善语义分割结果。然而,我们的实验证明这些全局描述符对于具有挑战性的ADE20K数据来说并不足够代表性。因此,与[24]中的全局池化不同,我们通过金字塔场景解析网络利用不同区域的上下文聚合来利用全局上下文信息的能力。

3.金字塔场景解析网络

        我们从将FCN方法应用于场景解析时观察和分析典型的失败案例开始。这些案例激发了我们提出金字塔池化模块作为有效的全局上下文先验的动机。接下来,我们将介绍我们的金字塔场景解析网络(PSPNet),以改善复杂场景解析中对开放词汇的对象和物体识别的性能。请参考图3。

3.1.重要的观察结果

        新的ADE20K数据集[43]包含150个物体/物体类别标签(例如墙壁、天空和树木)和1,038个图像级别的场景描述符(例如机场候机楼、卧室和街道)。因此,大量的标签和各种场景的分布出现了。通过检查[43]中提供的FCN基线的预测结果,我们总结了复杂场景解析中的几个常见问题。

不匹配的关系上下文关系是普遍且重要的,特别是对于复杂场景的理解。存在共现的视觉模式。例如,飞机很可能在跑道上或者在天空中飞行,而不会在道路上飞行。在图2的第一行示例中,基于外观,FCN将黄色框中的船预测为“车辆”。但是常识告诉我们,车辆很少会出现在河流上方。缺乏收集上下文信息的能力会增加错误分类的可能性。

混淆的类别 ADE20K数据集[43]中有许多类别标签对在分类中容易混淆。例如,田野和土地;山和小山;墙、房子、建筑物和摩天大楼。它们在外观上非常相似。即使是为整个数据集进行标注的专家注释者,在[43]中描述的情况下,仍然会出现17.60%的像素错误。在图2的第二行,FCN将框中的对象预测为摩天大楼的一部分和建筑物的一部分。应该排除这些结果,使整个对象只能是摩天大楼或建筑物中的一种,而不能同时是两者。通过利用类别之间的关系,可以解决这个问题。

不显眼的类别 场景中包含任意大小的物体/物质。一些小型物体,如路灯和招牌,很难找到,但它们可能非常重要。相反,大型物体或物质可能超出FCN的感受野,从而导致不连续的预测。如图2的第三行所示,枕头与床单具有相似的外观。忽视全局场景类别可能无法解析枕头。为了提高对非常小或大的物体的性能,应该特别关注包含不显眼类别物质的不同子区域。

        总结这些观察,许多错误部分或完全与上下文关系和不同感受野的全局信息有关。因此,具有合适的全局场景级先验的深度网络可以大大提高场景解析的性能。

 图2. 我们在ADE20K数据集上观察到的场景解析问题。第一行展示了不匹配关系的问题 - 车辆很少会在水上而不是船上。第二行展示了混淆的类别,其中“building”类别很容易被误认为是“skyscraper”。第三行展示了不显眼的类别。在这个例子中,枕头在颜色和质地上与床单非常相似。这些不显眼的物体容易被FCN错误分类。

3.2.金字塔池化模块

        根据上述分析,接下来我们介绍金字塔池化模块,它经验证明是一种有效的全局上下文先验。在深度神经网络中,感受野的大小大致能够表示我们使用上下文信息的程度。虽然理论上ResNet的感受野已经大于输入图像,但周等人的研究表明,CNN的实际感受野要比理论值小得多,尤其是在高层次的网络层。这使得许多网络没有充分融合重要的全局场景先验。为了解决这个问题,我们提出了一种有效的全局先验表示方法。

        全局平均池化是一种良好的基准模型,作为全局上下文先验,在图像分类任务中被广泛使用[34,13]。在[24]中,它被成功应用于语义分割。但是对于ADE20K [43]中的复杂场景图像来说,这种策略不足以覆盖必要的信息。这些场景图像中的像素根据许多物体和物品进行了注释。直接将它们融合成一个单一的向量可能会丢失空间关系并引起歧义。全局上下文信息以及子区域上下文在这方面对于区分各种类别是有帮助的。一种更强大的表示方式可以是从不同子区域的感受野中融合信息。类似的结论在经典的场景/图像分类工作[18,12]中也得出过。

        在[12]中,通过金字塔池化生成的不同层级的特征图最终被展平并连接在一起,然后输入到全连接层进行分类。这种全局先验的设计是为了消除CNN对图像分类的固定大小限制。为了进一步减少不同子区域之间的上下文信息损失,我们提出了一种分层全局先验,包含了不同尺度和在不同子区域之间变化的信息。我们将其称为金字塔池化模块,用于在深度神经网络的最后一层特征图上构建全局场景先验,如图3(c)所示。

        金字塔池化模块将特征融合在四个不同的金字塔尺度下。最粗糙的一级用红色突出显示,进行全局池化以生成单个bin输出。接下来的金字塔级别将特征图分成不同的子区域,并为不同位置形成池化表示。金字塔池化模块中不同级别的输出包含了尺寸不同的特征图。为了保持全局特征的权重,我们在每个金字塔级别之后使用1×1卷积层将上下文表示的维度减小到原来的1/N,其中金字塔的级别尺寸为N。然后,我们通过双线性插值直接上采样低维特征图,以获得与原始特征图相同尺寸的特征。最后,不同级别的特征被连接起来作为最终的金字塔池化全局特征。需要注意的是,金字塔级别的数量和每个级别的尺寸可以进行修改。它们与输入到金字塔池化层的特征图的大小有关。该结构通过在几个步长中采用不同尺寸的池化核来抽象出不同的子区域。因此,多级核应该在表示中保持合理的差距。我们的金字塔池化模块是四级的,分别具有1×1、2×2、3×3和6×6的bin尺寸。对于最大池化和平均池化之间的池化操作类型,我们进行了大量实验证明其差异,详见第5.2节。

图3.我们提出的PSPNet的概述。给定输入图像(a),我们首先使用CNN获得最后一个卷积层的特征图(b),然后应用金字塔解析模块来获取不同子区域的表示,接着通过上采样和连接层形成最终的特征表示,其中包含了局部和全局上下文信息(c)。最后,将表示输入到卷积层以获得最终的逐像素预测(d)。

3.3.网络框架

        通过金字塔池化模块,我们提出了金字塔场景解析网络(PSPNet),如图3所示。给定图3(a)中的输入图像,我们使用预训练的ResNet [13]模型与扩张网络策略 [3,40]提取特征图。最终特征图的大小是输入图像的1/8,如图3(b)所示。在特征图的顶部,我们使用图(c)所示的金字塔池化模块来收集上下文信息。使用我们的4级金字塔,池化核覆盖了整个图像的一半和小部分。它们被融合成全局先验。然后我们在(c)的最后部分将先验与原始特征图进行连接。紧接着是一个卷积层,用于生成(d)中的最终预测图。为了解释我们的结构,PSPNet为像素级场景解析提供了一个有效的全局上下文先验。金字塔池化模块可以收集比全局池化[24]更具代表性的信息。在计算成本方面,与原始的扩张FCN网络相比,我们的PSPNet并没有显著增加。在端到端学习中,全局金字塔池化模块和本地FCN特征可以同时进行优化。

 图4.ResNet101中辅助损失的示意图。每个蓝色框代表一个残差块。辅助损失在res4b22残差块之后添加。

4.基于ResNet的全卷积网络的深度监督

        深度预训练网络可以带来良好的性能[17,33,13]。然而,增加网络的深度可能会引入额外的优化难度,如[32,19]中的图像分类问题。ResNet通过在每个块中引入跳跃连接来解决这个问题。深层ResNet的后续层主要基于前面层的结果来学习残差。相反,我们提出通过附加损失进行监督来生成初始结果,并在最终损失之后学习残差。因此,深度网络的优化被分解为两个部分,每个部分都较容易解决。我们在图4中给出了我们的深度监督ResNet101 [13]模型的一个示例。除了使用softmax损失函数训练最终分类器的主分支外,另一个分类器被应用于第四阶段之后的res4b22残差块。不同于[32]中将辅助损失向后传播到几个浅层的中继反向传播机制,我们让这两个损失函数通过所有先前的层。辅助损失有助于优化学习过程,而主分支损失承担着最主要的责任。我们增加权重来平衡辅助损失。在测试阶段,我们放弃辅助分支,只使用经过良好优化的主分支进行最终预测。这种基于ResNet的深度监督训练策略在不同的实验设置下具有广泛的应用性,并与预训练的ResNet模型一起使用。这证明了这种学习策略的普适性。更多细节请参见第5.2节。

5.实验

        我们提出的方法在场景解析和语义分割挑战中取得了成功。在本节中,我们在三个不同的数据集上对其进行评估,包括ImageNet场景解析挑战2016年[43],PASCAL VOC 2012语义分割[8]和城市场景理解数据集Cityscapes [6]。

5.1.实现细节

        对于一个实际的深度学习系统,细节决定成败。我们的实现基于公共平台Caffe [15]。受[4]的启发,我们使用“poly”学习率策略,其中当前学习率等于基础学习率乘以(1 - max_iter/iter)的幂。我们将基础学习率设置为0.01,幂设置为0.9。通过增加迭代次数可以提高性能,对于ImageNet实验设置为150K,PASCAL VOC设置为30K,Cityscapes设置为90K。动量和权重衰减分别设置为0.9和0.0001。对于数据增强,我们采用随机镜像和随机尺寸调整(范围为0.5至2)的方法,对所有数据集进行扩充,并且额外添加ImageNet和PASCAL VOC的随机旋转(范围为-10至10度)和随机高斯模糊。这种全面的数据增强方案可以使网络抵抗过拟合。我们的网络采用了[4]中的扩张卷积。

        在实验过程中,我们注意到适当大的“cropsize”可以获得良好的性能,而批归一化[14]层中的“batchsize”非常重要。由于GPU卡的物理内存有限,我们在训练过程中将“batchsize”设置为16。为了实现这一点,我们修改了来自[37]的Caffe,并结合[4]的分支,使其支持基于OpenMPI从多个GPU收集的数据上的批归一化。对于辅助损失,我们在实验中将权重设置为0.4。

表格1. 使用不同设置的PSPNet的研究。基准是基于ResNet50的具有扩张网络的FCN。'B1'和'B1236'分别表示池化特征图的bin大小为{1×1}和{1×1,2×2,3×3,6×6}。'MAX'和'AVE'分别表示最大池化和平均池化操作。'DR'表示在池化之后进行维度缩减。结果在验证集上使用单一尺度输入进行测试。

5.2.ImageNet场景解析挑战赛2016

数据集和评估指标 ADE20K数据集[43]在ImageNet场景解析挑战2016中使用。与其他数据集不同,ADE20K对于多达150个类别和包含1,038个图像级标签的多样化场景更具挑战性。挑战数据被划分为20K/2K/3K个图像用于训练、验证和测试。此外,它需要解析场景中的对象和物品,这使得它比其他数据集更加困难。评估指标包括像素级准确率(Pixel Acc.)和类别间交并比的平均值(Mean IoU)。

PSPNet消融研究 为了评估PSPNet,我们进行了一系列的实验,包括最大池化和平均池化的不同设置,仅使用全局特征或四级特征进行池化,以及在池化操作之后和连接之前是否进行维度缩减。如表1所示,在所有设置中,平均池化的效果优于最大池化。使用金字塔解析进行池化的性能优于使用全局池化。通过维度缩减,性能进一步提升。在我们提出的PSPNet中,最佳设置的结果在Mean IoU和像素级准确率上分别为41.68/80.04%,超过了Liu等人[24]中提到的全局平均池化的40.07/79.52%的结果,提升了1.61/0.52个百分点。与基准模型相比,PSPNet在绝对改进上提高了4.45/2.03,相对差异上提高了11.95/2.60。

辅助损失的消融研究 引入的辅助损失有助于优化学习过程,而不影响主分支的学习。我们在表2中展示了在辅助损失权重α在0和1之间进行实验的结果。基准模型使用基于ResNet50的具有扩张网络的FCN,使用主分支的softmax损失进行优化。添加辅助损失分支,α=0.4获得了最佳性能。在Mean IoU和像素级准确率上,它相对于基准模型的改进达到了1.41/0.94个百分点。我们相信,给定新的增强辅助损失,更深的网络将获得更多的好处。

预训练模型的消融研究 之前的研究表明,更深的神经网络对于大规模数据分类是有益的。为了进一步分析PSPNet,我们对不同深度的预训练ResNet进行了实验。我们测试了{50,101,152,269}四个深度。如图5所示,在相同的设置下,将ResNet的深度从50增加到269可以将(Mean IoU + Pixel Acc.)/2 (%)的分数从60.86提高到62.35,绝对改进了1.49个百分点。PSPNet从不同深度的ResNet模型预训练的详细分数列在表3中。

更详细的性能分析 我们在ADE20K验证集上对性能进行了更详细的分析,结果列在表4中。除了最后一行之外,我们所有的结果都使用单尺度测试。“ResNet269+DA+AL+PSP+MS”使用多尺度测试。我们的基线是基于带有扩张网络的ResNet50适应的,得到的MeanIoU为34.28,像素级准确率为76.35。它已经超过了其他先前的系统,可能是由于强大的ResNet[13]。我们提出的架构相对于基线进一步改进。使用数据增强,我们的结果超过基线1.54/0.72,达到35.82/77.07。使用辅助损失可以进一步改进1.41/0.94,达到37.23/78.01。使用PSPNet,我们注意到相对更显著的进展,改进了4.45/2.03。结果达到41.68/80.04。与基准结果相比,绝对改进为7.40/3.69,相对差异为21.59/4.83%。更深的ResNet269网络的性能更高,达到43.81/80.88。最后,多尺度测试方案将得分提升到44.94/81.69。

在使用我们提出的架构时,我们的团队在2016年的ImageNet场景解析挑战赛中获得了第一名。表5展示了这个比赛中的一些结果。我们的集成提交在测试集上获得了57.21%的得分。我们的单模型得分为55.38%,甚至高于其他一些多模型集成提交。这个得分低于验证集上的得分,可能是由于验证集和测试集之间的数据分布差异。如图2的(d)列所示,PSPNet解决了FCN中的常见问题。图6展示了在ADE20K验证集上的另外一些解析结果。与基线相比,我们的结果包含更准确、更详细的结构。

表2.在辅助分支中设置一个适当的损失权重α是很重要的。“AL”表示辅助损失。基准模型是基于ResNet50的具有扩张网络的FCN。经验上,α=0.4获得了最佳性能。结果是在验证集上使用单尺度输入进行测试的。

 

 图5.性能随着网络深度的增加而提高。结果是在验证集上使用单尺度输入获得的。

表3.更深的预训练模型获得更高的性能。括号中的数字表示ResNet的深度,“MS”表示多尺度测试。

 表4.我们提出的PSPNet的详细分析及与其他方法的比较。除了最后一行外,我们的结果是在验证集上使用单尺度输入得到的。FCN、SegNet和DilatedNet的结果在[43]中报告。“DA”表示我们进行的数据增强,“AL”表示我们添加的辅助损失,“PSP”表示我们提出的PSPNet。“MS”表示使用了多尺度测试。

 表5.2016年ImageNet场景解析挑战赛的结果。列出了每个团队的最佳结果。最终得分是Mean IoU和Pixel Acc的平均值。结果是在测试集上评估的。

 

 图6.ADE20K上的视觉改进,PSPNet产生了更准确和详细的结果。

 图7.PASCAL VOC 2012数据集上的视觉改进,PSPNet产生了更准确和详细的结果。

5.3.PASCAL VOC 2012

        我们的PSPNet在语义分割方面也表现出色。我们在PASCAL VOC 2012分割数据集[8]上进行了实验,该数据集包含20个物体类别和一个背景类别。按照[26,7,31,3]的方法,我们使用带有[10]注释的增强数据进行训练、验证和测试,分别得到10,582张、1,449张和1,456张图像。结果如表6所示,我们基于两种设置对PSPNet与先前表现最佳的方法在测试集上进行了比较,即是否在MS-COCO数据集[21]上进行预训练。使用MS-COCO预训练的方法标记为“†”。为了与当前基于ResNet的场景解析/语义分割框架[38,9,4]进行公平比较,我们基于ResNet101构建了我们的架构,而没有使用CRF等后处理方法。我们使用多个尺度输入评估PSPNet,并按照[3,24]的方法计算平均结果。

        如表6所示,PSPNet在两种设置下都优于先前的方法。当仅使用VOC 2012数据进行训练时,我们实现了82.6%的准确率2 - 在所有20个类别中获得了最高的准确率。当PSPNet在MS-COCO数据集上进行预训练时,它达到了85.4%的准确率3,其中19个类别的准确率最高。有趣的是,我们只使用VOC 2012数据训练的PSPNet表现优于使用MS-COCO预训练模型训练的现有方法。有人可能会认为我们基于分类模型比几种先前方法更强大,因为ResNet是最近提出的。为了展示我们的独特贡献,我们展示了我们的方法也优于使用相同模型的最先进框架,包括FCRNs [38],LRR [9]和DeepLab [4]。在这个过程中,我们甚至没有使用耗时但有效的后处理方法,比如[4,9]中的CRF。图7中展示了一些示例。在第一行的“cows”中,我们的基准模型将其错误地识别为“horse”和“dog”,而PSPNet纠正了这些错误。在第二行和第三行的“aeroplane”和“table”中,PSPNet找到了缺失的部分。在后续行的“person”、“bottle”和“plant”中,与基准模型相比,PSPNet在这些小尺寸物体类别的图像上表现出色。我们的项目网站上还包含了PSPNet与其他方法的更多视觉比较。

5.4.Cityscapes

         Cityscapes [6]是一个最近发布的用于语义城市场景理解的数据集。它包含来自不同季节的50个城市中收集的5,000张高质量的像素级精细注释图像。这些图像被分为训练、验证和测试三个集合,分别包含2,975张、500张和1,525张图像。该数据集定义了19个包含物体和背景的类别。另外,还提供了20,000张粗略注释的图像,用于两种设置的比较,即仅使用精细数据进行训练或同时使用精细和粗略数据进行训练。使用精细和粗略数据进行训练的方法标记为“‡”。详细的结果在表7中列出。为了公平比较,我们的基准模型是DeepLab [4]中使用的ResNet101,并且测试过程遵循第5.3节的规定。表7中的统计数据显示,PSPNet以明显的优势优于其他方法。使用精细和粗略数据进行训练使我们的方法达到了80.2%的准确率。图8中展示了一些示例。在测试集上的每个类别的详细结果在我们的项目网站上展示。

 

表6.在PASCAL VOC 2012测试集上的每个类别的结果。在MS-COCO上预训练的方法标记为“†”。

 表7.在Cityscapes测试集上的结果。使用精细和粗略数据进行训练的方法标记为“‡”。

6.总结说明

        我们提出了一种有效的金字塔场景解析网络,用于复杂场景理解。全局金字塔池化特征提供了额外的上下文信息。我们还提供了一种基于深度监督的ResNet-based FCN网络优化策略。我们希望公开提供的实现细节可以帮助社区采用这些有用的策略,推动场景解析和语义分割的相关技术的发展。

 图8. 在Cityscapes数据集上的PSPNet结果示例

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值