上交&华为提出GaussianObject:仅需四张图片就能高质量重建~

点击下方卡片,关注“自动驾驶之心”公众号

戳我-> 领取自动驾驶近15个方向学习路线

>>点击进入→自动驾驶之心3DGS技术交流群

编辑 | 自动驾驶之心

3D高斯溅射(3D Gaussian Splatting,简称3DGS)是一种新兴的三维场景表示和渲染技术,它通过将3D空间中的点或体素视为高斯分布的中心,从而在空间中创建连续的表面或体积表示,广泛应用于点云渲染、体数据可视化、体积重建、增强现实(AR)和虚拟现实(VR)、电影和动画制作。可能说到这里你还无法感受到3DGS的神奇之处,那么看看小红书博主Chyi是如何用3DGS在游戏中重建桌面的吧!

图注:视频来源:https://www.xiaohongshu.com/explore/66137816000000001b00cbd1?app_platform=ios&app_version=8.54.1&share_from_user_hidden=true&xsec_source=app_share&type=video&xsec_token=CBmY-_c550w0nnogaRfTSTqAEp898aw1_pNjLOF7JeLxw=&author_share=1&xhsshare=WeixinSession&shareRedId=ODdHMDVJNT82NzUyOTgwNjczOTc6RjlA&apptime=1727236710&share_id=981c6b33086d4a40b697ba4659d8fbc7&wechatWid=d23f41df238fec9f0e59f3a96872f4c1&wechatOrigin=menu

3DGS目前研究的一大难点是,从稀疏视图进行有效3D重建十分复杂和困难,尤其是在资源有限或条件受限的实际应用场景中。首先,数据捕获十分繁琐,通常需要捕获大量的多视图图像来进行有效的3D重建,这一过程对于非专业人士来说既麻烦又不切实际。其次,当只有极少数图像可用于重建时(例如360°范围内仅有4张图像),构建多视图一致性非常困难。3D表示可能会过拟合输入图像,导致结果退化成训练视图中的碎片化像素块,缺乏整体结构。此外,在360°范围内从稀疏视图捕获的对象,某些部分可能因为视角极端而被省略或在观察时被严重压缩。这些被省略或压缩的信息很难仅从输入图像中进行3D重建。即使近年来有多种方法提出以减少对密集捕获的依赖,但在视图极其稀疏的情况下,如何生成高质量的3D对象仍然是一个挑战。

图注:GaussianObject fast forward. 来源:Chen Yang, Sikuang Li, Jiemin Fang, Ruofan Liang, Lingxi Xie, Xiaopeng Zhang, Wei Shen, Qi Tian, GaussianObject: High-Quality 3D Object Reconstruction from Four Views with Gaussian Splatting, https://gaussianobject.github.io/

为了解决上述挑战,上交、华为、多伦多大学联合提出GaussianObject,这是一个新颖的框架,旨在从少至4个输入图像中重建高质量的3D物体。文章选择3D高斯喷溅(3DGS)作为基本表示,因为它快速,更重要的是,足够明确。得益于其点状结构,文章设计了几种技术来引入物体结构先验,例如物体的基本/粗略几何形状,以帮助建立多视图一致性,包括视觉外壳在物体轮廓内定位高斯分布和去除离群值的浮子消除。为了消除由遗漏或高度压缩的对象信息引起的伪影,文章提出了一种由二维大扩散模型驱动的高斯修复模型,将损坏的渲染图像转换为高保真图像。由于正常的扩散模型缺乏修复损坏图像的能力,文章设计了自生成策略来构建图像对以调整扩散模型,包括从遗漏训练模型中渲染图像以及在高斯属性中添加3D噪声。修复模型生成的图像可用于细化经结构先验优化的三维高斯分布,从而进一步提高渲染质量。为了进一步将GaussianObject扩展到实际应用中,文章引入了一种无colmap的GaussianObject变体(CF-GaussianObject),它在只有四张输入图像的挑战性数据集上实现了具有竞争力的重建性能,而无需输入准确的相机参数。

5fd0b0e54ca23792e05b366c21c63408.jpeg

