ApolloScape自动驾驶数据集

部署运行你感兴趣的模型镜像

ApolloScape自动驾驶开放数据集及其应用

摘要

自动驾驶在过去几年中受到了极大的关注。自动驾驶汽车的关键技术包括解决3D地图构建、自我定位、道路解析和物体理解等任务,这些技术使车辆能够进行推理和决策。然而,用于训练和系统评估的大规模数据集仍然是开发鲁棒感知模型的瓶颈。在本文中,我们介绍了ApolloScape数据集[1]及其在自动驾驶中的应用。与现有的来自真实场景的公开数据集相比,例如KITTI[2]或Cityscapes[3],ApolloScape包含了更大且更丰富的标注内容,涵盖每个地点的整体语义稠密点云、立体视觉、逐像素语义标注、车道线标注、实例分割、3D车辆实例,以及来自多个地点、城市和不同时段的驾驶视频中每一帧的高精度位置信息。对于每项任务,其图像数量至少是当前最优数据集的15倍。为了标注如此完整的数据集,我们为各项任务开发了多种专用工具和算法以加速标注过程,例如联合3D-2D片段标注、视频中的主动标注等。基于ApolloScape,我们能够开发出联合考虑多个任务的学习与推理的算法。在本文中,我们提出了一种传感器融合方案,将摄像头视频、消费级运动传感器(GPS/IMU)和三维语义地图相结合,以实现自动驾驶中鲁棒的自我定位和语义分割。结果表明,传感器融合和多任务联合学习在实践中有助于实现更鲁棒、更准确的系统。我们期望我们的数据集及所提出的相关算法能够支持并激励研究人员进一步推动计算机视觉领域中多传感器融合和多任务学习的发展。

A1 引言

要实现广泛应用的自动驾驶车辆,必须包含三个基本组成部分。首先,环境理解,通常由后端的三维语义高清地图精确记录周围环境。其次,自我定位理解,通过实时自定位系统将车辆精确定位在三维世界中,从而能够规划通往每个目标位置的路径。第三,视野中的语义理解,3D感知系统检测道路上的其他运动物体、引导标志和障碍物,以避免碰撞并执行正确操作。目前,自动驾驶公司解决这些任务的主流方法大多依赖于激光雷达[4],而基于视觉的方法虽然具有潜在的低成本优势,但仍面临很大挑战,尚处于研究阶段。这需要解决诸如在自动驾驶视频中在线学习视觉3D场景重建[5],[6],[7],[8],自定位[9],[10],语义解析[11],[12],语义实例理解[13],[14],物体三维实例理解[15],[16],[17],[18],[19]等任务。然而,支持这些任务的当前最优数据集要么数量有限,e.g., KITTI[2]用于语义理解的训练图像仅有200张,要么任务变化有限,e.g., Cityscapes[3]仅包含离散语义标注的帧,缺乏定位或三维重建等任务。因此,为了对基于视觉的自动驾驶系统进行整体性的训练和评估,本文中我们构建了ApolloScape[1]自动驾驶数据集,这是一个不断扩展且统一的数据集,在数据规模、标签密度以及任务多样性方面均超越了以往的数据集。

具体而言,在当前阶段,ApolloScape包含以下属性:
1) 环境的密集语义三维点云(20+驾驶地点)
2) 立体驾驶视频(100+小时)
3) 高精度六自由度相机位姿(平移 ≤ 50mm,旋转 ≤ 0.015◦)
4) 同一驾驶地点在不同时段的视频(早晨、中午、夜晚)
5) 逐帧逐像素密集语义标注(35类,144K+图像)
6) 逐像素车道线标注(35类,160K+图像)
7) 语义二维实例分割(8类,90K+图像)
8) 二维车辆关键点和三维车辆实例标注(7万辆车)

基于这些信息,我们发布了多个用于场景解析的标准基准[20],实例分割[21],车道线解析[22],自我定位[23]通过保留部分数据作为测试集,并且我们用于可视化与评估的工具包也已发布[24]。对于三维车辆实例,我们列出了已标注的车辆数量,由于该项工作仍在开发中,我们将在未来工作中详细阐述。图1展示了ApolloScape的概览,说明了自动驾驶所需的数据集中的各种信息。我们的数据集仍在不断增长和演进,即将包含如三维车辆实例形状与姿态、三维车辆跟踪等新任务,这些对更细粒度的场景理解至关重要。此外,得益于我们高效的标注流水线,我们能够将数据集扩展到多个城市和地点,并且已经包含了中国10个城市的在各种驾驶条件下的数据。

基于ApolloScape,我们能够开发算法在分割、重建、自我定位等多个任务中同时联合考虑三维和二维信息。这些任务传统上是单独处理的[9],[12],或通过语义SLAM离线联合处理[25]这可能耗时较长。然而,从更实际的角度来看,自动驾驶汽车需要高效地实时处理定位和环境解析。因此,在本论文中,我们提出了一种基于深度学习的在线算法,在存在三维语义地图的情况下,联合解决定位与语义场景解析问题。在我们的系统中,我们假设有(a)GPS/IMU信号以提供粗略相机位姿估计;(b)用于静态环境的语义三维地图。GPS/IMU信号为我们的位姿估计系统提供了关键先验信息。该语义三维地图能够根据给定的相机位姿合成语义视图,不仅为场景解析提供了强有力的引导,还有助于保持时间一致性。

在我们的框架中,相机位姿和场景语义相辅相成。相机位姿有助于建立三维语义地图与二维语义标签图之间的对应关系;反之,场景语义也有助于优化相机位姿。我们的统一框架在精度和速度方面均优于单独执行这两项任务,为两项任务都带来了更好的结果。在实验中,使用单个Titan Z GPU,系统中的网络可在10ms内估计出误差小于1度的位姿,并在90ms内完成图像 512×608的分割,像素精度约为96%,且无需模型压缩,展示了其高效性和有效性。

总之,这项工作的贡献主要体现在三个方面,
1) 我们提出一个大型且丰富的数据集,名为ApolloScape,其中包含多种任务,e.g.,三维重建、自定位、语义解析、实例分割等,支持基于视觉的自动驾驶算法和系统的训练与评估。
2) 在开发该数据集时,我们设计了一种高效且可扩展的2D/3D联合标注流水线,并开发了多种工具用于2D分割、三维实例理解等任务。例如,与完全手动标注相比,我们的3D/2D标注流程在语义分割上的标注时间减少了70%。
3) 基于ApolloScape,我们开发了一种基于深度学习的联合自定位与分割算法,该算法是依赖于语义三维地图。该系统融合了来自相机和民用级 GPS/IMU的传感器数据,能够高效运行,并提升相机定位和场景解析的鲁棒性与精度。

