【论文翻译】TANDEM: Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo

原文链接:TANDEM: Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo

摘要

  在本文中,我们提出了一种实时单目跟踪和稠密建图框架TANDEM。对于姿态估计,TANDEM基于关键帧的滑动窗口光度BA(bundle adjustment)。为了提高鲁棒性,我们提出了一种新的前端跟踪,该前端使用根据稠密深度预测增量构建的全局模型渲染的深度图来执行稠密的直接图像对齐。为了预测稠密的深度图,提出了级联视图聚合MVSNet(CVA-MVSNet),它利用整个活动关键帧窗口,通过自适应视图聚合分层构建3D成本量来平衡关键帧之间不同的立体基线。最后,将预测的深度图融合为一致的全局图,以截断的带符号距离函数(truncated signed distance function,TSDF)体素网格表示。我们的实验表明,在相机跟踪方面,TANDEM优于其他最先进的传统和基于学习的单目视觉里程计(VO)方法。此外,TANDEM显示了最先进的实时3D重建性能。Code:https://github.com/tum-vision/tandem

关键词:SLAM,稠密建图,多视点立体,深度学习

1. 介绍

  实时稠密建图是计算机视觉和机器人领域所面临的主要挑战之一,这个问题称为稠密SLAM,包括估计传感器的6自由度姿态估计和密集重建周围环境。虽然当前也存在许多工作良好且稳健的RGB-D建图方案[1,2,3],但单目相机的实时重建是一个更为困难的挑战,因为深度值不能简单地从传感器读取并融合。然而,这是一个非常重要地事情。因为与仅限于室内环境的RGB-D方案或者价格昂贵且较重型的LiDAR方法相比,单目方法具有显著的优势。
  已经提出的几种基于深度神经网络(DNN)的方法,通过利用单目深度估计[5]、变分自动编码器[6,7,8]或端到端神经网络[9,10]来解决单目跟踪和密集建图任务。与上述工作不同,在本文中,我们提出了一种新的单目密集SLAM方法–TANDEM,该方法首次将基于学习的多视点立体(MVS)集成到传统的基于优化的VO中。这种新颖的稠密SLAM方案设计,显示了最先进的跟踪和稠密重建精度,且当该模型仅对合成数据进行训练时,其依然在具有挑战性的真实数据集上显示了强大的泛化能力。图1显示了由TANDEM在unseen序列上进行的3D重建。
在这里插入图片描述

本文贡献:
  1. 一种新的单目实时稠密SLAM框架,无缝耦合经典的直接法VO和基于学习的MVS重建;
  2. 据我们所知,这是第一个利用全局TSDF模型渲染的深度来进行单目稠密前端跟踪;
  3. 一个新颖的MVS网络 – CVA-MVSNet,它能够利用视图聚合和多级深度预测来利用整个关键帧窗口;
  4. 在合成数据和真实数据上,均达到了最先进的跟踪和重建结果。

2. 相关工作

  有两个不同的工作流与所提出的方法相关。一方面,有基于带位姿的图像的纯3D重建,另一方面,有完整的SLAM或VO框架,可以同时估计相机姿态和重建3D环境。
3D重建:大多数密集3D重建方法将图像及对应的位姿信息作为输入,并重建稠密的或半稠密的环境。在过去的十年内,已经提出了几种经典的方法[1,15,16,17]。最近,基于深度学习的方法显示出优于经典方法的性能。这些方法使用DNN回归环境中的3D模型。该3D模型可以是体素表示[9,18,19,20]、3D点云[21]或者一组深度图[22,23,23]的形式。如今,最流行的是从3D成本量预测最终模型的方法。黄等人[22]第一个提出了基于成本体积的方法。周等人[24]将多个图像的体积聚合到单个成本体积,并使用3D CNN进行深度预测。Yao等人[23]提出了基于从输入图像所预测的2D深度特征图直接计算单个体积。在后续的工作中,Yao等人[25]用循环网络替换了深度预测CNN。为了改善运行时间和内存消耗,Gu等人[26]提出了级联成本量。Yi等人[27]引入了一种自适应视图聚合来衡量每个输入图像的体素贡献。本文所提出的CVA-MVSNet建立在上述两个工作[26,27]之上,并在很大程度上受到了它们的启发。然而,只有通过它们的组合和适用SLAM的设置,我们才能获得更好的性能和实时能力。
  以往的方法都是基于一组选定的帧,Murez等人[9]则直接从单个全局3D成本量来预测TSDF模型。Weder等人[18]提出了一种基于学习的方法替代深度图经典的TSDF融合。基于体素的表示一般来说都是密集型的,Niessner等人[28]提出体素散列来克服这一限制,Steinbrucker 等人[29]则使用八叉树在CPU上执行深度图融合。
