Skeleton-Aware Networks for Deep Motion Retargeting

news2024/11/24 15:03:35

Skeleton-Aware Networks for Deep Motion Retargeting解析

  • 摘要
  • 1. 简介
  • 2. Related Work
    • 2.1 运动重定向(Motion Retargeting)
    • 2.2 Neural Motion Processing
  • 3. 概述(Overview)
  • 4. 骨骼感知深度运动处理
    • 4.1 运动表征
    • 4.2 骨架卷积
    • 4.3 保持拓扑的骨架池
      • Unpooling
    • 4.4 Evaluation
  • 5. 跨结构运动重定向(Cross-structural Motion Retargeing)
    • 5.1 问题设置
    • 5.2 网络架构
      • Reconstruction Loss
      • Latent Consistency Loss
      • Adversarial Loss
      • End-Effectors Loss

论文网址:Skeleton-Aware Networks for Deep Motion Retargeting
论文代码:https://github.com/DeepMotionEditing/deep-motion-editing
论文项目:https://deepmotionediting.github.io/retargeting
论文出处:ACM Transactions on Graphics (TOG),2020
论文单位:北京电影学院,特拉维夫大学,北京大学

摘要

  • 我们引入了一种新的深度学习框架,用于数据驱动的骨架之间的运动重定向,这些骨架可能具有不同的结构,但对应于同态图(homeomorphic graphs)。
  • 重要的是,我们的方法学习了如何重新定位,而不需要在训练集中的运动之间进行任何明确的配对。
  • 我们利用这样一个事实,即不同的同态骨架(homeomorphic skeletons) 可以通过一系列边缘合并操作简化为一个共同的原始骨架(primal skeleton),我们将其称为骨架池化(skeletal pooling)
  • 因此,我们的主要技术贡献是引入了新的可微卷积、池化和解池化算子。
  • 这些操作符是骨骼感知的(skeleton-aware),这意味着它们明确地说明了骨骼的层次结构和关节邻接性,它们一起将原始运动转换为与原始骨骼关节相关的深度时间特征集合。
  • 换句话说,我们的算子构成了一个新的深度运动处理框架的构建块,该框架将运动嵌入到一个共同的潜在空间中,由一组同态骨架共享。
  • 因此,重定向可以简单地通过对这个潜在空间进行编码和解码来实现。
  • 我们的实验表明,与现有的框架方法相比,我们的框架在运动重定向以及一般运动处理方面是有效的。
  • 我们的方法还在一个合成数据集上进行了定量评估,该数据集包含应用于不同骨架的成对运动。
  • 据我们所知,我们的方法是第一个在没有任何配对示例的情况下,在具有不同采样运动链的骨架之间执行重定向的方法。