本文的结构安排如下。我们在第2节中介绍相关工作,并在第ApolloScape的第3节中详细说明其数据采集与标注。在第4节中,我们阐述了所开发的高效联合分割与定位算法。最后,在第5节中,我们展示了所提出算法的评估结果、多个任务的基准以及在这些任务上运行的基线算法。

2 相关工作

自动驾驶数据集及相关算法多年来一直是一个活跃的研究领域。本文从数据集和最相关算法两个方面总结了相关工作,由于篇幅限制,未逐一列举所有内容。

2.1 自动驾驶数据集

最近,针对解决机器人导航中各个独立视觉任务的多种数据集已被发布,例如三维几何估计[32],[33],定位[9],[34],实例检测与分割[35],[36]。然而,针对自动驾驶,更希望从驾驶视频中一致地收集一组全面的视觉任务于一个统一的数据集中,以便探索不同问题之间的相互效益。

近年来,为了提高自动驾驶应用中城市街景的多样性和复杂性,已在多个城市收集了大量数据集。剑桥驾驶标注视频数据库(CamVid)[26]是首个具有语义标注视频的数据集。该数据集规模较小,包含701张人工标注的图像,涵盖32个语义类别。随后收集的KITTI视觉基准套件[2]包含了立体视觉、光流、2D/3D目标检测与跟踪等多种计算机视觉任务。在语义方面,KITTI主要关注检测任务,其中7,481张训练图像和7,518张测试图像使用2D和3D边界框进行标注,每张图像最多包含15辆汽车和30名行人。然而,对于分割任务,仅有少量图像包含像素级标注,导致相对较低的数据集。

示意图0

示意图1

2.2 自我定位与语义场景解析

如第1节所述,我们还尝试基于视频或单张图像,在ApolloScape上解决实时自定位和语义场景解析问题。这两个问题长期以来一直是计算机视觉的核心关注点。在此,我们总结了以街景图像作为输入的户外场景相关研究工作。

视觉自定位 。传统上,给定一组3D点来定位图像被表述为一个透视-n-点(PnP)问题[41],[42],通过基数最大化实现二维特征点与三维特征之间的匹配。通常在大范围环境中,需要位姿先验以获得良好的估计[43],[44]。Campbell等[45]提出了一种利用该先验的全局最优求解器。当存在地理标记图像时,Sattler等[46]提出使用图像检索方法以避免与大规模点云进行匹配。当给定视频时,可通过SLAM等方法进一步建模时间信息[47],从而提高定位精度和速度。

尽管这些方法在具有显著特征点的情况下是有效的,但在包含数十亿个点的城市规模环境中仍不实用,并且在纹理较少、结构重复和存在遮挡的区域中也可能失效。因此,最近提出了具有分层表示的深度学习特征用于定位。

PoseNet[9],[48]以低分辨率图像作为输入,能够在相对于由显著地标组成的特征丰富环境的情况下在10毫秒内估计位姿。LSTM-PoseNet[49]在CNN特征之后进一步捕捉全局空间上下文。对于视频输入,后续工作引入双向LSTM[50]或卡尔曼滤波LSTM[51],利用时间信息获得更好的结果。最近,许多研究工作[10],[52]还考虑添加语义线索作为定位的更鲁棒表示。然而,在街景场景中,考虑到道路两侧有树木的情况时,在大多数情况下没有显著的地标出现,这可能导致视觉模型。因此,在这些情况下,GPS/IMU信号对于鲁棒定位是必不可少的[53],而问题转变为估计从噪声位姿到真实位姿的相机视图之间的相对位姿。为了找到两个视图之间的相机相对位姿,研究人员[54],[55]提出将两幅图像拼接作为网络输入。在我们的案例中,我们将真实图像与来自噪声位姿的在线渲染的标签图进行拼接,这在我们的实验中取得了更优的结果。

街景解析 。对于街景图像(例如来自CityScapes[3]的图像)的解析,大多数最先进技术(SOTA)算法基于全卷积网络(FCN)[11]和多尺度上下文模块,结合空洞卷积[12]、池化[56]、条件随机场(CRF)[57]或空间循环神经网络(RNN)[58]设计而成。然而,这些方法依赖于具有数百层的ResNet[59],在需要实时性能的应用中计算开销过大。一些研究人员采用小型模型[60]或模型压缩[61]来加速,但代价是精度降低。当输入为视频时,会联合考虑时空信息,Kundu等[62]使用三维密集条件随机场(CRF)以获得时间上一致的结果。最近,通过计算连续帧之间的光流[63],将标签或特征[64],[65]从前一帧传递到当前帧。在我们的方法中,通过三维信息和相机位姿连接连续的视频帧,从而为静态背景提供更紧凑的表示。此外,我们提出将来自三维地图的投影作为额外输入,以缓解仅依赖图像线索进行场景解析的困难。同时,我们采用了来自DeMoN[55]的轻量级网络以提高推理效率。

视频解析中的二维-三维联合方法 。我们的工作还涉及通过嵌入二维-三维一致性来实现联合重建、位姿估计和解析[25],[66]。传统方法依赖于通过特征或光度匹配的运动恢复结构(SFM)[66],这些方法首先重建一个3D地图,然后在二维和三维上联合进行语义解析,从而在多帧之间产生几何一致的分割。最近,CNN-SLAM[67]用单幅图像深度网络替代了传统的三维重建模块,并采用segmentnetwork进行图像解析。然而,所有这些方法都是离线处理且仅适用于静态背景,无法满足我们的在线设置。此外,重建的三维模型的质量无法与使用三维扫描仪采集的模型相媲美。

3 构建ApolloScape

在本节中,我们介绍用于构建ApolloScape的采集系统、所收集数据的规格以及高效的标注过程。

3.1 采集系统

