谷歌大脑工程师:Snapchat性别交换滤镜的技术秘笈
谷歌大脑工程师Eric Jang近期体验了Snapchat的性别交换滤镜并写了一篇体验文章,AI研习社将这篇文章编译如下。Snapchat的性别交换滤镜是无尽乐趣和欢聚派对的源泉,其转换结果令人非常满意。作为一个每天都和机器学习算法打交道的人,这个功能的强大程度可以说非常神奇了。
我对这个功能非常感兴趣,作为一个好奇宝宝,我今天早上注册了Snapchat并试用了一段时间,试图弄清楚背后的原理,以及我如何去破解它。
注意:这不是对Snapchat的API文件进行逆向工程或研究其他应用如何设计类似功能,它只是一些基本的假设测试,测试它什么时候会生效,什么时候会不生效,当然再加上一点点自恋的浴室自拍乐趣。
初步观察
中间的照片是一张浴室自拍的原始照片。左边是“男性”滤镜的效果,右边是“女性”滤镜的效果。
大多数用户可能会注意到的第一件事是这个滤镜是实时工作的,你可以使用几个不同的角度,并且不需要联网也能运行。戴着毛线帽的时候,头发的渲染表现也非常自然。
下图是一个我在转头的时候拍摄的动图。应用程序似乎能检测到面部是否指向指定的方向,并且只有满足该布尔值的时候才会触发滤镜效果。
性别交换滤镜可适用于各种光线条件,但是头发似乎没有阴影的投射。
你看变身女装大佬的我是不是很可爱。
接下来是一个我认为很酷的例子——合成的头发可以捕捉光线的关键来源。
遮挡测试
从前面的观察来看,它的效果非常好。那么我们可以让它失败吗?该滤镜可以检测出人脸是否处于错误的姿势,但是如果有东西挡住了脸怎么办,那么被遮挡的人脸也会被“转性”吗?
答案是肯定的。下面是一个(水平遮挡的)测试,我在脸上滑动一个物体。当仅有半边脸被遮挡时,滤镜就能正常工作,但如果脸部被遮挡的太多,“我应该换脸吗”的选项就会被设为False。
再来看下垂直遮挡,这里的滤镜效果似乎取决于“脸部区域被遮挡的百分比”,而不是什么重要的语义特征(例如眼睛、嘴唇)被遮挡。就在滤镜决定“我应该换脸吗”应该切换到“False”之前,你可以看到手中拿着的白色的瓶子变模糊了。而且,当我把瓶子放在视线中央时,我的头发变成了金黄色。
这个效果很有趣。在我看来,这一定是机器学习在起作用,它会从训练过的数据中提取一些数据进行渲染。那么问题来了,金发女郎会继续做更多的化妆教程吗?
我用黑色的活性炭面膜遮住了一部分脸,得出的渲染效果似乎很稳定。女性的滤镜确实将面膜稍微消除了。从下面的GIF可以很明显地看出,“面部交换”功能仅限于追踪头部的矩形区域(注意头发到达我肩膀时的尖锐截止)。
一旦我用面膜覆盖脸部的其余部分,滤镜就会停止工作。有趣的是,我脸部的裸露区域似乎还是会被检测为面部,滤镜会继续执行该区域的面部样式转换。你可以看到头部和面部的渲染效果像伊藤润二的恐怖故事一样闪烁。
页:
[1]