大场景三维点云语义分割模型


近来关于在无人驾驶场景的大场景点云语义分割方法异常火热,也崩出很多好的idea,这些方法大致分为两类,基于2D的和基于3D的。2D的基本思路是将点云按照某种方式投影到2D平面,并应用成熟的2D语义分割网络做处理。3D的方法一般是直接在3D空间提取特征信息。还有一些方法会融合图像的信息来帮助点云的语义分割。

基于2D的方法

SqueezeSeg系列

SqueezeSeg
(https://github.com/BichenWuUCB/SqueezeSeg)SqueezeSegV2 (https://github.com/xuanyuzhou98/SqueezeSegV2
SqueezeSeg和SqueezeSegV2 分别发表在机器人顶会ICRA2018和ICRA2019上。后来的方法基本上按照类似SqueezeSeg将点云投影并用2D网络处理。
参考:https://zhuanlan.zhihu.com/p/43598102

一、简介

“SqueezeSeg: Convolutional Neural Nets with Recurrent CRF for Real-Time Road-Object Segmentation from 3D LiDAR Point Cloud” (ICRA 2018),利用轻量级的卷积神经网络,实现了点云中三维物体的实时语义、实例分割,且公布了官方代码。本文在分析SqueezeSeg的同时,还会将其与该技术目前最新的工作PointSeg进行对比。

二、核心思路总结

为了便于2D卷积神经网络的处理,SqueezeSeg首先将3D点云经过球面投影得到前视图,然后使用基于SqueezeNet的卷积网络对输入图像进行特征提取与分割,最后利用CRF(Conditional Random Field)作为RNN层对分割结果进一步优化。SqueezeSeg网络架构如下图所示。

在这里插入图片描述
图一:Network Structure of SqueezeSeg

三、要点分析

1.点云的预处理
由于点云的稀疏性以及不规律性,一般的2D CNN无法直接处理,因此需要事先转换成CNN-friendly的数据结构。SqueezeSeg使用球面投影,将点云转换为前视图,示意图如下。
在这里插入图片描述
图二:Point Cloud Transform

在实际操作中,采用的是KITTI里64线激光雷达数据,因此前视图的高度为64;同时受到数据集标注的影响,只考虑了90°的前视角范围并划分为512个单元格,因此前视图宽度为512;前视图为五个通道,分别是点的三维坐标(x,y,z)以及反射强度I和点到视角中心的距离: R = x 2 + y 2 + z 2 \sqrt{x^2+y2+z^2} x2+y2+z2 ,所以处理后的图像尺寸为64 x 512 x 5.
2. 轻量级网络架构在点云中的拓展
SqueezeSeg的核心工作实际就是SqueezeNet在三维数据中的应用。整个网络结构的设计几乎没有改动,是典型的encoder-skip connection-decoder结构,如图一所示。实际上语义分割就是对图像中每一个像素点分类的过程,因此FCN为最好的选择。

在实际操作中,Conv1a到Fire9为特征提取阶段,注意在max pooling时,只对feature map的宽度进行下采样,因为高度相较于宽度要小得多(1 / 8倍),导致多次降采样后高度方向的信息丢失的更加严重。FireDeconv10到FireDeconv13逐层恢复图像的分辨率至原始尺寸大小,最后经过以softmax为激活函数的conv14,得到output probability map.

其中,Fire与FireDeconv模块结构见图三,均由squeeze layer和expand layer组成。
在这里插入图片描述
图三:The Module of Fire and FireDeconv

3. 弥补下采样的细节信息损失
与目标分类、检测不同的是,语义分割需要更高的精度,因此细节信息对其至关重要。然而,下采样会导致低层细节信息的丢失,进而在最终的分割结果中出现边界模糊的现象。针对上述问题,SqueezeSeg应用CRF作为最后的RNN层,以对label map进行精炼,其结构如下图所示。
在这里插入图片描述
图四:Conditional Random Field (CRF) as an RNN layer

其主要步骤如下:
1)首先,将CNN的输出结果作为CRF的输入,根据原始点云计算高斯滤波器,其有两个高斯核(见下公式),其中X为点的三维坐标(x,y,z) ,P为点经过球面投影得到的方位角和顶角(θ和Φ),其他参数为经验性阈值。直观来说,该高斯核衡量了两点之间特征的差异,两点之间差异越大(X和P相差越多),高斯核的值就越小,两点之间的相关性也就越小。在输入图像使用该高斯滤波器的过程称为message passing,可以初步聚合邻域点的概率。
2)接着,通过1x1大小的卷积核去微调每一个点的概率分布权重,这一个过程称为re-weighting and compatibilty transformation,卷积核的值是通过学习得到。
3)最后,以残差方式将最初的label map加到re-weighting的输出结果并用softmax归一化。
F1:Gaussian Kernels:
在这里插入图片描述
在实际操作中,整个CRF以RNN层重复循环三次,并得到最终精炼后的label map.