如图2所示,我们展示了采集系统。为了采集静态三维环境,我们采用Riegl VMX-1HA[68]作为采集系统,该系统包含两个VUX-1HA激光扫描仪(360◦视场角,测量范围从1.2米到420米,目标反射率大于80%),一个VMX-CS6相机系统(使用两个前向相机,分辨率为 3384 × 2710),以及一个带有IMU/GNSS的测量头(定位精度 20 ∼ 50毫米,横滚角与俯仰角精度0.005◦,航向角精度 0.015◦)。激光扫描仪利用两束激光垂直扫描其周围环境,类似于推扫式相机。与常用的Velodyne HDL-64E[4]相比,这些扫描仪能够获取更高密度的激光扫描仪。

此外,该系统包含两个高分辨率前视摄像头,分辨率为 3384 × 2710,并与激光雷达设备进行了良好校准。最后,为了获得高精度的GPS/IMU信息,在采集地点附近设置了一个临时的GPS基准站,以确保摄像头的定位足够精确,从而能够准确匹配二维图像和三维点云。通常情况下,我们的车辆以每小时30公里的速度行驶,摄像头每隔一米触发一次,即30帧每秒。

3.2 规范

这里,基于采集系统,我们首先介绍ApolloScape在不同任务方面的规格,例如预定义的语义类别、车道线类别和实例等,以便更好地概览该数据集。在第3.3节中,我们将介绍我们的主动标注流水线,该流程使我们能够高效地同时生成多个任务的真实标签。

语义场景解析 。在我们当前发布的在线版本[20],[21]中,我们拥有143,906个视频帧及其对应的像素级语义标注,其中89,430张图像包含实例级注释,可移动物体被进一步分离。请注意,我们的已标注图像包含时间信息,这些信息也可用于视频语义和对象分割。

为了使评估更加全面,类似于KITTI[2],我们将录制的视频按简单、中等和高度复杂的场景进行分类。表2比较了ApolloScape、Cityscapes[3]和KITTI[2]之间的场景复杂度,其中展示了每个可移动物体类别的统计数据。ApolloScape在图像中目标实例的总数和平均数量方面均多于其他数据集。更重要的是,它包含更具挑战性的环境,如图3所示。例如,由于阳光造成的高对比度区域以及立交桥产生的大面积阴影;在高度拥挤的交通情况下,多辆邻近车辆在公共汽车玻璃上产生的镜面反射。我们希望这些案例能够帮助并激励研究人员开发出对环境变化更具鲁棒性的模型。

对于语义场景解析,我们在四组中注释了24种不同标签。类别的规格部分借鉴自Cityscapes数据集。图4给出了每个类别的标注像素数量。正如预期的那样,ApolloScape提供的平均标注像素数量远高于Cityscapes,特别是对于一些稀有类别,例如交通灯、电线杆。在此,我们增加了在中国常见的几个新类别。例如,我们添加了“三轮车”,这是最受欢迎的交通工具之一。该类别涵盖所有类型的三轮车辆,包括机动和人力驱动的。Cityscape中的骑行者类别定义为在交通工具上的人。在此,我们将人和交通工具视为一个移动物体,并将两者共同作为一个类别处理。与骑行者相关的三个类别,即自行车、摩托车和三轮车,表示没有骑行者且停放在道路旁的交通工具。

语义车道线分割 。自动理解车道线可能是自动驾驶最重要的功能,因为它为可能的操作提供了引导。在ApolloScape中,如表3和图5所述,使用了27种不同的车道标记进行评估。标签基于车道线属性定义,包括颜色(例如白色和黄色)和类型(例如实线和虚线)。具体而言,来自3个道路站点的165949张图像被标注并在线发布[22],其中33760张图像保留用于测试。与其他公开可用数据集(如KITTI[2]或图森未来[69],ApolloScape是首个包含丰富语义标注且具有多种变化的车道线大型数据集。

自我定位 。我们录制的视频的每一帧都已标记通过高精度GPS/IMU信号自动实现。因此,我们发布的用于分割的视频也可用于自定位研究。然而,为了建立基准,我们额外收集了更大量的视频,这些视频尚未进行语义标注。具体而言,发布在[23]的定位视频包含4个不同城市的6条更多道路,大约30万张图像,以及 28km的道路。

我们的数据集在不同光照条件下具有变化,即早晨、中午和夜间,以及不同的驾驶条件,即高峰和非高峰时段,并提供立体图像对。此外,每条道路都有基于测绘级点云的三维地图,可用于寻找有监督和无监督特征学习中的匹配像素[70],[71]等。最后,我们通过从起点到终点再从终点到起点的方式记录每条道路,这意味着道路上每个位置都会从两个相反的方向被观察到。这使得能够研究具有大视角变化的相机定位,例如语义视觉定位中提出的方案[10]。

3.3 标注流程

为了使我们对视频帧的标注更加准确和高效,我们提出了一种结合二维和三维信息的主动标注流程,如图6所示。该流程主要包括两个阶段:三维标注和二维标注,分别用于处理静态背景/物体和运动物体。我们流程的基本思想与[72]中所述方法类似,即通过相机投影将三维标注结果转移到二维图像上,但我们需要处理更大规模的数据,并且采集车辆的配置也不同。因此,我们重新设计了流程中使用的一些关键技术,将在后文详细阐述。

运动物体去除 。如第3.1节所述,激光雷达扫描仪 Riegl在静态背景上精度较高,但由于扫描速率较低,道路上行驶的车辆和行人等运动物体的点云可能会被压缩,在捕获的点云中被扩展或完全缺失,如图8(b)所示。因此,我们设计了分别处理静态背景和移动物体标注的方法,如图6所示。具体而言,在第一步中,我们通过对采集的点云进行以下操作来实现运动物体去除:1)对同一道路段进行多轮扫描;2)基于手动选择的控制点对这些点云进行对齐;3)根据时间一致性去除点。形式上,保留第j轮中点x的条件是,

$$
\sum_{i=0}^{r} 1(\exists x_i \in P_i \text{ s.t. } |x_i - x_j| < \varepsilon_d)/r \geq \delta
$$

其中δ= 0.6 和εd = 0.025m 在我们的设置中,1() 是一个指示函数。它表示如果一个三维点在多轮记录中出现频率较高,即所有时间的60%,则该三维点将被保留。我们将剩余的点云作为静态背景M用于语义标注。

三维标注 。接下来,对于静态背景(三维标注)的标注,我们并非标注每个三维点并加载所有点,而是首先将三维点分割成多个部分,并使用局部凸连接区域(LCCP)基于空间距离和法线方向将每部分点云过度分割为点簇[73]通过PCL实现[74]。然后,我们使用自主开发的三维标注工具手动标注这些点簇,如图7所示,该工具可轻松实现点云旋转。

