Jack-Cui · 2020年11月24日

程序员脱发秘籍,Hairstyle Transfer 你值得拥有!

11. 24.png

点赞再看,养成习惯,微信公众号搜索【JackCui-AI】关注这个爱发技术干货的程序员。本文 GitHub https://github.com/Jack-Cherish/PythonPark 已收录,有一线大厂面试完整考点、资料以及我的系列文章。

1 隐秘的角落

用了一个周末,一口气刷完了《隐秘的角落》这部电视剧。

不得不说,这部网剧看得过瘾,回想起来,也总觉得意犹未尽。

剧情开篇,景区的山顶,一个戴眼镜的男人,借着拍照片,把一对老人推了下去。

这一幕,被在景区游玩的三个孩子意外拍摄下来,故事从此展开。

这部剧,让一个叫「张东升」男人的名字大火,也就是把那对老人推下山的凶手。

而跟他本人同样出名的场景,是他突然摘下假发后露出的发际线。

image.png

「张东升」秃头造型,火爆网络,他的经典语录有:

  • 一起去爬山吗?
  • 您看我还有机会吗?

作为脑力劳动的程序员,脱发可能都是曾担忧过的一个问题。

image.png

在「程序员界」,流传着这么一个段子:

image.png

「我变秃了,也变强了。」

想不想,看看变强后的自己

今天,继续手把手教学

算法原理、环境搭建、模型训练、效果测试,一条龙服务,尽在下文!

2 算法原理

我在曾经的文章里讲解过类似的算法原理,例如之讲解的 ALAE 算法,人脸属性编辑。

这个算法是发表在国外 Medium 网站上的一篇文章。

Medium 原文地址(需要翻墙):

https://medium.com/swlh/hairs...

这是一个名为 Azmarie Wang 的作品,作者是一位小姐姐。

image.png

而她也在自己的 Github 上开源了相应的代码。

项目地址:

https://github.com/Azmarie/Ha...

但,这个篇文章传到国内,源码被别人做成了视频在「 B站 」分享出去,就「莫名其妙」的变成了"自制"。

很多公众号发文,都冠以「 B 站 Up 主自制」的标签。

自制个锤子哦!

人家文章、源码早就有了好吗?

槽吐完了,咱接着说算法原理。

这个算法的名字叫「 Hairstyle Transfer 」。

该算法也是站在巨人的肩膀上实现的,由 StyleGAN Encoder、Progressive GAN、InterFace GAN、SVM 多种算法组成。

算法流程:

image.png

换一个通俗一点的语言解释就是,先使用原图生成一个「人脸模型 」,这个「人脸模型 」是可以编辑的,然后找到控制头发的「控制器」,调整参数,改变发型。

专业一点的说法就是,先使用原图,用 StyleGAN Encoder 反算潜码( latent code ),获得多维的特征向量(头发、眼睛、嘴巴、肤色等)。

然后训练 SVM 分类器,用于找到控制头发的那个特征向量。

最后使用 Interface GAN 编辑特征,就可以完成头发属性编辑了。

image.png

想更深入的学习原理,需要先学习一下  StyleGAN Encoder 和 Interface GAN ,篇幅有限,本文就「点到为止」了。

3 环境搭建

你需要有在有 GPU 的机器上运行,如果能翻墙工具,强烈建议使用 Google Colab。

Google Colab 是一个 Google 提供的免费 GPU 服务器。

「 Hairstyle Transfer 」需要下载很多存放到 Google Drive 的权重文件。

使用 Google Colab 跑这个项目很方便,因为这个项目都是 ipynb 文件。

如果不能翻墙,也可以自己在本地,使用 Anaconda 新建虚拟环境。

「 Hairstyle Transfer 」算法,使用 Tensorflow 框架,并且必须是 1.x 的版本,不兼容 2.x。

首先,创建一个名为 tf 的 conda 虚拟环境。

conda create -n tf python=3 jupyter notebook

然后使用 conda 和 pip 按照如下顺序,安装如下第三方库即可:

conda install scipy tensorflow-gpu==1.15

都安装好后,环境就算搭建完成了。

4训练 & 效果测试

我们以「张东升」的图片为例进行训练以及效果测试。

image.png

图片下载地址:

https://cuijiahua.com/wp-cont...\_1.png

将项目下载到本地:

git clone https://github.com/Azmarie/Hairstyle-Transfer

然后你会得到三个 jupyter 的 ipynb 文件。

image.png

依照上述顺序跑通代码。

StyleGAN\_Encoder 会生成 output\_vectors.npy 文件。

Get\_attribute\_score\_pairs 会 stylegan-dlatents.npy 和 9\_score.npy 文件。

然后,Train\_Boundaries 使用 stylegan-dlatents.npy 和 9\_score.npy 训练 Boundaries。

这里用到了 SVM 分类器,将控制头发的特征向量分出来,得到 boundary.npy,用于后续发型的控制。

最后,再使用 output\_vectors.npy 和 boundary.npy,即可控制头发的多少。

ipynb 详细说明了代码需要如何运行,依照它的教程,按照次序运行程序即可。

里面详细说明了,怎么裁剪图片,怎么训练等。

image.png

代码中用到了很多 Google Drive 保存的权重文件,我将这些权重文件,都上传到了我的百度网盘。

下载链接(提取码:2afm):

https://pan.baidu.com/s/1sPqg...

需要注意的是,下载好这些权重文件,在跑代码的时候需要将代码中所有的加载权重方式修改一下,都改为本地加载。

例如修改 pkl 的读取方式等。

image.png

很简单,这里就不一一说明了。

根据 ipynb 的说明,我们就可以顺利跑通所有代码。

完成模型训练和效果测试。

最后,一起看一下「张东升」的 「 Hairstyle Transfer 」效果吧!

11 24 2.gif

就很“秃然”,有木有!

用自己照片试试看?一秒变超人。

5 最后

「 Hairstyle Transfer 」 算法也有一些小问题,比如控制头发变少,图片的色调也会变暗。

作者:Jack Cui
原文:https://mp.weixin.qq.com/s/3r...
关注作者公众号,获取更多有趣AI应用~
imagy.png

系列篇


更多AIoT领域有趣的算法应用及产品请关注有趣的AIoT应用专栏。
推荐阅读
关注数
2136
内容数
23
介绍有趣好玩的AIoT 实战项目,算法应用及软硬件产品。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息