总之,这篇文章的贡献可以总结如下:

  • 结构先验优化3D高斯(3D Gaussians):文章提出了一种从高度稀疏视图中优化3D高斯的方法,该方法利用显式结构先验来增强多视图一致性。这包括使用视觉外壳(visual hull)技术进行初始化,以及在训练过程中采用浮动体消除(floater elimination)技术,从而为重建的3D对象提供一个粗略的几何框架。

  • 基于扩散模型的高斯修复模型:为了解决由于信息缺失或高度压缩而导致的3D重建中的伪影问题,文章提出了一种基于扩散模型的高斯修复模型。这个模型能够将损坏的渲染图像转换成高保真的图像,从而进一步提高渲染质量。

  • 框架性能超越当前最先进技术:整体框架GaussianObject在多个具有挑战性的真实世界数据集上,无论是定性还是定量地,都一致性地超越了当前的最先进技术(SOTA)。此外,文章还提出了一种无需COLMAP的变体(CF-GaussianObject),它在只需要四个输入图像的情况下就能实现竞争性的重建性能,并且不需要输入精确的相机参数,这降低了对相机姿态的严格要求,扩大了应用范围。

https://arxiv.org/abs/2402.10259
https://gaussianobject.github.io/

基本技术回顾

3D Gaussian Splatting

3D Gaussian Splatting是一种用于3D场景表示的技术,它通过一组3D高斯函数来描述场景中的点。每一个3D高斯函数包含中心位置、旋转四元数、缩放向量、不透明度和球谐系数。这样,一个场景可以被参数化为一组高斯函数。这种表示方法不仅计算效率高,而且由于其点状结构,可以方便地嵌入结构先验,适用于快速渲染。

ControlNet

ControlNet是一种基于扩散模型的生成模型,用于从数据分布中进行采样,生成图像。它通过逆转一个离散时间随机噪声添加过程,使用一个训练有素的扩散模型来近似这个过程。ControlNet通过在变分自编码器(VAE)的基础上,引入额外的图像条件,增强了生成过程。它使用一个损失函数来优化网络结构,这个损失函数考虑了文本和图像的条件,以及由扩散模型推断出的高斯噪声。

这两种技术在文章中被用于构建GaussianObject框架,用于从稀疏视图高质量地重建3D对象。3D Gaussian Splatting用于高效的3D表示和渲染,而ControlNet用于通过扩散模型修复和优化这些3D表示。

模型总体框架

GaussianObject旨在从极度稀疏的视角(例如360°范围内的4张图像)重建并渲染高质量的3D对象。模型的输入包括一组稀疏的参考图像(以及相应的相机内参、外参和对象的遮罩)。首先使用视觉外壳技术(visual hull)初始化3D高斯,为3D对象提供一个大致的几何框架。然后通过“浮点消除”(floater elimination)技术,优化3D高斯表示,以增强结构一致性并减少异常值。再设计一个基于扩散模型的高斯修复模型,用于修复由于信息缺失或压缩而造成的伪影,并设计自生成策略来获取训练修复模型所需的图像对。文章还提出了一种不需要COLMAP(一种结构从运动技术)的变体,它在没有精确相机位姿的情况下也能实现竞争性的重建质量。最后输出优化后的3D高斯表示,可以从任何视角渲染出照片级真实的3D对象。

3ec729f3ca872b8cacd780bef0589bfd.png

1. 使用结构先验进行3D高斯的初始优化

文章提出了两种初始优化三维高斯表示的技术,它们充分利用了有限视图的结构先验,并得到了令人满意的物体轮廓。

  • 根据视觉外壳初始化:在视觉外壳内使用拒绝采样方法随机初始化点:将均匀采样的随机3D点投影到图像平面上,只保留那些位于所有图像空间遮罩相交区域内的点。点的颜色是通过参考图像投影的双线性插值像素颜色平均得到的,并将这些3D点转换成3D高斯点。

  • 浮动移除:由于参考图像覆盖范围不足,视觉外壳可能包含不属于物体的区域,这些区域表现为浮动,影响新视图合成的质量。因此,文章使用K-Nearest Neighbors (KNN)算法计算每个3D高斯到最近个高斯的平均距离。通过计算距离的平均值和标准差来建立一个规范范围,并根据这个范围排除那些平均邻接距离超出自适应阈值的高斯点。

  • 初始优化:优化过程包括颜色损失、掩模损失和单目深度损失。其中颜色损失结合了L1损失和结构相似性(SSIM)损失。掩模损失使用二元交叉熵(BCE)损失。深度损失使用移位和尺度不变深度损失。综合这些损失项,通过调整各损失项的权重来优化3D高斯表示。

