【计算机图形学】OakInk: A Large-scale Knowledge Repository for Understanding Hand-Object Interaction

对OakInk: A Large-scale Knowledge Repository for Understanding Hand-Object Interaction的简单理解

1. 为什么要做这件事,做了件什么事

想要学习人类如何操纵物体,需要两个方面的知识理解:一方面是理解物体的功能性,另一方面是基于功能性的人类交互。现有的数据集缺乏这两个方面的综合知识。

在本篇论文中提出了一个多模态和具有丰富注释的知识库OakInk,用于手-物交互的视觉和认知理解。

首先,搜集1800个普通的家具用品,并给他们注释功能性,构建知识基础Oak。

其次,给定功能性后,给Oak中的100个选定物体进行丰富的人类交互注释。

最后,将这100个选定物体的交互通过一种新方法Tink来迁移到虚拟对应部件上。

其中,记录和迁移手部交互构建了第二个知识基础Ink。

OakInk工包括50000个功能性感知和以意图为导向的手-物交互。同时使用OakInk在姿态估计和抓取生成两个任务上进行基准测试。另外,提出了两个OakInk的实际应用:基于意图的交互生成和手部切换生成(可能没翻译准确,有点怪怪的看不懂)。

2. 介绍

让机器去理解和模仿人类的行为,是视觉领域长期以来的问题。从这个问题中衍生出了许多任务,其中,学习人类与物体交互的方法是最基础、且最具有挑战性的一项任务。很多工具的设计都是为了实现某个特定的功能,人类却能够很容易地根据物体启发或经验来操纵它们,而这些经验对于机器人而言是很难获取的。直到最近数据驱动的方法出现,促进了在人类操纵方面的研究。之前的工作尝试去提升机器做复杂任务的能力,如手-物定位,姿态估计,抓取生成和动作模仿。

学习人类操纵需要考虑两个方面为:1) 物体的功能性;2) 基于物体的功能性,人手如何与物体交互。功能性的定义在不同任务下是不一样的,本文的定义为物体的功能(这句话我翻译的不好,可以自己理解下,很简单:While the word “affordance” has different for formulations in different tasks, in this paper, we denote “affordance” as the functionality of object.)。从2019年来,至少发布了9个关于手-物交互的数据集:…。然而这些数据集缺乏对物体功能性的综合感知,以及手和物体的交互的感知。首先,真实世界数据集仅包含较少的物体和手部交互,例如DexYCB仅捕捉了20个物体,在ContactPose的2.9M 张图像中仅有2.3k张捕获了交互。其次,在GraspIt中,虽然合成数据可以通过抓取模拟来拓展到更多数量的抓取交互,但生成的抓取既没有反映人类交互的分布,也没有考虑物体自身的功能。为了理解人类是如何操纵物体的,作者提出为机器国建两方面的知识:以物体为中心和以人为中心的感知。构建了两个相关的知识库。一个是Object Affordance Knowledge(物体功能性知识,Oak),在一张知识图内部提供了物体功能的综合性描述;另一个是Interaction Knowledge base(交互知识,Ink),这部分搜集了多个人手交演示,并根据物体的功能性提出了物体的操纵方法。

为了构建 Oak base ,首先搜集了1800个可以进行单手操纵的家居物体。Oak base 来源于四个方面:1) 从在线供应商处搜集的物体; 2) ShapeNet模型; 3) YCB; 4) ContactDB物体。其次,通过详尽回顾(exhaustively reviewing)上述来源的物体,构建知识图,如图2所示,用两种类型方式来排列对象,称为taxonomy(分类)和attribute(属性)。这种物体知识图使得可以方便地聚类具有相似功能性的物体。

在这里插入图片描述

为了构建 Ink base,搜集人类基于功能性进行的手-物交互演示。从 Oak base 中选择了100个具有代表性的物体,邀请12个人进行演示,并建立多传感器平台MoCap(如图3所示)进行记录。记录序列构成了包含230064张RGB-D图像的真实世界图像数据集,捕捉了12个物体,每个物体最少有五个以意图为导向的手部交互。出现在记录序列中的物体被称为“源”物体。接下来,给定真实世界的人类演示,目标是迁移“源”物体的经验到那些具有相似功能性的对应物体(目标物体)部件上。这种手部交互的迁移不仅保证了物理的合理性,还保持了意图的一致性,同时匹配牧宝物体的大小、形状和功能(如图1所示)。为此提出了一个学习拟合混合的方法:Tink (Transferring the Interaction Knowledge),在物体之间迁移交互知识。Tink由3个模块组成:隐式形状插值模块、显示接触映射模块、交互姿态细化模块。通过Tink,作者将 Ink base 中的手-物交互综述拓展到了50000个。

