[论文研读]BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network

1.概要

本次研读是一篇ACM MM2018的论文《BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network》。研读并不是纯粹的逐字翻译,而是我看完这篇文章后写一下自己的理解和想法。本人水平有限,如果有错误的地方还请指正。

文章的官网:http://liusi-group.com/projects/BeautyGAN。官网中提供了论文原文以及数据集。这里有个老哥复现了这篇文章的工作。贴一下地址:https://github.com/Honlan/BeautyGAN。该篇文章主要的工作是利用GAN对人脸图像按指定的风格进行上妆。属于图像风格迁移的一个小应用。通俗的说就是拿一张素颜的人脸图像输入模型,然后给出一张带妆人脸的图像作为参考,根据这张参考图像,模型会对素颜人脸的图像进行上妆(主要是针对眼妆,唇妆,脸部整体的妆容)。图1为论文提供的处理结果的示例,最上面一行为参考图像,左边第一列为待处理的素颜图像。

图1 结果示例

2. 模型与损失函数

图2 BeautyGAN模型

图2 就是该篇文章的模型BeautyGAN。这个模型和cycleGAN,discoGAN有点像。分析左边的生成模型G,首先素颜图像和参考图像经过不同的两组卷积提取特征,然后concatenate到一起,输入residual block中,接着两组反卷积将输出的feature map上采样,结果是将原来的素颜图像“上妆”,而参考图像“卸妆”。上下两个判别模型D分别判断是否为真实的带妆图像或者素颜图像。文章中提到,图2中左右两个G是相同的,右边G的作用是将左边G生成的图重构回去。以下为个人看法:这里的相同,应该只是模型结构相同,训练更新后的参数应该是两组,如果是一组参数,那么图2最中间的两张人像的输入应该对调。模型的具体参数细节文章中没有提及。

文章中用到的损失函数比较多。结合成最终的total损失函数:L_{G} = \alpha L_{adv}+\beta L_{cyc}+\gamma L_{per}+L_{makeup}。下面分别详细介绍。

  • L_{adv}为GAN的损失函数,L_{adv} = L_{D_{A}} + L_{D_{B}}。这部分与其他的GAN一样,不多解释。
  • L_{per}对应为图2中的perceptual loss。首先文章中用了一个16层的,在ImageNet上做了预训练的VGG网络。F_{l}表示这个VGG在l层上的feature map,C_{l}H_{l}W_{l}分别表示l层上feature map的数量,高度,宽度。

  • L_{cyc}对应为图2中的cycle consistency loss。这个损失函数的目的就是让重构回去的图像和最开始输入的图像要尽可能的一样。原文的公式直接截图贴出来,其中dist就是距离,用L1,L2都行。

  • L_{makeup}是我认为比较重要的部分。首先贴原文的一个示意图。这张图很直观的解释了这个损失函数的目的。通俗的来说化妆主要是针对眼,唇,脸,对于图像中不相关的部分需要排除掉。所以把素颜图像和带妆图像中这三个部分先提出来,然后逐个对应,目的是使这三个部分越像越好。但是这里的“像”与L_{cyc}有区别。举个例子:由于两张图提取出来的嘴巴是有大小,形状的区别,我们只是想把唇膏颜色迁移过来,并不想把原来嘴巴的形状也变了,所以这里不能直接用类似于L_{cyc}的dist去实现。文章中使用了Histogram Matching(直方图匹配)来完成,这里给个链接帮助大家理解直方图匹配,不具体展开了,点击跳转。文章中对于这三个部分的分割主要使用了文献[1]的方法。首先将图像输入预训练好的分割模型后得到Mask,图3中也有展示。但是这是一个包括头发,脖子等在内的完整分割人脸Mask,除了刚才提到的三个部分,其他都用不到,所以在Mask中分别只挑出标签为眼睛,嘴唇,脸部的像素重新二值化,形成新的三个Mask:M_{eye}M_{lip}M_{face}。但是眼影是比较特殊的情况,只分割出眼睛的部分还不够,因为眼影是涂在眼睛外面的而不是涂在眼珠子上的(这个就和唇膏就有区别了),所以文章中根据M_{eye}计算了一个矩形区域包围眼睛,然后再除去头发,眼珠子,眉毛的部分。还想提一点,这个分解再比较的方法参考了文献[2]的做法,并不是这篇文章首创的。贴一个对于文献[2]的官方主页,点击跳转。最后提供L_{lips,eyes,face}的公式,公式中item = \left \{lips,shadow,face \right \}
图3 make loss

在这篇文章中,针对这几种损失函数作者进行了Ablation实验。实验分组情况如图4所示,A到E共五组实验,表中打勾的表示使用了该损失函数。 实验结果如图5所示,很好的说明了上述各种损失函数的作用。

图4 实验分组
图5 实验结果

 

3.数据集

这篇文章通过网络爬虫收集了Makeup Transfer(MT) 数据集。MT数据集与现有的人脸化妆数据集不同,它的训练图像不是pair的,而且图像数量远远超过其他数据集。我认为用pair的数据集可以简化训练,但是做这样的数据集难度太大,代价太高。这篇文章在unpair的数据集上可以做出这样的效果是非常不错的。

然后我下载了数据集试了一下人脸分割的效果。取了一张带妆的人脸图像(艾薇儿),以及对应的Mask。但是发现一个问题:这个数据集里人脸图像的尺寸要比Mask大,这个无法直接做element-wise multiply。所以我预处理了一下人脸图像,一种是用resize进行缩小(结果为右一),另一种是对图像边缘进行切割(结果为右二)。感觉上是切割比较好,眉毛和眼睛覆盖比较多。

图6 人脸分割的效果

  

4.细节问题

BeautyGAN在G中使用了instance normalization,在D中使用了spectral normalization。D中使用了patchGAN的判别方法。以上的方法在模型训练中起到了什么样的效果,就得自己亲自训练感受一下了。

5.引用文献

  1. Zhen Wei, Yao Sun, et.al. 2017. Learning Adaptive Receptive Fields for Deep Image Parsing Network. CVPR.
  2. Si Liu, et.al. 2016. Makeup like a superstar: Deep Localized Makeup Transfer Network. IJCAI.
  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值