秃头生成器,Hairstyle Transfer 你值得拥有!

2020年7月10日08:30:38 发表评论 2,796 °C
摘要

Hairstyle Transfer 算法助你变秃,变强!

秃头生成器,Hairstyle Transfer 你值得拥有!

本文 GitHub https://github.com/Jack-Cherish/PythonPark 已收录,有技术干货文章,整理的学习资料,一线大厂面试经验分享等,欢迎 Star 和 完善。

一、隐秘的角落

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

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

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

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

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

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

秃头生成器,Hairstyle Transfer 你值得拥有!

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

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

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

秃头生成器,Hairstyle Transfer 你值得拥有!

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

秃头生成器,Hairstyle Transfer 你值得拥有!

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

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

今天,继续手把手教学

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

二、算法原理

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

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

Medium 原文地址(需要翻墙):点击查看

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

秃头生成器,Hairstyle Transfer 你值得拥有!

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

项目地址:点击查看

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

秃头生成器,Hairstyle Transfer 你值得拥有!

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

自制个锤子哦!

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

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

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

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

算法流程:

秃头生成器,Hairstyle Transfer 你值得拥有!

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

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

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

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

秃头生成器,Hairstyle Transfer 你值得拥有!

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

三、环境搭建

你需要有在有 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 和 pip 按照如下顺序,安装如下第三方库即可:

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

四、训练 & 效果测试

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

秃头生成器,Hairstyle Transfer 你值得拥有!

图片下载地址:https://cuijiahua.com/wp-content/uploads/2020/07/photo_1.png

将项目下载到本地:

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

秃头生成器,Hairstyle Transfer 你值得拥有!

依照上述顺序跑通代码。

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 详细说明了代码需要如何运行,依照它的教程,按照次序运行程序即可。

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

秃头生成器,Hairstyle Transfer 你值得拥有!

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

下载链接(提取码:2afm):https://pan.baidu.com/s/1sPqgyYqY06Z62jz2Up57MA

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

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

秃头生成器,Hairstyle Transfer 你值得拥有!

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

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

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

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

秃头生成器,Hairstyle Transfer 你值得拥有!

就很“秃然”,有木有!

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

五、最后

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

秃头生成器,Hairstyle Transfer 你值得拥有!

weinxin
微信公众号
分享技术,乐享生活:微信公众号搜索「JackCui-AI」关注一个在互联网摸爬滚打的潜行者。
Jack Cui

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: