GitHub - IDEA-Research/OSX: [CVPR 2023] Official implementation of the paper "One-Stage 3D Whole-Body Mesh Recovery with Component Aware Transformer"
三维全身人体网格重建(3D Whole-Body Mesh Recovery)是三维人体重建领域的一个基础任务,是人类行为建模的一个重要环节,用于从单目图像中捕获出准确的全身人体姿态和形状,在人体重建、人机交互等许多下游任务中有着广泛的应用。
来自粤港澳大湾区研究院(IDEA)与清华大学深研院的研究者们提出了首个用于全身人体网格重建的一阶段算法OSX,通过模块感知的Transformer网络,高效、准确地重建出全身人体网格,并提出了一个大规模、关注真实应用场景的上半身人体重建数据集UBody.
本文提出的算法从投稿至今(2022.11~2023.04),是AGORA榜单SMPL-X赛道的第一名。该工作已经被计算机视觉顶会CVPR2023接收,算法代码和预训练模型已经全部开源。
文章:https://arxiv.org/abs/2303.16160
代码:https://github.com/IDEA-Research/OSX
项目主页:https://osx-ubody.github.io/
单位:IDEA,清华大学深研院
三维全身人体网格重建(3D Whole-Body Mesh Recovery)是人类行为建模的一个重要环节,用于从单目图像中估计出人体姿态(Body Pose), 手势(Hand Gesture)和脸部表情(Facial Expressions),该任务在许多下游现实场景中有着广泛的应用,例如动作捕捉、人机交互等。得益于SMPLX等参数化模型的发展,全身人体网格重建精度得到了提升,该任务也得到越来越多的关注。
相比于身体姿态估计(Body-Only Mesh Recovery),全身人体网格重建需要额外估计手和脸部的参数,而手和脸部的分辨率往往较小,导致难以通过一个一阶段的网络,将全身参数估计出来。之前的方法大多采用多阶段的复制-粘贴(Copy-Paste)框架,提前检测出手和脸的包围框(Bounding Box),将其裁剪出来并放大,输入三个独立的网络,分别估计出身体(Body), 手(Hand), 和脸(Face)的参数,再进行融合。这种多阶段的做法可以解决手和脸分辨率过小的问题,然而,由于三部分的参数估计相对独立,容易导致最后的结果以及三部分之间的连接不够自然和真实,同时也会增加模型的复杂度。为了解决以上问题,我们提出了首个一阶段的算法OSX,我们使用一个模块感知的Transformer模型,同时估计出人体姿态, 手势和脸部表情。该算法在较小计算量和运行时间的情况下,在3个公开数据集(AGORA, EHF, 3DPW)上,超过了现有的全身人体网格重建算法.
我们注意到,目前的全身人体网格重建数据集,大部分是在实验室环境或者仿真环境下采集的,而这些数据集与现实场景有着较大的分布差异。这就容易导致训练出来的模型在应用于现实场景时,重建效果不佳。此外,现实中的许多场景,如直播、手语等,人往往只有上半身出现在画面中,而目前的数据集全部都是全身人体,手和脸的分辨率往往较低。为了弥补这方面数据集的缺陷,我们提出了一个大规模的上半身数据集UBody,该数据集涵盖了15个真实场景,包括100万帧图片和对应的全身关键点(2D Whole-Body Keypoint), 人体包围框(Person BBox)、人手包围框(Hand BBox)以及SMPLX标签。下图是UBody的部分数据可视化。
图1 UBody数据集展示
本工作的贡献点可以概括为:
我们提出了首个一阶段的全身人体网格重建算法OSX,能够用一个简单、高效的方式,估计出SMPLX参数。
我们的算法OSX在三个公开数据集上,超过了现有的全身人体网格重建算法。
我们提出了一个大规模的上半身数据集UBody,用以促进全身人体网格重建这个基础任务在现实场景中的应用。
如下图所示,我们提出了一个模块感知(Component-Aware)的Transoformer模型,来同时估计全身人体参数,再将其输入SMPLX模型,得到全身人体网格。我们注意到,身体姿态(Body Pose)估计需要利用到全局的人体依赖信息,而手势(Hand Gesture)和脸部表情(Facial Expression)则更多的聚焦于局部的区域特征。因而,我们设计了一个全局编码器和一个局部解码器,编码器借助于全局自注意力机制(Global Self-attention),捕获人体的全身依赖关系,估计出身体姿态和形状(Body Pose and Shape),解码器则对特征图进行上采样,使用关键点引导的交叉注意力机制(Cross-Attention),用以估计手和脸部的参数。
图2 OSX网络结构示意图
在全局编码器中,人体图片首先被切为多个互不重蛩的块,这些块通过一个卷积层,加上位置编码,转换为特征令牌(Feature Token) ,接着,我们再将其与若干个由可学习参数构成的人体令牌(Body Token) 进行连接,输入全局编码器。全局编码 器由多个Transformer块组成,每个块包含一个多头自注意力、一个前馈网络和两个层归一化模块(Layer Normization). 经过这些 块之后,人体各个部分之间的信息得到了交互,body token 捕捉了人体的全身依赖关系,输入全连接层,回归出人体姿态和 形状. Feature token则进行重组(Reshape),转换为特征图,供解码器使用。
在解码器中,我们首先对特征图进行上采样,以解决手和脸分辨率过低的问题。具体的,我们使用一个可微分的感兴趣区域对齐 (Region of Interest Alignment)操作,将手和脸部的特征图进行上采样,因而获得多尺度的手、脸高分辨率特征 。接着,我们定义多个模块令牌(Component Token) ,每一个token代表一个关键点,将这些token输入解码器,通过关键点 引导的交叉注意力机制,从高分辨率特征中捕获有用的信息,更新Component Token:
最终,这些模块token通过全连接层,转换为手势和脸部表情,并与身体姿态和形状一起,输入SMPLX模型,转换为人体网格。
为了缩小全身人体网格重建这一基础任务与下游任务的差异,我们从15个现实场景,包括音乐演奏、脱口秀、手语、魔术表演等,收集了超过100万的图片,对其进行标注。这些场景与现有的数据集AGORA相比,由于只包含上半身,因而手和脸的分辨率更大,具有更加丰富的手部动作和人脸表情。同时,这些场景含有非常多样的遮挡、交互、切镜、背景和光照变化,因而更加具有挑战性,更加符合现实场景。此外,UBody是视频的形式,每个视频都包含了音频(Audio),因而未来也可以应用于多模态等任务。
图3 UBody 15个场景展示
为了标注这些大规模的数据,我们提出了一个自动化标注方案,如下图所示,我们首先训练一个基于ViT的关键点估计网络,估计出高精度的全身人体关键点。接着,我们使用一个多阶段渐进拟合技术(Progreesive Fitting),将OSX输出的人体网格转换为三维关键点(3D Keypoints),并投影到图像平面,与估计的二维关键点(2D Keypoints)计算损失,用以优化OSX网络参数,直至估计出来的网格与2D关键点能够高度贴合。
图4 全身动捕标注框架图
以下是UBody数据集的15个场景及其标注结果的展示:
SignLanguage
Singing
OnlineClass
Olympic
Entertainment
Fitness
LiveVlog
Conference
TVShow
ConductMusic
Speech
TalkShow
MagicShow
OSX从投稿至今(2022.11~2023.04),是AGORA榜单上SMPLX赛道的榜首,在AGORA-test (https://agora-evaluation.is.tuebingen.mpg.de/)上的定量对比结果如下表所示:
表1 OSX与SOTA算法在AGORA-test上的定量结果
在AGORA-val上的定量对比结果如下表所示:
表2 OSX与SOTA算法在AGORA-val上的定量结果
在EHF和3DPW的定量结果如下:
表3 OSX与SOTA算法在EHF及3DPW上的定量结果
可以看出,OSX由于使用了模块感知的Transformer网络,能够同时保证全局依赖关系的建模和局部特征的捕获,在现有数据集,特别是AGORA这一较为困难的数据集上,显著超过了之前的方法。
在AGORA上的定性对比结果如图所示:
从左到右依次为:输入图, ExPose, Hand4Whole, OSX(Ours)
在EHF上的定性对比结果如图所示:
从左到右依次为:输入图, ExPose, Hand4Whole, OSX(Ours)
在UBody数据集上的对比结果如图所示:
从左到右依次为:输入图, ExPose, Hand4Whole, OSX(Ours)
可以看出,我们的算法OSX能够估计出更加准确的身体姿势,手部动作和脸部表情,重建出来的人体网格更加准确,与原图贴合的更好,更加鲁棒。
OSX是首个一阶段全身人体网格重建的算法,通过一个模块感知的Transformer模型,同时估计了body pose, hand pose和facial experssion,在三个公开榜单上取得了目前最好whole-body mesh recovery最好的结果。此外,我们提出了一个大规模的上半身场景数据集UBody,用以促进人体网格重建任务在下游场景中的应用。我们的代码已经进行了开源,希望能够推动该领域的发展。