《End-to-end Recovery of Human Shape and Pose》论文笔记

文章提出了一个端到端的方法从二维图像恢复三维人体模型的框架。

现有的一些从单张图片恢复人体3D网格的方法专注于恢复人体3D关键点的坐标位置,然而这样做有如下不足之处

  • 关键点是稀疏离散的,但是人体在3D空间的表示是密集连续的。
  • 3D关键点的单独表示并不能约束每个关键点之间的关系,仅仅通过关键点并不能很好的预测人体姿势与体型。

针对上述问题,作者提出了他们的方法:

  • 以kinematic tree的形式表示每个关键点的3D旋转角度矩阵,以此来捕获3D的头部和肢体的角度方向。预测角度可以确定肢体的对称性,以及肢体的长度等信息的合理性。
  • 通过学习关键点的角度信息可以使得输出的3D模型在姿势和体型方面的合理性,避免了不合理的姿势和体型。

现有的重建人体网格的方法大多数是一种两阶段的方法,即先预测2D关键点位置,之后再预测3D模型参数。然而这种方法过度依赖2D关键点信息,丢失了图片信息。本文提出了一种端到端的解决方案:直接从图像像素信息中获取3D模型参数。

然而在训练这种端到端的模型的时候会遇到一下困难:

  • 缺少足够带有3D标注的ground truth,目前现有的图像数据集都是在特定环境下获取的,不能反映真实的情景。
  • 从二维到三维的变换具有模棱两可性,会造成深度信息的丢失。许多不同的三维模型都可以映射为同一个二维模型,从二维映射到三维时也有可能生成不符合常理的结果。

针对上述问题,文章提出了一种新颖的解决方案:使用两种数据集,一种是带有关键点标注的二维图像,一种是带有姿势和体型信息的3D网格。使用这两种没有关联性的数据集进行训练。输入一张图像,首先获取到3D网格参数和相机参数,之后将3D关键点映射回二维平面,判断是否能与原图中的2D关键点契合。使用这种2D到3D之后再到2D的方法,就可以很好的利用不含三维标注信息的数据集进行训练。

另一个挑战是,以前的方法在预测模型参数的时候将其看作是一个分类问题来处理,这样得到的结果是离散化的,在精度上有所不足。因此本文采用一种带有反馈的迭代方式,将其看作是一个回归问题。

综上,这篇文章的方法有以下亮点

  • 直接从图像特征获取到3D网格参数,不同于前面提到的两阶段方法,这样不用分两步进行训练,也避免了图像中信息的丢失。
  • 生成的是3D网格而不像以往的方法生成3D骨架,这样生成的3D网格有更多了利用价值。
  • 使用端到端的方式进行训练,有更高的精度和更短的运行时间。
  • 使用新的训练方式,可以通过2D数据学习3D信息。

网络结构如上图所示,输入图像I经过一个卷积编码器,之后通过一个迭代的3D回归模块获得3D人体模型参数,该3D人体模型投影回2D平面后与2D的标注具有最小的误差。3D模型的参数被输入鉴别器用来判断这些参数是否合乎正常人体的体型和姿势。总共分为三个部分:

  • 编码器:获得图像的卷积特征
  • 迭代的3D回归模型:生成3D人体模型参数(姿势、体型和相机参数)
  • 鉴别器:判断3D参数是否生成真实的mesh,相当于弱监督的过程
1. SMPL模型

结合本文和论文《SMPL: A Skinned Multi-Person Linear Model》对SMPL模型进一步进行分析。

SPML是一种可分离shape和pose的模型,是由标准线性blend skinning扩展而来,主要由以下几个部分:Blend skinningShape blend shapesPose blend shapesJoint locations。关于这几部分作用如下图所示:

其中上图a表示Blend skinning,即标准的3D mesh模型,图b在图a基础上对应扩展Shape blend shapes,即表示对3D模型进行缩放,胖瘦等操作,图c在图b基础上对应扩展Pose blend shapes,即表示3D模型在各个pose方向上的变形。图d在图c基础上对应扩展Joint locations,并通过二次skinning根据动作进行调整3D mesh。

SMPL模型可以用以下公式定义:

M ( β , θ ) = W ( T p ( β ⃗ , θ ⃗ ) , J ( β ⃗ ) , θ ⃗ , ω ) M(\beta,\theta) = W(T_p(\vec{\beta}, \vec{\theta}), J(\vec{\beta}),\vec{\theta},\omega) M(β,θ)=W(Tp(β ,θ ),J(β ),θ ,ω)

T p ( β ⃗ , θ ⃗ ) = T ‾ + B s ( β ⃗ ) + B p ( θ ⃗ ) T_p(\vec{\beta},\vec{\theta}) = \overline{T} + B_s(\vec{\beta}) + B_p(\vec{\theta}) Tp(β ,θ )=T+Bs(β )+Bp(θ )

T p T_p Tp 为通过 B s B_s Bs B P B_P BP 对标准模型进行体型和姿势上的偏移,其中 T ‾ \overline{T} T 为人体标准模板模型。 J J J 表示为从体型参数到关键点位置的映射, ω \omega ω 为混合蒙皮函数。 θ \theta θ β \beta β分别为姿势参数与体型参数。

SMPL的输入是β和θ,只需要输入一个10-D的vector β(代表shape,由PCA对数据集人体进行主成分分析得到)和一个3K-D的vector θ(代表pose,其中K为骨架节点数,3是每个关节具有的3个自由度),就可以输出对应的三维人体模型。加上camera的三个维度,则该模型最终总的输入就是10+3+3x24=85-D的向量 Θ = { θ , β , R , t , s } \Theta = \{ \theta, \beta, R, t, s \} Θ={θ,β,R,t,s}。为了把3D joint映射到2D,采用如下公式:
x ^ = s Π ( R X ( θ , β ) ) + t \widehat{x} = s\Pi(RX(\theta, \beta)) + t x =sΠ(RX(θ,β))+t

