|AI不止能美颜,美妆迁移这样做 | 赠书( 三 )


本文插图

风格推荐是从已上妆人脸数据库中挑选与当前素颜人脸最相近的图片 。 具体方法是使用一个人脸识别网络 , 选取该网络输出的人脸特征的欧氏距离最小者作为推荐结果 。
然后是人脸分割 , 主要是进行五官提取 , 采用全卷积图像分割网络完成 。 对于已上妆数据集中的眼影部分妆造 , 素颜图片没有对应的原则 , 则根据眉眼特征点定位给出眼影区域 。 由于妆容分割的前景部分相对于背景更重要 , 网络对这两部分的损失进行了加权 。
最后是妆容迁移 , 妆容包括粉底(对应面部) , 唇彩(对应双唇) , 眼影(对应双眼) 。
粉底迁移和唇彩迁移的原理类似 , 需要考虑颜色和纹理 , 文中利用了风格化网络来实现 , 使用参考图和目标图的Gram矩阵作为损失函数 , 风格化网络直接参考Gaty等人提出的模型 。
而眼影的迁移略有不同 , 因为它不是直接改变双眼像素 , 而是要给眼睛部位添加眼影 , 必须同时考虑眼睛的形状和颜色 。 考虑到参考图的眼睛掩膜和内容图的眼睛掩膜 , 两者具有不同的大小和形状 , 但是经过变形到目标图中后 , 两者具有相同的大小和形状 。 眼影迁移就是要将参考图掩膜处的眼影特征迁移到目标图中 , 因此实现不在原图中 , 而是在特征空间中进行约束 , 这里使用了conv1_1的特征 , 完整的优化目标如下:
|AI不止能美颜,美妆迁移这样做 | 赠书
本文插图

其中A是结果图 , R是参考图 , sr是参考图的掩膜 , sb是经过仿射变换后的待上妆图的掩膜 , 它们的尺度大小相等 。 sr'和sb'是sr和sb的卷积结果图 , 因为卷积降低了维度 , 所以通常来说就是一个比例缩放 。 因此上面的代表的是结果图掩膜部分 , 代表的是参考图掩膜部分 , P表示人脸分割网络模型 , 提取出特征后最小化两者之间的L2损失 。
为了让结果更好 , 还添加了全微分(total variance)损失和全图的结构损失 , 通过更改其中的权重变量 , 可以控制妆造的程度 , 比如让眼影变得更深 。
3.2 基于GAN的妆造迁移算法
以商汤提出的BeautyGAN为代表 , 它输入两张人脸图片 , 一张无妆图 , 一张有妆图 , 模型输出换妆之后的结果 , 即一张上妆图和一张卸妆图 。
BeautyGAN采用了经典的图像翻译结构 , 生成器G包括两个输入 , 分别是无妆图Isrc、有妆图Iref , 通过编码器(encoder)、若干个残差模块(residual blocks)、解码器(decoder)组成的生成器G 得到两个输出 , 分别是上妆图IBsrc、卸妆图IAref , 结构示意图如下图 。
|AI不止能美颜,美妆迁移这样做 | 赠书
本文插图

BeautyGAN使用了两个判别器DA和DB , 其中DA用于区分真假无妆图 , DB用于区分真假有妆图 。
除了基本的GAN损失之外 , BeautyGAN包含了3个重要的损失 , 分别是循环一致性损失Cycle consistency loss , 感知Perceptual loss , 妆造损失Makeup loss , 前两者是全局损失 , 最后一个是局部损失 。
为了消除迁移细节的瑕疵 , 将上妆图IBsrc和卸妆图IAref再次输入给G , 重新执行一次卸妆和上妆 , 得到两张重建图Iresrc和卸妆图Ireref , 此时通过循环损失(cycle consistency loss)约束一张图经过两次G变换后与对应的原始图相同 。 因为生成器的输入包含了一对图 , 所以与CycleGAN的不同之处在于这里使用了同一个生成器G , 该损失用于维持图像的背景信息 , 具体的损失定义与CycleGAN相同 , 不再赘述 。
上妆和卸妆不能改变原始的人物身份信息 , 这可以通过基于VGG模型的Perceptual loss进行约束 , 定义如下:
|AI不止能美颜,美妆迁移这样做 | 赠书
本文插图


推荐阅读