在这里插入图片描述
在这里插入图片描述
通过连接 OakInk ,构建了大规模的知识库 OakInkOakInk 的好处有三个方面:1) 从两个方面提供了用于理解手-物交互综合性知识:物体功能性和人类经验;2) 包括了基于图像的人-物交互和基于几何的人-物交互两个大规模的数据集;3) 提供了丰富的注释,包括手和物体的姿态,扫描的物体模型,功能性,细粒度的接触和应力模式,意图标签。 OakInk 可以使两个方面的研究者受益:1) 计算机视觉CV领域中的姿态估计、shape重建、动作识别;2) 计算机图形学CG领域的Grasp生成和动作合成。在上述话题中,作者认为姿态估计和姿态生成是与他们研究兴趣最相关的工作。除了使用 OakInk 对三个现有任务进行基准测试外,还提出了两个新任务:一个是基于意图的手部姿态生成,另一个是人-人手部姿态跨生成(human-to-human handover generation,这里翻译的可能不太准确,暂时还没理解这个任务)

文章的贡献主要有三个方面:

  • 构建 OakInk ,一个大规模的知识集用于理解手-物交互;

  • OakInk 中,提出了新的方法 Tink 来将交互知识迁移到具有相似功能性物体上;

  • 使用 OakInk 对三个现有任务进行基准测试,额外提出两个新任务:生成面向指定目标的、真实可信的手部姿态

3. 相关工作

3.1 手-物交互(Hand-Object HOI)数据集

当前HOI数据集可以基于数据源分类为真实世界数据集和合成数据集。ObMan和YCBAfford是合成数据集,利用grasp模拟器来合成或标记static grasps。真实世界数据集基于他们收集的注释分为三类:1) 基于标记的数据集,借助于手动安装的磁性传感器或反射标志物来搜集手部姿态;2) 自动无标记数据集,综合检测、分割和姿态估计等方法中的视觉线索来自动获得标记;3) 利用人类注释的方式来标记手和物体的2D pose。

作者的这篇论文中,通过2D特征点来搜集3D手部姿态注释,并在多视角内优化他们。对于物体姿态,在一个同步的MoCap系统中记录其表面附着的反射晶片。在后面的章节中将展示现有数据集的综合比较和统计数据结果。

3.2 手-物交互的接触

为了捕捉交互,之前的方法使用基于测量的设备,如力传感器,视觉传感器,热摄像机,或者通过真实的姿态追踪来计算真实可信的接触。接触提供丰富的线索,以在交互中推理相连的手-物姿态。最近的方法利用接触来帮助重建和合成任务重的抓取(抓取重建?抓取合成?)优化。在这篇论文中,作者通过精准的姿态追踪来推理接触区域和力模式。在后面小节中,将这些接触匹配到虚拟物体上,并优化基于接触的姿态。

3.3 手-物交互的姿态

姿态估计是理解人类如何与物体进行交互的基础任务。以前的工作要么只关注手部姿态,要么只关注物体姿态。Hasson等人首次提出了联合手-物的姿态估计方法,brought the renaissance in this area(在这个领域进行了文艺复兴?)。其他HOI的流行任务包括抓取姿态的生成。研究者深入研究了基于图像或shape观察的综合抓握。许多派生任务如:动作识别、模仿学习、遥控、人-机手部跨交互都受益于所提到的手部姿态和物体姿态估计任务。在这篇论文中,作者使用他们的数据集在经典姿态估计和姿态生成的任务基线上进行测试,同时引入了两个新的任务来探索给定意图和切换场景下的生成模型。

4. OakInk的构建