1. 简介

  • 捕捉人类的运动是运动分析、计算机动画和人机交互的基本任务。
  • 动作捕捉(Motion capture,MoCap) 系统通常要求表演者佩戴一组标记,其位置由磁性或光学传感器采样,产生3D骨骼姿势的时间序列。
  • 由于不同的动作捕捉设置涉及不同的标记配置和使用不同的软件,捕获的骨骼可能在其结构和关节数量不同,对应于不同的捕获个体也存在骨骼长度和比例的差异
  • 因此,运动重定向是必要的,不仅可以将捕获的动作从一个关节角色转移到另一个,在相同的动作捕捉设置中,而且可以跨不同的设置。
  • 后者对于使用来自多个不同运动数据集的数据也是必不可少的,以便为各种运动处理任务训练通用的、设置不可知的、数据驱动的模型。
  • 深度神经网络彻底改变了许多计算机视觉任务的最新技术,它利用图像和视频的规则网格表示,非常适合卷积和池化操作。
  • 与图像不同,不同特征的骨骼表现出不规则的连通性。此外,骨架的结构通常是分层的
  • 这些差异表明,CNN中常用的现有算子可能不是分析和合成关节运动的最佳选择。
  • 在本文中,我们引入了一个新的运动处理框架,该框架由用于深度学习的铰接骨架运动表示和几个可微operators组成,包括卷积、池化和解池化(convolution, pooling and unpooling),这些算子在该表示上运行。
  • operators是骨架感知的,这意味着它们显式地考虑骨架结构(层次结构和联合邻接)。
  • 这些 operators 构成了一个新的深层框架的构建块,其中较浅的层学习局部的、低层次的、关节旋转之间的相关性,而较深的层学习身体部位之间的更高层次的相关性
  • 所提出的运动处理框架可用于各种基于运动分析和综合学习的任务。在这项工作中,我们专注于具有相同末端执行器集的骨架之间的运动重定向任务,但从根部到这些末端执行器的运动链上的关节数量可能不同。
  • 这种骨架可以用同态图 (homeomorphic graphs)(拓扑等价)来表示。
  • 虽然运动重定向是一个长期存在的问题,但目前的方法不能在结构或关节数量不同的骨骼之间自动执行重定向。
  • 在此场景中,应该手动指定不同骨架之间的对应关系,这通常会导致不可避免的重定向错误。动画师必须通过操纵关键帧来手动纠正这些错误,这是一个非常繁琐的过程。
  • 先前的研究表明,多模态非配对图像翻译任务可以使用共享潜在空间有效地进行。
  • 在这些工作中,来自不同领域的相同大小的图像被嵌入到一个共享的空间中,例如,图像的内容,与它的风格分开。
  • 在图像上,这样的嵌入使用标准卷积和池化算子很容易实现; 然而,对于具有不同结构的骨骼,情况并非如此。
  • 在这项工作中,我们利用我们的骨骼感知运动处理框架,特别是skeletal pooling,将不同骨骼执行的运动嵌入到共享的潜在域空间中。
  • 我们的关键思想利用了这样一个事实,即不同的,但同态的,骨架可以减少到一个共同的原始骨架,它可以被视为训练数据中所有不同骨架的共同祖先,通过合并成对的相邻边/骨架。
  • 通过骨骼卷积和池化层的交错,共享潜在空间由与原始骨骼关节相关的深层时间特征集合组成。隐空间由每个骨架结构(域)的编码器-解码器对共同学习。
  • 此外,我们利用我们的深度运动表征将运动属性从骨架的形状属性中分离出来,这使我们能够在我们的深度特征空间中使用简单的算法执行运动重定向。
  • 与由静态(关节偏移)和动态(关节旋转)组成的原始、低级的运动表示类似,我们的深层运动特征也分为静态和动态部分。
  • 然而,在原始输入运动中,这两个部分是强耦合的: 特定的关节旋转序列与特定的骨长度和骨骼结构相绑定。
  • 相比之下,我们的编码器学习解耦它们: 潜在代码的动态部分变得与骨架无关,而静态部分对应于共同的原始骨架。
  • 潜空间的这一特性使得只需将 A 编码器产生的潜码输入 B 解码器,就可以将运动从骨架 A 重定向到骨架 B 。
  • 总之,我们在这项工作中的两个主要贡献是:
    (1)一种新的运动处理框架,由深度运动表示和可微分骨架感知卷积、池化和解池化 operators 组成。
    (2)一种具有不同关节数量的拓扑等效骨架间不配对运动重定向的新结构。

2. Related Work

2.1 运动重定向(Motion Retargeting)

  • 经典的运动重定向方法,依赖于对特定运动手工制作的运动学约束的优化,并涉及简化假设。
  • 捕获的运动数据的可用性增加使得数据驱动的方法更具吸引力。所有数据驱动方法都假定源和目标铰接结构是相同的。
  • 一些工作探索了将人类运动数据重新定位到非人形角色。在这种情况下,源骨架和目标骨架可能会有很大的不同,然而,上述方法需要以目标角色的风格捕捉人类主体的动作。
  • 还需要从捕获的动作序列中选择一些关键的姿势,并将它们与相应的角色姿势相匹配,或将相应的运动配对在一起,以学习映射。
  • 与前面提到的方法类似,学习这样的映射需要许多姿势对姿势的对应。
  • 角色的运动风格可以由 身体部位组(groups of body parts,GBPs) 运动来表示。因此,通过建立GBPs之间的对应关系,然后进行约束优化以保持原始运动,可以跨骨架结构实现运动风格的重定向。这需要为每对字符定义GBPs和它们之间的对应关系。
  • 另一个松散相关的问题是网格变形传递问题。