RGB-D SLAM:在视觉SLAM领域,RGB-D方法本质上提供了密集的深度图以及相机轨迹,因此旨在解决与我们的方法类似的问题。Bylow 等人[30]和Kerl 等人[2,31]主要关注RGB-D图像的准确的轨迹估计。除了相机跟踪,Newcombe 等人[1]将深度图集成到全局TSDF表示中。Whelan 等人[3]则执行基于面元的融合和非刚体表面形变,以实现全局一致性重建。Kahler 等人[32]使用TSDF图表示,该图被拆分为多个子图以便模拟闭环。大多数之前的方法仅针对帧的位姿进行优化,Schops 等人[33]提出了一种基于RGB-D SLAM的全量BA方法,它可以同时优化相机的位姿和3D结构。Sucar 等人[34]将基于DNN的隐式场景表达集成到TGB-D SLAM系统中。
单目SLAM:与RGB-D方法相比,基于单目的方法其跟踪和建图都变得更具挑战性。Newcombe 等人[35]使用单目相机基于光度成本量进行优化,以在GPU上实时联合估计相机位姿和稠密深度图。Engel 等人[36]提出了第一个大规模光度SLAM公式,包括回环检测和位姿图优化。通过使用稀疏表示,Engel 等人[37]构建了第一个全光度VO框架,该框架可以实时联合估计位姿和深度。为了能够获得更稠密的重建结果,Mur-Artal等人[38]在基于特征的SLAM[39]基础之上执行半稠密的概率深度估计。Schops 等人[40]使用从移动跟踪设备上获得的位姿和图像,执行基于时间、平面扫描的深度估计。Tateno 等人[5]和Yang [41,42]等人在传统的直接法SLAM框架中利用DNN来提高跟踪性能并克服尺度模糊问题。虽然传统的几何和混合方法仍然可以实现出色的跟踪性能,但有几个完全学习的SLAM框架[43,44,45,24],它们在重建的完整性方面更胜一筹。Jatavallabhula 等人[46]提出了一种差分优化器,它可能用于弥补传统和基于学习的SLAM之间的差距。Bloesch 等人[6]提出了一种基于深度学习的SLAM新方案,作者建议学习场景深度的逐帧代码表达,它与相机位姿联合进行优化。Czarnowski 等人[7]是对[6]的扩展,其中代码表达被集成到一个完整的SLAM系统中。Zuo 等人[8]在视觉-惯性步骤中使用了类似的代码表达,并将稀疏的、跟踪的特征馈送到DNN中。

3. TANDEM

  本文提出的TANDEM由三部分组成:单目视觉里程计(第3.1节)、基于CVA-MVSNet进行密集深度估计(第3.2节)和体积建图(补充)。图2a显示了系统的概述,视觉里程计利用单目视频流和从3D TSDF模型渲染的稠密深度以滑窗的方式估计相机位姿。给定关键帧及其估计的位姿,利用所提出的CVA-MVSNet预测参考关键帧的稠密深度图。为了重建一个完整且全局一致的3D模型,将深度图利用体素散列[28]融合到TSDF体素网格[47]中。通过无缝集成这些组件,生成的系统TANDEM能够从单目相机实现实时跟踪和高质量的稠密重建。补充材料中提供了更多的详细信息,包括有关TSDF体素初始化的信息。
在这里插入图片描述

3.1 视觉里程计

  通过跟踪多个帧上的一组稀疏点来估计相机位姿在最近的VO系统中显示出很好的性能[37,39]。然而,使用更多的特征点进行联合优化并不一定会进一步提高估计位姿的准确性,同时还会显著增加运行时间[37]。因此,在所提出的VO系统中,我们使用直接稀疏窗口优化后端,如直接稀疏里程计(DSO)[37]中所述。然而,我们在直接图像对齐的前端使用从全局TSDF模型渲染的稠密深度图,该模型是增量式构建的。在众多的实验中,我们确认了稠密跟踪前端和稀疏的后端优化的组合可以显著提高跟踪性能(参见表1),同时保持了快速的运行时间。
