以下链接是个人关于Liquid Warping GAN(Impersonator)-姿态迁移,所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:a944284742相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。
风格迁移1-00:Liquid Warping GAN(Impersonator)-目录-史上最新无死角讲解
我们仅仅使用了一个框架,就处理human motion imitation(人类动作模仿), appearance transfer(外观转换),以及 novel view synthesis(新视觉生成),并且训练其中任意一个模型,就完成这3个任务。一些方法利用2D的keypoints(关键点)或者pose(姿态)去估算人类身体的结构,然而他们只能表现了位置信息,没有能力去体现一个人的形状(高矮胖瘦)以及四肢的旋转。在这篇论文中,我们提到了一个3D身体恢复的模型,去处理姿态和形状的问题,他不仅能表达出位置和旋转信息,并且还能描述出个人的形状以及个性化。
为了保护原图的信息,比如纹理,风格,颜色,和人脸身份等细节,我们提出了一个Warping GAN(扭曲GAN) 以及Liquid Warping Block (LWB),他能在特征空间和原图之间传递信息,并且能够使多张参考图像合成一张图像。为了更好的描述原图的身份ID,使用的一个auto-encoder(自动编码)的降噪卷积提取原图的特征。
我们提出的模型,能够很灵活的支持多个sources img的warping(扭曲)。另外,我们还构建的一个新的数据集Impersonator (iPER),后续的实验对比,如动作模仿,外观转换,新视角生成,已经存的先进模型,以及我们的模型,都是在这个数据的基础上进行实验的。
人类图像合成,包含了动作模仿,外观转换,新视角合成。他们有巨大的潜在运用价值,如动漫角色,虚拟换衣服等等。都是给定一张source human image以及一张 reference human image。动作模仿的目标是把source human image的动作,变换成reference human image的动作,外观转换是交换两张图像中人物的外观(如衣服,裤子,鞋子等,但是不包含脸部),新视角合成,就是对视角进行转换,比原图是一张正面图,去合成他的背面图,展示如下:
在图像合成领域,之前处理上面介绍的三个任务,都是分开来的,换而言之就是一个模型很难同时适用于3种任务。最近,GAN网络额出现,在三个任务上,都能达到一个很好的效果,比如我们这里把动作模仿作为一个例子,做了一些总结,如下图所示:
图示翻译:现在有三种把原图信息传播到目标图像的方法:a 是最早的串联方式,即把原图,原条件,和目标条件一起并入颜色通道。b 和 c 是进行纹理或者特征提取,然后把提取到信息传入到目标条件之中。
在早期的工作中,如上图的a所示,source image(带有姿态条件信息)和target 姿态条件被串接起来,然后被送入网络对抗神经网络进行训练,得到一张预期姿态的图像。然而,之间拼接,不考虑空间布局,对于生成器来说,很难再正确的位置上生成想要的像素,因此他得到的图像总是模糊不清的,经常丢失原图的身份信息。后来受到到the spatial transformer networks(STN)的启发,一个纹理扭曲的方法被提出,如上图的 b 所示,这种方法,他首先拟合一个从source pose 到 reference poses 的反射矩阵,然后使用 STN 利用source image,以及反射矩阵的信息,把source img 扭曲成reference pose 的图像,然后基于扭曲之后得到的图像,去生成目标图像。对于Texture warping(纹理扭曲),其不能很好地保留原图的细节信息,比如衣服颜色,身份ID,个性风格等,因为生成网络在经过几次下采样操作之后,选择性的丢失了这些信息。在此期间,同时出现了一些方法,提出了深度特征的扭曲,而不是直接在原图上进行图像扭曲,如上图的 c 所示,叫做feature warping,但是这种方法,特征的提取是通过编码的方式,这种扭曲很难描述出图像的细致特点,所以生成图像一般都是低逼真度,或者模糊的图像。
之前的方法,生成的图像看起来不逼真,主要有以下三个原因。1.网络捕获不同衣服的纹理,风格,颜色以及人脸身份是十分弱的。2.关节和可变形人体导致空间几何的变化十分巨大。3.所有的方法,都不能处理多个source 的输入,比如外观转换,衣服裤子分别来自不同的图像。
在这篇论文中,为了保护源信息,如衣服,风格,身份ID等,我们提出了Liquid Warping Block (LWB),其从三个方面解决了这些问题:1.使用降噪的自动编码网络,去提取有用的特征代表souce img的信息,2.为了保护特征细节,每个局部的源特征,通过我们提出的LWB进入到全局特征。3.我们提出的方法是支持多个source warping的,比如来自一张source img的头,另外一张source img的身体,一起去聚合成一个全局的特征stream。
另外,现在存在的方法主要依赖 2D pose,dense pose 以及body parsing,这些方法值关心到了位置布局,忽略了人物个性形(胖矮高瘦)状以及四肢(关节)的旋转。但是在图片合成时,后者的重要性或许比前者更为重要,比如,在一种极端的情况,使用基于2D(或者dense pose ,body parsing)的方法,让一个比较高的人,去模仿一个比较矮的人,将不可避免的去改变这个比较高的人的大小,问题展示如下图Figure 6所示:
Figure 6
原图注释:上图时候其他的方法,以及我们的方法,在iPER上面的对比,2D pose方法pG2 , DSC ,SHUP 不能保护原图衣服,面部ID等信息,我们的方法很用蓝色或者红色框去突出细节。
为了克服这个缺点,我们使用了一个 parametric statistical human body model(SMPL-自行百度了解),能使人体的姿态和形状脱离开来,该网络的输出是一个3D mesh (带颜色),而不是一个关节和姿态的布局。同时,两个3D triangulated meshes 之间的转换流,是很容易被计算出来的,并且相对于使用关键反射矩阵的方法,其更加准确。
基于 SMPL model 和 Liquid Warping Block (LWB),我们的方法进一步扩展了其他的任务,包含了人物动作模仿,外观转换,新视角合成。我们方法的提出,主要做了以下贡献:
1.提出了LWB去减少原图信息损失,比如纹理,颜色以及面部ID等。
2.通过基于LWB的对抗神经网络,以及3D parametric model,我们的方法集成了一个统一的框架,可以同时完成动作模仿,外貌转换以及新视角生成。
3.我们创建了一个动作模仿的数据集。
Human Motion Imitation. 最近很多的方法都是基于条件生成网络(CGAN),或者变异的自动编码网络。他们的关键技术在于使用带有原姿态(2D key-points)的图像,当做GANs的输入,去生成目标图像,这些方法的不同点,主要在于loss定义的不同,一个U-Net 生成器是使用由粗到细的策略去生成256x256的图像,Si等人提出一个多级对抗loss,并且分别生成前景和背景,或者不同的身体部位。Neverova 等人使用dense correspondences dense(密集对其DensePose)的方法代替了2D 关键点的方法。Chan等人使用pix2pixHD 结构去生成一个比较逼真的目标图像,再后来Wang 等人,扩展到了视频生成,Liu 等人提出了人体动作的行为视频渲染。然而,他们的工作仅仅是训练了来自每个人2D姿态的映射(现实世界),对于每个人都需要去训练他们自己的模型,这样很大程度上,限制了他们的利用
Human Appearance Transfer 人体外观建模或者转换是一个比较热门的话题,尤其是在虚拟试穿领域,计算机图像建模的方法或者深度学习的利用。基于图像建模的方法,首先是使用衣服,以及衣服扫描仪或者多个摄像头组合评估3D human mesh的 细节,然后基于细致的3D mesh 进行衣服外观的交换,尽管这些方法能获得一个比较好的效果,但是他们的消耗比较巨大,容易受到环境的干扰。最近在很多实用深度神经网络的方法,如SwapNet 首先学习一个基于服装位置引导的合成网络,然后将服装解析结果与纹理特征从源图像反馈到编解码器网络中,生成所需要的服装图像。还有的使用3D形状模型去结合深度学习,训练出一个能推断出图像看不见图像位置,的顶点的模型。
Human Novel View Synthesis. 同一目标的新视角合成,现在存在的方式,核心的步骤是去拟合从原图视角到目标视角的对应关系图,有的方法是利用CNN去预测一个外观,然后基于预测的外观从source image复制像素到新的目标图像,其在类似于汽车这种刚性的物体上,取得了比较好的效果。接下来的一些相关工作提出了基于外观流,使用GAN去推测看不见的纹理信。 Zhu 等人基于外观流的方法,对于用在可变形的物体上,效果是比较差的,比如人的身体。,为了新视角图的合成,他们提出了一个appearance-shape-flow的策略。除此之外Zhao等人设计了一个GAN基于coarse-to-fine 的方法提出一种高分辨率视角合成的方法。
我的Liquid Warping GAN包含了3个步骤,body mesh recovery,flow composition以及带有Liquid Warping Block (LWB)的GAN module。对于不同的任务,他们的训练方法是相同的,其中的任意一个任务训练好了,都能够适用于其他的任务。这里,我们使用动作模仿作为一个例子来讲解,如下图Fig. 3所示:
Fig. 3
图示翻译:对于我们训练的方法,我们随机选取来自同一个视频的两帧图片,注意,他们其中的一张为source image I s I_s Is,另外一种为reference image I r I_r Ir。(a)一个身体网络恢复模型会估算每一帧图像的 3D mesh,并且对他们进行渲染,得到 C s , C t C_s,C_t Cs,Ct.(b)composition module(这个合成模型)首先基于两个对应的 M r , M s M_r,M_s Mr,Ms计算他们之间的转换矩阵T,然后将从原图分离出来的前景图 I f t I_{ft} Ift以及背景图 I b g I_{bg} Ibg,基于转换矩阵 T T T 扭曲 source image 生成一个呗扭曲的图像 I s y n I_{syn} Isyn。(c)在最右边的GAN模型,其包含了3个 streams,他们分别是,通过 G B G G_{BG} GBG生成背景图 I ^ s \hat I_s I^s,并且结合通过 G T S F G_{TSF} GTSF生成的结果,合成 I ^ t \hat I_t I^t。为了保留图片的细节信息,我们提出了一个新异的Liquid Warping Block (展示在 Fig. 4),他会在几个成广播 G B G G_{BG} GBG的信息进入到 G T S F G_{TSF} GTSF。
输入的图像source image使用 I s I_s Is,reference image使用 I r I_r Ir表示。首先mesh recovery module会去估算 I s I_s Is 以及 I r I_r Ir 的3D mesh,并且把他们渲染成 G s G_s Gs与 G t G_t Gt,下一步,composition module会基于前面获得的 G s G_s Gs以及 G t G_t Gt计算转换矩阵 T T T ,sourece img I s I_s Is被分解成前景 I f t I_{ft} Ift以及通过mask获得的背景 I b g I_{bg} Ibg,并且基于转换矩阵 T T T 扭曲成 I s y n I_{syn} Isyn, 最后的GAN模型,其包含了3个 streams(上图注释翻译比较详细,就不重复了)
如Fig. 3的(a)所示,送入source img I s I_s Is 以及 reference img I r I_r Ir, 然后预两张图片的kinematic pose(rotation of limbs-四肢的旋转)与shape parameters(高矮胖瘦)。为了平衡准确率和运行效率,在这片论文中,我们使用的 HMR 其进行估算。在 HMR 中,首先把通过ResNet-50把输入图像编码成 R 2048 ( 理 解 成 一 维 2048 的 向 量 即 可 ) \mathbb{R}^{2048}(理解成一维2048的向量即可) R2048(理解成一维2048的向量即可),然后通过3D回归网络去预测SMPL模型的摄像头参数 K ∈ R 3 K \in \mathbb{R}^{3} K∈R3,pose θ ∈ R 72 \theta \in \mathbb{R}^{72} θ∈R72(72个人体关键点)以及shape β ∈ R 10 \beta \in \mathbb{R}^{10} β∈R10(身高胖瘦等等)。 SMPL是一个能通过 M ( θ , β ) ∈ R N v × 3 M(\theta ,\beta) \in \mathbb{R}^{N_v\times3} M(θ,β)∈RNv×3映射的3D人体模型,这个模型能被带有姿态 θ ∈ R 72 \theta \in \mathbb{R}^{72} θ∈R72以及 β ∈ R 10 \beta \in \mathbb{R}^{10} β∈R10的, N v = 6890 Nv=6890 Nv=6890(网孔)个至高点和 N f = 13776 N_f=13776 Nf=13776(网孔)个表面点描述出来。通过这个过程,我们就能获source image以及reference image的SMPL模型参数 { K , θ , β , M } \{K, \theta, \beta, M\} {K,θ,β,M}
在上述的基础上,我们首先在 K s K_s Ks的视角视角下,对source mesh M s M_s Ms以及reference mesh M r M_r Mr进行渲染,得到 G s G_s Gs与 G t G_t Gt,在这篇论文中,我们使用的是一个可以微调的渲染-Neural Mesh Renderer (NMR),因此我们投射source V s V_s Vs的向量到 2D 图像空间, v s = P r o j ( V s , K s ) v_s = Proj(V_s,K_s) vs=Proj(Vs,Ks)。然后我们计算每个mesh face(网孔的)的重心坐标获得 f s ∈ R N f × 2 f_s \in \mathbb{R}^{N_f \times2} fs∈RNf×2。接下来通过source map对应的mesh face 坐标 f s f_s fs 以及reference map对应的mesh face坐标,去计算转换矩阵 T ∈ R H × W × 2 T\in \mathbb{R}^{H \times W \times2} T∈RH×W×2.因此,一个前景图像 I f t I_{ft} Ift和通过mask 掩码获得的背景图像 I b g I_bg Ibg都是基于source img 对应的 C s C_s Cs获得。最后利用转换矩阵 T T T把 I s I_s Is 扭曲成 I s y n I_{syn} Isyn,在Fig. 3中可见。
这个步骤主要是为了,在给定的条件下,合成高度逼真的人体图像,1.合成背景图像,2.预测隐藏部分的像素颜色,3.生成头发,衣服的像素以及其他的超出SMPL模型的部分。
Generator. 我们的生成网络有3个分支,其中一个分支叫做 G B G G_{BG} GBG,他的主要职责是输入经过mask 掩码处理的 I b g I_{bg} Ibg然后生成 I ^ b g \hat I_{bg} I^bg,在Fig. 3 ©中能看到其大致过程。另外的两个分支分别为 G T S F G_{TSF} GTSF与 G S I D G_{SID} GSID, 前者 G T S F G_{TSF} GTSF是一个自动编码器,主要是为了提取特征并且保留住图像细节信息。他的输入是通过source img获得的 I f t I_ft Ift以及对应的 G s G_s Gs,然后得到 A s A_s As以及 P s P_s Ps,与 G B G G_{BG} GBG生成的 I ^ b g \hat I_{bg} I^bg结合,重构得到 I ^ s \hat I_s I^s。 G T S F G_{TSF} GTSF的任务是去合成最终的结果,他的输入是经过扭曲得到的 I s y n I_{syn} Isyn以及经过渲染的 C t C_t Ct(6个通道),为了保护源图的细节信息,我们提出了Liquid Warping Block (LWB)去链接 G T S F G_{TSF} GTSF与 G S I D G_{SID} GSID,这样,在两个分支之间。就能进行细节信息的传递了。
我们提出的Liquid Warping Block(LWB)他能同时接受多个source的输入,比如在进行外观转换的时候,保留source1头部外观,source2上衣外貌,source2下身外貌。这些不同的身体特征通过自己的对应的转换矩阵 T T T变换,然后聚合一起送入 G T S F G_{TSF} GTSF。下面我们来看两个source 的例子,如下图所示:
图示翻译:这是 Liquid Warping Block的插图,a是LWB的结构, X s 1 l X^l_{s1} Xs1l与 X s 2 l X^l_{s2} Xs2l是利用 G S I D G_{SID} GSID在不同卷积层提出的各个特征。如 X t l X_t^l Xtl是 G S I D G_{SID} GSID在 l t h l^{th} lth成提取的特征。最后输出一起聚合的特征 X ^ t l \hat X_t^l X^tl,采用双线性采样器(BS)对T1和T2的流场进行了弯曲源特征分析.b .是LWB的结构。最后他们输出的结果可以表示如下:
X ^ t l = B S ( X s 1 l , T 1 ) + S ( X s 2 l , T 2 ) + X t l \hat X_t^l = BS(X_{s1}^l,T_1) + S(X_{s2}^l,T_2) + X^l_t X^tl=BS(Xs1l,T1)+S(Xs2l,T2)+Xtl
注意的是,上面的例子使用的是两个 sources 的例子,我们还能接受更多sources。
G B G G_{BG} GBG, G T S F G_{TSF} GTSF与 G S I D G_{SID} GSID他们的结构是比较显示的,都是ResUnet结构,即包含了 ResNet 与 UNet 的组件,但是他们之间的参数不是共享的。对于 G B G G_{BG} GBG 我们直接回归背景图像,对于 G T S F G_{TSF} GTSF与 G S I D G_{SID} GSID我们会生成一个attention map A和一个color map P,如Fig. 3 ©所示,最后的结果可以用以下公式表示
I ^ s = P s ∗ A s + I ^ b g ∗ ( 1 − A s ) \hat I_s = P_s * A_s + \hat I_{bg} * (1-A_s) I^s=Ps∗As+I^bg∗(1−As) I ^ t = P t ∗ A t + I ^ b g ∗ ( 1 − A t ) \hat I_t = P_t * A_t + \hat I_{bg} * (1-A_t) I^t=Pt∗At+I^bg∗(1−At)
**Discriminator.**生成器对应的鉴别器我们使用的是Pix2Pix的架构。
好了,就到这里了,下篇博客我会把剩下的翻译完成。