2.2 Neural Motion Processing

  • CNN应用于3D特征动画。运动被表示为三维关节位置的时间序列,卷积核在时间维度上是局部的,但在关节维度(支持包括骨骼的所有关节)上是全局的。因此,关节连通性和骨骼的层次结构被忽略。
  • 此外,使用3D关节位置表示运动并不能完全描述运动,并且需要IK来提取动画。
  • 仅从关节旋转中提取的卷积特征不能完全捕获3D运动,因为当应用于不同的骨骼时,同一组关节四元数会导致不同的姿势。
  • 由于铰接特征的骨架可以用图形表示,因此可以考虑使用图形卷积网络(GCNs) 来处理运动数据。在这种网络中,卷积滤波器直接应用于图节点及其邻居。
  • 另一种不基于卷积的选择是使用深度RNN对时空图进行学习。
  • 这些方法的目标与我们的不同(预测运动,而不是重新定位)。

3. 概述(Overview)

  • 我们的目标是处理具有不同结构但拓扑结构相同的骨骼之间的运动重定向任务。

  • 关键思想是利用拓扑等价骨架可以用同态图(homeomorphic graphs) 表示这一事实。

  • 通过消除沿线性分支的2次节点,一对这样的图可以简化为一个共同的最小图,如图2所示。我们把由简化的公共图表示的骨架称为原始骨架(primal skeleton)
    在这里插入图片描述
    我们的池化operator移除二次节点(绿色点)并合并它们相邻的边。经过几个汇集步骤,不同的骨骼结构,拓扑等效,骨架被简化成一个共同的原始骨架。

  • 这一观察结果表明,编码由不同的同态骨骼执行的运动到一个独立于原始骨骼结构或骨骼比例的深度表征。

  • 由此产生的潜在空间对于具有不同结构的骨骼执行的运动是共同的,我们使用它来学习数据驱动的运动重定向,而不需要任何配对训练数据。

  • 重定向过程如图3所示,使用在运动域上训练的编码器E_A,由具有相同结构的骨架执行,将源运动编码到公共潜在空间中。
    在这里插入图片描述
    非配对跨结构运动重定向。我们的建筑将不同的同态骨架的运动编码到一个共享的深层潜在空间中,对应于一个共同的原始骨架。然后,这种表示可以被解码为同一区域(结构内重定向,intra-structural retargeting)或来自另一个同态区域(跨结构重定向,cross-structural retargeting)的骨骼执行的运动。

  • 从这个空间,潜在的表征可以被解码成一个由目标骨骼执行的运动。

  • 目标骨骼可能具有相同的结构,但骨骼长度不同,在这种情况下,解码由在相同域上训练的解码器D_A完成。

  • 然而,使用在不同域上训练的解码器D_B,运动也可以跨不同的骨骼结构重新定位。

  • 为了实现上述方法,我们引入了一个新的深度运动处理框架,由两个新的组件组成:
    (1)深度运动表征(Deep Motion Representation)。我们将运动序列表示为构成图形的一组时间armatures,其中每个armatures由一个动态的、时间相关的特征向量(通常称为关节旋转)以及一个静态的、时间无关的特征向量(通常称为偏移)表示,如图4所示。
    在这里插入图片描述
    静态-动态结构是角色动画中常见的低级表示,我们的框架沿着处理链保留了它。具体来说,我们使用两个分支(静态和动态)将低级信息转换为运动特征的深层静态动态表示。
    (2)深层骨骼操作(Deep Skeletal Operators)。我们定义了可以应用于动画骨架的新的微分Operators。Operators是骨架感知的,即Operators考虑骨架结构(层次结构和关节邻接)。
    将这些Operators连接到一个可优化的神经网络中,可以学习深层时间特征,这些特征表示浅层的低水平、局部联合相关性和深层的高水平、全局身体部位相关性。

4. 骨骼感知深度运动处理

  • 下面我们将描述我们的运动处理框架,它包括我们的运动表示,以及我们新的骨架卷积、池化和解池化Operators。