四、总结

1)高斯滤波器的学习从上述的CRF模块可以看到,在公式一中除了X和P之外,其他的超参都是根据经验设定的,这很大程度上会限制SqueezeSeg的运用场景扩展能力。如果这些超参以学习的方式获得,或者用加入一定约束的卷积核代替,便能较好的解决上述问题。

2)如何保证在增大感受野的同时不丢失细节信息呢?如上所述,maxpooling在增大感受野的同时会丢失一些细节位置信息,这对精度要求极高的语义、实例分割任务是不可接受的。之前在LMNet的解读中也讨论过这个问题,他们是采用扩张卷积保证在增大感受野的同时不丢失细节信息。

3D点云语义分割的后续工作PointSeg就是采用了扩张卷积来保持更多的位置信息,用enlargement layersqueeze reweighting layer代替SqueezeSeg中的CRF,其网络结构如图。

在这里插入图片描述
与图一对比可以发现,PointSeg网络前端的squeezenet部分比SqueezeSeg要少一个maxpooling层。Enlargement layer详细结构如下图所示,该结构采用了6,9,12三类扩张率的卷积层,以获得不同尺度下的感受野。更多的细节信息可以看看PointSeg原文。
在这里插入图片描述
图六:Enlargement Layer from PointSeg

PointSegSqueezeSeg的实验对比结果见表一,其中P为precision,R为recall,可见性能的提高还是比较大的。
在这里插入图片描述表一:Comparison with SqueezeSeg from PointSeg

3)对位置信息丢失的思考
让我们再对encoder-skip connection-decoder这种网络结构进行深入分析,以下图中的FPN为例。在encoder阶段,通过maxpooling来增大感受野,同时,feature map尺寸变小;在decoder阶段,通过upsampling来逐层恢复尺寸至原始大小。在这两个阶段中,相同尺寸的feature map会concatenate到一起,以结合低层细节信息和高层语义信息。
在这里插入图片描述
然而,在encoder中经过下采样后原图像的spatial information是逐层损失的,很多关于位置的细节信息都被丢失掉(我们可以称这些信息为feature space distribution),虽然decoder中通过upsampling + conv逐层恢复feature map的尺寸,但是很多位置细节信息是很难恢复出来的,可以说encoder和decoder中两个对应尺寸大小的feature map(比如上图中encoder中第一层和decoder中最后一层)存在特征空间错位,即相同位置的细节信息并不是一一对应的。如果将这两种细节信息位置并不对齐的feature map合并到一起再进行学习,可能会对一些高精度的学习任务,比如语义分割,产生误导。

VIASEG: VISUAL INFORMATION ASSISTED LIGHTWEIGHT POINT CLOUD SEGMENTATION

论文:https://ieeexplore.ieee.org/abstract/document/8803061/2019 IEEE International Conference on Image Processing (ICIP)

1. 简介

图像的色彩信息能够提供丰富的视觉信息,作者将颜色信息以数据级别(data-level)嵌入到点云中,可以提升点云语义分割的表现。一个基于Super Squeeze Residual module和 Semantic Connection的多尺度的全卷积网络VIASeg被提出。在提高整体表现的同时保证了实时性。

2. 主要内容

1)一个基于数据级别融合的视觉信息辅助点云的语义分割方法被提出,这样消除了对于预训练和后处理的依赖。
2)在SSR模块,SC和atrous separable convolution的帮助下,一个针对彩色点云的更深但是轻量级的网络VIASeg被提出,并且获得了state-of-the-art的表现。
3)随着传感器技术的发展,未来传感器将会可以直接提供带有色彩的点云。我们相信我们提出的方法可以对于多模态(视觉+点云)的语义分割产生持续贡献。
在这里插入图片描述

3. 主要方法

1)数据预处理:根据激光雷达和相机的标定外参,将图像和点云对齐,这样每个3D点将会拥有色彩信息。将点云投影到前视图(Front-View),每个2D点保留8维特征(x,y,z,intensity,depth,r,g,b)。网络的输入图像大小为64x512x8。
2)Super Squeeze Residual Module (SSR): 我们基于Fire module和ResNet提出这个模块如图2所示,实验证明有提升。3)网络架构:如图2所示,Encoder-decoder的结构,共有4个尺度的encoder。并且encoder和decoder之间的链接被高维的语义信息净化,叫做Semantic Connection(SC)。
① Atrous Separable Convolution: 3D->2D的映射会有像素丢失,这对于小目标物体影响严重,在下采样中如何保留有价值信息是至关重要的。在SqueezeSeg中采用的小内核池化无法处理这种情况。SqueezeSegV2 使用了一个大的最大池化,它对丢失的数据不那么敏感,但是它也丢失了更多的信息。由于atrous convolution对此不敏感,可以调整感受野,并且可以降低计算量,因此我们替换池化(pooling)为atrous separable convolution 来降采样特征图(feature map)。
②Semantic Connection:低维度(low-scale)的特征噪声大,不能够提供充足信息,直接encoder-decder的skip-connection会带来噪声,因此需要更干净的特征。高维度(high-scale)的特征更纯净,因此用邻近的encoder的高维度特征上采样之后与decoder相连。

4. 实验结果

使用KITTI的3D object数据集,和SOTA方法做了对比,可以看出效果有一定提升,但并不明显。
在这里插入图片描述

LU-Net:

An Efficient Network for 3D LiDAR Point Cloud Semantic Segmentation Based on End-to-End-Learned 3D Features and U-Net
论文地址:https://arxiv.org/abs/1908.11656

1. 简介

提出了LU-Net (for LiDAR U-Net),首先通过每个点及其3D邻域点集提取高层次3D特征,然后这些特征被投影到2D多通道前视图(range-image)。使用U-Net做分割,保证了精度和速度。

2. 主要贡献

LU-Net受益于高层次3D特征的提取,并将3D局部特征嵌入到2D图中,可以被U-Net分割网络高效地利用。我们的方法超过了基于2D图(range-image)的state-of-the-art方法。

3. 主要方法步骤

1)首先获得每个点的近邻点集如图4,并经过多层感知机(MLP)得到N个点的3D局部特征如图5;
2)将每个点投影到2D前视图上(range-image)如图3,将3D特征保留,可以得到一个2D图HxWxN(H高,W宽,N为3D特征的维度也为此时2D图的通道数)。
3)将构建的2D图送入U-Net,如图6,最终得到每个点的语义类别标签。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 实验结果

该方法虽然改动不多,但是加了3D局部特征到U-Net中,但是提升的效果还是很明显的。
在这里插入图片描述

RangeNet++

RangeNet++:Fast and Accurate LiDAR Semantic Segmentation
论文:
www.ipb.uni-bonn.de/wp-content/papercite-data/pdf/milioto2019iros.pdf
代码:
https://github.com/PRBonn/rangenet_lib https://github.com/PRBonn/lidar-bonnetal

1. 简介

在这篇论文中,我们将目前仅针对lidar的语义分割技术向前推进,以便为车辆提供另一个独立的语义信息来源。该方法能够准确地对激光雷达点云进行全语义分割。我们利用距离图像作为中间表示,并结合利用旋转激光雷达传感器模型的卷积神经网络(CNN)。为了获得准确的结果,我们提出了一种新的后处理算法来处理这种中间表示产生的问题,如离散化误差和模糊的CNN输出。我们实现并彻底评估了我们的方法,包括与当前技术状态的几次比较。我们的实验表明,我们的方法优于最先进的方法,同时仍然在一个嵌入式GPU上运行。

2. 主要贡献

1)准确的点云语义分割,超过其他方法。
2)得到原始点云的所有语义标签。
3)达到较好的结果能够工作在嵌入式电脑上达到实时,适合应用在机器人和移动平台上。

3. 主要方法

步骤如图2:
在这里插入图片描述
1)3D->2D:投影到前视图上。
2)使用DarkNet53作为2D网络的backbone,如图3。
3)后处理:2D分割后的结果重投影回3D空间会有拖影,作者采用GPU的kNN得到每个点的语义投票得分(认为相邻点的语义类别应当相同)。
在这里插入图片描述

4. 实验结果

在SemanticKITTI上做实验,由于这个数据集是他们组做的,并且当时还没有发布,因此没有其他方法在这个数据集上测过,其他方法都是作者在SemanticKITTI上自己复现的,算是在这个数据集上的第一个工作吧。
在这里插入图片描述

基于3D的方法

RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds

论文:https://arxiv.org/abs/1911.11236
代码:https://github.com/QingyongHu/RandLA-Net

1. 简介

提出了RandLA-Net,一个高效轻量的网络可以在大场景点云中直接得到逐点的语义信息。采用随机采样点云而不是复杂的采样策略,为了克服随机采样可能带来的关键特征丢失,一个新颖的局部特征聚合模块被提出。我们的方法可以一次推理(inference)处理一百万个点,并且比现有方法快200x倍。在Semantic3D和SemanticKITTI这两个大场景数据集上做了测试。

2. 主要贡献

1)我们分析并比较了现有的采样策略,发现随机采样(random sampling)是对于大场景点云学习最合适的策略。2)我们提出了高效的局部特征聚合模块可以通过不断提高每个点的感受野自动地保留复杂的局部结构特征。
3)我们证明了显著的内存和计算收益超过基线方法(baselines),并超过了最先进的语义分割方法在多个大场景点云数据集上。

3. 主要方法

1)首先说明了随机采样对于大场景点云的采样是很合适的,对比了几个采样策略,只有随机采样是满足实时性要求的。
2)Local Feature Aggregation:LFA模块
①Local Spatial Encoding:一般的操作,先用kNN找每个点的K个最近邻点,得到相对位置关系的表达,如公式1。在把相对位置的特征和点集本身的特征concatenate起来组成这个点的特征,如图3绿色区域所示。
②Attentive Pooling:大部分现有的方法都是用max/average pooling来做特征的降采样,作者认为基于attention的pooling更好,于是对每个点的特征施加了一个可学习的共享参数的W,得到权重分数(公式2)并与特征相乘。最后将这K(近邻)个特征加在一起(公式3),如图3橘色区域所示。
③Dilated Residual Block:类似ResNet,作者一共用了两层特征聚集模块并做了一个Skip Connection,如图3蓝色区域所示。
在这里插入图片描述

4. 实验

实验部分只看了在无人驾驶场景的SemanticKITTI数据集,效果有一定的提高但是有限,benchmark排行榜网(https://competitions.codalab.org/competitions/20331#results),目前最高的mIoU是60.0%。
在这里插入图片描述

PASS3D: Precise and Accelerated Semantic Segmentation for 3D Point Cloud

论文:https://arxiv.org/abs/1909.01643

1. 简介

我们提出了一个两阶段的点云语义分割框架,首先对原始点云去除地面快速聚类并优化候选点云簇,然后将点云簇进行坐标变化数据增强,并训练一个点云分割网络得到每个点精确的语义标签。我们一阶段的方法可以在很短时间得到高质量的候选点云簇(proposals),大大降低后续的点云处理量,提高了整体速度。

2. 主要贡献

1)提出一个灵活的两阶段3D点云语义分割框架,结合了传统分割聚类算法基于深度学习的优势,可以直接在3D空间获得特征。
2)我们的一阶段可以得到精炼的高召回率的候选点云簇,极大降低了后续点云处理的计算量及耗时。
3)我们的数据增广方法可以消除坐标偏差提高表现。
4)在KITTI上测试优于SOTA。

3. 主要方法流程

整体流程如图2所示。
在这里插入图片描述
1)Stage-1:Accelerated cluster proposal
①Ground plane fitting:基于两个假设,地面点的分布符合平面,地面点的位置较低。
②Ring-based clustering:激光雷达用ring的信息,根据这个可以设定阈值快速欧式聚类,得到每个点所属的点云簇。③Proposals refinement:对候选点云簇进行优化,如扩大bbox融入更多点,有些点由于距离地面较近被归入了地面,因此这里把它们找回来。最终的候选点云簇如图3所示,相同颜色代表统一簇,不同颜色代表不同簇。
在这里插入图片描述
2)Stage-2: Point-wise semantic segmentation
①Data preparation:转换坐标系如图4所示,网络更易收敛。数据增广如图5所示,由于数据的分布(如汽车的朝向等)会带来坐标偏差,因此对每个点云簇进行旋转和翻转变换操作,使得整体的分布是均匀的。
②Learning-based semantic segmentation:使用PointNet++作为backbone(有更强的可以直接替换),输入网络每个点的特征为(x,y,z,intensity,n),n是相对点数。
在这里插入图片描述
在这里插入图片描述

4. 实验

在KITTI上测试,优于SOTA。一阶段仅仅耗时5ms提出30个候选簇可以得到89.5%的逐点召回率,将原始点云近30k个点降低到5k个点,降低了后续的计算量。
在这里插入图片描述

Ground-Aware Point Cloud Semantic Segmentation for Autonomous Driving

论文:https://jianbojiao.com/pdfs/ACMMM.pdf
代码:https://github.com/Jaiy/Ground-aware-Seg

1. 简介

我们提出了意识到地面(ground-aware)的框架来缓解无人驾驶场景激光雷达点云所带来的稀疏性问题。首先分割地面,并使用弱监督隐式地建模地面信息,用新的ground-aware attention module获取地面的特征,这个模块可以捕获地面和物体的长期依赖,有助于只有少量点的小物体的语义分割表现。

2. 主要贡献

1)我们提出了一个ground-aware attention网络来对无人驾驶场景的稀疏激光点云做语义分割。
2)我们提出了一个ground-aware attention module来有效的建模地面和物体的长期依赖关系
3)实验表明我们的方法优于SOTA。

3. 主要方法

1)地面粗分割:将地面分为若干段,每段用RANSAC方法拟合一个平面,最终组成地面。将整个场景分为地面点云和物体点云两部分。
2)Region Feature Extraction:受到图表达的启发,根据原始的几何关系将点云分成若干超点(superpoints)来减少整个点云的规模。在两个点云中都进行graph-based partition(具体算法那没有细讲)。之后对每个点簇(group of points)使用PointNet提取特征。每个点得到一个64维特征,每个group得到一个512维的superpoint特征,拼接在一起得到576维特征。如图2蓝色框所示。
3)Ground-Aware Attention Module注意力机制可以建模远距离的区域相关关系,我们将其拓展到3D点云中,据我们所知,这是第一次使用交叉注意力方式(cross-attention manner)将注意力机制用在三维点云语义分割中。
①Hard Attention:如图4所示,分别对Nx3(x,y,z)和 Nx4(x,y,z,d_g)的特征输入做特征提取,d_g是点和地面的距离。用attention block来建模这两组特征。
② Soft Attention:点到地面的距离不足以捕捉地面和物体之间的关系,因此将地面点云和物体点云分别提取特征得到g和f。attention的具体操作如公式2-4所示。最终得到N_ox512的特征。
同2中的576维特征拼接在一起送入MLP最终得到K个类别的概率。

4)Ground-Aware Loss Function:样本分布不均衡是这个任务共同的问题(人,车的类别远远小于背景类别),因此提出类别平衡的交叉熵损失loss,如公式5所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 实验

用了阿里巴巴2018BDCI竞赛的数据集(80000帧)和一个没有开源的公司数据集(3000帧),没有用KITTI的数据集测试。其他方法在这些数据集上的表现应当是作者复现得到的。
在这里插入图片描述

SceneEncoder: Scene-Aware Semantic Segmentation of Point Clouds with A Learnable Scene Descriptor

本文提出了一个场景编码模块来实施场景感知指导,提取有意义的全局信息加以利用,以增强全局信息的效果。该模块预测场景描述符,场景描述符学习表示场景中存在的对象的类别,并通过过滤不属于该场景的类别直接指导点级语义分割。另外,为了减少局部区域的分割噪声,本文设计了一个区域相似性损失来将特征传播到具有相同标签的相邻点上,从而提高了点特征的识别能力。

论文还将方法集成到几种网络中,并在ScanNet和ShapeNet基准数据集上进行了广泛的实验。结果表明,该方法大大提高了在baseline上的表现,达到了SOTA。
在这里插入图片描述
在这里插入图片描述
实验结果
在这里插入图片描述
From Planes to Corners: Multi-Purpose Primitive Detection in Unorganized 3D Point Clouds

该文提出了一种新的正交平面及其相交线关系图位于三个正交平面相交处的角点无分割联合估计方法。这种在正交性下的统一场景探索允许许多应用,例如语义平面检测或局部和全局扫描对齐,这反过来可以帮助机器人定位或抓取任务。

本文的两阶段pipelines包括对正交平面进行粗略的联合估计,然后根据正交关系对平面参数进行联合求精。形成了这些图形,为进一步提取可靠的特征如线和角铺平了道路。本文的实验证明了提出的方法在从墙检测到6D跟踪的各种场景中的有效性,无论是在合成数据还是真实数据上。
在这里插入图片描述
步骤流程:
在这里插入图片描述
在这里插入图片描述

Learning and Memorizing Representative Prototypes for 3D Point Cloud Semantic and Instance Segmentation

三维点云语义和实例分割是三维场景理解的关键和基础。由于点集结构的复杂性,点集的分布呈现出非平衡性和多样性,表现为类别不平衡模式不平衡。因此,深度网络在学习过程中很容易忘记非优势案例,导致学习效果不理想。虽然重新加权可以减少分类好的例子的影响,但在动态训练中不能处理非优势模式。本文提出了一种记忆增强网络来学习和记忆覆盖不同样本的典型原型。特别地,通过记录在小批量训练中看到的模式,引入了一个记忆模块来缓解遗忘问题。学习记忆项目一致地反映了显性和非显性类别和案例的可解释和有意义的信息。因此,可以通过检索存储的原型来增加扭曲的观察和罕见的情况,从而获得更好的性能和泛化。在S3DIS和ScanNetV2两个基准上进行了详尽的实验,证明了该方法在效率和有效性上的优越性。不仅总体精度有了很大提高,而且非优势类也有了很大提高。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JSNet: Joint Instance and Semantic Segmentation of 3D Point Clouds

为了同时解决三维点云的实例和语义分割问题,本文提出了一种新的联合实例和语义分割方法JSNet。首先,建立一个有效的backbone,从原始点云中提取鲁棒特征。其次,为了获得更具鉴别能力的特征,提出了一种点云特征融合模块,对backbone的不同层次特征进行融合。在此基础上,开发了一个联合实例语义分割模块,将语义特征转化为实例嵌入空间,并将转化后的特征与实例特征进一步融合,实现实例分割。同时,该模块还将实例特征聚合到语义特征空间中,促进语义分割。最后,通过对实例嵌入应用简单的mean-shift聚类来生成实例预测。

本文在large-scale 3D indoor point cloud dataset 、S3DIS 和ShapeNet数据集上评估提出的JSNET,并与现有的方法进行比较。实验结果表明,该方法达到了SOTA。JSNET在三维实例分割中,对三维语义预测有了显著的改进,也有利于零件分割。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FuseSeg: LiDAR Point Cloud Segmentation Fusing Multi-Modal Data

本文介绍了一种简单而有效的激光雷达与RGB数据融合方法,并对激光雷达点云进行分割。利用激光雷达传感器的稠密本征距离表示和标定信息,建立了两种输入模式之间的点对应关系。能够将一个域中的特征扭曲并融合到另外一个,因此可以在一个网络中联合利用来自两个数据源的信息。为了证明该方法的优点,本文扩展了点云分割网络squezeseg的RGB特征分支,并将其融合到原始结构中称之为FuseSeg,它使KITTI基准的IoU提高了18%。除了精度的提高,论文还实现了50 fps的实时性能,是KITTI激光雷达数据记录速度的五倍。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值