示意图2

示意图3

示意图4

示意图5

示意图6
示意图7 图像。(b) 带有三维点云投影的渲染标签图,其中用蓝色圈出一个不准确的运动物体(骑行者)。(c) 移除时间一致性较低的点后,带有三维点云投影的渲染标签图。(d)&(e) 背景的渲染深度图以及在三维点云中进行类依赖溅射后的渲染标签图(第3.3节)。(f) 缺失区域补全后的合并标签图,包含运动物体和天空。(g) 另一张包含非常小的交通灯的标签图。细节被放大以突出我们渲染标签图的细节。其他标注视频示例可在在线查看[20]。)

示意图8

多边形(反向)选择、点云与相机视图之间的匹配等。请注意,在此阶段,会包含属于可移动但静止的物体(如停放在路边的自行车和汽车)的点云。这些点云保留在我们的背景中,并在三维中进行标注,有助于提高我们在二维图像中对物体的标注效率。

为了进一步提高3D点云标注效率,在标注完一条道路后,我们会主动训练一个PointNet++模型[75]来对下一条道路的过度分割的点云簇进行预标注。然后要求标注人员通过修正物体边界附近常出现的错误标注,来修正和纠正结果。随着已标注点云数量的不断增加,我们的训练好的模型能够以不断提高的准确率标注新道路,从而实现可扩展到不同的城市和道路的加速的标注过程。

溅射 & 投影 。生成3D标注后,通过3D-2D投影可自动为所有2D图像帧生成静态背景/物体的标注。在我们的设定中,3D地图是一个基于点云的环境。尽管点云密度很高(道路区域内每25毫米一个点),但当3D点距离相机较远时,投影标签可能会变得稀疏,例如,图8(c)中所示的建筑物区域。因此,对于环境中的每个点,我们采用点喷溅技术,将3D点放大为正方形,其中正方形大小由其语义类别决定。

正式地,给定一个6自由度相机位姿 p=[q,t] ∈ SE(3),其中q ∈ SO(3)是旋转的四元数表示,t ∈ R³为平移,可以从语义三维地图渲染出标签图,其中应用z缓冲区来找到每个像素最近的点。对于属于类别 c的一个三维点x,其正方形大小 s_c被设置为与该类别到相机的平均距离成比例。形式上,

$$
s_c \propto \frac{1}{|P_c|} \sum_{x \in P_c} \min_{t \in T} d(x, t)
$$

其中 P_c是属于类别 c的三维点集合,而 T是真实相机位姿的集合。然后,给定不同类别之间的相对方块大小,我们定义一个绝对范围以获得用于splatting的实际方块大小。这一点至关重要,因为过大的尺寸会导致膨胀的边缘,而过小的尺寸则会产生大量孔洞。在我们的实验中,我们将该范围设置为[0.025, 0.05],并发现它能提供最高的视觉质量。如图8(e)所示,投影点之间的无效值被很好地修复填充,同时分割不同语义类别的边界也被良好地保留下来,从而得到了背景深度图和二维标注背景。通过这种策略,我们提高了视频帧的标注效率和精度。例如,对远处纹理丰富的区域(如树木、杆状物和交通灯)进行标注可能非常耗时,特别是当发生遮挡时,如图8(g)中道路上的围栏所示。

物体和背景的2D标注 。最后,为了生成最终标签(图8(f)),我们需要标注环境中运动的物体,并修复背景中的缺失部分,例如建筑物区域的部分。与3D点云标注类似,我们也开发了内部使用的2D标注工具,其界面与图7中的3D工具相同。为了加速2D语义标注,我们还采用了一种标注策略,即训练一个用于可移动物体和背景的CNN网络[76]来对2D图像进行预分割。对于背景分割,我们使用我们的相机采集的原始图像分辨率进行测试,该分辨率远高于原始论文中使用的分辨率,以提高预测区域边界的质量。对于物体分割,类似于 MaskRCNN[13],我们首先使用faster RCNN进行2D物体检测[77],并在框内分割物体掩码。然而,由于我们更关注物体边界而非类别准确性,因此对于每个高置信度的边界框(≥ 0.9),我们会扩大边界框,并像[78]那样裁剪出包含上下文的物体区域。然后,我们通过设置预测的最小分辨率,将裁剪后的图像上采样到更高分辨率(最小长度大于512),并使用具有相同架构的主动训练掩码CNN网络分割出掩码,该网络架构来自[76]。用于分割背景与物体的两个网络会在一条道路的图像被标注时进行更新。此处,这些网络的学习参数遵循原始论文。

最后,我们将网络的分割结果与来自语义3D点云的渲染标签图根据两条规则进行融合:1)对于来自背景网络的分割标签图的融合,我们在无3D投影的像素中填充预测标签,从而生成融合背景图;2)对于物体网络分割出的语义物体标签的融合,我们将物体掩码粘贴到融合背景图上,但不替换由3D点渲染得到的投影静态可动物体掩码(如3D标注部分所述)。我们向标注人员提供此融合标签图,以便在物体边界或物体掩码遮挡区域出现错误时进行进一步的精细调整。此外,当分割结果远未达到满意时,用户可选择忽略任何来自CNN网络的预分割结果并进行重新标注。我们的标注工具支持多边形、粘贴画笔等多种操作,这些功能也被许多流行的开源标注工具广泛采用¹。

图8(f)&(g)展示了一个最终的标注示例。请注意,一些背景类别如围栏、交通灯和植被通过我们的投影方法进行了详细标注,而建筑玻璃等缺失部分也可以被填充。得益于三维技术和主动学习,我们的整体流程在背景与物体的密集逐像素逐帧语义标注上大大节省了人力。实际应用中,我们的标注流程将每张图像的密集标注任务的时间成本从近1小时减少到约10分钟,同时保证通过我们的质量控制流程。

¹ https://github.com/topics/labeling-tool

