0%

[论文笔记]End-to-End Human Mesh Recovery

2017年来自Berkeley一名博后金沢小姐姐的一篇论文

INTRODUCTION

此paper提出了一个以端到端的方法实现从二维人体图像恢复出三维人体模型的框架。在此之前,绝大多数的方法或是只关心三维骨架的重建,或是采用两段式的方法,即先从二维图像推断出2D-joint location,再从2D-joint来预测三维模型或计算三维参数。
以端到端的方法来实现这一目的,在数据集方面有几个挑战需要面对。一是,缺少足够数量的带有ground truth 3D annotation的自然获取的实况图像,目前已有的自带3D结构注解的图像都是在特定的实验环境下获得的,并不足以反映真实世界可能出现的所有情况。二是,从二维到三维存在着固有的模棱两可性,因为缺少了深度信息,许多不同的三维模型都可以映射为同一个二维图像,而由二维图像映射到三维时,也不一定能够符合人体结构学。该文章将着重解决这几个问题。
对于第一个难题,解决方案思路出发点是使用两个数据集来进行训练,一个是带有2D annotation的实况二维图像集,另一个是人体的3D mesh模型集,这两个数据集是没有配对关系的。当获得一副图像,先预测该图像对应的3D mesh参数,然后使推断出来的3D mesh的3D Joint映射到2D时能够与原图的2D-joint契合。通过这样一个从2D到3D再到2D的过程,我们就可以使用海量的不带三维信息的二维图像来作为数据集进行训练。在预测模型参数方面,以前的多数方法是把这个问题当做分类问题来处理,这样做得到的误差是离散化的,所以在精度上有不足。这篇paper在参数预测上则采用了iterative regression with feedback的方法。
对于第二个问题,为了使生成的模型符合真实的人体结构,使用GAN的网络结构,把生成模型的参数输入到一个Discriminator中,Discriminator在训练中学习每个joint之间的角度限制,由Discriminator来判断模型是否真实。

所以,总结一下该文章提出的方案比其他方法屌在哪里:

  1. 一步到位
  2. 输出的是三维模型而非单纯的骨架
  3. 精度和运行时间的提升
  4. 不需要有配对的2D-3D数据集

Related Work

SMPL(A Skinned Multi-Person Linear Model)

2015年提出了这一模型,该模型可分离为shape和pose,只需要输入一个10-D的vector β(代表shape,由PCA对数据集人体进行主成分分析得到)和一个3K-D的vector θ(代表pose,其中K为骨架节点数,3是每个关节具有的3个自由度),就可以输出对应的三维人体模型。
SMPL骨架的节点个数为14,标注了人体影响姿态的几个主要关节,即:

1
2
3
4
5
6
7
8
smpl_names = [
'Left_Hip', 'Right_Hip', 'Waist', 'Left_Knee', 'Right_Knee',
'Upper_Waist', 'Left_Ankle', 'Right_Ankle', 'Chest',
'Left_Toe', 'Right_Toe', 'Base_Neck', 'Left_Shoulder',
'Right_Shoulder', 'Upper_Neck', 'Left_Arm', 'Right_Arm',
'Left_Elbow', 'Right_Elbow', 'Left_Wrist', 'Right_Wrist',
'Left_Finger', 'Right_Finger'
]

加上camera的三个维度,则该模型最终总的输入就是10+3+3x14=85-D的数据。
根据输入的数据,对标准模型进行一步步的变化,具体公式我就不列了,大概流程就是:

  1. Add shape blend shapes(缩放)
  2. Infer shape-dependent joint locations.(根据shape调整joint)
  3. Add pose blend shapes(胖瘦变形)
  4. Get the global joint location(摆pose)
  5. Do skinning(给骨架包裹外皮)
    最终生成的模型是具有6980个顶点的mesh。
    关于SMPL,可以参考论文SMPL: A Skinned Multi-Person Linear Model

Iterative 3D Regression with Feedback

文章使用此方法来得到β和θ,先将前一步得到的三维模型重投影到二维图像上,计算与原图pose的误差,通过误差的feedback逐步逼近,直至收敛。
关于iterative error feedback (IEF),可以参考论文Human pose estimation with iterative error feedback.

Factorized Adversarial Prior

先验对抗。如果不使用判别器来对生成的模型进行进行约束,就会产生一些奇奇怪怪的结果,搞得有点寄生兽既视感。所以采用了GAN。由于SMPL的可分离特性,我们可以对shape和pose分别单独训练Discriminator,以此来降低网络的复杂度,提高学习效率。对于shape参数,设计一个Discriminator,对于每一个joint各设计一个Discriminator,为了分析各个节点对骨架结构的贡献,对所有的joint再设计一个Discriminator,最终一共是K+2个判别器。然后作者表达了一下训练过程之漫长,1080ti 显卡也跑了五天之久。(我用我自己的戴尔图形工作站,懒得去配GPU环境,作死用CPU跑,两天还是三天跑了百分之一。。。)

Evaluation

之后作者用了将近三分之一的长篇大论来阐述该方法的结果多么多么好。然后还稍微提了一下人体图像语义分割,然而在代码中并没有找到相关实现。