安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏

_本文原始标题:安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
谷歌大脑工程师EricJang近期体验了Snapchat的性别交换滤镜并写了一篇体验文章 , 雷锋网AI研习社将这篇文章编译如下 。 Snapchat的性别交换滤镜是无尽乐趣和欢聚派对的源泉 , 其转换结果令人非常满意 。 作为一个每天都和机器学习算法打交道的人 , 这个功能的强大程度可以说非常神奇了 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
我对这个功能非常感兴趣 , 作为一个好奇宝宝 , 我今天早上注册了Snapchat并试用了一段时间 , 试图弄清楚背后的原理 , 以及我如何去破解它 。 注意:这不是对Snapchat的API文件进行逆向工程或研究其他应用如何设计类似功能 , 它只是一些基本的假设测试 , 测试它什么时候会生效 , 什么时候会不生效 , 当然再加上一点点自恋的浴室自拍乐趣 。 [手动滑稽.gif]
初步观察
中间的照片是一张浴室自拍的原始照片 。 左边是''男性''滤镜的效果 , 右边是''女性''滤镜的效果 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
大多数用户可能会注意到的第一件事是这个滤镜是实时工作的 , 你可以使用几个不同的角度 , 并且不需要联网也能运行 。 戴着毛线帽的时候 , 头发的渲染表现也非常自然 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
下图是一个我在转头的时候拍摄的动图 。 应用程序似乎能检测到面部是否指向指定的方向 , 并且只有满足该布尔值的时候才会触发滤镜效果 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
性别交换滤镜可适用于各种光线条件 , 但是头发似乎没有阴影的投射 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
你看变身女装大佬的我是不是很可爱[嘻嘻] 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
遮挡测试
从前面的观察来看 , 它的效果非常好 。 那么我们可以让它失败吗?该滤镜可以检测出人脸是否处于错误的姿势 , 但是如果有东西挡住了脸怎么办 , 那么被遮挡的人脸也会被''转性''吗?答案是肯定的 。 下面是一个(水平遮挡的)测试 , 我在脸上滑动一个物体 。 当仅有半边脸被遮挡时 , 滤镜就能正常工作 , 但如果脸部被遮挡的太多 , ''我应该换脸吗''的选项就会被设为False 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
再来看下垂直遮挡 , 这里的滤镜效果似乎取决于''脸部区域被遮挡的百分比'' , 而不是什么重要的语义特征(例如眼睛、嘴唇)被遮挡 。 就在滤镜决定''我应该换脸吗''应该切换到''False''之前 , 你可以看到手中拿着的白色的瓶子变模糊了 。 而且 , 当我把瓶子放在视线中央时 , 我的头发变成了金黄色 。 这个效果很有趣 。 在我看来 , 这一定是机器学习在起作用 , 它会从训练过的数据中提取一些数据进行渲染 。 那么问题来了 , 金发女郎会继续做更多的化妆教程吗?
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
我用黑色的活性炭面膜遮住了一部分脸 , 得出的渲染效果似乎很稳定 。 女性的滤镜确实将面膜稍微消除了 。 从下面的GIF可以很明显地看出 , ''面部交换''功能仅限于追踪头部的矩形区域(注意头发到达我肩膀时的尖锐截止) 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
一旦我用面膜覆盖脸部的其余部分 , 滤镜就会停止工作 。 有趣的是 , 我脸部的裸露区域似乎还是会被检测为面部 , 滤镜会继续执行该区域的面部样式转换 。 你可以看到头部和面部的渲染效果像伊藤润二的恐怖故事一样闪烁 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
把面膜揭除的时候 , 渲染效果则令人惊讶地稳定 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
头发层
我对头发的真实感印象最深 , 所以我想弄清楚是否有用于动态照明的头发网格模型 , 或者是否都是基于机器学习的 。
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
头发似乎会被渲染为最顶层(就像Photoshop的图层) , 但与平常所用的简单的小狗耳朵/舌头的滤镜不同 , 这个头发层有一个部分透明的alpha通道 。 如果你仔细观察 , 头发上还有一个清晰的分割面罩 , 可以让脸部显露出来 。 Snapchat可能正在进行头部的跟踪 , 以确定头部的位置 , 并计算头发的2Dalpha蒙版 。
它的工作原理是什么?以下是我的猜测 。
第一眼看上去 , 我的脑海里浮现的是某个CycleGAN架构 , 它会将男性的面孔分布映射到女性面孔上 , 反之亦然 。 数据集应该是包括了过去8年中用户们上传到Snapchat(且没有被Snapchat删掉)的数十亿张自拍照 。 但这确实引发了很多问题:
他们训练的图像转换器真的是无需成对图像的吗?如果是真的 , 这将极其令人震惊 , 鉴于CycleGAN是很多问题 , 甚至有可能根本就做不了这件事 。 那么我敢打赌他们有一个不成对的对齐目标 , 这个目标是由有限的真实成对数据集来进行规范 , 例如男/女兄弟姐妹的成对图像 , 甚至是有一些数据是手工设计的性别转换结果 , 可以作为数据增强使用(例如 , 使下颌轮廓更圆的效果可以在没有机器学习的情况下完成) 。
头发和面部的变换似乎是各自独立合成的 , 因为它们占据不同的图层(或者可能是一起合成的 , 并在渲染之前分割成不同的图层) 。 这也是我第一次看到GANs被用来渲染alpha通道 。 我有点怀疑头发是不是真的由GAN产生 。 一方面 , 显然有一些平滑的功能 , 它可以根据遮挡物体的位置切换高光和头发颜色 , 这表明颜色可能部分是从数据中习得的 。 另一方面 , 头发非常稳定 , 我很难相信它完全是用GAN发生器合成的 。 我看过一些其他东亚男性用类似发型换脸的例子 , 这表明可能存在一个大型的haridos模板库(用一些机器学习模型进行了改进) 。
Snap的ML工程师如何知道 , CycleGAN在这么大的数据集上训练以后到底收敛没有?
只有如此有限的计算资源 , 他们是怎么把这种水平的神经网络运行起来的?它们动态生成的图像分辨率是多少?
如果它确实是一个CycleGAN , 那么将男性滤镜应用于我的女性滤镜图像的时候应该恢复成原始图像才对 , 对吗?
安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏
文章图片
如上面动图所示 , 这张照片的比例基本不变 , 但当我们把它放大得非常近时 , 这张脸确实更像是我的脸 。 我猜想在将标准的人脸图像输入神经网络之前 , 会有一个预处理步骤对其进行裁剪和大小调整 。 这个滤镜中可能还有其他的子程序 , 例如调整下颚大小 , 它们不使用CycleGAN , 但是它的添加会使得M2F和F2M滤波器不再完全相反 。
技术遐想
我有个朋友就是这样 , 他在做变装之前要做很多的工作 。 我对这样的技术感到非常兴奋 , 因为它会让化妆师、角色扮演者和变装艺术家更容易以更廉价更快速的方式尝试新的想法和身份 。
面部和语音变化等技术使公共互联网角色与这些角色背后的真人之间的差距更大 。 不过这不一定是件坏事:如果你是一个男人 , 但又热衷于在网上成为一个可爱的动漫女孩 , 那么我们应该拿哪一个身份进行评判呢?(链接是Youtube视频)随着我们的日常社交媒体将性别扭曲正常化 , 性别流动性和变装文化会在社会中变得更加正常化吗?
【安能辨我是雄雌?Snapchat的性别交换滤镜被玩坏】未来非常令人兴奋 。


    推荐阅读