FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion

paper title: FrankMocap:Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion
paper link:https://arxiv.org/abs/2008.08324
oral or demo video:https://www.youtube.com/watch?v=HXTK5ro9kGc
project: -
github: https://github.com/facebookresearch/frankmocap
conf & anthor: arXiv, Yu Rong(CUHK & FAIR) et al;
arXiv submit v1:2020.08

主要内容

当前的单目姿态估计方法要么是仅关注身体动作,忽略了手部的动作;要么是仅关注手部的姿态而不考虑身体的姿态。这篇文章提出一个可以在自然环境中同时捕捉身体和手部的3D姿态的系统,称为frankmocap,速度较快,可以达到9.5fps。(在Ubuntu18.04,RTX2080Ti上实测单人bodyMocap约6fps)。

方法流程

FrankMocap使用两个回归模块从单张RGB图像中分别预测身体和手部的姿态,然后得到的结果有一个整合模块生成全身的3D姿态结果。如下图所示:
FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion
1. SMPL-X
SMPL-X模型是SMPL模型的一个扩展,可以通过低维度的pose和shape的组合,得到人体的形状变化和姿态相关的变形表示。相比于SMPL,SMPL-X除了身体之外,还可以通过增加额外的参数,实现手指和表情的表示。
如果SMPL-X的模型为 S S S,那么输入姿态相关的参数,可以得到变形的结果:
M w = S ( ϕ w , θ w , β w ) M_{w} = S(\phi_{w},\theta_{w},\beta_{w}) Mw=S(ϕw,θw,βw)
其中:

  • ϕ w ∈ R 3 \phi_{w} \in R^{3} ϕwR3为全身的朝向参数;
  • θ w ∈ R ( 21 + 15 + 15 ) X 3 \theta_{w} \in R^{(21+15+15)X3} θwR(21+15+15)X3是身体和左右手的pose-dependent变形,21为身体的关节数目,15是一只手的关节数目;
  • β w \beta_{w} βw是shape参数;
  • M w ∈ R 10475 X 3 M_{w} \in R^{10475X3} MwR10475X3是SMPL-X得到的变形后的顶点信息;
    得到 M w M_{w} Mw后,可以通过关节点位置回归函数 R R R得到3D关节点位置:
    J w 3 D = R w ( M w ) J^{3D}_{w} = R_{w}(M_{w}) Jw3D=Rw(Mw)
    其中 J w 3 D ∈ R ( 22 + 15 + 15 ) X 3 J^{3D}_{w} \in R^{(22+15+15)X3} Jw3DR(22+15+15)X3

对于手部模型也是如此:
M h = H ( ϕ h , θ h , β h ) M_{h} = H(\phi_{h},\theta_{h},\beta_{h}) Mh=H(ϕh,θh,βh)
其中 M h ∈ R 778 X 3 M_{h} \in R^{778X3} MhR778X3。同样可以使用关节点回归函数得到手指的关节点的3D位置。
J h 3 D = R h ( M h ) J^{3D}_{h} = R_{h}(M_{h}) Jh3D=Rh(Mh)
其中 J h 3 D ∈ R 21 X 3 J^{3D}_{h} \in R^{21X3} Jh3DR21X3,包括一个手腕点,15个手指关节点和5个指尖点。手部和身体的采用相同的表示方式,在最后整合输出全身的结果的时候比较方便。

2. 3D手部姿态估计模块
文章使用端到端的网络结构实现手部姿态估计,形式如下:
[ ϕ h , θ h , β h , c h ] = M H ( I H ) [\phi_{h},\theta_{h},\beta_{h},c_{h}] = M_{H}(I_{H}) [ϕh,θh,βh,ch]=MH(IH)
其中:

  • I H I_{H} IH为从输入图像上裁剪出的手部图片;
  • c h = ( t h , s h ) c_{h} = (t_{h},s_{h}) ch=(th,sh)是相机的2D平移信息和缩放因子;
  • θ h , β h \theta_{h},\beta_{h} θh,βh分别是SMPL模型的pose和shape参数;
    有了 t h , s h t_{h},s_{h} th,sh,3D个2D关节点位置之间的关系可以表示为:
    J h , j 2 D = s h Π ( J h , j 3 D ) + t h J^{2D}_{h,j} = s_{h}\Pi(J^{3D}_{h,j})+t_{h} Jh,j2D=shΠ(Jh,j3D)+th
    其中 Π \Pi Π表示正交投影。