道路上的车道线段标注 。在自动驾驶中,车道线是仅来自静态背景的信息。幸运的是,我们采集的测绘级3D点不仅具有高密度,而且还包含光照强度,借助该光照强度我们可以区分道路上的车道线。具体而言,我们采用类似于刚性背景的3D标注的标注过程,将每个三维点标注为表3中列出的预定义车道线标签。然而,与标注3D点簇时需要考虑建筑物和树木的点云不同,对于车道线,我们只需考虑道路上的点。因此,我们基于法线方向提取道路点云,并从鸟瞰图将这些点正交投影到高分辨率2D图像上,如图9所示,标注人员在道路上的每个车道线上绘制一个多边形。同时,我们的工具会调出对应图像,并在2D中高亮每个已标注多边形的区域,以便确定标注车道线的颜色和类型。

实例分割的标注 。得益于带有检测功能的主动标注组件,我们可以轻松地将分割标签图泛化,以根据目标检测与分割网络生成的分割结果来产生实例掩码。具体而言,我们要求标注人员在必要时(即视觉上与真实物体边界明显不一致时)修正不同实例之间的边界。

控制标注质量 。遵循现有的众包目标标注标准工作流程,[79],[80],[81]我们所有的2D/3D标注任务,例如,三维点云、2D背景、2D实例和3D车道线,均包含验证阶段以控制标注质量。具体而言,针对每项任务,我们提供详细说明来培训标注人员,标注人员需通过一项设计的测验后方可开始标注。在本论文发表时,我们将把所有说明发布在网站上,以造福学术社区。

标注阶段完成后,我们进入审核阶段,每位审核员都是经验丰富的标注人员,并且已有超过500张已标注图像通过了我们的标注质量验证。审核员将对标注区域的质量和覆盖范围进行核查。此外,由于我们进行的是视频标注,还会安排审核员目视检查下一帧中的语义在时间上是否保持一致。只有当一张图像通过了两位审核员的审核,才能被接受为有效的真实标签。

现有问题 。激光雷达扫描仪在半透明和高反射表面(如建筑物的玻璃幕墙)上可能会失效。尽管我们在部分录制的视频中解决了这一问题,如图8)所示,但我们发现即使采用主动标注,修正所有视频中的每一帧仍然过于耗时费力。因此,在当前发布的部分视频帧中,无3D投影或主动标注的像素例如,图1中的天空和部分建筑物被设为无效值,以便在训练和评估期间忽略它们。这些像素的标注工作将留待未来工作完成。

4 深度定位与分割

如引言部分(第1节)所述,ApolloScape包含多种真实标签,可支持多任务学习。在本论文中,我们通过构建一个基于深度学习的联合定位与语义分割系统来展示这一应用,该系统在给定语义三维地图[82]的情况下运行,我们称之为DeLS-3D,如图10所示。具体而言,在上层部分提供了预构建的三维语义地图。在测试过程中,系统接收来自GPS/IMU的在线图像流及相应的粗略相机位姿。首先,对每一帧,根据输入的粗略相机位姿渲染出语义标签图,并与对应的RGB图像一同输入至姿态CNN。该网络计算相对旋转和平移,输出修正后的相机位姿。为了引入时间相关性,将姿态CNN输出的修正位姿输入至姿态RNN,以进一步提升图像流中的估计精度。最后,根据校正后的相机位姿重新渲染标签图,并与图像一同送入分割CNN。渲染出的标签图有助于对视频的图像流生成空间上更精确且时间上更一致的分割结果。在此系统中,由于ApolloScape包含了相机位姿和分割结果的真实标签,因此可在每个输出端进行强监督训练。本系统的代码已发布于 https://github.com/pengwangucla/DeLS-3D。接下来,我们将详细阐述网络架构以及用于训练整个系统的损失函数。

4.1 带运动先验的相机定位

基于道路先验的平移校正 。导航中一种常见的定位先验是使用二维道路图,通过将GPS信号限制在道路区域内实现。我们采用了类似的策略,因为一旦GPS信号偏离道路区域,渲染标签图将与街景完全不同,网络无法找到对应关系。

为了实现这一约束,我们首先使用 0.05m的栅格化网格从三维语义信息中渲染出一张二维道路图图像,通过仅使用道路3D点(即属于车道、人行道和自行车道等的点)来生成地图。然后,在二维地图中的每个像素[x, y] ∈ Z²处,通过广度优先搜索(BFS)算法预先计算一个偏移值 f(x, y),用以表示该像素到属于道路的最近像素的二维偏移。

在在线测试期间,给定一个噪声平移t=[t_x, t_y, t_z],我们可以利用预计算的偏移函数[t_x, t_y]+f(⌊t_x⌋, ⌊t_y⌋)找到相对于t最近的道路点。然后,基于校正后的相机位姿渲染标签图,并输入到姿态CNN中。

CNN-GRU位姿网络架构 。如图10所示,我们的位姿网络包含一个姿态CNN和一个位姿GRU-RNN。具体而言,位姿网络中的CNN以图像I和来自相应粗略相机位姿p_c^i的渲染标签图L作为输入。它输出一个7维向量ˆp^i,表示图像与渲染标签图之间的相对位姿,并且我们可以通过p^i = p_c^i + ˆp^i获得相对于3D地图的修正位姿。对于姿态CNN的网络结构,我们采用DeMoN的设计[55],该设计使用大卷积核以获取更大的上下文,同时保持参数数量和运行时间可控。该网络的卷积核由一对一维滤波器组成,分别位于 y和 x方向,编码器逐步通过步幅为2降低空间分辨率,同时增加通道数。我们在第5节的实现细节中列出了该网络的具体信息。

此外,由于输入是图像流,为了建模时间依赖性,在姿态CNN之后附加了一个带有残差连接的多层GRU[83]。具体来说,我们采用了一个具有32个隐藏状态的两层GRU,如图11所示。它包含了超出相邻帧的高阶交互,这有助于提升位姿估计性能。在传统导航应用中估计2D位姿时,通常使用卡尔曼滤波,并假设为恒定速度或加速。在我们的场景中,由于车辆速度未知,相机位姿的变换是从训练序列中学习得到的,在实验中我们证明了从RNN预测的运动优于使用恒定速度假设的卡尔曼滤波,从而进一步改进了由我们的姿态CNN估计的结果。

位姿损失 。遵循PoseNet[48],我们使用几何匹配损失进行训练,从而避免了旋转和平移之间的平衡因子。形式上,给定一组三维点云 P={x},每幅图像的损失可写为,

$$
L(p, p^ ) = \sum_{x \in P} \omega_{l_x} | \pi(x, p) - \pi(x, p^ ) |^2
$$