稠密前端跟踪:前端跟踪提供相机的速率姿态估计,并作为窗口优化后端的初始化。在原始的DSO中,通过使用从优化窗口中所有点生成的稀疏深度图来进行图像对齐,以此实现关键帧的跟踪。然而,由于深度图的稀疏性,这种方法缺少鲁棒性(表1)。我们通过合并TSDF模型渲染的稠密深度图来缓解这个问题。对于当前关键帧中的每个像素点p,我们根据稀疏VO DSO(如果可用)分配一个深度值,否则基于渲染的稠密深度TSDF来分配深度值。基于增量构建的TSDF模型,虽然无法包含所有像素的有效的深度值,但是与稀疏深度值相比,还是要稠密很多。其中,近稠密组合深度图被用于两帧的直接图像对齐。

3.2 CVA-MVSNet

   ( I i , T i ) i − 1 n { (I_i, T_i) }^n_{i-1} (Ii,Ti)i1n是一系列活动关键帧的集合,其中 I i I_i Ii是体积为 ( H , W ) (H,W) (H,W)的图像, T i T_i Ti是对应的通过VO计算的全局位姿信息。CVA-MVSNet是基于多视图立体的原理,并进一步利用深度神经网络来估计参考帧 I i − 1 I_{i-1} Ii1的深度图。CVA-MVSNet通过使用级联代价量分层估计深度,并使用自适应视图聚合模块有效地聚合所有关键帧地深度特征,从而克服了深度MVS网络令人望而却步地内存需求。
如图2b所示,关键帧的多尺度特征 F i s F^s_i Fis首先由共享权重的2D U-Net网络提取,其中 i ∈ [ 1 , n ] i\in[1,n] i[1,n]是帧索引,而 s ∈ [ 1 , 3 ] s\in[1,3] s[1,3]是尺度索引。作为结果, F i s F^s_i Fis表示为 ( F s , H s , W s ) (F^s,H^s,W^s) (Fs,Hs,Ws),其中 F s F^s Fs是尺度 s s s下的特征维度, H s = H / 2 3 − s H^s=H/2^{3-s} Hs=H/23s, W s = W / 2 3 − s W^s=W/2^{3-s} Ws=W/23s。参考帧的深度图通过三阶段分层进行估计,每个阶段将特征集 { F i s } i − 1 n \{F^s_i\}^n_{i-1} {Fis}i1n作为输入并预测 ( D s , H s , W s ) (D^s,H^s,W^s) (Ds,Hs,Ws)的深度图 D s D^s Ds。为了清晰起见,我们首先解释了单个阶段是如何估计深度,然后再描述多层之间是如何进行聚合的。
单阶段深度估计。对于每个阶段,成本量 C s C^s Cs需要通过深度特征 { F i s } i = 1 n \{F^s_i\}^n_{i=1} {Fis}i=1n进行构造。对于参考帧的每个像素,我们定义深度假设 D s D^s Ds,获取张量 ( D s , H s , W s ) (D^s,H^s,W^s) (Ds,Hs,Ws)。每一帧的深度特征 F i s F^s_i Fis通过可微翘曲进行几何变换,通过深度假设,相对位姿 T j i = T i − 1 T j T^i_j=T^{-1}_iT_j Tji=Ti1Tj和相机内参。作为结果,每一帧的特征量 V i s V^s_i Vis可表示为 ( F s , D s , H s , W s ) (F^s,D^s,H^s,W^s) (Fs,Ds,Hs,Ws)
为了将多视图特征量聚合到一个成本量 C s C^s Cs中,大多数以前的深度MVS方法平等地对待不同的视图,并使用基于差异的成本度量:
在这里插入图片描述
  但是,在滑窗SLAM系统中,关键帧在优化窗口的分布并不是均匀的,通常新关键帧之间的距离要比旧关键帧之间的距离小很多。这会导致相当大的遮挡和不重叠的图像,因此,基于差异的成本度量是不合适,因为它对不同视点的权重是平等的。为了缓解这个问题,我们采用自适应视图聚合来构建成本量。
在这里插入图片描述
其中视图聚合权重 W i s W^s_i Wis表示为 ( 1 , D s , H s , W s ) (1,D^s,H^s,W^s) (1,Ds,Hs,Ws)。将 ( V i s − V j s ) 2 (V^s_i-V^s_j)^2 (VisVjs)2作为输入,通过浅层3D卷积网络分别为每个 V i s V^s_i Vis估计其聚合权重 W i s W^s_i Wis,该聚合模块允许网络自适应降低错误信息的权重。
成本量 C s C^s Cs通过3D U-Net进行正则化,并通过softmax进行非线性化处理以获取概率量 P s P^s Ps表示为 ( D s , H s , W s ) (D^s,H^s,W^s) (Ds,Hs,Ws)。给定每个像素的深度假设 D h y p s D^s_{hyp} Dhyps ( D s , H s , W s ) (D^s,H^s,W^s) (Ds,Hs,Ws),估计的深度作为预期值给出:
在这里插入图片描述
分层深度估计。该网络利用前一阶段 D s − 1 ( s > 1 ) D^{s-1}(s>1) Ds1(s>1)估计的深度定义一个具有小的 D s D^s Ds的细粒度深度假设张量 D h y p s D^s_{hyp} Dhyps。由于第一阶段不存在前一阶段,因此 D h 1 y p D^1_hyp Dh1yp的每个像素都有相同的深度范围 [ d m i n , d m a x ] [d_min,d_max] [dmin,dmax] D 1 = 48 D^1=48 D1=48深度值。对于后面的阶段 ( s > 1 ) (s>1) (s>1),其深度 D s − 1 D^{s-1} Ds1被上采样并用于作为 D h y p s D^s_{hyp} Dhyps的先验。具体的,对于像素 ( h , w ) (h,w) (h,w), D h y p s ( . , h , w ) D^s_{hyp}(.,h,w) Dhyps(.,h,w)被定义为使用 D s − 1 ( h , w ) D^{s-1}(h,w) Ds1(h,w)作为中心,然后使用预定义的偏移量对周围的 D s D^s Ds进行采样。这样,更高分辨率的阶段需要更少的深度平面,例如 D 1 > D 2 > D 3 D^1>D^2>D^3 D1>D2>D3。我们使用适用于所有三阶段的L1损失来训练网络,并使用总和作为最终损失函数。

3.3 实验细节

  为了保证实时执行,TANDEM在多个级别上利用了并行性。密集跟踪和BA在CPU上的并行线程中执行,而TSDF融合和DNN推理则在GPU上异步并行运行。我们在Pytorh中训练CVA-MVSNet,并使用TorchScript在c++中执行推理。
TANDEM可以在配备8GB VRAM和Intel i7-9700K CPU的Nvidia RTX 2080 super台式机上运行时为20 FPS。这包括跟踪和密集TSDF建图,但没有可视化或网格生成。关于更多细节,包括如何潜在地扩展网络以在嵌入式平台上部署,我们参考补充文件。

4. 实验结果

  由于TANDEM是一个完整地稠密SLAM系统,我们对它进行单目相机跟踪和稠密3D重建评估。具体而言,对于相机跟踪,我们与当前最先进的传统稀疏单目里程计,DSO和ORB-SLAM基于基于学习的稠密SLAM方法、DeepFactors和CodeVIO进行比较。对于3D重建,我们与最先进的深度多视图立体方法Cas-MVSNet、端到端重建方法Atlas、基于学习的稠密SLAM方法,如CNN-SLAM、DeepFactors,和CodeVIO,以及iMAP,一种最近提出的基于深度隐式地图表达的RGB-D稠密SLAM方法。
  在下文中,我们将首先介绍我们用于训练和评估的数据集。请注意,只有CVA-MVSNet需要训练,而TANDEM的稠密跟踪部分纯粹基于优化,不需要针对特定数据集进行训练。然后,TANDEM的消融实验展示了不同的设计选择。最后,我们展示了与其他最先进方法的定量和定性比较。由于篇幅有限,我们只展示了部分已进行的评估,并在参考补充材料中进行额外的实验。

4.1 数据集

训练集。我们为CVA-MVSNet训练两个模型:一个是在真实世界ScanNet数据集,另一个是在合成数据集Replica。ScanNet 数据集由 1513 个室内场景组成,我们使用官方训练和测试拆分来训练 CVA-MVSNet,以便与 DeepFactors 和 Atlas 进行公平比较。然而,ScanNet 中的几何和纹理显示出明显的伪影和不完整性,这限制了其训练高质量密集重建方法的潜力。为了补充 ScanNet 数据集,我们建立在最近提出的 Replica 数据集的基础上,该数据集由 18 个逼真的场景组成。这些场景是使用最先进的 3D 重建管道从现实世界的房间中捕获的,并显示出非常高质量的纹理和几何形状。因为作者没有发布任何序列,我们通过手动创建产生 55000 个姿势和图像的真实相机轨迹来扩展数据集。
测试集。我们使用 ICL-NUIM数据集和 EuRoC 数据集的 Vicon Room 序列来评估跟踪和密集 3D 重建。请注意,TANDEM 没有在任何一个数据集上进行训练。 ICL-NUIM 是具有姿态和密集深度地面实况的合成室内数据集。它包含对单目视觉里程计和密集深度估计具有挑战性的低纹理场景。 EuRoC 是由微型飞行器 (MAV) 记录的真实世界数据集。

4.2 相机位姿估计

  我们在 EuRoC 和 ICL-NUIM 上针对其他最先进的单目 SLAM 方法评估 TANDEM 的姿态估计。在 EuRoC 上,我们针对 DSO、ORB-SLAM2、Deep Factors 和 CodeVIO使用相机和 IMU 传感器进行评估。请注意,为了公平比较,我们关闭了 ORB-SLAM2 的全局优化和重新定位。我们还实现了 DSO (DSO + Dense Depth) 的变体,它使用 CVA-MVSNet 估计的密集深度图的所有像素进行前端直接图像对齐。请注意,TANDEM 和 DSO + Dense Depth 之间的区别在于,TANDEM 通过渲染来自 TSDF 网格的深度图来跟踪全局 3D 模型。 TANDEM 在 ICL-NUIM 和 EurRoC 上实现了比其他单目方法更好的跟踪精度和鲁棒性。由于篇幅有限,我们在主论文的表 1 中展示了 EuRoC 的结果,并请参考 ICL-NUIM 结果的补充材料,其中我们还展示了与 DeepTAM的比较。
  除 CodeVIO之外的所有方法对每个序列运行五次,并在 Sim(3) 与地面实况对齐后报告绝对姿态估计的平均 RMSE 误差和标准偏差。对于 CodeVIO,我们直接采用他们论文中报告的数字。与 DSO 和 DSO + Dense Depth 的比较表明,针对全局 3D 模型提出的密集跟踪改进了相机位姿估计,尤其是在更具挑战性的序列(V102 和 V202)上。然而,我们应该承认,TANDEM 仍然无法与使用 IMU 传感器进行姿态估计的 CodeVIO 竞争。
在这里插入图片描述

4.3 消融研究

  我们在Replica的测试分割上进行了CVA-MVSNet的消融研究,结果如表2所示,具体而言,我们评估了使用具有7个关键帧的完整VO窗口,视图聚合模块(VA), ( D 1 , D 2 , D 3 ) (D^1,D^2,D^3) (D1,D2,D3)深度平面设置为 ( 48 , 4 , 4 ) (48,4,4) (48,4,4)。基线方法是原始的Cas-MVSNet,使用3个多视图图像作为输入,没有视图聚合模块,且具有更多的深度平面 ( 48 , 32 , 8 ) (48,32,8) (48,32,8)。我们使用绝对差异(Abs)和具有不同阈值 ( a 1 , a 2 , a 3 ) (a_1,a_2,a_3) (a1,a2,a3)的内点百分比作为深度图评估的指标。有关指标的公式,请参阅补充材料。此外,我们还展示了不同模型的推理时间和内存使用情况。从表中我们可以看出,使用更多帧的整个关键帧窗口并没有提高基线模型的准确性,同时增加了运行时间和内存使用量。使用视图聚合模块,准确率显着提高,但运行时间进一步增加。使用更少的深度平面并不会显着降低准确性,但会大大提高运行时间和内存使用率。因此,为了保证 TANDEM 的实时性,我们使用少平面模型作为最终的 CVA-MVSNet,并且本文中的所有其他实验都是使用该模型进行的。
在这里插入图片描述

4.4 3D重建

  我们评估了 ICL-NUIM 和 EuRoC 的重建精度。在 ICL-NUIM 上,我们与 DeepFactors [7]、CNN-SLAM [5]、Atlas [9] 和 Cas-MVSNet [26] 进行了比较。表3显示了评估结果。由于 Atlas 是一种纯 3D 重建方法,不估计姿势,我们提供地面真实姿势作为输入。请注意,Atlas 直接从 3D CNN 估计 TSDF 体积,因此我们渲染深度图以针对其他方法进行评估。 CNN-SLAM、Deep Factors 和 Atlas 在 ScanNet 上进行训练。对于 Cas-MVSNet,我们在 Replica 数据集上重新训练它,并使用与 CVA-MVSNet 相同的姿势。我们展示了我们的 ScanNet 训练模型和我们的 Replica 训练模型的评估结果,以促进公平比较。单目方法的深度图根据轨迹按比例对齐,补充中给出了进一步的细节。我们使用 a1 指标作为准确度的主要衡量标准。从表 3 中,我们可以看到,与其他方法相比,我们的方法显示出显着的改进,并且平均提供了最好的结果。请注意,CVA-MVSNet 在合成 Replica 上训练的模型比在 ScanNet 上训练的模型取得了更好的结果。
在这里插入图片描述
  在 EuRoC 上,我们无法与 CNN-SLAM 进行比较,因为论文上没有提供 EuRoC 上的数字,而且代码也没有公开。我们进一步将 CodeVIO [8] 添加到对 EuRoC 的评估中,因为它是最近的密集 SLAM 系统,并且也在 EuRoC 上进行了评估。请注意,CodeVIO 使用单目摄像头和惯性传感器进行跟踪,而 TANDEM 和其他 SLAM 方法仅依赖单目摄像头。表4显示了评估结果。
在这里插入图片描述
  我们进一步针对 iMAP [34] 评估 TANDEM,iMAP [34] 是一种利用深度隐式地图表示的 RGB-D 密集 SLAM 系统。请注意 iMAP 和 TANDEM 之间的两个主要区别:一方面,iMAP 使用 RGB-D 传感器,而 TANDEM 只需要单目摄像头;另一方面,iMAP 的 DNN 不需要任何预训练,它是使用 RGB-D 输入纯在线训练的,而 TANDEM 的深度估计网络需要离线训练。由于 iMAP 也在 Replica 上进行了评估,因此,我们在其数据集的两个序列上将 TANDEM 与 iMAP 进行比较,这两个序列未包含在我们的 Replica 拆分的训练集中。我们使用来自 iMAP 的评估指标并将结果显示在表 5 中。一般而言,TANDEM 在使用单目相机时取得了与 iMAP 相似的结果。
在这里插入图片描述
  在图 3 中,我们展示了由 DeepFactors、Atlas 和 TANDEM 估计的定性深度图。 DeepFactors 和 Atlas 都可以很好地恢复底层场景的几何形状,但我们的方法通常能够捕捉到更精细的细节。我们在图 4 中进一步将完整的场景重建显示为网格。由于 DeepFactors 本身不会生成完整的 3D 模型,因此我们仅在本实验中将 TANDEM 与 Atlas 进行比较。从图中我们可以看出,与深度图类似,TANDEM 能够重建比 Atlas 更精细的细节。
在这里插入图片描述
在这里插入图片描述

5. 结论

  我们展示了 TANDEM,一种实时密集单目 SLAM 系统,其新颖的设计结合了直接光度视觉里程计和深度多视图立体。特别是,我们提出了 CVA-MVSNet,它有效地利用了整个关键帧窗口并预测了高质量的深度图。此外,所提出的密集跟踪方案通过跟踪使用 TSDF 融合创建的全局 3D 模型来连接相机姿态估计和密集 3D 重建。定量和定性实验表明,TANDEM 在合成和真实数据的 3D 重建和视觉里程计方面比其他最先进的方法取得了更好的结果。我们相信 TANDEM 进一步弥合了 RGB-D 映射和单目映射之间的差距。

---------------------------本文仅用于学习交流,如有侵权,请联系删文-------------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值