OakInk 由两个相互关联的知识集组成:一个是以物体为中心的Affordance知识 Oak base ,另一个是以人为中心的交互知识 Ink 。想要将两种知识结合起来,需要回答三个问题:1) 如何表示物体功能性?2) 如何记录人类基于物体功能性的操纵经验?3) 如何将记录的交互迁移到其他具有相似功能性的物体上?这三个问题分别在三个小节中回答,第一小节将描述 Oak base 的构建,第二小节将描述记录和注释人类演示,第三小节将引入新的交互知识迁移方法。

4.1 以物体为中心的功能性知识基础Oak base

文章关注那些日常生活中出现的、被设计为单手操纵的物体。同时搜集了1800个符合这些目标的家居物体,这些物体来源于4个方面。作者将所有的物体都构建成了知识图(如上图2所示),知识图和物体的扫描模型构成了 Oak base 主干。对于这些物体,考虑如何排列物体(分类)和如何描述物体的功能性(属性)。 Oak base 中的分类和属性应达到:1) 一组人基于他们共有的经验,达成一致的分类共识;2) 可扩展性,新物体和新属性可以被很容易地在现有知识基础中拓展。经过对搜集物体的理解,在有限类别内的分类和属性的描述可以被概括如下:

分类。将 Oak base 中的物体分成两类。首先定义由两个类组成的top-level分类,分别是操纵工具(maniptool)和功能工具(functool)。定义如下:

  • mainptool类包括了那些被用于操纵(影响)其他实体的物体。这些物体通常包括一个把手(用于抓取)和一个末端执行器(用于影响其他的实体)。如马克杯、刀、钳子、钻头。

  • functiool类包括了那些含有自身功能,不需要末端执行器的物体。如相机和手机。

在这个分类中,物体的类别被分为了具体地子类别。 Oak base 的类别总数为32。

属性。Affordance(上面我都翻译成了功能性)由Gibson引入,作为物体功能性特征的描述。在CV和机器人领域,Affordance被以不同的意义进行表示。在这篇文章中,Affordance被表示为物体的功能性。Affordance被表示为一组属性集合。每个属性由一个包含了 多个 描述部件功能性 描述性原语 的部件构成(Each attribute contains a part segmentation with one or several descriptive phrase(s) that describe the part’s functionality)。

例如,刀被分成了刀刃和把手两个部分,刀刃的原语为<切割,something>,把手的原语为<拿住(被), something>。

邀请10个不同背景的志愿者来给部件做注释,并通过投票决定结果。除了让志愿者分配原语外,还鼓励志愿者去总结出不同物体类别之间的部件相似性。

4.2 以人为中心的交互知识基础Ink base

这节讲述如何搜集人类演示、构建Ink base

4.2.1 硬件设定

(见正文)

4.2.2 交互序列采集

大概是让被试者根据给定意图做操作,意图包括:use, hold, lift-up, hand-out, receive,详细可以见文章中解释的释义

4.2.3 数据注释

人类演示过程中,作者对手的poses和物体的contact pattern最感兴趣,因为它们表示了人类操纵物体的经验。

Object Pose。在MoCap系统 S m S_m Sm中通过表面附着的反射标记追踪了物体的6DoF pose,见图4左侧。接着将物体的pose通过系统校准从 S m S_m Sm迁移到 S c S_c Sc

Hand pose and Geomerty。依赖手动标记的多视角2D手部特征点来获得3D手部关键注释。每只手有21个特征点。为描述三维空间的hand pose和geometry,使用MANO手模型,MANO通过姿态 θ ∈ R 36 \theta∈\R^{36} θR36和形状 β ∈ R 10 \beta∈\R^{10} βR10的参数表示一个关节和可变形的手。在本文后面,将“手的姿势”表示为21个关节位置:在 S c S_c Sc系统中的 P h ∈ R 21 × 3 P_h∈\R^{21×3} PhR21×3。有 θ \theta θ β \beta β,我们可以通过一个MANO层 M ( ⋅ ) M(·) M()覆盖手部姿势 P h P_h Ph和网格顶点 V h ∈ R 778 × 3 V_h∈\R^{778×3} VhR778×3。解 P h P_h Ph V h V_h Vh被公式化为一个优化任务,该优化任务最小化多个手工设计的损失函数。包括3D-2D特征点重投影损失、几何一致性损失、时间平滑损失、剪影损失。这里仅描述第一个:对于在第 v v v个视角下第 j j j个2D手部特征点 p ^ j , v \hat{p}_{j,v} p^j,v P h , j P_{h,j} Ph,j是第 j j j个3D手部姿态的估计, T v T_v Tv K v K_v Kv是第 v v v个视角的相机的外参、内参,重投影损失为:

