该论文是出自于CVPR2022关于GAN的最新文章。要知道虽然目前GAN可以在某些领域的理想条件下能够生成逼真的图像,但由于发型、服装和姿势的多样性,生成全身人体图像仍然很困难,之前的方法一般是用单个GAN对这个复杂域进行建模。作者提出了一种组合多个预训练的GAN新的方法,其中一个GAN生成一个全局人体图像和一组专门生成特定人体部分的GAN,然后将部分人体图像无缝插入到全体人体图像中。论文中大量的实验结果也表明该方法的有效性。
论文链接:https://arxiv.org/abs/2203.07293
视频链接:https://www.youtube.com/watch?v=YKFYEt5hvOo
在该论文中,作者提出了一个无条件生成方法,通过使用一个或者多个预训练生成器网络生成人的全身图像。该方法的原理图如下所示,给定两个隐向量 w A {\bf{w}}_A wA和 w B {\bf{w}}_B wB,将它们分别输入到预训练好的生成器 G A \mathcal{G}_{A} GA和 G B \mathcal{G}_B GB中,并生成对应的图像 I A = G A ( w A ) I_A=\mathcal{G}_A({\bf{w}}_A) IA=GA(wA)和 I B = G B ( w B ) I_B=\mathcal{G}_B({\bf{w}}_B) IB=GB(wB)。作者使用一组损失 L c o a r s e L_{coarse} Lcoarse和 L b o r d e r L_{border} Lborder来描述优化过程中希望最小化的条件。右边给出了不同条件生成的图像,可以发现一开始直接将人脸图像复制粘贴操作会有粗糙的痕迹,而在优化的过程中生成的全身图像人脸部分和身体部分会无缝对接。
在该论文中作者采用了当前最先进的StyleGAN2的网络结构,以前大多数全身人体图像生成或编辑工作都是在 256 × 256 256\times256 256×256或 512 × 512 512\times512 512×512分辨率尺度下进行的,而作者首次尝试以 1024 × 1024 1024\times1024 1024×1024的分辨率进行无条件生成工作。由于目标域的复杂性,单个生成器产生的结果有时会产生形状怪异的身体部位和非照片真实感的外观等瑕疵,再加之人类姿势和外观的巨大多样性以及相关的对齐困难,使得单个生成器更难学习。因此,需要多个生成器相互配合去生成全身人体图像。
为了提高Full-body GAN生成能力,作者先使用特定的生成器去生成身体特定部分区域的图像,然后再将生成结果插入粘贴到Full-body GAN的生成结果中,这样可以更好地模拟人体的复杂外观和可塑性。
作者证明了使用从全身训练图像中裁剪的面部区域训练的Face GAN可以用于改善Full-body GAN结果的外观,所以可以利用在其他数据集上训练过的人脸生成器来进行人脸增强。类似地,也可以使用专门的手或脚生成器来改善身体的其他区域。如下图所示,作者表明在多重优化过程中可以同时使用多部分生成器。
在该论文中作者最主要的面对的挑战是如何协调多个无条件GAN来产生彼此一致的像素。在该论文中, G A \mathcal{G}_A GA用于生成全身人体图像且有 I A : = G A ( w A ) I_A:=\mathcal{G}_A({\bf{w}}_A) IA:=GA(wA), G B \mathcal{G}_B GB用于生成人体子区域图像且有 I B : = G B ( w B ) I_B:=\mathcal{G}_B({\bf{w}}_B) IB:=GB(wB)。为了协调部分GAN和全局GAN的关系,作者用到一个边界检测器来识别图像 I A I_A IA,通过使用检测到的边界框裁剪 I A I_A IA,并将裁剪后的像素表示为 B ( I A ) \mathcal{B}(I_A) B(IA)。在图像 I A I_A IA中插入单独生成的部分图像 I B I_B IB的问题相当于找到一个隐向量对 ( w A , w B ) ({\bf{w}}_A,{\bf{w}}_B) (wA,wB),这样相应的图像 I A I_A IA和 I B I_B IB可以在 B ( I A ) \mathcal{B}(I_A) B(IA)和 B ( I B ) \mathcal{B}(I_B) B(IB)的边界区域可以在没有明显接缝的情况下进行组合。为了生成最终结果,作者直接用 I B I_B IB生成的像素替换边界框 B ( I A ) \mathcal{B}(I_A) B(IA)内的原始像素,具体的公式如下所示: min w A , w B ∫ Ω L ( G A ( w A ) , G B ( w B ) ) \min\limits_{{\bf{w}}_A,{\bf{w}}_B}\int_{\Omega}\mathcal{L}(\mathcal{G}_{A}({\bf{w}}_A),\mathcal{G}_{B}({\bf{w}}_B)) wA,wBmin∫ΩL(GA(wA),GB(wB))其中 Ω : = B ( G ( w A ) ) \Omega:=\mathcal{B}(\mathcal{G}({\bf{w}}_A)) Ω:=B(G(wA)), L \mathcal{L} L主要用于测量 I A I_A IA和 I B I_B IB缝接处的损失。
当优化隐向量 w A {\bf{w}}_A wA和 w B {\bf{w}}_B wB时,作者考虑到了如下几个多重目标:
图像边界匹配损失如下所示
L b o r d e r : = λ 3 L 1 ( E 8 ( B ( I A ) ) , E 8 ( I B ) ) + λ 4 L l p i p s ( E 8 ( B ( I A ) ) , E 8 ( I B ) ) L_{border}:=\lambda_3 L_1(\mathcal{E}_8 (\mathcal{B}(I_A)),\mathcal{E}_8(I_B))+\lambda_4 L_{lpips}(\mathcal{E}_8(\mathcal{B}(I_A)),\mathcal{E}_8(I_B)) Lborder:=λ3L1(E8(B(IA)),E8(IB))+λ4Llpips(E8(B(IA)),E8(IB))其中 E x ( I ) \mathcal{E}_x(I) Ex(I)是宽度为 x x x像素的 I I I的边界区域。为了在优化过程中保持真实感,作者还添加了两个正则化项: L r e g : = λ r 1 ∥ w ∗ − w a v g ∥ + λ r 2 ∑ i ∥ δ i ∥ L_{reg}:=\lambda_{r1}\|{\bf{w}^{*}-{\bf{w}}}_{avg}\|+\lambda_{r2}\sum\limits_{i}\|\delta_i\| Lreg:=λr1∥w∗−wavg∥+λr2i∑∥δi∥第一项防止优化后的隐向量偏离平均隐向量太远。作者通过在 Z Z Z空间中随机抽样大量隐向量,将其映射到 W W W空间,并通过计算平均值来得到 w a v g {\bf{w}}_{avg} wavg。第二项是在 w + {\bf{w}}^+ w+隐空间中正则化隐向量。
给定一个随机生成全身人体图像 G A ( w A ) \mathcal{G}_A({\bf{w}}_A) GA(wA),通过固定参数 w A {\bf{w}}_A wA来优化参数 w B {\bf{w}}_B wB使得图像 G B ( w B ) \mathcal{G}_B({\bf{w}}_B) GB(wB)看起来与 B ( G A ( w A ) \mathcal{B}(\mathcal{G}_A({\bf{w}}_A) B(GA(wA)相似,则优化目标为 min w B ( L c o a r s e + L b o r d e r ) \min\limits_{{\bf{w}}_B}(L_{coarse}+L_{border}) wBmin(Lcoarse+Lborder)为了进一步改进边界不连续的问题,作者也可以选择同时优化 w A {\bf{w}}_A wA和 w B {\bf{w}}_B wB,以便两个生成器可以相互协调,生成没有混合伪影的相干图像。为了在 w A {\bf{w}}_A wA优化过程中保持身体轮廓的外观不变,作者引入了一个额外的损失项: L b o d y : = λ 5 L 1 ( R O ( I A ) , R O ( I r e f ) ) + λ 6 L l p i p s ( R O ( I A ) , R O ( I r e f ) ) L_{body}:=\lambda_5 L_1 (R^O(I_A),R^O(I_{ref}))+\lambda_6 L_{lpips}(R^O(I_A),R^O(I_{ref})) Lbody:=λ5L1(RO(IA),RO(Iref))+λ6Llpips(RO(IA),RO(Iref))其中 I r e f I_{ref } Iref是 G A \mathcal{G}_A GA生成的用于参考的全身人体图像, R O R^O RO表示人脸边界框外的身体区域。作者还使用平均隐正则化项 L r e g L_{reg} Lreg来防止产生伪影,最终目标函数为: min w A , w B ( L c o a r s e + L b o r d e r + L r e g + L b o d y ) \min\limits_{{\bf{w}}_A,{\bf{w}}_B}(L_{coarse}+L_{border}+L_{reg}+L_{body}) wA,wBmin(Lcoarse+Lborder+Lreg+Lbody)如下图所示,显示了使用专门的人脸模型对人脸进行训练的人脸细化结果,该人脸模型是从用于训练身体生成器的相同数据中裁剪出来的。
给定真实人脸或随机生成的人脸图像 G B ( w B ) \mathcal{G}_B({\bf{w}}_B) GB(wB),作者通过固定参数 w B {\bf{w}}_B wB然后对参数 w A {\bf{w}}_A wA进行优化,这样 G A ( w A ) \mathcal{G}_A({\bf{w}}_A) GA(wA)生成的身体图像在姿势、肤色、性别、发型等方面与输入人脸兼容。为了在优化过程中保持人脸身份,作者使用了额外的人脸重建损失: L f a c e : = λ 7 L 1 ( R I ( I B ) , R I ( I r e f ) ) + λ 8 L l p i p s ( R I ( I B ) , R I ( I r e f ) ) L_{face}:=\lambda_7 L_1(R^I(I_B),R^I(I_{ref}))+\lambda_8 L_{lpips}(R^I(I_B),R^I(I_{ref})) Lface:=λ7L1(RI(IB),RI(Iref))+λ8Llpips(RI(IB),RI(Iref))其中 R I R^I RI定义人脸裁剪的内部区域, I r e f I_{ref} Iref表示参考输入人脸。为了实现更精确的控制,可以使用人脸分割代替边界框,其中作者的目标函数是: min w A , w B ( L c o a r s e + L b o r d e r + L r e g + L f a c e ) \min\limits_{{\bf{w}}_A,{\bf{w}}_B}(L_{coarse}+L_{border}+L_{reg}+L_{face}) wA,wBmin(Lcoarse+Lborder+Lreg+Lface)如下图所示,通过对 w A {\bf{w}}_A wA进行不同的初始化,可以为每个人脸生成多个结果。
在该论文中作者可以将任何真实的或生成的脸与任何生成的身体结合起来,生成一个组合体。对于真实的人脸,作者首先需要使用一个现成的编码器将其编码到 G B \mathcal{G}_B GB的隐空间中,作为 w B {\bf{w}}_B wB。类似地,一个真实的身体图片也可以被编码到隐空间中,但由于人身高差异,很难实现较低的重建误差,因此作者使用以下目标函数:
min w A , w B ( L c o a r s e + L b o d e r + L r e g + L f a c e + L b o d y ) \min\limits_{{\bf{w}}_A,{\bf{w}}_B}(L_{coarse}+L_{boder}+L_{reg}+L_{face}+L_{body}) wA,wBmin(Lcoarse+Lboder+Lreg+Lface+Lbody)下图显示了用预训练FFHQ模型生成的人脸(顶行)与论文中方法生成器 G A \mathcal{G}_A GA生成的身体(最左列)相结合的结果。通过对人脸和身体隐向量的轻微调整,作者实现了保持身份一致的合成结果。
如下表所示作者使用了两种不同的截断设置分别是 t = 0.7 t=0.7 t=0.7和 t = 0.4 t=0.4 t=0.4,并对全身图像和图像裁剪进行评估。FID分数的越小越好。由下表可以发现使用联合优化的人脸细化不会修改无条件生成器学习的分布,因此不会降低结果的多样性。
由下图可知,论文的方法InsetGAN(右上)与CoModGAN(右下)相比,在人脸对齐的精确度和生成的细致度上,InsetGAN的生成效果更好一些。
下图显示了通过对每个输入人脸使用几个随机初始化获得的两个最佳结果。