这是一篇cvpr2018的论文,论文地址:https://arxiv.org/pdf/1805.04092 项目地址:https://www.seas.upenn.edu/~pavlakos/projects/humanshape (没源代码)
摘要:这篇论文旨在解决从单张图片估计3D人体完整的姿态和形状的问题。通常情况下迭代优化的方法占优势,而卷积的方法欠佳,因为缺少训练数据集和他们的低分辨率。作者的工作是突破这个阻碍,提出一个基于卷积网络的有效的方法。作者还使用了SMPL参数,端到端的框架。这样可以得到详细的3D网格结果,同时只需要估计少量的参数,对端到端的框架更友好。有趣的是,这些参数可以直接从2D关键点和掩模中预测,这样就可以避免需要3D的GT。同时为了生成3D的网格,优化表面,作者使用了3D的每个顶点的损失,然后使用可微的渲染器来将3D网格映射成图像,同时优化网络,2D注释点的一致性。
作者的贡献:(还是很简单的,就不翻译了)
-
an end-to-end framework for 3D human pose and shape estimation from a single color image.
-
incorporation of a parametric statistical shape model, SMPL, within the end-to-end framework, enabling:
-
prediction of the SMPL model parameters from ConvNet-estimated 2D keypoints and masks to avoid training on synthetic image examples.
-
generation of the 3D body mesh at training time and supervision based on the 3D shape consistency.
-
use of a differentiable renderer for 3D mesh projec-tion and refinement of the network with supervision based on the consistency with 2D annotations.
-
-
superior performance compared to previous approaches for 3D human pose and shape estimation at significantly faster running time.
Keypoints and silhouette prediction
第一步是关注2D的关键点和轮廓估计。作者设计了一个单独的卷积网络,称为human2D,网络有两个输出,2D关键点和轮廓。Human2D遵循堆叠沙漏网络结构,使用2个沙漏网络,这样能同时保证准确率和效率。关键点以热图形式输出,使用MSEloss,计作Lhm。轮廓有两个通道(body和background),使用交叉熵损失,Lsil 。训练时,两种loss求和,其中λ=100。这两个输出的参数是共享的,这样可以优势互补。
3D pose and shape prediction
第二步骤更具有挑战,需要从第一步的输出来估计全身的3D网格。作者训练了2个网络部分。a)PosePrior 使用2D关键点坐标,同时还有每个检测的置信度(每个heatmap的最大值)作为输入,输出是姿势参数θ。b) ShapePrior 轮廓作为输入,输出是形状参数β。分开的原因是单独训练,(经验上)可以更稳定的精确的预测。
PosePrior:使用双线性单元,输入2D关键点坐标,热图最大值响应,输出是72个SMPL姿势参数。ShapePrior:简单的使用3*3的卷积层,接着是最大值池化,双线性单元,输出是10个形状参数β。
因为旨在生成关键点和轮廓,所以可以合成人体模型实例并将它们投影到图像平面来模拟网络输入。只需要得到pose和shape的参数。同时也可以使用多视角,增加数据量。
损失函数
作者还调皮的说前面几节就是故意不讨论loss,要放到这里讨论。作者谈到前人的工作都是使用L2正则,这种naive方法有个缺点:不同的参数可能会对最终重建产生不同规模的影响,例如全局身体旋转比手相对于手腕的局部旋转更关键。为了避免这种情况,作者采用一个全局的方法,在训练的时候,生成全部身体的网格,使用全部表面顶点的损失。因为网格是可微的,所以可以反向传播,将SMPL当做一个卷积层,只是它的参数不用学习。每个顶点的损失函数:这是把所有顶点一视同仁。当然,如果关注点主要在3D的姿势时,可以监督和M有关的3D关节J,它们被模型简单地表示为主题顶点的稀疏线性组合。这种情况下,损失函数为:
经验上,作者说最好的训练策略是使用L2正则,LM损失,如果关注点在pose上则是Lj损失。
Differentiable renderer
作者方法包括一个额外的步骤,将3D网格投影到图像和二维注释的一致。将SMPL参数转化成轮廓已经有了方法,但是作者比较吊,他发现映射是已知的,包括了3D mesh投影到image,不需要重新训练网络。更具体的,作者使用opendr,一个可微的渲染器,将3Dmesh和3D关节投影到图像,并且支持反向传播。定义render损失:其中u=10,w表示2d关键点,s表示轮廓。这下就可以使用2D数据集了。
实验结果
虽然实验结果还没 论文阅读(11):A simple yet effective baseline for 3d human pose estimation 高,但是思想好,还是入选了cvpr
留言