4.1 运动表征

  • 我们的铰接特征的运动表示如图4所示。
  • 一个长度为 T 的运动序列用静态分量 S∈RJ×S 和动态分量 Q∈RT×J×Q 来描述,其中 J 为 armatures(骨架)的个数,S和Q分别为静态和动态特征的维数(通常为S = 3和Q = 4)。
  • 静态分量S由一组偏移量(3D向量)组成,这些偏移量描述了任意初始姿态的骨架,而动态分量Q指定了每个关节(相对于运动链中的父坐标帧)旋转的时间序列,由单位四元数表示。
  • 根结点 R∈RT×(S+Q) 与 J 个armatures分开表示(它的子节点),作为一系列全局平移和旋转(方向)。
  • 骨架结构由树状图表示,其节点(nodes)对应关节和末端执行器,而边缘(edges)对应armatures,如图4所示。
  • 因此,对于有J个armatures的骨架,图有J +1个nodes。
  • 连通性由运动链(从根关节到末端执行器的路径)决定,并由邻接表Nd = {N1d, N2d,…, NJd}表达,其中Nid表示树中与第 i 条边的距离等于或小于 d 的边(见图4)。

4.2 骨架卷积

  • 我们在两个并行分支中处理运动: 一个动态分支,产生与时间相关的深度特征;一个静态分支,产生静态深度特征。两个分支都有一个共同的特性,即它们的卷积核考虑骨架结构来计算跨armatures的局部特征,如图5所示。
    在这里插入图片描述
    我们的框架使用由两个并行分支(动态和静态)组成的块执行骨架卷积、激活和骨架池。动态分支将平铺和连接的静态特征作为其骨架-时间卷积层的输入的一部分。静态分支只对静态特性进行操作。
  • 动态分支执行骨架到时间的卷积,在armatures和时间轴上使用具有局部支持的核,如图6所示。
    在这里插入图片描述
    骨架卷积和池化。骨架-时间卷积核(如蓝色和紫色)具有局部支持。
    支撑沿时间轴连续;对于armatures,每个内核的支持是由连通性映射和到内核“居中”的armatures的距离(d=1)决定的(显示在左侧骨架中)。
    沿着时间轴的权值是时间不变的,但他们不是共享在不同的电枢。
    右边的骨架显示了拓扑保持骨架池的结果,它将成对连续的armatures特征合并为单个armatures特征。
  • 请注意,虽然时间轴上的核是暂时不变的(即,核权重是随时间共享的),但它们不是在不同的armatures上共享的。这是因为不同身体部位在不同模式下运动这一实时。因此,每个部分中提取的特征可能是唯一的。例如,我们有理由认为,以脊柱关节为中心的核提取的特征可能与以膝盖为中心的特征不同。
  • 由于运动是通过静态和动态特征的组合来充分描述的,因此卷积核在计算过程中考虑这两个组成部分是很重要的。因此,我们沿着时间轴平铺静态表示 S,并沿着通道轴将结果连接到 Q,从而得到 M∈RT×J×(Q+S)
  • 在实际应用中,通过对每个armatures施加具有局部支持 d 的动态支路中的骨架-时间卷积:
    在这里插入图片描述
    式中,M_j∈RT×(Q+S)表示第 j 个armatures的特征,W_ij∈Rk×(Q+S)×K和bi_j∈RK是K个具有时间支持 k 的学习滤波器,并且 ∗ 表示一个时间的一维卷积。注意,卷积前后的armatures数量是保留的。
  • 图6展示了两个框架卷积核(红色和蓝色),其中每个都应用于不同的相邻armatures组。
  • 与动态分支相比,静态分支只将静态特征矩阵 S 作为输入,而忽略了动态部分。
  • 这是我们做出的选择,以确保产生的深度特征空间的静态组件仅依赖于骨架的结构,而不依赖于任何特定的运动。
  • 因此,静态卷积operator可以看作是(1)中动态卷积operator的特例,其中Q = 0(即S个输入通道),T = 1, k = 1。实际上,这是一个矩阵乘法运算符。
  • 静态和动态分支共享连接映射Nd,这使我们能够递归地将骨架卷积应用于运动序列,同时保持分支之间的维度和语义一致性。
  • 请注意根(root),它被视为一个特殊的armature,有两个动态部分: 全局位置和全局旋转,是由内核卷积,内核的支持包含最近的armature (最高为距离d),以及末端执行器。
  • 以这种方式选择支持是由于全局根运动与末端执行器局部运动之间存在低水平的相关性,例如,在跑步和步行中可以清楚地观察到。这种连接可以将全局信息注入到更深层的动态特性中。

