system: [SYSTEM]

user: 3. 提出的方法 多角度人脸生成的目标是通过一张真实图像 I a 和角度代码c来生成一张身份特征保留的人脸图像 I s ，也就是说我们的生成对抗网络要学会从 I a 到 I s 的映射。如图1所示，在把 I a 输入到生成器中之后，全局编码器通过下采样获得保存人脸的身份信息的特征向量，在得到的特征向量上拼接上一定维度的角度代码c来调节生成图像的角度。然后全局解码器通过分数卷积进行上采样，输出代表人脸整体轮廓的特征图。局部生成器用来负责人脸五官的角度转换，在本算法中，总共使用了4个局部生成器来对五官进行转换，它们在训练过程中学习各自的参数。鉴别器以及分类器的作用是用来判断输入图像以及生成图像的质量好坏、角度与图像真实角度是否一致、身份信息与真实人脸身份信息是否相符。生成器、鉴别器以及分类器的具体结构会在后面的部分详细阐述。经过特征融合之后，我们得到了生成的人脸图像 I s ，此时，我们把生成的 I s 再输入到生成器中去，此时的角度代码为输入图像 I a 的角度 c ′ ，得到另一张生成图像 I r e c 。我们通过计算 I a 与 的循环一致损失来使得整个训练过程是无监督的。 3.1. 网络结构 我们使用了两种类型的生成器来对人脸的不同维度进行建模，全局生成器用来学习人脸的整体轮廓特征；局部生成器用来对人脸五官的具体特征进行建模。相较于使用单一生成器来完成多角度人脸重构，使用多个生成器的优势在于，多个生成器各自的训练目标更加细化，各生成器之间相互配合，通过最后的特征融合把各自的训练结果组合到一起，可得到优于仅用单个生成器的生成效果。 3.1.1. 双通路生成器 生成器用G来表示，这是一种双通路的卷积神经网络结构。第一种用来获取全局特征的生成器称为全局生成器，用 G g 来表示。如图2所示， G g 是一种编码器-解码器结构，编码器用 G e g 来表示，解码器用 G d g 来表示。把尺寸为 128 × 128 × 3 的人脸图像输入到 G e g 中，经过卷积核为 7 × 7 ，步长为1的卷积操作，得到尺寸为 128 × 128 × 64 的特征图。这一步选取相对较大的卷积核的原因是全局生成器学习人脸的轮廓特征，需要较大的感受野。然后经过三次卷积核尺寸为 3 × 3 ，步长为2的下采样过程，得到 8 × 8 × 512 的特征图。最后，经过全连接层，得到一个256维的特征向量 。 v f 包含人脸的身份信息，在 上拼接角度代码c来灵活的调节生成人脸的角度。另外，我们在 v f 上拼接上100维的高斯噪声向量来建模其它除身份和角度等方面的特征。全局解码器 G d g 通过3个连续的卷积核为 3 × 3 ，步长为2的上采样过程，最终得到尺寸为 128 × 128 × 64 的特征图，用于与局部生成器的输出结构进行特征融合。 图2. 全局生成器网络结构 人脸局部特征的转换通过4个局部生成器来实现。我们使用 G l i ， i ∈ { 1 ， 2 ， 3 ， 4 } 来分别转动左眼，右眼，鼻子和嘴巴的角度。在人脸重构的过程中，以上4个生成器各自学习自己的参数。由于人脸的五官大小并不相等，因此对五官的截取尺寸并不相同。在本算法中，对眼睛采取了 40 × 40 像素，鼻子采取 32 × 40 像素，嘴巴采取 32 × 48 像素的裁剪方式。局部解码器和编码器分别用 G e l i 和 G d l i 表示。如图3所示，局部生成器的网络结构和全局生成器的网络结构相似，不同点在于局部生成器不生成包含人脸信息的特征向量，直接进行之后的上采样操作。上采样结束之后，生成尺寸为 w × h × 64 的特征图，其中，w和h分别代表特征图的宽和高。 在局部解码器输出五官特征图之后，为了避免五官连接处出现模糊等情况，我们采用一种最大特征保留的方法把特征图拼接在一起。具体来说，五官特征图有各自固定的位置，但是五官特征图之间有相互重叠的部分，对于重叠部分，取最大值进行保留。完成五官特征图的拼接之后，如图4所示，把全局解码器的输出和五官特征图拼接在一起，经过后续的卷积操作，最终输出一张人脸角度转动后的图像。 图3. 局部生成器网络结构 图4. 特征融合过程 3.1.2. 鉴别器以及身份、角度分类器 最简单的用来区分真实图像和生成图像的方式是使用一个二分类器。但是在人脸生成领域，仅使用一个二分类器很难得到理想的分类效果，因为对生成图像的质量好坏有多个角度的评判指标。与传统GAN的鉴别器结构不同，本算法中所用鉴别器D的结构不再输出一个标量，而是输出一个向量，向量中每一维分别对应图像中一部分区域，这样做可使鉴别器对图像中的每一部分分别评价，可有效提高生成图像的质量。在生成图像时鉴别器不仅需要对生成图像的整体质量做出评价，还需对生成图像中人脸的角度和身份做出分类。因此，在鉴别器的基础上，加入两个分类器 D id 和 D pose 用以区分生成图像的身份和角度信息。身份分类器和角度分类器分别输出人脸的身份信息和角度信息。分类损失函数和对抗损失函数结合起来，共同推动生成图像的概率分布向着真实的人脸图像的分布移动。 3.2. 损失函数 在本部分中，我们将详细介绍在多角度人脸重构算法中所用到的损失函数，包括对抗损失，角度保持损失，身份保持损失，循环一致性损失。最后，我们也将给出整体损失函数，各个损失函数协同作用，使得生成器最终能够生成角度一致、身份保留的人脸图像。 3.2.1. 对抗损失函数 为了使生成的人脸图像尽可能与真实的人脸图像相似，我们引入了对抗损失函数： L a d v = 1 N ∑ n = 1 N log D ( I n a ) + log ( 1 − D ( G ( I n a ， c ) ) ) (1) N代表训练集中的样本数目。在这里，往生成器中输入原始图像 I a 和角度代码c来生成 I s 。鉴别器D用来分辨生成图像是一张真实图像还是一张生成的图像。生成器则尽可能生成真实的人脸图像来使得鉴别器无法分辨生成图像的真伪。因此，生成器的目标是最小化这个损失函数，鉴别器的目标是最大化这个损失函数。在这个对抗的过程中，生成图像的质量逐渐变好。 3.2.2. 角度保持损失函数 角度保持损失函数的主要作用是在生成器生成一张真实人脸图像的时候确保生成人脸的角度和我们指定的角度代码c是一致的。当在迭代优化生成器和鉴别器的时候，我们分别在生成器和鉴别器上计算角度保持损失函数的值。也就是说，我们把角度保持损失函数分为两部分，分别优化生成器和鉴别器。用来优化鉴别器的目标函数表示如下： L p o s e r = − 1 N ∑ n = 1 N log D p o s e ( c ′ | I n a ) (2) D p o s e ( c ′ | I a ) 代表一张真实人脸图像被正确分为角度 c ′ 的概率，由于是损失函数，所以需要在公式前加负号。另一方面，用来优化生成器的目标函数定义为： L p o s e s = − 1 N ∑ n = 1 N log D p o s e ( c | G ( I n a ， c ) ) (3) 同样，通过最小化这个损失函数来优化生成器G，使得生成的人脸图像的角度被正确分类为角度代码c。 3.2.3. 身份保持损失函数 在生成指定角度的人脸图像的时候，我们希望人脸的身份信息得到保留。在本算法中，我们采用了身份保持损失函数来保留人脸的身份信息。在本文中，我们使用了ResNet18作为身份分类器。ResNet18首先在Multi-PIE数据集上进行预训练，使之可以正确分类人脸的身份信息。由于身份信息相同的人脸在一些显著特征上必然相似，所以我们使用某些中间层的激活值来作为衡量指标： L i p = ∑ i = 1 2 1 W i × H i ∑ x = 1 W i ∑ y = 1 H i | F ( I a ) x ， y i − F ( I s ) x ， y i | (4) F代表中间层， W i 和 H i 代表中间层的空间维度。 L i p 确保生成图像和真实图像在深度特征空间有较小的距离。 3.2.4. 循环一致性损失函数 通过最小化对抗损失函数以及角度保持损失函数、身份保持损失函数，生成器在生成真实的人脸图像。然而，通过最小化以上损失函数并不能确保生成的人脸图像仅仅在角度上转换为我们指定角度而在其它方面保持不变。为了解决这个问题，我们引入了循环一致性损失函数。循环一致损失的定义如下： L c y c = 1 W × H ∑ x = 1 W ∑ y = 1 H | I x ， y r e c − I x ， y a | (5) 如图5所示，首先把输入图像 I a 和目标角度c输入到生成器G中，生成目标图像 I s 。然后把 I s 和 I a 的原始角度 c ′ 输入到生成器中，生成图像 。我们通过输入图像 I a 和重构图像 I rec 之差的L1模来计算 。值得注意的是，在此训练过程中，我们用到了同一生成器两次。通过最小化 L c y c ，可以确保输入图像 I a 和输出图像 I s 在除角度之外的方面尽可能相似。 图5. 循环一致性损失计算过程 3.2.5. 整体损失函数 在此给出分别用来优化生成器G和鉴别器D的目标函数： L D = − L a d v + λ 1 L p o s e r (6) L G = L a d v + λ 2 L p o s e s + λ 3 L i p + λ 4 L c y c (7) 其中， λ 1 到 λ 4 这4个超参数用来调节其它损失函数相对于对抗损失函数的权重。在本文的实验中，我们使用 λ 1 = 1 ， λ 2 = 1 ， λ 3 = 10 ， λ 4 = 10 。