综述:恢复 3D 人体网格
原文:Recovering 3D Human Mesh from Monocular Images:A Survey
从单目图像/视频恢复 3D 人体网格的综述。
人体建模
对人体的建模分为基于几何的方法和 3D 扫描的办法。 1.基于几何
把人体看成小的几何体组成的集合,例如SCAPE、SMPL等模型。缩小了解空间,估计参数即可,问题是这些模型都没有考虑衣服和头发的影响。
2.3D 扫描(点云 -> human mesh)
- 配准 (把多组、多模态数据对应起人的哪个部位)
- 骨架识别
- 蒙皮
Image
主要分为 基于优化的方法 以及 基于回归的方法
基于优化
主要思想:应用 model,拟合参数,加入了数据terms、正则化项。 代表方法:SMPL、SMPL-X。
eg. Bogo et al. 的方法里:
目标函数 = data term + 姿态先验 * 2 + 形状先验 * 1 + 误差项 (第一项是数据项,后面全部是正则化项)
data term: 用来惩罚 2D joints 与 3D 投影的 SMPL joints pose 先验:肘和膝盖不自然旋转 shape 先验:做一遍 PCA,从 shape 系数做筛选 (但是仍然不够精确,因为从 2D 图来看其实只有两点间的距离) 误差项:惩罚 capsule intersection (判断物体相交用)
基于回归
主要思想:直接从输入通过神经网络得到目标。 大致是输入先经过 backbone 提取特征,然后应用 encoder-decoder 结构,得到目标
目标
- model-based 方法:回归模型参数
- no-model 方法:通过三维点直接回归坐标
- 依概率 生成多组参数
监督对象
- 3D 顶点间的 dis(强)
- 2D 与 3D 点投影的距离(弱)
网络
- backbone (eg. ResNet)
- encoder
- decoder
现有的问题
Q:运行结果接近平均值,极端情况下不 work
A:合成训练数据进行训练;从大规模动捕数据中学习
Video
现有的问题
Q:把每一帧分别看成一个图像,这样会有抖动、不平滑的问题
A:把人本身的特征从多帧画面中提取出来;做运动先验(大模型)
其他任务
多人恢复 Mesh
- 裁剪出单人,使用单人算法
- 直接识别出每个人
场景感知 261 262
例如有在已知场景中恢复貌似合理的人体运动。
从其他角度优化
相机参数
-
属性:位置、姿态、运动
-
优化角度:相机模型、添加对地距离、计算 capsule intersection
位姿先验
生成模型:
- 手动添加
- 生成模型(GAN、VAE、归一化流)
添加先验的方式:
- 通过添加到 loss 里进行约束
- encoder、decoder 生成 (?) VIBE:添加运动先验
数据集
标签的获取
- 人体动作捕捉获取
- 生成伪标签
数据集介绍(4类)
- Human3.6M
- 3DPW 。。。
测试指标
- MPJPE:Mean Per Joint Position Error 平均每个关节位置误差测量根匹配后预测的三维关节与地面真实之间的平均欧几里德距离
- PA-MPJPE:Procrustes-aligned MPJPE 表示预测位姿与地面真值刚性对齐后的MPJPE。重建误差。
- MPJAE:Mean Per Joint Angle Error 表示预测的三维关节与地面真实度之间的方向偏差,使用测地线距离用SO(3)表示。
- PA-MPJAE:Procrustes-aligned MPJAE是在执行Procrustes Analysis后根据MPJAE计算的,以使预测的姿势与地面真实一致。
手部和面部的工作非常challenging,误差比较高。
未来方向
-
人物重叠(遮挡)
-
从视频里恢复稳定的 mesh
-
受场景约束的重建
-
无监督或自监督重建
-
分组重建(群体内人们的关系会为这个任务带来帮助)
-
全身重建(包括面部和手)
-
穿衣服的人物重建