听说堂妹用AI技术给自己改头换面?
本文章同步更新在个人微信公众号“九点澡堂子”,原创:九点澡堂子
各位客官好,我是堂妹。
大家知道,我现在的文章封面基本都是自己的照骗,还是不露正脸的那种。
俗称"背影杀手"。
一般这样的,没有别的原因,就是因为丑,起码对于我这样。
当然,我不仅因为丑,还因为手残。
作为程序媛,我属于化妆上班那一趴,
但基本仅限于粉底、口红、眉毛,顶多加个腮红🤷♀️。
十年如一日,没有任何花样。
再看看我身边的学公关、艺术、人文等专业的女朋友们,
每天一个妆容,各种风格各式花样,
再看看自己,约等于没有化妆。
正常女生,大概率会在有空的时候去B站大学"美妆区"潜心修炼,
我也曾想去进修过,比如看看我党妹,
几个小时下来,我发现:「堂」妹和「党」妹,差了不止一个字。
手残的我,选择放弃。可是我又想看看自己在各式妆容下是什么模样。
作为程序媛的我,怎能被难倒?
既然自己干不了,就让AI来替堂妹干!!!
先放一下我在「冰冰老婆」脸上的实验结果。冰冰真的美~**
看着实验结果,我想了下,从原图的风格,到冰冰脸上,虽说有脸型,发型,还有五官适应性的区别,导致有些妆容打了折扣,但冰冰整体扛的住。
如果原图是100分,冰冰大概是80-90,
我想我自己大概60分就够。
结局,裂开。
看着我自己的效果图,原来AI技术也"手残"。
在我贡献自己的"丑图"前,我们先来学习一下这个「AI妆容迁移」背后的原理!
!!!不许直接拉到最后看答案!!!
项目简介
用GAN对人脸图像按指定的风格进行上妆。项目来源于ACM MM2018。
[BeautyGAN:Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network]
官网仅仅提供了论文原文和数据集,本文参考的是另一位小哥哥的复现工作。点击此处跳转到代码地址
论文中给出的妆容迁移的结果:
看上去其实还是挺不错的!!!
原理简介
下面简单介绍一下文章的思路,先上图!!!
上图就是这篇文章的模型「BeautyGAN」,乍一看有点懵,让我来给各位分析一下~
作者采用的是循环一致性损失,循环一致性呢 ,就像《我侬词》中写的一样:
*你侬我侬,忒煞情多,情多处,热如火。把一块泥,捻一个你,塑一个我。
将咱两个,一齐打破,用水调和。再捻一个你,再塑一个我。
我中有你,你中有我。与你生同一个衾,死同一个椁。”*
说人话就是:A能生成B,B也能重建成A。
在这里A是素颜照,B是上妆照,还能再重建回素颜照,所以循环一致。
论文就是按照这个思想写的,具体如下:
生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,
是近年来复杂分布上无监督学习最具前景的方法之一。
在GAN网络中,生成器想生成以假乱真的图片,鉴别器想鉴别生成器生成的假图片,如此动态博弈就是GAN的核心思想。
首先左边的素颜图像和妆容图像经过生成器模型,得到素颜的“上妆”图和妆容的“卸妆”图。
然后经过两个判别器判断是否为真实的带妆图或者真实的素颜图。
后面再经过相同的生成器模型重建回原图像。
化妆嘛,最重要的肯定是上妆。
那么素颜图像要通过模型不仅要学习到妆容图像的“妆容”还得保持自己的形态不变呀,不然就变成了换脸了。
作者通过PSPNet网络(巧了,该网络我司出品)将素颜照,妆容照和上妆照进行分割,得到面部不同的位置。
然后通过将素颜照的不同位置的内容和妆容照不同位置的颜色结合,得到上妆照(不得不感叹,作者的想法真的是太棒了~)
具体细节可以参考论文哦~
食用指南
1. 环境配置:
python3.6
TensorFlow1.9 #现在只能源码编译了好像,如果大家pip install的话建议用1.13.0的版本
2. Git clone:
git clone https://github.com/Honlan/BeautyGAN.git
3. 预训练模型下载:
https://pan.baidu.com/s/1jhKvpDrLTgKgZSECBl-8vQ
公众号后台回复:「BeautyGAN」获取提取码可直接下载
4. 运行命令:
#进入主目录,xxx为素颜照路径
python main.py --no_makeup xxx.xxx
直接用作者的给的样例,运行结果是这样的:
害,真的是人美换啥妆容都好看!!!
姐妹们,如果你跟堂妹一样比较手残,只会画一种妆,
那么不妨用这个模型试试其他的妆容,看看哪个风格更合适自己!
兄弟们,拿对象的照片尝试一下,这么多的口红色号供参考.
下次给女朋友买礼物不怕踩雷了!
有人会问,我想换其他妆容可以吗,比如我想要个钮钴禄·甄嬛?
搞起。
(其实差别不大,没找到甄嬛很浓的效果图,这里就皮一下~)
实操中需要简单修改几处代码,具体如下:
第12行加入一行代码
parser.add_argument('--makeup', type=str, default=os.path.join('imgs','makeup','vFG56.png'))
在26行左右将
makeups = glob.glob(os.path.join('imgs', 'makeup', '*.*'))
替换为:
makeups = [args.makeup]
运行代码改为:
python main.py --no_makeup xxx.xxx --makeup xxx.xxx
好了,最后给大家show一下我59分的自我实验结果吧,
选了几张不会吓到你们的,过分吓人的留给我自己吧。
原谅我没有办法说服自己露脸
主要的妆容迁移效果体现在口红和眼影,
大家体验AI技术的魅力即可。
牺牲自己,"娱乐"大家。
希望大家有体会到一点点GAN这个研究方向带来的乐趣,
后续的技术相关文章会附带一些入门论文供大家参考学习。
好啦…今天的文章分享就到这里了,如果想看更多可以移步到微信公众号九点澡堂子 哦~~