4.3 保持拓扑的骨架池

  • 为了使我们的骨骼感知网络能够学习更高层次的深度骨骼-时间特征,我们接下来定义了armature 上的池化,这是受MeshCNN框架的启发,它合并网格边缘,同时汇集它们的深层特征。
  • 一般来说,池化鼓励网络学习一个有效的基(内核),使它能够提取低维的特征,这些特征被优化以满足指定的损失函数。
  • 对于在常规数据(如时间信号或图像)上的池化,信号结构固有地隐含了邻接性,而内核大小决定了池化区域。
  • 在这种情况下,相应区域的特征被合并(通常是通过平均或取最大值)到一个更小的均匀网格中,其中邻接性也被明确定义。
  • 有各种方法来定义电枢上的池化。我们的池化是保持拓扑的,这意味着池化的骨架(graph),它包含较少的armatures (edges),对于输入是同态的。
  • 具体来说,我们的池化 operator 通过合并相邻边的特征来去除 degree 2 的节点。下一节将介绍这个定义。
  • 池化应用于具有连续的边缘序列的骨架分支,这些边缘序列连接 degree 2 的节点,其中池化区域是不相交的边缘集 {P1, P2,…, PJ≈},其大小不大于p。我们选择最接近根的余数集。在实践中,由于人类骨骼中的连续分支很短,我们始终使用p = 2。
  • 骨架池化应用于静态和动态特征激活,由:
    在这里插入图片描述
    其中pool可以是最大值或平均值。
  • armatures 轴上的骨架池操作符如图6所示。可以看到,例如,从颈部到头部的顺序分支(标记为红色),包含两个armatures ,在最终的骨架中汇集成一个armatures 。
  • 我们的池化可以直观地解释为一种操作,使网络能够学习一个深度骨架,具有更少的armatures ,近似于原始骨架的运动。
  • 注意,在动态分支中,标准的向下采样也被附加应用于时间轴。

Unpooling

  • 解池化(Unpooling)operator是池化的对应项,在不增加信息的情况下增加特征激活的分辨率。
  • 在我们的示例中,Unpooling是基于先前池化骨架的记录结构执行的。
  • 我们通过复制在相应池化步骤中由两条边合并产生的每条边的特征激活来扩展边(armatures )的数量。
  • 由于Unpooling没有可学习的参数,因此通常将其与卷积相结合,以恢复池化操作中丢失的原始分辨率。
  • 注意,在动态分支中,标准上采样额外应用于时间轴。

4.4 Evaluation

  • 我们的框架可以用于各种基于学习的运动处理任务。接下来,我们将根据Holden等人提出的框架的构建模块进行评估,Holden等人引入了用于动作编辑的深度学习框架。它们的构建块由标准的一维时间卷积组成,具有对通道(联合)轴的完全支持,以及仅在时间轴上执行的池化操作符。
  • 为了评估这两个框架的有效性,我们实现了两个自动编码器,它们共享相同数量的组件和类型的层。
  • 在第一种方法中,我们使用了Holden等人提出的标准卷积和池化方法,而在第二种方法中,我们使用了我们的骨架感知算子。
  • 图7描绘了我们的自动编码器的示意图,其中包含一组静态和动态编码器(分别为ES和EQ)和一个解码器D。
    在这里插入图片描述
    网络结构的详细信息如下:
    在这里插入图片描述
  • 两个自动编码器都是用一个重构损失(2范数)来训练的。
  • 为了公平比较,两个自编码器都是用单位四元数表示的关节旋转进行训练的(尽管在原始论文中,Holden等人使用关节位置来表示运动)。
  • 然而,为了避免沿运动链的误差积累,将重构损失应用于由正运动学(FK)从旋转中获得的相应关节位置。
  • 在训练过程中,每个自编码器学习一个代表运动流形的潜在空间: 自然运动的连续空间; 因此,运动去噪可以通过简单地将带噪声的运动投影到流形上,使用训练好的编码器,然后将其解码回时空来实现。
  • 我们通过测量在一组看不见的运动测试集上的重构(l2 loss)来评估自编码器的性能,其中输入被注入了两种类型的噪声:(1)高斯白噪声(µ= 0,σ = 0.01) (2)随机零: 我们随机选择对关节和框架,用零覆盖已有的值(模拟动作捕捉故障)。
  • 图8显示了从视频序列中提取的帧,可以在补充材料中找到,表1报告了两种方法之间的定量比较。
    在这里插入图片描述
    在这里插入图片描述
  • 可以看出,我们的骨架感知算子在两种噪声类型下都取得了更好的性能。
  • 从视频中可以看出,我们的结果显示关节位置的局部误差更小,全局位置也更好,稳定性也更好。
  • 传统的operators忽略了骨架结构,而我们的operators以更结构化的方式对信息进行池化和压缩。

5. 跨结构运动重定向(Cross-structural Motion Retargeing)

  • 运动重定向并不是一个精确定义的任务。当动画师手动将源运动重新定位到目标角色时,他们通常会尝试实现两个主要目标
    (1)结果的运动应该看起来自然和视觉上对目标角色是合理的,同时与原始源运动非常相似。
    (2)关节位置满足感知敏感约束,如脚和手接触,通常通过应用IK优化实现。

  • 下面,我们将解释我们的框架如何实现遵循上述规则的无监督重定向。

5.1 问题设置

  • 我们将运动重定向描述为一个非配对的跨域翻译任务。
  • 具体来说,让M_A和M_B表示两个运动域,其中每个域中的运动由具有相同骨骼结构(分别为S_A和S_B)的骨骼进行,但可能具有不同的骨骼长度和比例。这个公式适合现有的公共动作捕捉数据集,其中每个数据集包含共享骨骼结构和执行各种动作的不同字符。
  • 进一步假设S_A和S_B的骨架结构存在同态性。请注意,这些域是未配对的,这意味着在两个域之间没有显式的运动对(由不同的骨架执行)。
  • 设每个运动 i∈M_A用(S_A, Qi_A)对表示,其中S_A∈S_A为骨架偏移量集合,Qi_A为关节旋转,如4.1所述。
  • 给定目标骨架S_B∈S_B的偏移量,我们的目标是将(S_A, Qi_A)映射到一个重定向的旋转集Qi_B~ 中,该旋转集描述了S_B应该执行的运动。正式地,我们寻求数据驱动的映射GA→B
    在这里插入图片描述
    在我们的设置中,平移映射GA→B与映射GB→A同时学习。

5.2 网络架构

  • 我们的架构由编码器,解码器和鉴别器组成,编码器Em = [EmQ, EmS],解码器Dm和鉴别器Cm的单独组合为每个域进行训练Mm, m∈{A, B}。
  • 这里,EmQ是动态编码器,EmS是静态编码器,如图7所示。同样,请参见图9(a),它显示了网络中信息流的高级视图。
    在这里插入图片描述
  • 在为每个运动域训练了上述组件之后,在测试时,通过使用解码器D_B将E_AQ产生的动态运动表示与E_SB产生的静态表示结合起来,可以获得所需的映射GA→B,如图9(B)所示。
    在这里插入图片描述
  • 这是可能的,因为我们的编码器产生了一个独立于原始骨骼属性的深度运动编码,并且共享的潜在空间与一个共同的原始骨骼结构相关联。
  • 换句话说,编码器解开了低级的、相关的动态和静态参数,并且可以简单地使用它们的深层、解开的表示来执行重定向。
  • 下面,我们描述了用于训练网络的不同损失,如图9(a)所示。注意,我们的损失项只描述了一个方向(A→B)。对称项是通过交换A和B的角色来获得的。