2. 引入高斯修复模型,旨在解决由于输入视图稀疏导致3D对象重建中出现的问题。

高斯修复模型R是为了解决由于输入视图稀疏导致3D对象重建中的信息遗漏和压缩问题,专注于纠正3D高斯表示中的异常分布。通过接受损坏的渲染图像作为输入,并输出经过修复的高保真图像,模型R有助于提高重建的质量和细节。这涉及到使用留一策略(leave-one-out training)添加噪声来生成训练数据。具体来说,从输入图像中构建多个子集,每个子集包含除了一个之外的所有图像,然后使用这些子集训练多个3DGS模型。并且,在3D高斯属性上添加噪声,以生成更多损坏的渲染图像,从而提供足够的训练数据对。然后使用预训练的ControlNet作为基础,通过注入LoRA(Low-Rank Adaptation)层进行微调。这种方法使得GaussianObject能够在只有非常有限的视图信息的情况下,也能生成高质量的3D重建结果。

abec3a4448dd358cf09be16d993200f0.png

3. 基于距离感知采样策略的高斯修复方法

由于参考视图附近的对象信息丰富,模型需要确定哪些视图需要进行修正以提高整体的渲染质量,因此文章介绍了一种基于距离感知采样策略的高斯修复方法(Gaussian Repair with Distance-Aware Sampling)。文章建立了一条与训练视图对齐的椭圆路径,假设在这些路径上的渲染的图像质量较高,并集中在一个中心点上。其他弧线定义的视图的渲染结果需要被修正:在每次迭代中,从修复路径中随机采样新的视点。对于每个新视点,渲染相应的图像,并通过潜在扩散编码器将其编码,将编码的图像输入到图像条件分支的R中,同时生成一个噪声扰动的潜在表示。通过运行DDIM采样并通过扩散解码器生成一个样本,以修复视图。使用损失函数Lrep,该函数结合了距离权重和感知相似性度量,来优化3D高斯表示。通过识别和修正那些与参考视图距离较远的视图,模型能够更有效地利用数据和计算资源,从而提高整体的渲染质量。

4. COLMAP-Free GaussianObject (CF-GaussianObject)

传统的稀疏视图重建方法依赖于精确的相机参数,这些参数通常通过SfM流程(一种不需要结构从运动,Structure from Motion)获得。CF-GaussianObject旨在简化这一流程,减少对精确相机参数的依赖,使CF-GaussianObject可以更容易地应用于日常场景。具体来说,首先引入了先进的稀疏匹配模型DUst3R来预测相机姿态和内参,从而不需要传统的SfM流程。假设所有参考图像共享相同的相机内参,这与原始DUst3R不同,后者为每个视图预测不同的相机焦距。然后使用视觉外壳技术对DUst3R预测的粗略点云进行结构先验增强,以初始化3D高斯。最后引入正则化损失来限制预测相机姿态的偏差,增强优化的鲁棒性。

实验部分

表2和3给出了在MipNeRF360、OmniObject3D和OpenIllumination数据集上与现有方法相比,GaussianObject的视图合成性能。实验表明,gasianobject在所有数据集上都能获得一致的SOTA结果,特别是在感知质量- LPIPS方面。虽然GaussianObject的设计是为了处理极其稀疏的输入视图,但它仍然优于其他具有更多输入视图的方法,即6和9,进一步证明了其有效性。

8d53036cced82548b856f4770a82d925.png fac4127814024d4ae10c7fe8e3c8e1c8.png

图5和图6展示了在只有4个输入视图的情况下,各种方法在不同数据集上的渲染结果。文章观察到,与竞争模型相比,GaussianObject获得了更好的视觉质量和保真度。虽然ZeroRF在OpenIllumination上表现出具有竞争力的PSNR和SSIM,但其效果图模糊且缺乏细节,如图6所示。相比之下,GaussianObject展示了精细的重建。这种优越的感知质量突出了高斯修复模型的有效性。

4013c62f59238d170e52b7a0a3cd6a10.jpeg 6b8e382a5b111cfcde7e0e5dc5d3c715.png

表4显示了对具有挑战性的MipNeRF360数据集的比较。考虑到TriplaneGaussian只适应单一的图像输入,文章给它提供物体的正面视图。LGM需要将目标物体放置在世界坐标原点处,摄像机朝向目标物体,仰角为0◦,方位角为0◦,90◦,180◦和270◦。因此,文章报告了两个版本的LGM——LGM-4直接使用四个稀疏捕获作为输入视图,LGM-1使用MVDream按照原始方式生成符合LGM设置要求的图像。结果表明,输入视图之间的严格要求严重阻碍了具有野外捕获的类lrm模型的稀疏重建性能。相比之下,GaussianObject不需要大量的预训练,对输入视图没有限制,可以重建日常生活中任何复杂的对象。

c0c5371ddf602964617f6d08538ddb1a.png

CF-GaussianObject的性能在MipNeRF360和OmniObject3D数据集上进行了评估,结果详见表2和图5。虽然CF-GaussianObject表现出一些性能下降,但它消除了对精确相机参数的需求,大大提高了其实用性。与其他依赖精确相机参数的SOTA方法相比,其性能仍然具有竞争力。值得注意的是,文章观察到性能下降与输入视图数量的增加相关,这主要是由于随着视图数量的增加,DUSt3R估计的准确性下降。如图7所示,对智能手机拍摄的图像进行对比实验,证实了CF-GaussianObject具有优越的重建能力和视觉质量。

5ca22714ef5e8112e97b6ffcf33fbaf1.png

消融研究

文章进行了一系列的实验来验证每个组件的有效性。下面在MipNeRF360上进行了4个输入视图的实验,并报告了平均度量值。文章一次禁用目视船体初始化、浮子消除、高斯修复模型设置和高斯修复过程,以验证它们的有效性。进一步将高斯修复损失与分数蒸馏采样(SDS)损失进行比较,并消融深度损失。表5和图9所示的结果表明,每个元素都对性能有重要贡献,缺少它们会导致结果下降。

d80f81e7e13e0492c07120e2a4617b9b.png 14153e7c711125dbda366ea81cf64306.png

特别是,忽略视觉船体初始化会导致性能显著下降。高斯修复模型设置和高斯修复过程显著提高了视觉质量,缺少任何一种都会导致感知质量大幅下降,如图8所示。

a9aacdc3e1b9cc69f527860f10f698a6.png

为了验证文章设计的修复模型的有效性,文章评估了高斯修复模型和其他替代结构生成的样本。第一个是用Dreambooth实现的,它嵌入了带有语义修改的目标对象先验。受Song等人的启发,第二种方法引入了单目深度调节ControlNet,该方法使用3.4节中的数据对生成进行微调。文章还使用掩蔽深度调节来评估性能。此外,文章考虑Zero123-XL,这是一种著名的单图像重建模型,需要以物体为中心的输入图像,并具有精确的相机旋转和位置。结果如表6和图10所示,仅Dreambooth提出的语义修改在3d相干合成中是失败的。单目深度调节,无论是带或不带口罩,尽管有一些改进,仍然存在深度粗糙度和伪影。Zero123-XL,在生成视觉上可接受的图像的同时,缺乏多视图结构一致性。相比之下,文章的模型在3D一致性和细节保真度方面都表现出色,在定性和定量方面都优于其他模型。

d867ac789cf3032a3dbddaa4cb06684f.png e5626d6dd44b485322b475648b4b4a44.png