其中p和p*分别为估计的姿态和真实姿态。π()是一个投影函数,将一个三维点x映射到二维图像坐标。l_x是x的语义标签,ω_lx 是依赖于语义的权重因子。这里,我们对属于特定类别的点云(如交通灯)设置更大的权重,并发现这有助于姿态CNN获得更好的性能。在[48]中,仅使用当前相机可见的3D点来计算该损失,以帮助训练的稳定性。然而,在实际应用中,可见的3D点数量仍然过多,难以直接用于损失计算。因此,我们使用真实相机位姿为每张训练图像预先渲染一张分辨率为256 × 304的深度图,并利用从该深度图反投影得到的3D点进行训练。

4.2 基于位姿引导的视频解析

在拥有校正的姿态后,可以将语义三维世界直接渲染到相机视图中,从而得到当前图像的语义解析。然而,估计的姿态并不完美,细小区域(如路灯杆)可能会完全错位。此外还存在其他问题。例如,由于反射导致许多3D点缺失,e.g.,玻璃区域,且在远距离处点可能变得稀疏。最后,输入中的动态物体无法通过投影标签图表示,导致标注错误在相应区域。因此,我们提出增加一个分割CNN来解决这些问题,同时将渲染标签图作为分割引导。

分割网络架构 。如第2节所述,ResNet等参数量较大的网络对于我们的在线应用而言效率不够高。因此,如图12所示,我们的分割CNN是一个包含编码器-解码器网络和优化网络的轻量级网络,且两者均采用与DeMoN中相应部分相似的结构[55],包括一维滤波器和镜像连接。然而,由于我们拥有来自三维语义地图的分割引导,我们在网络中增加了一个残差流(图12的上部),以促使网络学习渲染标签图与真实标签之间的差异。在[85]中采用了全分辨率流以保留空间细节,而在此,我们使用渲染标签图来保持语义空间布局。

与DeMoN相比,编码器-解码器网络的另一个显著区别在于网络输入,如图12所示,我们不是直接将标签图与输入图像拼接,而是通过独热操作将标签图转换为得分图,并将每个像素的得分嵌入到一个32维特征向量中。然后,我们将该特征向量与图像第一层的输出进行拼接,从而缓解了图像与标签图之间的输入通道不平衡问题,这一点已被先前的研究证明是有效的[86]。对于如图12所示的优化网络,我们采用相同的策略处理两个输入。最后,分割网络生成一个得分图,得到给定图像的语义解析结果。

我们首先仅使用RGB图像训练分割网络,然后通过添加渲染标签图的输入来微调网络。这是因为我们的网络是从零开始训练的,因此需要大量数据才能从图像中学习到有效的特征。然而,基于估计的姿态生成的渲染标签图平均只有70%的像素精度,仅有30%的像素能够提供有效梯度。这可能导致网络容易对渲染标签图过拟合,同时减缓从图像中学习特征的过程。最后,在分割损失方面,我们使用标准softmax损失,并在编码器输出之后立即添加中间监督。

5 实验

在本节中,我们首先在发布的两条道路数据上评估我们的在线深度定位与分割算法(DeLS-3D),这些数据是我们完整数据的一个子集。我们将该算法与其他基于最先进深度学习的视觉定位方法进行比较,即PoseNet[9]和分割算法即ResNet38[76],结果表明了多任务统一的优势。

然后,我们详细介绍了基于ApolloScape的在线基准测试设置以及当前的领先结果,这些设置遵循了许多标准设定,例如来自KITTI[2]和Cityscapes[3]的设定。这些任务包括语义分割、语义实例分割、自我定位、车道线分割。由于本文提出的“DeLS”算法未遵循这些标准实验设置,因此我们无法为其提供在基准上的结果。尽管如此,对于每个基准,我们要么使用最先进的方法运行了基线结果,要么为其他研究人员发布了挑战赛,从而对任务难度提供了合理的评估。

5.1 评估 DeLS-3D

在本节中,我们评估了多种位姿估计和分割的设置,以验证DeLS-3D系统中各个组件的有效性。对于GPS和IMU信号,尽管我们对相同的道路段有多次扫描,但其数据量仍不足以用于训练。因此,参考[53],我们通过在真实姿态上添加服从均匀分布的随机扰动ε来模拟带有噪声的GPS和IMU。具体而言,平移和旋转噪声分别设置为ε_t ∼ U(0, 7.5m)和ε_r ∼ U(0°, 15°)。我们参考真实数据[87]来设定仿真中的噪声范围。

数据集 。我们在评估中使用了在中国北京早期采集的两条道路。第一条位于一个名为中关村公园(Zpark)的科技园区内,我们在不同的白天时段扫描了6轮。生成的三维地图道路长度约为3km,连续帧之间的距离约为5m到10m。我们使用其中4轮的视频相机图像进行训练,2轮用于测试,得到2242张训练图像和756张测试图像。第二条我们在一个名为稻香湖(Dlake)的湖泊附近扫描了10轮,共4公里,连续帧之间的距离约为1m到3m。我们使用8轮的视频相机图像进行训练,2轮用于测试,得到17062张训练图像和1973张测试图像。这两个数据集中现有的语义类别如表5所示,它们是我们完整语义类别的子集。

实现细节 。为了快速从3D地图渲染,我们采用OpenGL高效渲染带有z缓冲区处理的标签图。一张512 × 608图像可以在单个 TitanZ GPU上以70毫秒生成,这也是姿态CNN和分割CNN的输入尺寸。对于姿态CNN,所有层的滤波器尺寸为{32, 32, 64, 128, 256, 1024, 128, 7},每帧的前向速度为9毫秒。对于姿态RNN,我们从数据中采样长度为100的序列用于训练,每帧的平均速度为0.9毫秒。对于分割CNN,我们保持其尺寸与输入相同,前向时间为90毫秒。总体而言,执行联合定位与分割的推理速度约为每张图像240毫秒。两个网络均使用“Nadam”优化器[88]进行学习,学习率为10⁻³。由于GPU内存限制,我们依次训练这三个模型。具体来说,对于姿态CNN和分割CNN,在达到150个训练轮次且性能不再提升时停止训练;对于姿态RNN,则在200个训练轮次后停止。在数据增强方面,我们使用imgaug²库添加光照、模糊和翻转变化。我们从训练图像中保留一个子集,用于验证每个训练轮次后的模型,并选择表现最佳的模型进行评估。

² https://github.com/aleju/imgaug

