参与蛋酱 李泽南

谷歌程序员自制秃头生成器:一键get张东升同款发型,今天你脱发了吗?

头可断,发型不能乱。

最近有一个男人的名字实在太火了,他叫「张东升」;比他本人更出名的,是他突然摘下假发后露出的发际线。

在看完《隐秘的角落》以后,你会不会突然脑洞大开,思考秃顶后的自己是什么样子呢?

结果就是这么巧,几天前,一位 UP 主隆重推出了自制的秃头生成器,不管你现在有多年轻,头发有多么浓密,这个生成器都能让你一眼望穿二十年后的自己。

众所周知,目前机器学习领域大部分的图片生成工具都是基于 GAN(生成对抗网络)来实现的。英伟达在 2018 年推出了 StyleGAN 之后,AI 生成的人脸已经极其逼真,很难用肉眼来分辨。随后,英伟达也开源了 StyleGAN 的代码,从此,越来越多的假脸就这样被创造了出来,并且发型、皮肤、五官等特征都可以随心变化。

不掏一分钱,也不用出门,在家编程就能实现自己秃顶的梦想。这可不就是程序员们常说的「代码改变世界」?

直到看见了生成结果,这发际线后移的速度太过恐怖:

望着秃头的自己,一瞬间,心就凉了:

虽然也知道自己终将会有这么一天,但还是想逃避:

发量日渐稀疏的程序员看完之后表示:「技术不错,但有被冒犯到。」

详细教程

即使这样你也要尝试?UP 主暂时没有分享出全部代码,但你也可以如法炮制,预知一下自己未来秃头后的颜值(误)。

MarsLUL 提到,该生成器的思路和代码大部分来源于一篇 Medium 教程《Hairstyle Transfer — Semantic Editing GAN Latent Code》。

教程地址;https://medium.com/swlh/hairstyle-transfer-semantic-editing-gan-latent-code-b3a6ccf91e82

这里借用了汤晓鸥周博磊等人在论文《Interpreting the Latent Space of GANs for Semantic Face Editing》提出的「InterfaceGAN」。

第一步:潜码估计

首先,我们将输入图像发送到预训练的残差网络中,以便在 StyleGAN 中进行初始潜码估计。然后把这个估计值发送给生成器,这让我们对原始输入图像有一个初步的猜测。对此图像我们可以将预训练的图像分类器应用于特征提取。同时,我们将对输入图像也进行同样的特征提取。

然后在特征空间中,我们执行梯度下降,将特征向量的 L2 损失最小化并更新潜码估计(红色箭头部分)。

现在,我们就可以在 StyleGAN 潜在空间内查找任何图像。

带边界语义编辑

在进行编辑之前,我们需要寻找可以在潜在空间中分离二元属性的特定边界。每个边界对应一个头发属性。比如:
  • 发型:波浪 / 直发、刘海;

  • 颜色:黑色 / 棕色 / 金色 / 灰色;

  • 发际线:后退发际线;

  • 面部毛发:胡子、鬓角。

但是如何找到边界?首先要做潜在空间分离,

最终使用 10 个分别于属性匹配的分类器来生成 2 万个潜码和 score pairs。我们在头发属性上训练独立线性 SVM,然后在验证集上进行评估,最终准确性可以达到 80%。

把它们放在一起,对于每个输入图像,我们先在 StyleGAN 潜在空间中找到其特定位置,然后将其按照特定方向移动,以进行语义编辑。

我们对每个属性使用线性超平面,将其法线向量作为输出面相对于目标属性连续变化的方向。例如在上图中,我们在 StyleGAN 空间中找到了年轻的莱昂纳多 · 迪卡普里奥的图像隐代码,绘制了与刘海超平面正交的方向,将隐代码的位置沿该方向移动。这样我们就可以创建不同刘海状态的,迪卡普里奥的图片了。

最后,说到条件边界(Conditional Boundary),它也在 InterfaceGAN 中被引入。通常,许多属性会相互耦合,比如发际线与人的年龄相关,长发更多出现在女性照片中,胡须仅出现在男性面部。但是把不同属性区分开非常重要。

作者介绍

MarsLUL 本科毕业于同济大学土木工程系,是一名头发很多的年轻人。

2015 年,他进入 UC Irvine 开始学习计算机知识,后来成为一名程序员,并进入谷歌工作。

在以往的视频作品中,他也分享了自己转专业和求职的诸多经验。

https://www.bilibili.com/video/BV1kt4y1C712

首先就是,转行计算机一定要以兴趣为先,不能单纯因为「待遇好」、「容易找工作」等因素,就扎进一个自己并不喜欢的专业,如此是得不偿失的。


但如果决定了,下一步就是怎样在最短的时间内掌握一门学科的知识体系。

他会将一门学科分为三条路线进行学习:基础知识、专业知识和兴趣知识。

基础知识相当于建筑的地基,也是另外两条路线的先决条件,比如计算机专业的基础知识就是算法、数据结构、操作系统等等。这些知识都可以在 Coursera 等课程网站上获得。

然后是专业知识,在没有从业经验的时候,你可以尝试参加一些培训项目(比如 Udemy),来了解在真正的工作岗位上,一个程序员到底需要掌握什么技能。

另外一方面,可以通过读书和专业知识的论坛,进行兴趣知识的补充。比如 Hacker News,简直是程序员摄取相关知识的福地。书籍方面,MarsLUL 推荐了《免费的编程中文书籍索引》这个 GitHub 项目,分门别类地整理了多本书籍资源,学习者可以根据自己的兴趣来挑选。

项目地址:https://github.com/justjavac/free-programming-books-zh_CN

在另一期视频中,MarsLUL 也细致地分享了作为一名转专业人员,如何闯过简历这一关。

https://www.bilibili.com/video/BV1HC4y1a7Tc

最后的最后,关于制作秃头生成器的初衷,UP 主也说了:「其实是为了告诉大家熬夜的危害,为了自己的头发,能早点睡就早点睡吧。」

编程不易,且编且珍惜。
工程计算机视觉StyleGAN
相关数据
周博磊人物

香港中文大学助理教授,MIT博士。研究兴趣:计算机视觉和机器学习,对视觉场景理解和可解释AI系统非常感兴趣。

汤晓鸥人物

汤晓鸥,现任香港中文大学信息工程系系主任,兼任中国科学院深圳先进技术研究院副院长。中央组织部“千人计划”入选者,全球人脸识别技术的“开拓者”和“探路者”,商汤科技联合创始人。2014年3月,汤晓鸥团队发布研究成果,基于原创的人脸识别算法,准确率达到98.52%,首次超越人眼识别能力(97.53%)。

相关技术
机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

操作系统技术

操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

生成对抗网络技术

生成对抗网络是一种无监督学习方法,是一种通过用对抗网络来训练生成模型的架构。它由两个网络组成:用来拟合数据分布的生成网络G,和用来判断输入是否“真实”的判别网络D。在训练过程中,生成网络-G通过接受一个随机的噪声来尽量模仿训练集中的真实图片去“欺骗”D,而D则尽可能的分辨真实数据和生成网络的输出,从而形成两个网络的博弈过程。理想的情况下,博弈的结果会得到一个可以“以假乱真”的生成模型。

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

生成对抗技术

生成对抗是训练生成对抗网络时,两个神经网络相互博弈的过程。两个网络相互对抗、不断调整参数,最终目的是使判别网络无法判断生成网络的输出结果是否真实。

合合信息机构
同济大学机构
推荐文章
暂无评论
暂无评论~