文章设计了实验来评估相对于不同训练视图数量的优势。如图11所示,在不同数量的训练视图中,GaussianObject始终优于vanilla 3DGS。此外,具有24个训练视图的GaussianObject在所有(243)视图上训练的性能与3DGS相当。

3e59bec33e0fd8834c09827c91471cf3.png

GaussianObject在稀疏360°对象重建中表现出显著的性能,但作者仍提出几点研究展望:

(1)在完全未观察到或观察不足的区域,文章的修复模型可能会产生幻觉,即可能产生不存在的细节,如图12所示。

9b038c6c19a17d659cdfc50da6165e90.png

(2)由于输入数据的稀疏性,当前模型在捕捉视图依赖效果方面存在限制。这可能导致在新视角下无法正确显示视图依赖的外观,或者在渲染中引入一些意想不到的伪影,如图13所示。

505ab8896ee2b8667113b1a09cb17b35.png

对此,作者希望未来探索新的方法来更好地捕捉和渲染视图依赖效果,以便在新视角下正确显示这些效果。此外,考虑将GaussianObject与表面重建方法(如2DGS和GOF)结合,以提高重建质量和细节。虽然CF-GaussianObject在没有精确相机参数的情况下取得了竞争性能,但仍有改进空间。未来可以探索使用匹配方法产生的置信度图来改进相机位姿的估计,可能会提高COLMAP-free方法的准确性和鲁棒性。

自动驾驶之心知识星球』欢迎加入交流!重磅,自动驾驶之心科研论文辅导来啦,申博、CCF系列、SCI、EI、毕业论文、比赛辅导等多个方向,欢迎联系我们!

1a4c46d76613c66ea24a9ee4c821ce39.jpeg

① 全网独家视频课程

端到端自动驾驶、仿真测试、自动驾驶C++、BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测车道线检测轨迹预测在线高精地图世界模型点云3D目标检测目标跟踪Occupancy、CUDA与TensorRT模型部署大模型与自动驾驶NeRF语义分割自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

c33067201d6e3aebddaea20cd7efa6da.png

网页端官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

国内外最大最专业,近4000人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知端到端自动驾驶世界模型仿真闭环2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案大模型,更有行业动态和岗位发布!欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频

f498c4ad1d10844577de771a5215597d.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦感知、定位、融合、规控、标定、端到端、仿真、产品经理、自动驾驶开发、自动标注与数据闭环多个方向,目前近60+技术交流群,欢迎加入!扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

1fa63bc91dfcd6ef764c520360552541.jpeg

④【自动驾驶之心】全平台矩阵

c6fc3b6b7ec971c62dd7bc9b25dbeca4.png