对于测试,由于每次输入的GPS/IMU都会变化,即p_c^t = p* + ε,我们需要对相机位姿和图像分割的预测结果设置置信范围,以验证每个组件的改进是否显著。具体而言,我们通过10次模拟的结果报告标准差,以获得置信范围。最后,我们采用MXNet[89]平台实现所有网络。

评估指标 。我们使用中位数平移偏移和中位数相对角度[9]。对于分割的评估,我们采用常用的像素精度(Pix.Acc.)、平均类别精度(mAcc.)和平均交并比(mIOU),如[76]中所述。

位姿评估 。我们首先直接与PoseNet[9],[48]的工作进行比较,并使用其发布的代码和几何损失(公式(3))在Zpark数据集上训练一个模型。由于街景的场景外观相似性,我们无法使用他们的方法获得比更好的合理模型含噪声的GPS/IMU信号。然后,我们实验了一种领先的开源单目SLAM算法,即,ORB-SLAM[90],来进行自我定位。然而,其结果也未优于初始位姿,因为底层ORB特征在Zpark中由于存在许多非漫反射/反射部件(如玻璃建筑和镜面新道路)以及树木的重复外观而无法稳健匹配。因此,在表4中,我们主要列出了模型变体估计的平移t和旋转r的性能。第1行显示了我们仿真中GPS和IMU的中位误差。第2行通过使用姿态CNN并额外输入投影标签图,模型能够学习相机与GPS/IMU之间的良好相对位姿,显著降低了误差(平移t降低60%,旋转r降低85%)。通过添加语义线索,即,式(3)中的道路先验和语义权重,位姿误差进一步减小,尤其是旋转误差(从第3行的0.982降至0.727)。事实上,我们发现最主要的改进来自语义加权,而道路先验仅起到轻微作用。在未来工作中,我们希望尝试更大的噪声和更多的数据变化,以更好地验证不同线索的有效性。

当有视频输入时,我们首先评估一个简单的基线方法,即使用卡尔曼滤波优化GPS/IMU信号[84],即“带卡尔曼滤波的噪声位姿”,该方法合理地减少了错误。接着,我们建立了一个直接在GPS/IMU信号上执行RNN的基线,如“无CNN的位姿RNN”所示,其平移估计结果甚至优于位姿CNN,而旋转估计则明显更差。这符合我们的预期,因为相机的速度在时间上比旋转更容易捕捉。我们采用的另一个基线是基于位姿CNN的输出,并假设速度恒定,我们将该速度设为训练序列中的平均速度。如“带卡尔曼滤波的位姿CNN”所示,该方法对平移略有改善,但损害了旋转性能,这意味着滤波过度平滑了序列。最后,当结合位姿CNN和RNN时,在平移和旋转方面均达到了最佳位姿估计结果。t和r。我们在图13(a-c)中可视化了一些结果。最后,在表4底部列出了Dlake数据集上的相应结果,其结论与Zpark数据集相似。

分割评估 。在表5的顶部,我们展示了Zpark数据集的场景解析结果。首先,我们在Cityscapes上采用一种最先进的解析网络,即ResNet38[76],并使用Zpark数据集对其进行训练。该方法利用了来自Cityscapes[3]数据集的预训练参数,并以1.03s逐帧和我们的分辨率运行。如第1行所示,在没有姿态先验的情况下,其精度与我们的分割CNN(第2行)相比达到了合理水平,但我们的网络速度快10倍。在第3行中,我们展示了经过姿态RNN后利用估计的姿态生成的渲染标签图的结果。显然,由于缺失像素与物体的错位。在第四行,我们使用带有真实姿态的渲染标签图作为分割CNN的引导,以获得分割性能的上界。在这种情况下,渲染标签图与图像完美对齐,从而通过正确标注大部分静态背景显著提升了结果。在第五行和第六行,我们展示了分别使用姿态CNN和姿态RNN之后的渲染标签图进行训练的结果。我们可以看到,使用姿态CNN时,结果相较于分割CNN仅有轻微提升。根据我们的观察,这是因为某些细节结构的偏移仍然显著,例如,路灯杆。然而,当使用RNN后姿态时,实现了更好的对齐,分割精度显著提高,尤其是在电线杆等细结构区域,如图13所示,证明了我们策略的有效性。

表格5的底部显示了在更大规模的Dlake数据集上的结果,该数据集包含更多的对象标注,我们在此观察到更明显的提升,即,从62.36提升到67.00。此处渲染的标签为对象分割提供了背景上下文,也提升了对象解析性能。在所有类别中,我们观察到交通灯类别的性能下降。我们认为,主要原因是交通灯仅出现在道路交叉口,这种情况远少于路灯杆等物体,导致模型对姿态生成的投影标签图出现过拟合。我们可以通过使用更大的数据集训练或采用更好的类别平衡策略来解决此问题,这将留作我们的未来工作。

如图13所示,我们从相机视角可视化了部分结果。在图中可以看到,噪声位姿(a)通过姿态CNN(b)和姿态RNN(c)从相机视角逐步被校正。此外,在(d)和(e)中,我们分别对比了无相机位姿和有相机位姿的分割结果。从框出区域可以看出,结合渲染的标签图的分割结果在捕捉边界区域细节、发现稀有类别以及保持正确的场景布局方面具有更高的精度。上述优势对于实际应用可能至关重要,例如识别视觉上难以检测的交通标志和电信杆。更多可视化内容请查看我们在线的演示视频³⁴。

³ Zpark: https://www.youtube.com/watch?v=fqglYBipNfQ
⁴ Dlake https://www.youtube.com/watch?v=fqglYBipNfQ

5.2 基准和基线

鉴于我们提出了多种任务和大量标注数据,要对我们所有的任务进行全面的算法探索是不现实的。因此,我们将数据发布给研究社区,并建立了标准评估基准。目前,已在线设立了四个挑战赛,通过保留部分标注结果作为测试集来进行评估,包括语义分割[20],实例分割[21],自我定位[23],车道线分割[22]。

在评估中,对于语义分割和车道线分割任务,我们采用平均交并比;对于自我定位任务,我们采用中位平移和旋转偏移,具体描述见DeLS-3D的评估部分(第5.1节)。对于实例分割任务,我们使用在不同交并比阈值下的插值平均精度(AP)[91],该指标用于COCO挑战赛[36]。随后,我们将详细说明每个数据集的划分以及当前各个基准上的领先方法。

