Skeleton-Aware Networks for Deep Motion Retargeting

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来强制脚接触。
  • 用于训练的全部损失综合了上述损失项:
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

23、springboot日志使用入门-- SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

springboot日志使用入门 ★ 典型的Spring Boot日志依赖: spring-boot-start.jar -- spring-boot-starter-logging.jar (Spring Boot的日志包)-- logback(core、classic)-- log4j-to-slf4j.jar-- jul-to-slf4j.jar就是springboo…

IntentService

1. IntentService Android专门提供了一个异步的、自动停止的IntentService类。使用和普通的Service非常像,可以通过startService(Intent)通过Intent来提交请求,完成所有的任务后自己关闭。(请求是在工作线程处理的)好处&#xff…

[足式机器人]Part4 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】

本文仅供学习使用 本文参考: 《机械设计》 王德伦 马雅丽课件与日常作业可登录网址 http://edu.bell-lab.com/manage/#/login,选择观摩登录,查看2023机械设计2。 机械设计-Ch00Ch01——绪论机器结构组成与连接 Ch00-绪论0.1 何为机械设计——…

Redisson实现锁以及redis缓存一致性问题

目录 RedissonClient实现最基本的锁 RedissonClient实现读写锁 RedissonClient实现闭锁 RedissonClient信号量 缓存不一致问题解决方案 一、双写模式 二、失效模式 RedissonClient实现最基本的锁 // 1、获取一把锁,只要锁的名字一样,就是同一把锁R…

redis分布式集群-redis+keepalived+ haproxy

redis分布式集群架构(RedisKeepalivedHaproxy)至少需要3台服务器、6个节点,一台服务器2个节点。 redis分布式集群架构中的每台服务器都使用六个端口来实现多路复用,最终实现主从热备、负载均衡、秒级切换的目标。 redis分布式集…

【EI复现】一种建筑集成光储系统规划运行综合优化方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Beats:使用 Filebeat 将 golang 应用程序记录到 Elasticsearch - 8.x

毫无疑问,日志记录是任何应用程序最重要的方面之一。 当事情出错时(而且确实会出错),我们需要知道发生了什么。 为了实现这一目标,我们可以设置 Filebeat 从我们的 golang 应用程序收集日志,然后将它们发送…

SCSS的基本用法

1、声明变量 $ 声明变量的符号 $ 下面这张图左半部分是scss的语法,右半部分是编译后的css。(整篇文章皆是如此) 2、默认变量 !default sass 的默认变量仅需要在值后面加上 !default 即可。 如果分配给变量的值后面添加了 !default 标志…

Clickhouse基于文件复制写入

背景 目前clickhouse社区对于数据的写入主要基于文件本地表、分布式表方式为主,但缺乏大批量快速写入场景下的数据写入方式,本文提供了一种基于clickhouse local 客户端工具分布式处理hdfs数据表文件,并将clickhouse以文件复制的方式完成写入…

【Rust】Rust学习 第十一章编写自动化测试

Rust 是一个相当注重正确性的编程语言,不过正确性是一个难以证明的复杂主题。Rust 的类型系统在此问题上下了很大的功夫,不过它不可能捕获所有种类的错误。为此,Rust 也在语言本身包含了编写软件测试的支持。 编写一个叫做 add_two 的将传递…

Jsoup爬取简单信息

1. 豆瓣图书最受关注 1.1 创建SpringBoot项目或者Maven项目 1.2 引入jsoup <dependency><!-- jsoup HTML parser library https://jsoup.org/ --><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3<…

MySQL_约束、多表关系

约束 概念&#xff1a;就是用来作用表中字段的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正确性&#xff0c;有效性和完整性。 约束演示 #定义一个学生表&#xff0c;表中要求如下&#xff1a; #sn 表示学生学号&#xff0c;要求使用 …

开源可商业运营的ChatGpt网页源码v1.2.2

&#x1f916; 主要功能 后台管理系统,可对用户,Token,商品,卡密等进行管理 精心设计的 UI&#xff0c;响应式设计 极快的首屏加载速度&#xff08;~100kb&#xff09; 支持Midjourney绘画和DALLE模型绘画,GPT4等应用 海量的内置 prompt 列表&#xff0c;来自中文和英文 一键导…

【C++】vector容器

0.前言 1.vector构造函数 #include <iostream> using namespace std; #include <vector>void printVector(vector<int>& v) //此处&代表 引用 &#xff1b;若取地址&#xff0c;则是 数据类型* 变量名 {for (vector<int>::iterator it v.begi…

Apache-Maven

安装Maven 解压apache-maven到目录下 Maven目录如下 bin&#xff1a;目录中存放的是可执行文件&#xff0c;JAVA项目中的编译执行打包都要使用bin. conf:存放的是Maven的配置文件&#xff0c;本地配置、私服配置都需要在conf下的settings.xml进行配置。 lib下存放的是Maven所…

C++学习| MFC简单入门

前言&#xff1a;因为接手了CMFC的程序&#xff0c;所以需要对MFC编程方面有所了解。 C之MFC简单入门 MFC相关的概念MFCWIN32QT MFC项目基本操作MFC项目创建MFC项目文件解读界面和代码数据交互——加法器 MFC相关的概念 MFC MFC&#xff08;Microsoft Foundation Classes微软…

湖仓一体:国产基础软件的创新突破与弯道超车

在这个市场变化和技术演进的时期&#xff0c;传统的国内外巨头优势被减弱&#xff0c;具备创新技术的国产基础软件企业&#xff0c;有希望实现弯道超车。 随着数字化转型进程的加快&#xff0c;企业对于数据基础设施的存储和计算能力要求越来越高。如何进行数据资产的统一管理和…

Postman下载教程

目录 下载 安装 注意事项 看到很多小伙伴在问 Postman 下载的相关问题&#xff0c;花时间整理了下&#xff0c;下面教新入门的小伙伴如何去下载 Postman。 开始前我们可以先了解下&#xff1a;Postman 简介 下载 第一步&#xff1a;进入 Postman 官网 首先&#xff0c;我…

【前端|Javascript第4篇】详解Javascript的事件模型:小白也能轻松搞懂!

前言 在当今数字时代&#xff0c;前端技术正日益成为塑造用户体验的关键。而其中一个不可或缺的核心概念就是JavaScript的事件模型。或许你是刚踏入前端领域的小白&#xff0c;或者是希望深入了解事件模型的开发者&#xff0c;不论你的经验如何&#xff0c;本篇博客都将带你揭开…

Multi-object navigation in real environments using hybrid policies 论文阅读

论文信息 题目&#xff1a;Multi-object navigation in real environments using hybrid policies 作者&#xff1a;Assem Sadek, Guillaume Bono 来源&#xff1a;CVPR 时间&#xff1a;2023 Abstract 机器人技术中的导航问题通常是通过 SLAM 和规划的结合来解决的。 最近…