人体姿态转移的密集本征外观流
Yining Li1 Chen Huang2 Chen Change Loy3
1CUHK-SenseTime Joint Lab, The Chinese University of Hong Kong 2Robotics Institute, Carnegie Mellon University
3School of Computer Science and Engineering, Nanyang Technological University ly015@ie.cuhk.edu.hk chenh2@andrew.cmu.edu ccloy@ntu.edu.sg
摘要
提出一种新的人体姿态转移的方法,旨在合成新的图像(输入图像中的人和目标姿势合成)。区别于现存的方法,我们打算评估密集和本征的3D外观流来更好地指导姿势之间的像素转移。特别地,我们希望仅仅通过参考图像和目标姿势来生成3D流。为此训练一个网络是具有重大意义的,特别是当3D外观流的注解天生就很稀缺的时候。(姿势转移对应点的相关关系不够?)我们通过一个流合成的阶段处理这个问题。解决方法是,将给定的姿势对拟合一个3D模型,并且将此投影回2D平面来计算用来训练的密集外观流。这个合成的地面真值随后被用来训练前馈网络,来有效的将输入和目标骨架姿势映射到3D外观流。利用外观流,对输入图像进行特征卷曲并生成逼真的目标姿势图像。在DeepFashion和Market-1501数据集上的大量结果证明我们的途径比现存的方法都要有效。我们的代码可在以下网址获得:http://mmlab.ie.cuhk.edu. hk/projects/pose-transfer/
- 引言
预测目标在新的视角下的样子的能力是智能的基础。人体姿态转移[26]是这种视角合成任务的重要实例。给定人物的单一视角/姿势,目标是合成人物在任意姿态下的图像。在计算机视觉和图形学上,这个任务对很广泛的应用都有很大的价值。例如视频合成和编辑,数据增强,以解决诸如人体重新识别等问题,在这些问题中,难以从不同的相机获取足够的同一人物的图像。
尽管深度生成模型快速发展,例如生成对抗网络(GAN)[6]和变分自编码器(VAE)[17],不同姿势间的人体图像生成依然非常困难。主要的挑战是给由于3D姿势改变而导致的2D外观的巨大变化来建模。挑战进一步变得复杂,由于人体的自遮挡引起的歧义,这种歧义在推测目标姿势下不可见的像素时产生。大体上,成功的人体姿态转移需要对人体姿势和外观的良好的表示和分离,这对于从数据中学习是意义重大的。推测不可见部分的能力也是重要的。此外,图像视觉质量很大程度取决于高频细节是否能够被保留,例如在服装和脸部区域。
大多现存的人体姿态转移的方法[1,5,18,23,24,27,28,47]采用编码-解码器的结构来学习输入图像的外观变化,用一些人体关节关键点编码的输入和目标2D姿势来指导。然而,这些关键点为基础的表示法只能捕获粗略的空间变形,而不是细粒度的。因此,常常产生失真或者不真实的细节,尤其是当存在大的姿势改变和非刚性的人体形变时。近期的进展要不是用一组局部仿射变换来分解整体形变[34],就是用比基于关节的表示法更细节的姿势表示法。后者能进行“密集外观流”的计算,可以更精确的描述如何由输入姿势移动像素点。Neverova等人[26]表明,通过DensePose[7]实现基于表面的姿势表示是一个更好的选择。Zanfir 等人 [44]致力于用3D模型拟合输入和输出图像,然后在相应的顶点执行外观转移。3D几何结构监督下得到的外观流更为理想,但3D模型的拟合在推理时负担过重。
在本文中,我们提出一种人体姿势转移的新方法,融入了只用二维表示法对三维几何结构隐式的推理,这让我们共享了使用三维几何体进行精确姿势转移的好处,但速度要快得多。我们的主要想法是从训练图像对(和他们的姿势关键点)中恢复隐含的3D模型,这个3D模型可以在投影回2D图像平面时可以提供地面真值外观流给我们学习。这样的密集和本征的外观流隐含的将人体的3D结构进行编码。接下来我们训练外观流生成模型,用传统的前馈网络表示,这个模型直接将一对2D姿势表示成相应的外观流。这个模型帮助我们在测试时跳过昂贵的3D模型拟合,并更快的预测本征的像素的对应关系,不需要显示的访问3D集合体。
图1(左)描述了我们全部的图像生成框架。给定一个基准图(和其姿势)以及目标姿势,我们首先使用U-Net[29]的变体来分别编码基准图和目标姿势。随后我们的外观流模型由图像对生成一个3D流映射,并且进一步生成可见性映射,这个映射来描述目标姿势中由于自遮挡而缺失的像素。这个可见性映射证明,在我们的网络中,在正确的位置合成缺失的像素是很重要的。为了以目标姿势渲染最终图像,编码后的图像特征首先通过生成的流映射(the generated flow map)进行卷曲,然后转到由可见性映射指导的控制模块(gating module)。最后,姿势解码器将这些处理过的图像特征连接起来,生成图像。我们的U-Net型的图像生成器和外观流模型是端到端训练的,为了优化重建损失,对抗损失,感知损失的组合。我们的方法能在DeepFashion[20]和Market-1501[48]数据集上生成高质量的图像,表明了在现存的基于关键点或其他的姿势表示法的图像生成器的提高。我们的方法也实现了令人信服的定量结果。
本文的主要贡献可以总结如下:
·提出一个正反馈外观流生成模型,有效地编码三维空间中人体姿态转移的密集和本征的对应关系。
·学习一个端到端的图像生成结构,根据外观流映射来移动像素,根据可见性映射解决自遮挡。
·在DeepFashion数据集上产生最先进的表现和高质量的图像。
- 相关工作
深度生成图像模型。近年来,图像生成的深度生成模型取得了突破,用生成对抗网络(GAN)[6],变分自编码器(VAE)[17]等等。在这些之中,生成对抗网络由于它生成逼真图像的能力,引起了极大的注意。后续的工作使GANs有条件的,基于额外的输入生成图像,例如类标签[25],自然语言描述[33,45,46]或者其他领域的图像[12],这导致了图-to-图领域的迁移框架。对抗学习在许多其他任务中也展示了它的有效性,例如图像超分辨率[19,39,40]和纹理生成[42]。
人体姿势转移。生成以人为中心的图像是图像合成的一个重要分区。任务范围从生成穿着衣服的完整人体[18]到生成人的动作序列[3]。Ma等人[23]是第一批进行人体姿势转移任务的人,该任务的目的是,在目标人物的参考图像已经预先给出的情况下,以目标姿势生成这个人的图像。姿势包含18个关键点,表示成18通道的关键点热图。然后将其与参考图像连接,送入two-stage CNN中来对抗性训练。Zhao等人[47]采用一种相似的由粗到精的方法来生成新图像,但以目标视角为条件,而不是以有多个关键点的目标姿势为条件。为更好解决大型姿势转移中人体的非刚性形变。Siarohin等人[34]提出Deformable GAN来用一组局部仿射变换分解全部的形变。另外的一类工作[5,24,27,28],聚焦于用弱监管的方式解开(分层disenlangling)人的外观和姿势。这些方法仅用单个图像而不是一组图像作为输入,试图在单独的嵌入(a separate embedding)中提取外观信息,有时候借助于一致性惩罚(cycle-consistent penalty)[27]。
基于几何的姿态转移。近年来一些工作集成人体的几何约束来提高人体姿势转移的效果。Neverova等人[26]在DensePose[7]之上提出一种基于表面的姿势表示法。这允许将人体像素映射到有意义的UV-coordinate空间,在这个空间中,表面插值和图像修补可以发生,在卷曲回图像空间之前。另一方面,Zanfir提出利用人体3D模型来显式的抓取人体形变。特别地,他们拟合3D人体模型[21]到源图和目标图用[43]的方法,这个方法中,人体用6890个表面顶点表示。重合顶点的像素直接转移到目标图像,源图中不可见的顶点用神经网络虚构生成。这个工作的缺点是3D模型拟合的计算昂贵,并且不总是精确的。我们的方法避免了在测试时昂贵的3D模型拟合,而是学习预测由三维对应关系确定的2D外观流映射和可见性映射来指导像素转移。
视图合成的外观流。光流[9]在两幅图像之间提供了密集的像素到像素的对应关系,并在有些任务中被证明很有用,比如视频中的动作识别[35]。外观流[49]规定了不同视角的图像之间的密集对应关系,这个我们的设定很接近。然而,先前的工作主要是对简单视角转换(例如球体旋转)或者严格的对象(例如,车)来估计外观流。反之,我们的外观流模型处理任意姿势转换的关节型人体。
3研究方法
3.1问题的提法和符号
给定一个参照人图像x,一个目标姿势p,目标是生成一个逼真的图像,是参照人以p姿势的图像。对于任意姿势转变,我们简单的采用通用的姿势表达法来指导这样的转移。特别地,我们使用18个人体关键点,和[23,24]一样,这些关键点由姿势估计器[2]提取到。这些关键点编码成18通道的二进制热图,每个通道在关键点周围8像素的半径内填充1,在其他地方填充0。在训练中,我们考虑图像对(x1,x2)(源和目标),和他们对应的姿势(p1,p2)。这个模型将三元组(x1, p1, p2)作为输入,试图以和p2姿势的目标图像x2较小的误差,生成。
提出的密集本征外观流由两个部分组成,也就是图像对(x1, x2)之间的流映射F(x1, x2)和可见性映射V(x1, x2),这两个映射共同地表示他们的3D空间的像素对应关系。接下来,为简单起见,我们省略脚注,并简写作F和V。注意F和V和目标图像x2有相同的空间维度。假定ui’和ui是,3d人体的点hi在投影到图像x1和x2后的二维坐标,F和V可以定义为:
Visibility(hi,x1)是表明hi在x1中是否可见的函数(由于自遮挡或超出像平面)。它输出三个离散值(代表可见,不可见,背景),这被颜色编码到可见性映射V中(图3中有个例子)
3.2总体框架
图2说明了我们的人体姿势转移框架。给定输入图像x1和它提取出的姿势p1,以及目标姿势p2,流回归模型首先由公式(1)从(p1,p2)预测了密集的3D外观流F和可见性映射V。然后使用元组(x1,p2,F,V)来进行图像生成。注意输入图像x1和目标姿势p2很可能空间上不重合,因此如果我们想要直接把这个元组连接并送入单一的卷积网络中来生成目标图像,我们将只能的到次优的结果。部分原因是,一个单一网络中的卷积层(特别是底层的卷积层),可能限制感受域(receptive field)捕获大的空间位移。[23]引入了一些独特的网络结构来解决这个问题。
图2:概观我们的人体姿态转移框架。使用输入图像x1,x1提取的姿势p1,和目标姿势p2,目标是绘制一个p2姿势的新图像。我们的流回归模型首先生成本征的外观流映射F和可见性映射V,这是用来扭曲(warp)从参考图x1中得到的编码特征{}。然后被扭曲(warp)的特征{}和目标姿势特征{}通过一个解码器Gd来产生图像。这个结果被一个像素扭曲模块进一步优化,来生成最终结果。我们的训练目标包括使用PatchGAN[12]来鉴别(x1,p2,x2)和(x1,p2,),和重建和感知损失一样(reconstruction and perceptual losses)。
受到[34,47]的启发,我们选择使用dual-path U-Net[29]来分别建模图像和姿态信息。具体地,使用一个外观编码器Gea和姿态编码器Gep来编码图像x1和目标姿势p2到特征金字塔(feature pyramids){}{}。然后使用一个特征扭曲模型来解决在姿势转移时的空间偏差问题。这个模型根据我们生成的流映射F扭曲外观特征。同时,通过引入可见性映射V,隐式地考虑了目标姿态中可能丢失的像素点。我们的特征函数被定义为:
其中,WF是Sec.3.4中详细描述的warping操作,表示在特征层k被warp的特征。接下来我们将被warp的特征{}和目标姿势特征{}按层次连接起来,这些特征通过skip connections馈送到图像解码器Gd以生成目标图像。最后,由像素扭曲模型进一步加强(Sec. 3.5)来获得最终输出。我们的一个训练目标是对抗损失。我们采用PatchGAN[12]来对合成的图像patches的真实感打分。PatchGAN鉴别器的输入patches来自(x1,p2,x2)和(x1,p2,)。我们发现(x1,p2)的连接为GAN的训练提供了良好的条件。
3.3流回归模型
3D外观流回归的主要模型在Fig.3.中展示。这个模型是一个前馈CNN,从姿势对(p1,p2)中预测了必须的外观流映射F和可见性映射V。和光流预测[4,10]很相似,但区别在于我们的流映射和可见性映射目的在于编码3D密集对应关系,而不是光流法中的2D对应关系。为了精确预测这两种映射,我们利用一个3D人体模型来合成他们的地面真值来训练。
图3:我们的外观流回归模型采用一个U-Net架构从所给的姿势对(p1,p2)中预测本征的3D外观流映射和可见性映射V。这个模型是共同训练,在F上用断点误差损失(End-Point-Error),在V上用交叉熵损失。
地面真值的生成。 为这个目的,我们从DeepFashion数据集[20]中随机采样同人的图像对(x1,x2)。接下来拟合一个3D人体模型[21]到两幅图,用目前最先进的方法。这个3D模型用6890个点和13766个面的网格来表示人体。在3D模型拟合之后,我们用一个图像渲染器[22]把他们投影回2D图像平面。由Eq.(1)可知,对于图x2中投影的二维坐标uj。我们确认它精确地属于哪个3D网格面,从而通过重心变换计算出图像x1中对应的二维坐标。得到的流向量被计算为。此外,我们可以从图像渲染器中获得每个网格面的可见性,从而得到完整的可见性映射V。Fig.4(middle)展示了一些生成作为地面真值的流映射和可见性映射的例子。二维图像投影的一个副产品是我们可以从图像渲染器[15]获得相应的二维姿势。我们将这一被渲染的姿势表示为,并且将详细描述接下来怎么使用。
图4:三维外观流映射和可见性映射的例子:生成地面真值(中)和用我们流回归模型(右)的预测。地面真值是用三维模型拟合来渲染的,偶尔会出现错误,比如最后一行的叠腿。而我们的流量回归模型可以通过对给定姿态的预测来修正误差。
网络结构和训练。图3显示了如何用一个U-Net结构训练三维外观流回归模型。这个结构用一组姿势对(p1,p2)作为输入,并且被训练来同时预测流映射F和可见性映射V,F使用end-point-error(EPE)损失,V使用cross entropy损失。我们注意到三维模型拟合过程有时候会造成错误,例如当人的腿交叠时,正如图4(中间,最后一行)。在这种情况下,基于图像的三维拟合合成的流映射和可见性映射{F,V}不再和地面真值姿势(p1,p2)一致。因此它错误的训练了流回归,从(p1,p2)到不匹配的{F,V}。幸运地,正如之前提到的,我们已经从二维投影过程中呈现了姿势姿势{,},他将生成相应的映射{F,V}。此外,我们选择从渲染的姿势{,}执行回归到{F,V},而不是从潜在的不匹配的地面真值姿势(p1,p2)。我们发现,即使在三维模型不完全匹配的情况下,这种经过训练的回归器在渲染的位姿流对之间也能很好地工作。一旦我们的外观流回归模型完成了训练,它就在整个的姿势转移框架中被冻结(不会再改变了)。在测试时,我们的流回归模型可以很好地推广到给定的姿势p。
3.4流指导特征扭曲
回到我们的3D外观流映射和可见性映射是为了将参考图像和目标姿势对齐并修复其中的不可见像素而生成的。我们用两个映射来指导输入图像特征的扭曲来完成。特征扭曲模型在Fig.5.中说明。输入是图像特征(在特征层k)并且调整流和可见性映射(Fk,Vk)的尺寸来匹配的尺寸。我们首先使用一个空间转移层[13]通过流映射Fk扭曲输入特征。被扭曲的特征接下来被馈送到一个spatial gating layer,该选通层根据可见性映射Vk将特征映射划分为相互排斥的区域。在这里,我们不能简单的过滤掉不可见的特征映射像素,因为它们可能依然包含有用的信息,比如服装风格或体型。门控特征映射被送到带有两个残差通道的卷积层来得到最终的warped 特征。我们的特征warping模块是可微的,允许端到端训练。
3.5像素变形
正如图2所示,给定变形的特征{},我们按层次的将这些特征和姿势特征{}连接。他们通过跳过链接共同被馈送入图像解码器Gd中来渲染目标图像。在我们的实验中,发现中有时会丢失高频细节,这表明仅在特征级别上进行图像扭曲是无效的。为这个目的,我们打算再像素级别上对进一步加强。类似地,使用我们的3D外观流,使用像素扭曲模块将输入图像x1中的像素扭曲到目标姿势。
特别地,我们根据全分辨率流映射F扭曲x1,来得到扭曲的图像xw。注:xw包含来自输入x1的所需图像细节,但可能由于粗略的流映射和身体遮挡而失真。因此,我们训练另外一个U-Net来分别从像素级和特征级在输出xw和之间进行加权。这个加权网络使用xw,,F,V作为输入,输出一个与xw和x2分辨率相同的软加权映射z。使用sigmoid函数将映射z规范化为(0,1)的范围。最终输出的结果,计算为xw和的加权和:
图6验证了像素变形的效果。我们可以看到像素扭曲实际上可以增加不能被特征扭曲结果恢复得很好的高频细节,添加的细节是使用我们的内在外观流简单地从参考图像复制。
图6:像素扭曲例子。从左到右:像素扭曲图像xw,权重映射z,特征扭曲图像,融合了像素扭曲的最终图像,以及地面真值目标图像x2。
3.6损失函数
我们模型的目标是完成到任意姿势的精确地人体姿态转移,生成逼真的人体姿态转移图像。这个课题富有挑战意义,由于在姿态转移中富有大型的柔性形变,以及人体图像的复杂细节。条件图像生成的早期工作[12,38],人体姿态转移[23,26,34],利用多种损失函数来共同监督训练过程。在本工作中,我们类似的采用三个损失函数的组合,命名为对抗损失Ladv,一个L1重建损失LL1,以及感知损失Lperceptual。他们的细节如下。
对抗损失。我们课题的条件设定中采用vanilla GAN损失,具体是:
L1 损失。早期工作[12]展示了当目标地面真值可获得时,L1损失可以稳定训练过程。因此我们也在生成图像和目标图像间使用了一个L1约束:
感知损失。[14]中的工作表明,预训练CNN对两幅图像提取出的特征映射之间的L2距离惩罚,可以鼓励图像结构的相似性。我们采用由ImageNet[30]预训练的VGG19网络[36]作为特征提取器,并且使用多层特征映射Фj来计算感知损失:
我们最终的图像生成的损失函数是以上项目的加权和:
4实验
4.1数据集和实现细节
数据集。我们评估这个方法,使用DeepFashion数据集(店内服装检索基准)[20],这个数据集包括了52712条店内服装图像和200,000条交叉姿势/规模对。这些图像分辨率是256x256像素。按照[34]中的设置,我们选择89262对来训练,12000对来测试。我们在数据集Market-1501[48]上进一步完成了实验并且在补充材料中展示了结果。(见另一份pdf文件。)
网络结构。生成器使用N=7levels的U-Net结构。在每个特征层,编码器有两个串联残差块cascaded residual blocks[8],接下来是一个步长为2的卷积层来进行下采样,而解码器有一个对称的结构,带有两个残差块的上采样层。上采样层实现为一个卷积层,接着是一个像素移动操作pixel shuffing operation[32]。编码器和解码器相应的残差块之间有跳过连接,在每个卷积层之后(除了最后一个),使用批次正则化batch normalization [11]