发型替换技术:让你拥有你想要的任何发型
起因
今年年初,抖音上线了一款名为「国风穿越」的特效,突然火了一阵——不管用户原本是什么发型,都能一键变成古装的格格头或带发髻的古风发型。这对用户来说很有参与感和新鲜感,我自己玩了很久,还推荐给我妈玩,哈哈哈。这让我们团队对「替换用户发型」这件事产生了兴趣。
学界已有一些关于头发编辑的工作,比如基于 StyleGAN 让头发变长变短、改变颜色;或者基于 StarGAN / GLEAN 这类 cGAN 方案。但这些方法只能解决头发的「二元变量」问题,比如是否长发、是否卷发;一旦涉及日常生活中几乎不存在的发型(比如古代发髻),这些方法就失效了。所以我们把上面这类方法称为发型编辑,而我们要做的,是发型替换。
我们的技术方案
难点
这件事从技术角度讲其实相当困难。因为抖音落地在移动端,我们推测它用的是类似 pix2pix 的模型,这就需要大量成对的图片数据,而图片对的获取正是训练这类模型最大的难度。一旦有了现成的图片对,问题就可以转化为我们更熟悉的领域——类似人脸卡通化的问题,在这方面我们积累了不少经验。
我们把整个过程拆解为:
- 制作发型替换的图片对
- 利用图片对训练一个类 Pix2Pix 模型
难点在第一步,本文阐述的重点也在第一步。
实现过程
我们为制作图片对的过程申请了专利。由于专利尚未公开,暂时还不能详细讨论具体实现,只能骄傲地说——我们的方案很精妙,精妙到我给它起了一个很好听的名字,叫做劫持。
落地
截至 2022 年 11 月 1 日,我们用这套全新的技术方案一共落地了三个发型。
背头
背头是相对中规中矩的发型,但它是团队用新方案落地的第一个发型,所以对稳定性要求很高,哈哈哈。(左下角的背头就是用全新技术方案实现的)
《间谍过家家》的动漫发型 — Anya 与黄昏
第一个发型跑通之后,我们开始「放飞自我」,想挑战更高难度的发型。正值《间谍过家家》很火,我们决定以满足用户 cosplay 的愿望为目标去迭代,做了 Anya 和黄昏的发型。这两款发型的难度远高于背头,尤其是因为它们艳丽的颜色。优化方案之后,最终效果上线到了 QQ 小世界。
后续
我们当时采用的技术路线里,生成的发型会和用户本身的发色产生耦合——比如用户本身是白发,生成的背头也会带白发,尽管在黄昏和 Anya 的发型里我们已经优化了这一点。
我们计划挑战自己,尝试一种一致性更强的新技术路线:不管用户本身是什么发色,都能生成宣传图里那种统一效果。当然这个目标会牺牲「千人千面」的个性化,和前面「劫持」策略的侧重点各有不同。当时已经有了初步方案,等后续有新发型落地,再来分享。
成果
这半年多的时间里,收获了以下成果:
- 作为第一发明人申请技术专利一项,尚未公开。
- 独立上线背头发型替换模型到 QQ 小世界。
- 合作上线Anya 和黄昏发型到 QQ 小世界。