2.带有反馈的3D迭代回归(Iterative 3D Regression with Feedback)

前面提到,本文将3D模型参数的预测看作是一个回归问题,3D回归模块的目的是输出SMPL模型所需的85维参数 Θ = { θ , β , R , t , s } \Theta = \{ \theta, \beta, R, t, s \} Θ={θ,β,R,t,s} 。3D-2D步骤的2D关节点映射用如下损失函数进行约束:
L r e p r o j = ∑ i ∣ ∣ v i ( x i − x ^ ) ∣ ∣ 1 L_{reproj} = \sum_i||v_i(x_i-\widehat{x})||_1 Lreproj=ivi(xix )1
其中 x i x_i xi 是第i个2D关键点的ground truth, v i ∈ { 0 , 1 } v_i\in\{0, 1\} vi{0,1}表示关键点是否可见,1为可见,0为不可见。

因为3D表示包含了旋转角的信息,直接对 Θ \Theta Θ进行一次回归预测是很难的,本文以IEF(iterative error feedback)的形式对 Θ \Theta Θ进行回归:每一次迭代输入图像特征 ϕ \phi ϕ和当前参数 Θ t \Theta_t Θt,输出为 Δ Θ t \Delta\Theta_t ΔΘt,之后更新 Θ t + 1 = Θ t + Δ Θ t \Theta_{t+1} = \Theta_t + \Delta\Theta_t Θt+1=Θt+ΔΘt ,初始化的 Θ 0 \Theta_0 Θ0为均值 Θ ‾ \overline{\Theta} Θ

当有可利用的带有3D ground truth的数据集时,可以用如下公式来定义3D loss:
L 3 D = L 3 D j o i n t s + L 3 D s m p l L_{3D} = L_{3Djoints} + L_{3Dsmpl} L3D=L3Djoints+L3Dsmpl

L j o i n t s = ∣ ∣ ( X i − X ^ i ) ∣ ∣ 2 2 L_{joints} = ||(X_i - \widehat{X}_i)||_2^2 Ljoints=(XiX i)22

L s m p l = ∣ ∣ [ β i , θ i ] − [ β ^ i , θ ^ i ] ∣ ∣ 2 2 L_{smpl} = ||[\beta_i, \theta_i] - [\widehat{\beta}_i, \widehat{\theta}_i]||_2^2 Lsmpl=[βi,θi][β i,θ i]22

模型整体的loss用如下公式来定义:
L = λ ( L r e p r o j + t ∗ L 3 D ) + L a d v L = \lambda(L_{reproj}+t*L_{3D})+L_{adv} L=λ(Lreproj+tL3D)+Ladv
当有3D的ground truth的时候t为1,否则t为0 。

如果在每次迭代的时候都用最终的目标函数进行监督会造成过拟合和陷入局部最小值,所以只在最终预测 Θ T \Theta_T ΘT的时候使用 L r e p r o j L_{reproj} Lreproj L 3 D L_{3D} L3D ,但是在每一步预测 Θ t \Theta_t Θt的时候都使用 L a d v L_{adv} Ladv

3. 分解对抗先验(Factorized Adversarial Prior)

训练鉴别网络D用来告知用于SMPL的参数是否合乎常理,即是否适用于是一个正常的人体模型。SMPL模型所具有的因式分解的形式使得训练很高效也很稳定。利用SMPL对姿势和体型的分解,分别训练鉴别器用于姿势和体型。

pose是基于kinematic树的,所以我们进一步分解姿势鉴别器,针对每个关键点的旋转角度进行训练。为了获得关键点在整个kinematic树上的分布,还需要学习一个包含所有关键点旋转角度的鉴别器。所有的姿势鉴别器共享一个公共的旋转角矩阵的特征空间,只有在最后的分类器后才分别进行各自的学习。

所以一共需要训练K+2个鉴别器(输入为10-D的 β \beta β, 输入为9K-D的所有关键点的旋转角,K个输入为9-D的每个关键点的旋转角),输出的范围在[0,1]。

令E表示包含图像编码和3D模型的编码器,该编码器的对抗损失函数为:

每一个鉴别器的目标为:

对E和所有的 D i D_i Di共同进行优化。

4.网络结构细节

使用ResNet-50作为encoder,来提取公共特征,产生的特征 ϕ ∈ R 2048 \phi \in R^{2048} ϕR2048

紧接着是3D回归模块,包括两个大小为1024的全连接层,之间通过dropout连接。在这之后再接一个大小为85( β , θ \beta, \theta β,θ, 相机参数)的全连接层为输出。

鉴别器部分,对 β \beta β的学习,由两个全连接层组成,大小分别为10,5, 最后输出一个大小为1-D的预测值。

对于学习每个关键点的K个鉴别器, θ \theta θ首先通过Rodrigues公式转换为K个3*3的矩阵,每个矩阵都被输入到一个含有两个大小都是32的全连接层的公共的潜在网络,之后再将输出送到23个不同的鉴别器,获得大小为1-D的输出。

对于学习所有关键点分布的鉴别器,由两个大小为1024的全连接层组成,最后输出为大小为1-D的预测值。

以上所有除了输出层之外的层都使用ReLu作为激活函数。

hmr代码运行测试结果:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值