Reconstruction Loss

  • 为了训练同一域中运动的自动编码器([EAQ , EAS ], DA),我们采用了关节旋转和关节位置的标准重构损失:
    在这里插入图片描述
    其中FK是一个正运动学算子,它返回关节位置(给定旋转和骨架)

Latent Consistency Loss

  • 如前所述,我们的骨骼池运算符可以通过池化连续armatures的特征,将同胚骨骼的运动嵌入到一个共同的深层原始骨骼潜空间中,如图2所示。
  • 事实证明,在共享潜在空间中嵌入来自不同域的样本对于多模态图像翻译任务是有效的。约束可以直接应用于这个中间表示,方便解纠缠。
  • 受此启发,我们将潜在一致性损失应用于共享表示,以确保重定向运动QiB ~ 保留与原始剪辑相同的动态特征
    在这里插入图片描述
    其中∥·∥1为L1范数

Adversarial Loss

  • 由于我们的数据是不配对的,所以重新定位的运动没有可以比较的基础事实。
  • 因此,我们使用对抗性损失,其中判别器C_B评估解码的时间旋转集Qi_B~ 是否似乎是骨架S_B的合理运动:
    在这里插入图片描述

End-Effectors Loss

  • 虽然同形骨骼在关节数量上可能不同,但它们共享同一组末端执行器。
  • 我们利用这一特性要求原骨架和重定向骨架的末端执行器具有相同的归一化速度。
  • 标准化是必需的,因为对于不同的字符,速度可能在不同的尺度上。
  • 这个要求特别有助于避免常见的重定向伪影,例如脚滑动; 输入运动中脚速度为零的帧应该导致重定向运动中脚速度为零。这个公式是
    在这里插入图片描述
  • 虽然我们的末端执行器损失显著减轻足部滑动伪影,但我们使用标准逆运动学(IK)优化进一步清洁足部接触。
  • 清理是完全自动的: 我们从运动输入序列中提取二进制脚接触标签,并通过将脚的位置固定在接触时间槽的平均位置来应用IK来强制脚接触。
  • 用于训练的全部损失综合了上述损失项:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/873531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《论文阅读12》RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds

一、论文 研究领域:全监督3D语义分割(室内,室外RGB,kitti)论文:RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds CVPR 2020 牛津大学、中山大学、国防科技大学 论文链接论文gi…

pyqt5多线程(子线程执行将结果返回到主线程上,提示对话框)

pyqt5多线程(子线程执行将结果返回到主线程上,提示对话框) 1.为什么要多线程执行 在主线程ui界面点击登录后,加延时10s,(模拟调用接口登录,假设耗时10s),ui主线程在等待请求返回结果&#xff…

Es、kibana安装教程-ES(二)

上篇文章介绍了ES负责数据存储,计算和搜索,他与传统数据库不同,是基于倒排索引来解决问题的。Kibana是es可视化工具。 分布式搜索ElasticSearch-ES(一) 一、ElasticSearch安装 官网下载地址:https://www…

Kotlin runBlocking launch多个协程读写mutableListOf时序