语义分割 。对于视频语义分割,截至目前,我们尚未收到挑战赛的有效结果。这可能是由于ApolloScape中训练视频的数量极其庞大,导致使用ResNet等最先进的深度学习模型进行训练变得不切实际。[59]因此,我们从全部数据中选择一个子集,用于比较同一模型在ApolloScape和Cityscapes上的性能。具体来说,我们从14万标注语义视频帧中精心挑选了5,378张训练图像和671张测试图像,以建立基准,同时保持采集场景的多样性和出现的物体种类。所选图像将在我们的网站上发布[20]。

我们使用ResNet-38网络进行实验[76],与原始的ResNet结构相比,该网络以宽度换取深度[59]。我们使用我们的训练数据对它们发布的模型进行微调,初始学习率为0.0001,采用动量为0.9、权重衰减为0.0005的标准SGD优化器,随机裁剪尺寸为512 × 512,进行10倍的数据增强(包括缩放和左右翻转),并训练网络100个epoch。预测结果基于原始图像分辨率计算,未使用任何后处理步骤,例如多尺度集成等。表6展示了这两个数据集中共同类别的解析结果。请注意,在使用完全相同训练流程的情况下,我们数据集的测试IoU远低于Cityscapes,这主要是由于我们在第3.2节中提到的挑战,尤其是对于可移动物体,其mIoU比Cityscapes低34.6%。

这里,我们将使用完整数据集训练模型的工作留给研究社区和我们的未来工作。

实例分割 。此任务通过联合考虑检测和分割,扩展了语义物体解析。具体而言,我们选取了39212张训练图像和1907张测试图像,并在线设立了挑战基准[21]评估我们数据集中的7个物体(表6上半部分)用于收集自动驾驶场景中的潜在问题。在过去几个月中,有超过140支队伍参加了我们的挑战,这表明社区对物体级别理解的兴趣远大于场景分割。

参与者取得的领先结果如表8所示,其中我们可以看到,优胜团队报告的mAP总体上低于Cityscapes基准中报告的结果[92],通过使用类似[93]从MaskRCNN修改而来的策略[13]。根据优胜团队的挑战赛报告,与Cityscapes相比,ApolloScape包含更多的微小和遮挡物体(60%的物体尺度小于32像素),这导致在其他数据集上训练的迁移模型性能显著下降。

车道线分割 。车道线分割任务采用与语义分割相同的指标,包含132189张训练图像和33790张测试图像。我们的内部挑战基准[22]选择评估道路上最常见的35种车道线类型,如表3所示。截至本论文提交时,我们仅有一项基于ResNet-38网络[76]的工作被评估,这可能是由于数据量较大(16万+图像)。我们在表7中展示了相应的详细结果,从中可以看出,各类别的mIoU仍然非常有限(40%),与领先的语义分割算法在通用类别上的精度相比仍有较大差距。我们认为这主要是因为道路上存在高对比度、变暗和断裂的车道线,如图3所示的情况。

自我定位 。我们使用相同的指标来评估相机位姿,即平移和旋转的中位偏移,如第5.1节所述。该任务包含来自中国北京、广州、成都和上海6个地点的驾驶视频,涵盖多种驾驶场景和不同时间段。总共提供了153个训练视频和71个测试视频,包含超过30万帧图像,并最新建立了内部挑战基准网站[23]。

目前,我们的提交数量较少,而领先的提交来自一种用于大规模基于图像的定位的最先进的方法[97]。该方法基于通过多种三元组损失学习到的深度特征进行图像检索。我们在表9中展示了其报告数值,其中定位误差出乎意料地小,即平移误差约为15厘米,旋转误差约为0.14度。最初,我们以为在街道或高速公路上的图像外观相似性可能会使深度网络模型失效。然而,从参与者结果来看,特别是设计的特征能够区分细微外观变化,并提供高精度定位结果。另一种可能是我们的采集车辆始终以大致恒定的速度行驶,从而减少了实际应用中因速度变化带来的问题。在近期未来,我们希望能够增加更多具有驾驶速度变化和不同天气条件的挑战性场景。

总之,根据我们建立的数据集基准和评估的算法,我们发现对于低层次定位,结果非常出色;而对于高层次语义理解,ApolloScape提供了额外挑战和新问题,导致最先进的算法精度有限,即实例分割的最佳mAP约为32%,车道分割的最佳mIoU约为40%。与人类感知相比,用于自动驾驶的基于视觉的算法显然需要进一步研究以应对极端困难的情况。

6 结论与未来工作

本文中,我们介绍了ApolloScape,这是一个用于自动驾驶的大规模、多样化且支持多任务的自动驾驶数据集,包含高密度三维点云地图、逐像素和逐帧的语义图像标签、车道线标记标签以及多个视频的语义实例分割。我们所有视频的每一帧都通过高精度的GPS/IMU设备进行了地理标记。ApolloScape显著大于现有的自动驾驶数据集,例如KITTI[2]和Cityscapes[3],为计算机视觉研究领域带来了更多挑战。为了标注如此大规模的数据集,我们开发了一种主动式二维/三维联合标注流水线,有效加速了标注过程。基于ApolloScape,我们提出了一种结合三维语义地图的联合定位与分割算法,该算法融合了多传感器信息,结构简单且运行高效,在两个任务上均取得了优异的结果。

我们希望这能激励研究人员开发能够同时处理多个任务并考虑其内在几何关系的算法。最后,针对每个独立任务,我们建立了在线评估基准,为不同算法提供了一个公平竞争的平台。

最后但同样重要的是,ApolloScape是一个持续演进的数据集,不仅体现在数据规模上,还体现在各种驾驶条件、任务和采集设备方面。例如,首先,我们计划扩大我们的数据集,以包含更多多样化的驾驶环境,包括雪天和雾天。其次,我们最近发布了标注的三维车辆[19],立体图像、三维人体以及物体在三维空间中的跟踪[98]。第三,我们计划在近期未来安装全景相机系统和速腾聚创[4],以生成物体的深度图和全景图像。

您可能感兴趣的与本文相关的镜像

EmotiVoice

EmotiVoice

AI应用

EmotiVoice是由网易有道AI算法团队开源的一块国产TTS语音合成引擎,支持中英文双语,包含2000多种不同的音色,以及特色的情感合成功能,支持合成包含快乐、兴奋、悲伤、愤怒等广泛情感的语音。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值