在这里插入图片描述

其中 w j , v w_{j,v} wj,v是特征点 p ^ j , v \hat{p}_{j,v} p^j,v的可见性。

接触和应力模式。使用17 hand parts segmentation and part-level anchor location。基于GRAB中高效的接触启发,自动给与物体表面的顶点<25mm的点分配一个part label。 The vertices with a labeled hand part form the contact regions of the object. 在手和物体之间的物理接触位置通常会发生弹性变形,stress和strain将遍布整个变形区域。尽管MANO和刚性物体模型都无法反应这一行为,作者通过添加一个ring-shape spreading并减少接触区域的值来模仿这种压力模式,并称之为contactness。如图4最右侧图所示,contactness在最接近Anchor点时为1,向外扩张逐渐变小,直到大于25mm后变为0。

在这里插入图片描述

4.3 Tink:交互知识迁移

这部分描述如何迁移将真实世界的手部交互迁移到同一类别的虚拟对应物体(在 Oak base 中搜集的)上。交互以人类演示的形式记录。迁移的交互应该在接触、姿态、意图和人类感知上与原始交互保持一致。然而,因为物体有多样化的形状和大小,直接的姿态复制会导致很多失败的结果,如图5左侧所示。为此提出了一种混合学习拟合方法:Tink用于迁移交互知识。Tink由3个顺序模块组成,分别称作形状插值、接触匹配、姿态优化。

在这里插入图片描述

将人类演示的物体称为物体,将 Oak 中的虚拟物体称为目标物体。记录序列仅有一种类型的手-物交互(handover sequence有两种),作者手动选择1(或2)个稳定的相互作用姿势来表示每个序列。这些选择的手部姿态作为姿态,用于交互迁移。最后将选定的交互集称为 OakInk-Core

4.3.1 隐式形状插值

一旦确定要把交互从源物体迁移到新物体上,一个直接的问题是如何表达物体形状并执行连续的物体变形。为了回答这个问题,作者将物体形状通过隐式函数SDF表示,SDF是自然连续的。现在的问题变成了如何在源物体和目标物体的SDF之间执行形状插值。为了解决这个问题,采用了神经生成模型DeepSDF,它萌购将复杂的3D形状映射到连续的latent space中。使用DeepSDF的好处包括:

  • 可以获得复杂形状的紧凑表示,这种紧凑表示称为shape vector;

  • 可以在latent space中插值shape vector进行精确的形状插值;

  • 在后面的章节中,可以通过SDF查询手部的点,若为负值说明手-物发生了渗透,可以对发生渗透的位置坐惩罚;

首先将所有的元物体和目标物体的SDF送入到DeepSDF中训练,一个类别训练一个模型。接着在源物体和目标物体在latent space中的shape vector中做插值。通过插值可以采样等分的位置来获得结果 N i t p l N_{itpl} Nitpl,并通过解码这些shape code,使用Marching Cube重建物体表面。 N i t p l N_{itpl} Nitpl是连接源和目标的路径。

4.3.2 显式接触映射

由于直接的hand pose复制会导致失败,所以需要找到一种在源、目标和中间插值状态物体上共享的信息。比起pose,contact region在形状变化的情况下更能展示其不变性。从源物体开始匹配接触区域,通过所有插值状态到达目标物体。由于插值相邻两帧状态差异小,几乎可以忽视掉第i和第i+1个物体的变化。在图5中,不同的手指接触区域都涂上了不同的颜色。衡量效率和精确度情况下,插值10个中间状态就已经足够了。接着匹配第 i i i个物体的顶点接触标签到 i + 1 i+1 i+1上最近的顶点,在每一步下,采用iterative closet point来连接对应顶点。

4.3.3 迭代姿态细化