Kotlin runBlocking launch多个协程读写mutableListOf时序 import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlockingfun main(args: Array<String>) {var lists mutableListOf<String>()runBlocking {launch {r…

jsoup解析html之table表格

jsoup解析html之table表格 jsoup说明 一款Java 的HTML解析器 jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数据。 主要功能 从一…

Mac M2 Pro安装使用Cocoapods

Mac Pro M2安装使用Cocoapods 在新公司要做iOS开发&#xff0c;所以在新电脑上安装Cocoapods 在升级gem&#xff0c;sudo gem update --system&#xff0c;和安装cocoapods时都遇到如下的提示&#xff1a; ERROR: While executing gem ... (Errno::EPERM)Operation not per…

【MybatisPlus】LambdaQueryWrapper和QueryWapper的区别

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

input 设置type=“number“,鼠标悬停关闭提示语

一、问题 最近刚发现input 设置type"number"之后&#xff0c;鼠标悬停会出现提示语&#xff1a;请输入有效值。两个最接近的有效值分别为xx和xx。想要输入的值确实为number格式&#xff0c;又可以输入小数&#xff0c;不限制小数位&#xff0c;所以要把这讨厌的提示去…

最小路径和——力扣64

文章目录 题目描述动态规划题目描述 动态规划 class Solution {public:int minPathSum(vector<vector<int>>

WebAPIs 第四天

1.日期对象 2.节点操作 3.M端事件 4.JS插件 一.日期对象 实例化时间对象方法时间戳 日期对象&#xff1a;用来表示时间的对象 作用&#xff1a;可以得到当前系统时间 1.1 实例化 ① 概念&#xff1a;在代码中发现了new关键字时&#xff0c;一般将这个操作称为实例化 …

Controller是线程安全吗?如何实现线程安全

测试是否是线程安全 RequestMapping("/test") RestController public class TestController {//1、定义num&#xff0c;判断不同线程访问的时候&#xff0c;num的返回结果是否一致private Integer num0;/*** 2、定义两个方法*/GetMapping("/count1")publi…

一个注解实现分布式锁

文章首发微信公众号《java知路》 分布式锁原理 分布式锁是一种用于在分布式系统中协调多个节点并保证数据一致性的机制。它的目的是在分布式环境下实现互斥访问共享资源&#xff0c;以防止多个节点同时对共享资源进行修改或读取&#xff0c;从而保证数据的正确性和一致性。 实…

单向-->不带头-->非循环链表(简称:单链表)

目录 一、链表的介绍 1.链表的概念 2.单链表的节点类型 3.单链表简图 二、单链表的增删查改 1.单链表的头插 2.单链表的尾插 3.单链表的头删 4.单链表的尾删 5.单链表pos位置之后插入一个节点 6.单链表删除pos位置后的一个节点 一、链表的介绍 1.链表的概念 链表是一…

如何搬运订单(1688)

目录 下载安装与运行 任务描述 搬运具体要求&#xff08;示例&#xff09; 订单导出操作过程 搜索指定范围的订单 选择要导出的订单数据 完整的导出动画演示 切换到另一个账号 B账号批量下单的要求 下单步骤 下单设置 为啥选加采购车而不是立即下单 为啥要选自动情…

Java-方法

在编程中&#xff0c;我们也可以将频繁使用的代码封装成"帖子"(方法)&#xff0c;需要时直接拿来链接 方法就是一个代码片段. 类似于 C 语言中的 “函数” 方法定义 修饰符 返回值类型 方法名称([参数类型 形参 …]){ 方法体代码; [return 返回值]; } 这里比得C语言…

关于视频人工智能/机器视觉创业商业模式的一些思考

今年开始了我的第二次创业&#xff0c;第一次创业大家看我以前的博客就知道了&#xff0c;做音视频流媒体相关技术的&#xff0c;现在公司也已经是安徽省专精特新中小企业了&#xff0c;还好是“中小企业”&#xff0c;如果直接是专精特新企业&#xff0c;我就可以不用来视频人…

地理测绘基础知识(2)-椭球最短距离计算

在上一篇中&#xff0c;我们介绍了ECEF坐标系和经纬度的互换。 本篇&#xff0c;主要介绍已知A\B两个点的经纬度&#xff0c;如何求取椭球上的最短距离、路径。 在标准椭球面上&#xff0c;从A点运动到B点&#xff0c;距离如何&#xff0c;轨迹、每个阶段的方向又是如何呢&am…

consul安装启动流程

普通软件包安装 首先cd /opt &#xff0c;将安装包放到该目录下 下载consul安装包 进入consul官网找到自己开发平台对应的安装包下载 https://www.consul.io/downloads.html 或使用命令 wget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zip (如果…

【K8S系列】深入解析k8s网络插件—Weave Net

序言 做一件事并不难&#xff0c;难的是在于坚持。坚持一下也不难&#xff0c;难的是坚持到底。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记论点蓝色&#xff1a;用来标记论点 Kubernetes (k8s) 是一个容器编…

MySQL数据库练习

目录 表结构 建表 插入数据 1、用SQL语句创建学生表student&#xff0c;定义主键&#xff0c;姓名不能重名&#xff0c;性别只能输入男或女&#xff0c;所在系的默认值是 “计算机”。 2、修改student 表中年龄&#xff08;age&#xff09;字段属性&#xff0c;数据类型由…