徐家乐,肖学中
南京邮电大学 计算机学院、软件学院、网络空间安全学院,南京 210003
通过单幅图像重建出具有完整纹理的人体三维几何,进而运用3D运动数据驱动生成人体动画,在互动娱乐、图像/视频数据增强甚至影视特效合成等领域都有着广泛的应用场景。因为获取单视图人体图像比获取多视图的人体图像序列更加方便快捷,所以前者应用面更广,适应性更强。特别是在短视频流行的背景下,输入一张图片可以得到一段动画对用户有很强的吸引力。
由于广泛的应用场景,基于单幅图像的人体动画合成技术受到研究人员的高度重视,许多重要算法被提出。有学者提出将人物从背景分割后,结合人体骨骼控制人体剪影运动从而生成动画[1]。该方法忽略了人体的深度信息,通过控制纸片人生成的动画不具有真实感。随着深度学习的发展,近年来很多方法通过骨骼框架引导对抗生成网络生成符合要求的图像,从而达到控制图像中的人物运动的目的[2-9]。但是,由于单幅图像的信息缺失问题,基于对抗生成网络的图像生成方法会产生极为不真实的图像,生成的动画也会出现伪影,不具有连贯性。此外近年来有许多方法试图利用深度学习重建单张图像中的人体的三维几何[10-14]。然而,这些方法重建出的三维几何不具有人体骨骼信息,需要手动添加人体骨骼才能控制其运动。参数化模型SMPL[15]具有人体骨骼信息以及蒙皮权重,能够被姿态参数控制生成不同姿态的人体模型,因此基于参数化模型的重建方法是一个明智的选择[16-18]。然而,标准的参数化模型不具有完整的纹理信息以及头发、服装等几何信息,生成的动画与输入图像中的人物差别过大,缺乏真实感。
据调查所知,Photo Wake-Up[19]是目前从单幅图像重建出可被3D运动数据驱动的人体三维几何的最先进方法。该方法提出先根据输入图像中的人体轮廓信息变形标准的SMPL参数模型分别生成正反面的三维几何模型,再将正反面模型拼接成具有几何细节的人体模型。虽然该方法重建后的模型轮廓与输入图像一致,但是该方法无法恢复正确的手部几何。而且由于该方法采用直线拼接生成的正反面模型,以致重建后的模型丢失了拼接部分的几何细节。同时该方法无法解决人体背面纹理信息丢失的问题。
为了生成具有高度真实感的人体动画,本文提出了一种基于参数化模型的动画生成方法,将单幅人体正面图像作为输入,重建具有完整纹理的人体几何并结合3D运动数据生成动画。首先,使用文献[18]生成与目标人物姿态一致的初始SMPL参数模型。由于标准的SMPL模型缺失人体服装等几何细节信息,与Photo Wake-Up类似,本文以人体轮廓为约束变形初始SMPL模型,得到轮廓与输入一致的正反面几何模型。与Photo Wake-Up用直线拼接正反面几何模型不同,本文提出用基于B样条插值的模型拼接融合方法拼接变形后的正反面模型。由于Photo Wake-Up重建方法无法恢复正确的手部几何,本文提出利用基于B样条插值的网格拼接融合技术,将标准的SMPL的手部几何拼接到重建后的模型上以提高模型真实感。同时为了恢复人体的背面纹理,本文设计并训练了一个图像到图像的对抗生成网络FBN(front to back network)。最后,利用已有的3D运动数据AMASS[20]驱动重构后的模型生成动画。本文的主要贡献如下:
(1)提出一种基于B样条插值的模型拼接融合算法。根据网格轮廓对应关系生成网格间的拼接曲面,从而拼接模型。与使用直线拼接模型相比较,该方法能够平滑自然地拼接模型。另外,本文使用基于B样条插值的模型拼接融合算法替换了重建后的模型中错误的手部几何,提高了模型的真实感。
(2)设计并训练了一个图像到图像的对抗生成网络FBN。根据输入的正面纹理生成对应背面纹理,从而恢复完整的人体纹理信息。
基于以上技术,形成了一个完整的系统。该系统输入单幅人体正面图像,先重建出具有完整纹理以及几何细节的三维人体模型,然后用3D运动数据驱动重建后的三维人体模型运动生成人体动画。本文对现有公开数据集Impersonator(iPER)[9]和PeopleSnapshot[21]以及在互联网上收集的数据进行了充分的实验。实验证明,本文所提方法能够生成具有高度真实感的人体动画。
本文提出一种对单张图片中的人物进行动画处理的方法。具体流程如图1所示,输入一张人体正面图像,首先使用最新的图像分割方法[22]对图像进行分割,生成Mask图(背景为0,前景为1)。然后利用OpenPose[23]生成人体对应的2D骨骼关节点,从而利用文献[18]生成与输入图片中人体姿态一致的SMPL参数模型。由于标准的SMPL参数模型是半裸的,缺失人体服装等几何细节信息,与目标轮廓不一致。本文设计了一个基于二维图像变形的三维模型变形方法,生成与目标人物几何轮廓一致的正反两个三维几何模型。为了生成具有高度真实感的几何模型,本文提出一种基于B样条插值的模型拼接融合算法,用于拼接正反面几何模型以及替换重建后的模型中错误的手部几何。为了恢复被遮挡的人体背面纹理,本文设计并训练了背面纹理生成网络FBN。最后,为了控制重建后的参数模型运动,本文先根据骨骼关节点位置关系将重建出的参数模型逆向变形到标准的T姿态,然后利用AMASS运动数据驱动模型运动生成人体动画。
由于标准的SMPL参数模型不具有服装纹理信息,为了生成与目标人体几何一致的参数模型,需要对初始SMPL参数模型进行重构。一种方法是通过优化SMPL参数模型的顶点位置来强制SMPL参数模型拟合目标人体轮廓,但是这种方法计算复杂度高而且生成的模型表面过于粗糙且不具有完整的与图像中人物一样的服装纹理贴图。因此本文提出了一种基于图像变形的方法重构SMPL参数模型,从而生成与目标人体轮廓完全一致的且具有完整服装纹理信息的可动画处理的网格模型。具体流程如图2所示。
首先使用文献[18]中的方法将标准SMPL模型拟合到输入的图像中,得到与输入图像中人体姿态一致的初始SMPL参数模型以及对应的相机参数。然后使用得到的相机参数渲染初始拟合生成的SMPL参数模型,得到SMPL对应的Mask图(背景为0,前景为1),法向量值贴图以及蒙皮权重图。特别的,为了恢复人体背面的几何模型,在渲染过模型正面视角下的法线贴图后,需要根据模型顶点的法向量将模型正面顶点剔除,再渲染相同视角下的模型的背面顶点所对应的法向量贴图。因为SMPL参数模型的正面与反面顶点蒙皮权重基本一致,所以在本文中正反面模型共用一个蒙皮权重图。
为了将SMPL变形至与目标人体轮廓一致,首先需要找到两者轮廓之间的对应关系。得到目标人体的Mask图以及SMPL渲染生成的Mask图后,从中提取出目标人体的轮廓边界点集Starget和SMPL参数模型的轮廓边界点集Ssmpl。Starget有kt个顶点,表示为{Sitarget|i=1,2,…,kt},Ssmpl有ks个顶点,表示为{Sismpl|i=1,2,…,ks},并且Sitarget,Sismpl∈ℝ2。我们的目标是寻找一组对应关系M(x),x∈{1 ,2,…,kt},即对Starget中每个点在Ssmpl中找到与之对应的点满足:
C(M(i),M(i-1))用于抑制映射索引之间的跳跃性:
本文使用动态规划求解上述最优化问题,其中k=32。由于SMPL渲染生成投影图像的轮廓为闭合曲线,设其轮廓内的像素点为Pi,则其轮廓内所有像素点集合表示为。中值坐标算法[24]可以将Pi用边界点集Ssmpl表示,即使用边界点集Ssmpl的加权组合表示Pi:
其中{∂j(Pi)|j=1,2,…,ks}为内点Pi相对于边界点集Ssmpl的均值坐标。
接下来,使用上面已经计算好的映射关系M()x求得Ssmpl上与目标边界点集Starget对应的像素点集合,将其作为均值坐标算法中的边界点集。因此,内点可以表示为:
求解出内点集合P相对于边界点集=1,2,…,kt}的均值坐标集合{∂j(Pi)|j=1,2,…,ks},然后使用目标轮廓Starget代替=1,2,…,kt}求得Pi变换后的坐标:
根据上述方法,变形法向量贴图后产生的新的变形法向量贴图会出现孔洞,针对该问题本文提出一种孔洞填充方法。该方法首先筛选出变形后的法线贴图中的所有孔洞,对每个孔洞像素点H找到与之相邻的有法向量值的几个像素点,以这些像素点作为边界计算H的均值坐标,然后利用均值坐标对边界点的值进行插值得到孔洞像素点H的法向量值。对蒙皮权重执行相同的操作,值得注意的是,蒙皮权重值填充空洞后要进行归一化处理。
最后根据变形后的法向量矩阵可以求解得到每一点的深度值,从而重构出具有蒙皮权重的三维几何模型。
在重建出正反面两个具有蒙皮权重的三维几何模型后,需要将正反面模型拼接成一个完整的参数模型。与Photo Wake-Up使用线性插值拼接正反面几何模型的方法不同,本文采用基于B样条插值的网格拼接融合方法拼接正反面模型。
给定空间中n个控制点Pi( )i=0,1,…,n,则将这些顶点作为控制点可以确定一条光滑的k阶B样条曲线:
其中,ui是节点值,构成了k阶(k-1次)B样条函数的节点矢量。为k阶B样条基函数,其递推公式如下:
k-1为B样条曲线的次数,顶点Pi称为控制顶点。
给定空间中(m+1)×(n+1)个控制点Pi,j(i=0,1,…,m;j=0,1,…,n),以及参数轴u和v的节点矢量U=(u0,u1,…,um+p)、V=(v0,v1,…,vn+q)可以得到一个p×q阶B样条曲面。定义如下:
其中,Pi,j构成一张控制网格,称为B样条曲面的特征网络,Ni,p(u)和Nj,q(v)是B样条曲面的基,分别由节点矢量按照递推公式确定。
本文提出的基于B样条插值的网格拼接融合算法工作流程如图3所示。首先分别从待拼接的两个网格模型各选取两个边界点集合,然后根据边界点集生成4条B样条曲线,接下来对插值后的4条边界曲线进行曲面插值得到B样条曲面,最后再对生成的B样条曲面网格化。该算法的具体步骤如下:
(1)根据流形网格模型的网格边界特性找到两组待拼接模型的边界点集V11、V21,以及边界点集相邻的边界点集V12、V22。
(2)分别计算出边界点集对应的三次均匀B样条曲线S11、S12、S21、S22,即根据边界顶点反求三次均匀B样条曲线的控制顶点Pi( )i=0,1,…,n,n>3。
(3)根据生成的4条B样条曲线生成B样条曲面,即将三次均匀B样条曲线S11、S12、S21、S22作为v方向的簇,固定u方向,变化v方向,计算v方向的三次均匀B样条曲线簇,从而交织成双三次B样条曲面。(4)对生成的B样条曲面分别沿u和v方向均匀采样,得到网格顶点集,然后将网格顶点集三角网格化生成过渡网格模型。
(5)将待拼接网格模型与生成的过渡网格模型拼接在一起,并使用Laplacian平滑算法对拼接区域进行光顺处理,使得模型光滑拼接。
与Photo Wake-UP不同,本文使用基于B样条插值的模型拼接方法拼接正反面模型,有效地解决了使用线性插值拼接正反面模型导致的拼接区域出现的锯齿状问题。图4展示了本文方法与Photo Wake-Up中的拼接方法的拼接结果对比。图4(a)中左侧几何为Photo Wake-UP中使用的网格拼接算法产生的结果,右侧几何为使用基于B样条插值的网格拼接融合算法产生的结果。实验证明使用基于B样条插值的网格拼接融合算法拼接正反面网格模型生成的几何模型有较好的平滑拼接效果,拼接处过渡自然,没有明显的变形区域。
针对SMPL参数模型变形过程中由于手指间互相遮挡导致的重建后的参数模型的手部几何缺乏真实感的问题。本文提出利用基于B样条插值的网格拼接融合算法,将重建后的模型中错误的手部几何用标准SMPL参数模型的手部几何替换。首先根据重建后的参数模型的3D骨架信息将模型逆向变换到标准的T姿态。根据参数模型的3D关节点信息,将参数模型在手腕关节点处用平面切割。即,以手肘到手腕关节点组成的向量作为法向量,结合手腕关节点位置生成切割平面对参数模型进行切割,生成去除手部后的模型Mbody。同样对标准姿态下的SMPL参数模型进行切割得到左右手网格模型Hr、Hl。然后根据手腕关节点位置信息平移手部网格模型Hr、Hl至与身体网格模型Mbody对齐。最后使用基于B样条插值的网格拼接算法拼接手部模型与身体网格模型。如图5所示,本文提出的手部替换方法能够平滑自然地用标准的手部几何替换重建后的模型中错误的手部几何,增强了模型的真实感。
由于人体的自我遮挡,仅仅通过单张人体图像无法获取完整的人体纹理信息。但是在相同视角下人体的正面和背面具有相同的轮廓和许多相同的视觉特征,因此可以通过正面纹理推测对应的背部纹理从而恢复完整的纹理信息。本文训练了一个条件对抗生成网络FBN,根据输入正面图像生成人体背面纹理。
如图6所示,输入正面图像If,首先利用文献[22]中的图像分割技术提取出人体的二进制掩膜Sf(背景为0,其余为1)。然后将二者输入到生成器G中得到预测的背面纹理特别地,为了消除复杂的背景对生成器造成的干扰,将输入图像If乘以掩膜Sf输入至生成器G,预测的背面纹理可表示为:
其中⊙表示哈达玛积。
本文以监督学习的方式训练生成器G,网络架构采用U-Net网络[25]。损失函数由对抗损失Ladv、基于VGG网络的感知损失LVGG以及像素差损失Lpix构成。LVGG的作用是提升合成图像的纹理细节,其表示为:
其中,f(·)为训练完成的VGG-19网络[26],Ib为真实的背部图像。Lpix损失能够有效地保留正面纹理与背面纹理共有的视觉特征,其表示为:同时为了生成更加清晰的图像,本文采用了与Patch-GAN[27]中相同的对抗损失Ladv:
总损失定义为:
在本文的实验中,设λVGG=1.0,λpix=20.0。
训练背面纹理生成网络FBN的生成器,需要大量的前后视图图像对。然而在现实生活中不存在这样的对齐的图像对。本文将公开的人体模型数据集PVHM[28]和THuman[29]渲染成一个对齐的图像对数据集,用于训练背面纹理生成网络FBN。为了避免过拟合,在渲染模型时随机改变相机视角的俯仰角、相机距离、灯光条件。
本文使用Xavier[30]初始化整个FBN网络,采用Adam优化器(β1=0.5,β2=0.999),学习率为0.000 2,批量大小为8,迭代了20轮。在Impersonator[9]数据集以及People-Snapshot[21]数据集上的测试结果如图7、图8、图9的(b)列所示。虽然FBN网络无法准确地生成人体的背面服装纹理,特别是在正反面纹理差异较大时,但是FBN网络能够根据正面纹理较为准确地推断出人体背面的头发纹理并生成令人信服的服装纹理。
图7展示了本文在Impersonator[9]数据集上的部分重建结果。图8展示了本文在PeopleSnapshot[21]数据集上的部分重建结果。对于每个输入,本文展示了背面的纹理生成结果,重建的三维模型正面视角以及背面视角。本文方法能够处理不同体型和身高的人,生成与目标人物轮廓一致的具有完整纹理以及服装几何细节的人体参数模型。图9展示了本文针对互联网上的图像的生成结果。本文方法不仅可以处理真实的人体图像,甚至可以处理卡通图像(如图9第2行)。基于深度学习的模型重建方法只有输入真人图像时才会得到较为良好的结果,因为该方法是基于真人数据集训练而成。本文的重建方法不依赖于数据集,因此具有更强的泛化能力。本文方法还可以处理穿着宽松衣服的人(如图9第4行)。因为本文提出的重建方法能够生成与目标轮廓一致的三维人体模型。
图10展示了模型动画后的部分结果。图10中(a)列为输入图像,(b)、(c)、(d)、(e)列为生成的动画的部分截图,(f)列为替换手部几何后生成的动画截图。本文采用模型重建再渲染的方法生成动画,有效地消除了传统动画生成方法生成的动画中出现的伪影,增强了生成动画的真实感。同时,本文生成的动画还可以应用至虚拟现实场景中。由于重建过程中无法恢复正确的手部几何,本文采用基于B样条插值的网格拼接融合算法将错误的手部几何用标准的SMPL模型的手部替换,图10最后一列展示了替换后的模型效果。本文采用的基于模型重建再渲染的动画生成方法有效地去除了生成的动画中的伪影。替换错误的手部几何后能够生成更具真实感的人体动画。
图11 展示了本文方法与Photo Wake-Up[19]的结果对比。图11中,第一列为Photo Wake-Up重建的结果,第二列为本文替换手部几何前的结果,第三列为替换手部几何后的结果,最后一列为局部细节放大结果。与Photo Wake-Up相比,本文使用基于B样条插值的模型拼接方法不仅能够平滑自然地拼接正反面网格,还能够替换错误的手部几何使得模型更具真实感。同时,本文还能够较准确地生成背面纹理。相较于Photo Wake-Up,本文方法可以重建出具有全身纹理以及轮廓和手部几何细节的更具真实感的人体参数模型。
图12 展示了初始SMPL模型与重构后的模型对比。图12(a)为输入,(b)为初始SMPL参数模型,(c)为本文方法重构后的人体模型。标准的SMPL参数模型是半裸的,不具有人体服装信息,与输入图像中的人体轮廓不一致。本文的三维人体几何重建方法能够生成与目标轮廓一致的人体模型。
本文还在PeopleSnapshot数据集上将本文方法和其他相关人体三维重建方法做了定性的比较。BodyNet[31]是一种基于体素的方法,仅从一幅图像估计人体姿势和形状。SiCloPe[10]也是基于体素的,但通过依赖于物体的合成轮廓来恢复某些细节。HMR[17]是一种基于SMPL参数模型从单个图像估计姿势和形状的方法。Video Shapes[21]是基于视频的单眼形状重建方法,由于该方法是基于优化的并且需要首先拟合每个帧的姿态,这使得该过程非常慢。Tex2shape[13]从局部纹理中估计有细节的法线贴图和向量偏移贴图,从而恢复三维模型。在图13中,本文对上述所有方法进行了比较。第一列为输入,第二列为BodyNet方法的重建结果,第三列为HMR方法的重建结果,第四列为SiCloPe方法的重建结果,第五列为Video Shapes方法的重建结果,第六列为Tex2shape方法的重建结果,最后两列为本文方法重建出的结果。本文的结果比前三种方法更详细,与后两种重建方法在细节恢复方面具有可比性,但是本文重建后的模型可以由3D运动数据驱动生成动画。
Liquid Warping GAN[9]利用人体姿态引导神经网络生成不同姿态的人体图像从而构成动画。但是基于神经网络的动画生成方法生成的动画缺乏真实感,容易产生伪影。图14展示了本文方法和Liquid Warping GAN生成动画的部分截图,图中第一列为输入,红色虚线标注的是Liquid Warping GAN生成的图像,蓝线标注的为本文生成的图像。Liquid Warping GAN生成的图像容易出现伪影,人体纹理细节大量丢失。实验证明,本文提出的动画生成方法有效地消除了生成的动画中的伪影,生成的动画在清晰度、真实感等方面显著提高。值得注意的是与Liquid Warping GAN相比,本文方法处理漫画风格的人物时也有较好的效果,如图14最后一行所示。
本文提出了一个完整的框架,从单幅图像中生成具有高度真实感的动画。本文依据轮廓变形标准的SMPL参数模型,并将基于B样条插值的网格拼接融合算法用于正反面模型拼接以及手部的替换,从而提高重建后的模型的真实感。同时本文还训练了一个对抗生成网络用于恢复模型的背部纹理。最后结合运动数据集控制重建后的参数模型运动,从而生成动画。
本文方法还有一些局限性:首先,本文需要输入图像中的人体正对相机,而且身体部位不能够相互遮挡。第二,虽然本文恢复了手部的正确几何,但是由于缺少手指运动数据,从而无法生成逼真的手指运动动画。最后,在重建过程中会丢失部分纹理细节,例如鞋子部分。