最后一个模块将源物体的交互手部姿态匹配到目标物体的对应部件上。随着交互被表示为称作接触区域的物体表面语义,pose mapping的执行是通过强制源物体和目标物体之间的接触一致性实现的。pose mapping被作为一个迭代优化的过程,优化过程中的变量为新迁移手的pose θ \theta θ,shape β \beta β和手腕位置 P h 0 P_{h_0} Ph0

然后是一些优化的损失。一个是SDF的惩罚损失,用来解决手-物渗透问题;一个是直接优化关节旋转容易发生anatomical abnormality问题,因此采用了axial adaptation,大概是约束一下旋转之类的;还有一个是接触面一致的损失。详细看文章的介绍,有的不太好翻译。

感知估计。让五名志愿者评估迁移后的动作是否与原有动作保持相同意图,并考虑是否合理,只保留志愿者认为迁移成功的结果。

5. 240409重读OakInk总结的一些东西

物体类别1) 在Top-level中分成了functool和maniptool。前者表示自身集成功能的类别,后者表示操纵这些类别可以作用于其他实体;2) 每个Top-level下又细分为多个具体地类别。如functool中包括手机、相机、香蕉等;又如maniptool中包括刀、笔、螺丝刀等;3) 每个具体的物体下就由Affordance组成。

Affordance。这里的Affordance通过一组attributes表示。每个attributes包括:1) 一个part segementation; 2) 1个/多个描述原语。

对于刀,刀可以分成刀把和刀刃。刀把包括:1) 部件分割; 2) 描述原语:<Cut, Someting>。刀刃包括:1) 部件分割; 2) 描述原语:<Handled (by), Something>。

可以看出,原语的类型是:<动词(+介词), 某物>。

数据搜集。志愿者将手首先平放在桌子上,接着抓起制定物体,并根据给定意图做动作。依赖于人工对图像中的手进行2D 特征点标记,以获得3D关节注释,一只手有21个keypoints

手的姿态和几何。通过MANO来描述手的模型。给定参数 pose θ ∈ R 16 × 3 \theta∈\R^{16×3} θR16×3shape β ∈ R 10 \beta∈\R^{10} βR10 。两个参数输入到MANO模型 M ( ⋅ ) M(·) M() 中获得 21个关节位置 P h ∈ R 21 × 3 P_h∈\R^{21×3} PhR21×3 ,以及网格顶点 V h ∈ R 778 × 3 V_h∈\R^{778×3} VhR778×3。这被作为一个优化任务,通过给定的loss来约束进而优化(暂时理解成一个黑盒好了,有需要再去看具体的MANO实现)。这里的loss包括:

  • 3D-2D重投影损失:

  • 几何一致性损失:

  • 平滑损失:

  • 剪影损失:

接触与压力模式。通过对手进行建模,在物体表面上推理手-部件的接触区域。

根据[55]将手分成了17个parts,每个part都有part-level的anchor(锚点)。

根据[51]自动给物体表面上的顶点分配part label,如果anchor离这些顶点很近(在25mm的阈值内)。这些顶点带有手所属part的标记,从而构建了物体的接触区域。

根据[18]物理接触通常导致手和物体的弹性变形,所以压力在变形区域内是传播的。尽管MANO和rigid object的模型都没能够反映出这个特性,但可以通过ring-shape的方式在接触区域传播和减少值来模仿压力模式,这被本文称为contactness。大概意思就是力以环的方式向周围展开,越远则值越小。在文章中,将最接近锚点的值定义为1,随着距离的增加,值不断减小,在大于25mm时为0。

运动迁移。描述如何将手与物体的交互,迁移到同一类别的虚拟对应物体上。迁移后的交互应保证与搜集交互保持一致的接触、姿态、意图和人类感知。

直接的pose copy会导致在大部分案例下失败。因此提出了混合学习拟合方法:Tink: Transferring the interaction knowledge 。由三个模块组成:形状插值模块、接触匹配模块、姿态细化模块。

形状插值模块。通过插值来获得原始形状到目标形状的连续变换。这里使用隐式函数SDF进行物体形状表示。使用DeepSDF将复杂的3D shape map到一个连续的latent space中,通过在源物体的latent code和目标物体的latent code之间等距离插值,获得一系列的中间形状 N i t p l N_{itpl} Nitpl,实现源物体到目标物体的过渡。