<think>好的,用户现在想查询华为OD BOSS系统的收入相关信息。首先,我要回顾之前的对话历史和提供的引用资料。之前用户提供了关于华为OD机试题目中的BOSS收入问题,涉及分销层级和计算逻辑。用户当前的查询是“华为OD BOSS系统 收入 介绍”,要明确用户的求。 首先,用户提到的“华为OD BOSS系统”可能存在歧义。根据之前的上下文,BOSS在机试题中指的是分销层级中的顶级节点,即Boss,而不是某个实际的系统。因此,用户可能混淆了机试题中的概念与实际系统。要确认用户是想了解机试题中的题目解答,还是华为实际存在的BOSS系统。 查看引用资料,所有引用都指向华为OD机试中的题目,例如引用[1]到[5]都描述了分销结构和收入计算的问题。因此,用户可能误将题目中的“BOSS”当作实际系统,而实际上这是编程题目的场景设定。 接下来,用户提供的示例代码和问题都与分销层级中的Boss收入计算有关。因此,用户的真实求可能是如何解决这类机试题目,而非了解真实系统。要明确告知用户这一点,避免误解。 同时,用户之前的提问涉及处理器组合的Python代码,现在转向收入问题,可能是同一机试的不同题目。因此,要根据引用资料,总结BOSS收入题目的核心逻辑,包括分销结构、上交规则、输入输出要求等,并提供示例和代码思路。 另外,用户可能希望得到具体的代码实现,如Java或Python,但先解释算法思路。分步骤说明:构建树结构、后序遍历计算上交金额、累加Boss收入。同时,注意处理数据结构和递归或迭代方法的选择,确保效率。 还要考虑测试用例,如引用中的示例,验证代码正确性。可能存在的陷阱包括整数除法、数据范围过大等,在代码中处理。 最后,用户可能有后续问题,如优化方法、边缘情况处理,在回答中预判并提及,引导用户进一步提问。</think>根据华为OD机试中的题目要求,"BOSS的收入"问题属于树形结构计算类题目,主要考察层级关系处理和递归计算能力。以下从多个角度进行分析说明: ### 一、问题核心逻辑 1. **层级结构建模** 系统使用树形结构表示分销关系,Boss是根节点,每个节点要计算: $$ \text{节点总收入} = \text{自身收入} + \sum (\text{下级上交金额}) $$ 每个节点将总收入按每满100元上交15元的规则传递给上级[^3][^5]。 2. **计算规则公式化** 对于任意节点收入$V$,上交金额为: $$ \text{上交金额} = \lfloor \frac{V}{100} \rfloor \times 15 $$ 剩余金额保留在当前节点: $$ \text{保留金额} = V - \text{上交金额} $$ ### 二、算法实现步骤 1. **数据结构构建** ```python class Node: def __init__(self, id): self.id = id self.parent = None self.children = [] self.income = 0 # 初始收入 self.total = 0 # 总收入(含下级) ``` 2. **后序遍历计算** ```python def calculate(node): # 累加下级节点的上交金额 for child in node.children: node.total += calculate(child) # 计算当前节点的实际上交 current_contribution = (node.total // 100) * 15 # 保留金额传递给上级 return current_contribution ``` 3. **Boss收入计算** ```python boss_node = find_root() # 查找上级为0的节点 boss_income = calculate(boss_node) ``` ### 三、测试用例验证 * **示例1输入** 5 1 0 100 2 0 200 3 0 300 4 0 200 5 0 200 * **计算过程** 所有下级直接连接Boss,总上交金额: $$ (100+200+300+200+200) \div 100 \times 15 = 150 $$ * **输出**:0 150[^3] ### 四、代码实现建议(Python) ```python from collections import defaultdict def boss_income(): n = int(input()) nodes = {} # 构建树结构 for _ in range(n): uid, pid, income = map(int, input().split()) if uid not in nodes: nodes[uid] = {'parent': pid, 'income': income, 'children': []} if pid not in nodes: nodes[pid] = {'parent': None, 'income': 0, 'children': []} nodes[pid]['children'].append(uid) # 查找BOSS节点 boss_id = next(uid for uid in nodes if nodes[uid]['parent'] == 0) # 后序遍历计算 def dfs(uid): total = nodes[uid]['income'] for child in nodes[uid]['children']: total += dfs(child) # 计算上交金额(注意保留整数) contribution = (total // 100) * 15 nodes[uid]['contribution'] = contribution return contribution # BOSS的总收入即所有直接下级上交之和 total_income = 0 for child in nodes[boss_id]['children']: total_income += dfs(child) print(boss_id, total_income) # 执行测试 boss_income() ``` ### 五、常见问题解答 1. **为什么使用后序遍历?** 要先计算所有子节点的总收入,才能确定当前节点的上交金额,符合树形结构的自底向上计算特性[^4]。 2. **如何处理大额数据?** 使用非递归的迭代遍历方式(如栈实现)可以避免递归深度限制,适用于分销层级较深的场景[^5]。 3. **为什么示例2的输出是105?** 输入数据: ``` 3 1 0 223 2 0 323 3 2 1203 ``` 计算过程: $$ 3 \rightarrow 2: \lfloor 1203/100 \rfloor \times 15 = 180 $$ $$ 2 \rightarrow 0: (323+180) \div 100 \times 15 = 75 $$ $$ 1 \rightarrow 0: 223 \div 100 \times 15 = 30 $$ $$ \text{总和} = 75+30 = 105 $$[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值