项目主页:Ditto: Building Digital Twins of Articulated Objects from Interaction
文章目录
- 1. 为什么要做这件事
- 2. 做了件什么事
- 3. 之前的工作(Related work)
- 铰接模型估计
- 铰接物体的3D重建
- 隐式神经表达
- 物理仿真中的铰接物体
- 4. 问题定义
- 5. Pipeline
- 双流编码器
- 隐式解码器
- 几何隐式解码器
- 铰接隐式解码器
- 分割
- 铰接关节参数
- 6. Loss
- Geometry loss
- Joint loss
- 7. 显式铰接物体的提取
- Part-Level的网格提取
- 全局铰接模型提取
- 8. 实验
- 几何重建和铰接axis的估计结果
- Real World构建数字孪生Result
1. 为什么要做这件事
这篇论文想做的事情是,将我们物理世界的铰接物体,以交互的方式获得原始数据,通过一套成熟的系统,在数字世界中对其进行建模(数字孪生)
之所以要做这件事,是因为随着AI模型的增长,它们需要大量的、易于获得的训练数据,且对于这些数据而言,真实感是关键,只有数据是真实的,才能够弥补real and virtual worlds之间的gap。目前数字世界中的物体严重依赖于设计者和工程师的设计,限制了数据的可扩展性,所以基于视觉信息在数字世界中估计(axis)和重建铰接物体就显得尤为重要
2. 做了件什么事
完成了三个挑战:部件分割、部件重建、铰接信息估计
通过implicit occupancy decoder和implicit segmentation decoder来将3D坐标和局部特征匹配,以获得其occupancy(占用率)和part segmentation label(部件分割的标签),并听过另外一组implicit decoders来获得相关查询点的铰接参数(如axis的指向等信息)
3. 之前的工作(Related work)
铰接模型估计
之前从单个观察中学习铰接相关的信息可能会导致二义性,所以目前开始有方法从运动生成的(也就是交互式)的视觉中来进行学习(本文就是对这种交互式数据进行处理来获得铰接参数并进行重建)。
传统方法的输入是一系列的观察,依赖于一些手工设定的特征来追踪部件运动,随着深度学习的发展,人们开始使用感知数据来进行估计,但之前的大部分工作都focus在预测铰接参数,本篇论文除了估计铰接参数外,还重建了完整的3D几何。
铰接物体的3D重建
之前的工作从运动中重建物体的完整点云,并使用基于特征的对应关系来进行点云分割。
后来,逐渐有一些方法在进行部件分割的同时预测铰接参数,但这些方法是在点云上进行部件几何的推理,缺乏了物理模拟所需要的mesh信息。
还有一系列方法是使用铰接骨架来重建铰接物体,但是这些表达在物体部件上关于运动的约束比较松散,不够严谨。
数字孪生要求要有精确的部件几何、精确的铰接参数等信息,才能够在物理引擎中被模拟。
与这篇工作最相近的A-SDF与本篇工作区别在于,本工作进一步显式建模了铰接物体中的铰接信息,从而可以在物理交互的虚拟环境中被使用。
隐式神经表达
隐式神经表达的工作将3D shape编码成隐式函数的一个等值面。这种隐式函数可以通过深度神经网络进行拟合,从而以一种连续、光滑的方式在high resolution的情况下表示复杂的shape。
一些方法为了更好地可拓展性和获得更多的细节,它们学习了局部隐式解码器、以局部特征为条件隐式表达,用以取代那些以global shape feature为条件的隐式解码器。
这篇文章中扩展了ConvONets中的编码器,并使用一个混合模块来处理两个输入流。
物理仿真中的铰接物体
物理仿真是具身智能研究的一个重要工具。从目前的发展趋势可以看出,这些方向的学习正在从静态3D场景逐步转向那些能够使机器人和物体进行交互的物理仿真环境。
可交互的3D资源就是这些仿真的关键。已经存在的3D资源大部分依赖于3D艺术家的创作和改进,或者使用程序进行生成。
本文建立了一种交互式的,能够从日常铰接物体视觉观察中直接建立数字孪生对象的方法。能够潜在提升获取真实交互式3D数据的速度。
4. 问题定义
该篇文章解决了通过交互前后的一对(前、后构成一对)传感器观察来重新创建铰接物体可交互的数字孪生对象。 这篇文章主要估计铰接物体的部件几何和运动铰接,同时基于真实世界的数据来给物理属性设置一些默认值。
给定一个未知类别的铰接物体,假设在交互前后只有一个part发生了移动,则移动的part称为mobile part。问题的输入是一对点云观察
P
1
,
P
2
∈
R
N
×
3
P_1,P_2∈R^{N×3}
P1,P2∈RN×3,
N
N
N是点云的数量。问题的目标是:分割和重建静态、动态部件的3D几何,估计连接两个部件关节的铰接参数,以及关节状态前后的相对变换。
对于所说的“关节的铰接参数”,考虑了两种运动情况:旋转关节和平移关节(revolute and prismatic joints)。
平移关节被定义为:平移轴
u
p
∈
R
3
u^p∈R^3
up∈R3,关节状态
c
p
c^p
cp用于表示前后两个观察之间的相对移动距离
旋转关节被定义为:旋转轴
u
r
∈
R
3
u^r∈R^3
ur∈R3,旋转轴上的pivot point(轴心点)
q
∈
R
3
q∈R^3
q∈R3,关节状态
c
r
c^r
cr用于表示前后两个观察之间的相对旋转距离
5. Pipeline
Ditto的pipeline用一个双流编码器来混合两个输入点云,用多个隐式解码器来解码几何和铰接。
双流编码器
在双流编码器中,首先提取输入点云的特征并进行特征混合。
使用了一个注意力层来混合两个输入点云的两组特征,需要注意的是,操作的复杂性是与点云数量呈正相关、二次增长的。
因为原始点的数量会比较多,如果全部丢到注意力层里面就会使得计算量变得过于庞大,所以这里使用下采样的点云(
N
→
N
′
N→N'
N→N′)在注意力层进行特征混合。再让混合后的特征,经过两个解码器,将下采样点云的特征恢复成输入点云大小的特征(类似于一个特征上采样吧)。这里之所以要让混合的特征通过两个解码器进行解码,是因为想让两组解码器focus不同的特征,几何重建更主要利用的是一些静态的观察,而铰接信息的估计依赖于两个观察之间的对应关系。
接着,将这一步得到的这些dense point features:
f
a
r
t
f_{art}
fart和
f
g
e
o
f_{geo}
fgeo分别投影到2D特征平面和类似于ConvONets中的体素网格,点落入相同的像素网格或体素网格后通过最大池化操作获得区域点的特征。这里将
f
a
r
t
f_{art}
fart投影到2D平面可以在保证求解效果的同时减小计算量,
f
g
e
o
f_{geo}
fgeo仍然在3D空间中进行计算是因为几何重建需要更多的细节和更密集的特征网格来进行局部推理。
隐式解码器
几何隐式解码器
该解码器的任务就是将点坐标
p
∈
R
3
p∈R^3
p∈R3mapping到占用概率
o
(
p
)
o(p)
o(p)上,占用为1,不占用为0
建立一个解码器,以点的局部特征(通过三线性插值获得)和空间坐标作为输入,输出占用率。
铰接隐式解码器
将物体内部的任意的输入 p i n p_{in} pin分别输入到分割解码器和铰接解码器中获得分割标签和铰接关节参数。只考虑物体内部的点是因为铰接参数只在这些部分上才有意义。类似于占用率解码器的输入,这里使用双线性插值从平面上获得局部特征,再和空间坐标一起输入到各个解码器中。
分割
对于分割解码器而言,输出是一个binary的结果,0代表静态部分,1代表动态部件。
铰接关节参数
之所以共享分割和铰接参数预测的特征,是因为铰接参数和分割类似,二者都可以从运动中推理出来。
对于关节参数解码器而言,尽管关节是铰接物体的全局属性,但这里仍然使用逐点的表示,从而更好地利用逐点的结构特征,通过投票获得一个鲁棒的估计。
prismatic joint使用一个3D单位向量
u
p
u^p
up表示轴的位置,使用
c
p
c^p
cp表示交互移动的距离
revolute joint与prismatic joint的区别在于,除了有表示轴位置的
u
r
u^r
ur和表示转动角度的
c
r
c^r
cr以外,还有一个pivot point
p
p
p,因为对revolute joint而言,axis的位置是很重要的。这里follow之前的工作,将axis的位置定义在输入点
p
i
n
p_{in}
pin到axis上的投影,
d
p
i
n
r
d^{r}_{p_{in}}
dpinr表示投影方向,
h
p
i
n
r
h^{r}_{p_{in}}
hpinr表示投影距离。
首先通过解码器获得关节特征p_jtype,接着根据得到的关节特征,走不同的通道得到最后输出的结果。
6. Loss
Geometry loss
运用二分类交叉熵(Binary cross-entropy,二进制交叉熵)loss对占用率和分割做loss。有原始数据的GT occupancy和segmentation label,这里做一下监督训练
Joint loss
这部分有三个部分的loss:预测铰接类型、prismatic和revolute参数的预测都需要各自的loss
预测铰接类型:使用一个BCE loss即可,有joint type的GT,做监督训练
prismatic joint:
- 关于axis的监督有两个:cosine相似性作为loss,来评估预测的距离;简单的l1 loss来优化距离的预测
- 使用一个基于位移的loss来衡量predict状态和gt状态之间的差异:xxx,也就是用axis朝向乘上移动距离,与GT做loss
revolute joint:
-
使用了类似于prismatic joint中axis的loss来监督axis的方向和旋转的角度
-
对于投影方向和投影距离分别也像这样使用了cosine相似性和l1 loss作为监督
-
上面那种基于位移的loss也可以在此处被使用:对于每个点 p i n p_{in} pin,计算预测和GT的在两次交互之间的旋转矩阵。axis上估计的pivot点 q p i n = p i n + h p i n r d p i n r q_{p_{in}}=p_{in}+h^r_{p_{in}}d^r_{p_{in}} qpin=pin+hpinrdpinr,也就是,pivot点=输入点加上投影方向乘以投影距离。接着,交互前后的位移就可以通过 l p i n = R p i n ( p i n − q p i n ) + q p i n l_{p_{in}}=R_{p_{in}}(p_{in}-q_{p_{in}})+q_{p_{in}} lpin=Rpin(pin−qpin)+qpin计算,真实的位移也可以通过GT参数进行类似计算,从而做一个位移的loss:
-
类似于ScrewNet,旋转矩阵上也做了一个loss:
7. 显式铰接物体的提取
Part-Level的网格提取
为构建部件级的网格,使用分割查询结果来mask occupancy结果,再利用Marching Cube等技术来获得per-part表面网格
全局铰接模型提取
使用投票策略来聚集密集的铰接关节预测。在提取part网格的过程中,可以采样多个mesh内的点和他们对应的label。
因为物体的运动决定了铰接模型的类型,所以作者只让运动部件内部的点通过投票来定义铰接关节。
对于两种类型的铰接axis和铰接state(移动距离)的预测,使用了mobile parts中的点的平均预测。
对于旋转的铰接axis,pivot point是通过每个移动部件点预测出来的投影方向和投影距离进行计算的。
平均所有mobile points的结果作为最终结果,并求解铰接axis上的pivot point