显式接触匹配模块。需要找到在源物体、目标物体、过渡状态下一致的信息。pose在不同状态下是会发生改变的,比起pose,contact regions才是shape变化过程中不变的信息。所以将contact mapping从源物体,逐步通过过渡状态,最终得到目标物体下的contact mapping信息。只要两个过渡状态之间的差异足够小,就可以忽略两个状态之间的形状变化。将第 i i i个物体上顶点的标签映射到第 i + 1 i+1 i+1个物体上最近的顶点。映射是通过ICP(迭代最近点)实现的。

迭代姿态细化模块。将源物体的手交互姿态映射到目标物体上。姿态的映射是通过强制源物体和目标物体之间的接触一致性来保证的。姿态映射被作为一个迭代的过程进行。这个过程中优化的变量包括迁移后手的 pose θ \theta θshape β \beta β,手腕位置 P h 0 P_{h_0} Ph0

首先根据目标物体的接触区域,将手表面的anchor吸引到对应位置。有17个手部锚点 A = { A i } i = 1 17 A=\{A_i\}^{17}_{i=1} A={Ai}i=117,对应于这些锚点的物体表面的顶点为 V h ( i ) = { V h , j ( i ) } V^{(i)}_{h}=\{V^{(i)}_{h,j}\} Vh(i)={Vh,j(i)}。锚点 A i A_i Ai和顶点 V h ( i ) V^{(i)}_{h} Vh(i)的contactness(接触度)为 γ i j \gamma_{ij} γij。则接触一致性损失被表示为: E c o n s i s = 1 ∑ γ i j ∑ A i ∑ V h , j ( i ) γ i j ∣ ∣ A i − V h , j ( i ) ∣ ∣ 2 2 E_{consis}=\frac{1}{\sum\gamma_{ij}}\sum_{A_i}\sum_{V^{(i)}_{h,j}}\gamma_{ij}||A_i-V^{(i)}_{h,j}||^2_2 Econsis=γij1AiVh,j(i)γij∣∣AiVh,j(i)22

直接对关节的旋转 θ \theta θ进行优化可能会导致 anatomical abnormality (解剖异常)。采用[55]中的 axial adaptations (轴向适应)来约束旋转轴和旋转角度。其中 a j a_j aj ϕ j \phi_j ϕj分别表示第 j j j个关节的轴向和角度分量, n j t n^t_j njt n j s n^s_j njs分别表示预定义的扭转和展开方向。则解剖损失为: E a n a t = ∑ j ∈ a l l ( a j ⋅ n j t + m a x ( ( ϕ j − π 2 ) , 0 ) ) ) + ∑ j ∉ M C P a j ⋅ n j s E_{anat}=\sum_{j∈all}(a_j·n^t_j+max((\phi_j-\frac{\pi}{2}),0)))+\sum_{j∉MCP}a_j·n^s_j Eanat=jall(ajnjt+max((ϕj2π),0)))+j/MCPajnjs,这里的MCP表示五个掌骨关节。(对我来说可能有点复杂了)

为了惩罚手-物渗透问题,还引入了额外的渗透损失来惩罚在物体内部的手部顶点: E i n t p = ∑ V h , j − m i n ( S D F O ( V h , j ) , 0 ) E_{intp}=\sum_{V_{h,j}}-min(SDF_O(V_{h,j}),0) Eintp=Vh,jmin(SDFO(Vh,j),0),其中 S D F O ( V h , j ) SDF_O(V_{h,j}) SDFO(Vh,j)计算3D手部顶点 V h , j V_{h,j} Vh,j到物体表面的有向距离值。

整个优化问题为: V h , P h ← arg min ⁡ θ , β , P h 0 ( E c o n s i s + E a n a t + E i n t p ) V_h,P_h←\argmin_{\theta,\beta,P_{h_0}}(E_{consis}+E_{anat}+E_{intp}) Vh,Phargminθ,β,Ph0(Econsis+Eanat+Eintp) V h , P h = M ( θ , β ) + P h 0 V_h,P_h=M(\theta,\beta)+P_{h_0} Vh,Ph=M(θ,β)+Ph0。对每一个pair跑1000轮迭代。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值