手部姿态估计的网络结构与身体的一致,也是采用encoder-decoder 的结构,encoder使用ResNet-50,decoder使用全连接网络。在模型训练的时候,将左手的图像全部镜像为右手后进行训练,测试的时候,对于左右也是先镜像为右手,然后模型推理得到结果,在变换为左手的姿态。
损失函数方面,主要考虑三种:姿态误差,3D位置误差,2D位置误差以及一个正则项,如下:
L θ = ∣ ∣ θ h − θ ^ h ∣ ∣ 2 2 L 3 D = ∣ ∣ J h 3 D − J ^ h 3 D ∣ ∣ 2 2 L 2 D = ∣ ∣ J h 2 D − J ^ h 2 D ∣ ∣ L r e g = ∣ ∣ β h ∣ ∣ 2 2 L_{\theta} = ||\theta_{h}-\hat{\theta}_{h}||^{2}_{2} \\ L_{3D} = ||J^{3D}_{h}-\hat{J}^{3D}_{h}||^{2}_{2} \\ L_{2D} = ||J^{2D}_{h}-\hat{J}^{2D}_{h}|| \\ L_{reg} = ||\beta_{h}||^{2}_{2} Lθ=θhθ^h22L3D=Jh3DJ^h3D22L2D=Jh2DJ^h2DLreg=βh22
其中 θ ^ h \hat{\theta}_{h} θ^h, J ^ h 3 D \hat{J}^{3D}_{h} J^h3D J ^ h 2 D \hat{J}^{2D}_{h} J^h2D分别是姿态角度、3D关节点位置和2D关节点位置的groundtruth。最后loss的形式为:
L = λ 1 L θ + λ 2 L 3 D + λ 3 L 2 D + λ 4 L r e g L = \lambda_{1}L_{\theta} + \lambda_{2}L_{3D} + \lambda_{3}L_{2D} + \lambda_{4}L_{reg} L=λ1Lθ+λ2L3D+λ3L2D+λ4Lreg
实验中,权重设置为: λ 1 = 10 , λ 2 = 100 , λ 3 = 10 , λ 4 = 0.1 \lambda_{1}=10, \lambda_{2}=100, \lambda_{3}=10, \lambda_{4}=0.1 λ1=10,λ2=100,λ3=10,λ4=0.1

数据的处理部分,文章使用了多个不同数据集的数据,并进行了整合形成统一的格式;同时对数据集的图片做了裁剪、翻转、旋转、色彩变化、运动模糊等增强处理。分别如下。

FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion
FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion

3. 3D身体姿态估计模块
身体模块的实现与手部模块实现原理上基本一致,形式如下,不再赘述。
[ ϕ b , θ b , β b , c b ] = M B ( I b ) [\phi_{b},\theta_{b},\beta_{b},c_{b}] = M_{B}(I_{b}) [ϕb,θb,βb,cb]=MB(Ib)
文章中提到当前已有的方法和本文的方法对手腕和手臂的朝向的估计都不太准确,因为手腕只有一个2D点标记,但是这个问题在身体与手的整合模块中得到较好的解决。

4. 全身整合模块
整合模块是将身体模块的手部模块的输出整合为一个全身的表示。整合策略方面主要有两条:(1) 基于“复制-粘贴”式的快速组合;(2)基于额外2D关键点的优化框架,提高输出的准确性。

论文实验

一些实现细节:

  • (1)bounding box: 在线版本中,使用openPose获取身体的bounding box,然后处理完身体后,将3D投影回2D图像并获取手部的bounding box;对于离线处理版本,使用openPose获取身体和手部的bounding box。
  • (2)视频处理:对于使用“复制-粘贴”式的整合策略,视频是逐帧处理的,并且没有后处理操作;对于优化策略的整合方案,在逐帧处理完视频后,对shape,pose,camera做平滑操作,平滑窗口为5帧,权重分布为[0.1,0,2,0.5,0.2,0.1]。
  • (3)手部模块:手部模块的输入图像是以手为中心的裁剪图像,并“填充和缩放”到224X224尺寸,并做缩放、平移、旋转、模糊等数据集增强措施。网络采用ResNet-50作为主干网络,接两个全连接层,输出结果为61维的向量,包括相机参数(平移2d,缩放因子1d),手的全局旋转(3d),手的姿态(3d(个关节)X5d(个手指)X3d(个角度)=45d),shape参数(10d)。使用Adam优化器,学习率设为1e-4,训练100个epoch后收敛。
  • (4)身体模块:身体模块的训练与SPIN基本一致。使用Adam优化器,学习率设为5e-5,训练20个epoch后收敛。
  • (5)数据集:使用到的数据集有FreiHand,HO-3D,MTC,STB,RHD,MPII+NZSL

论文结果

文章与其他方法的对比如下:
FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion

部分实测结果:
FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion
FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion
FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion
FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion
FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion