开发者社区> 优酷技术> 正文

【首发干货】一秒变身剧中人:优酷视频换脸技术揭秘

简介: 在这个活动中,用户仅需上传一张照片,无论是自己的还是别人的,即可将指定视频中明星的脸换成自己的脸,能看到样貌和自己一样的角色按剧中情节进行表演和对话,好像自己穿越到剧中,成为自己喜爱的明星,或者和自己喜爱的明星搭戏。也可以让自己的朋友或领导在剧中反串,可能会产生非常鬼畜的效果。

优酷在近期上线了视频大换脸活动,进优酷APP搜索“换脸”即可体验。

在这个活动中,用户仅需上传一张照片,无论是自己的还是别人的,即可将指定视频中明星的脸换成自己的脸,能看到样貌和自己一样的角色按剧中情节进行表演和对话,好像自己穿越到剧中,成为自己喜爱的明星,或者和自己喜爱的明星搭戏。也可以让自己的朋友或领导在剧中反串,可能会产生非常鬼畜的效果。

比如······

(强烈!建议你们戳开感受一下鬼畜效果)

针对我们选定的这些十几秒的小片段,换脸耗时仅需五秒,用户稍作等待即可预览,之后可以发布朋友圈或私信好友互晒,分享或帅或美或(消音——)的样子。

换脸其实今年已经不是个新鲜事,从上古时代的手工PS图片换脸术,到去年火遍朋友圈的军装照,到今年大成的Deepfakes视频换脸术,都是接近于以假乱真的换脸技术。

image.png

(有一段时间一打开朋友圈看到的就是······)

朋友圈大热过的军装照是基于图像融合和美化的技术,对用户自己的照片进行脸部的抠图之后,用滤镜处理成与背景军装图片质地风格相同,然后将脸部与背景军装图片融合到一起。这种技术的优点是计算比较简单、效果稳定、图像清晰漂亮、完整保持了上传图片的脸部特征所以很像,所以才能在朋友圈大火。相应地局限性也很大,它的本质只是贴图,无法生成新的角度和表情的脸部内容,所以所有人的军装照都是正面板着脸否则就不好看,同质性太强导致大家的新鲜感很快就过去了。

image.png

(Deepfakes号称宅男福音,我真的并不知道是为什么)

Deepfakes作为一个相当成熟的基于深度学习的开源换脸项目,效果是既真实又自然,被广泛用于恶搞名人,国外某个···我从来没上过的网站甚至还曾有过一个Deepfakes生成的各种女明星的假视频专区。但是它的局限性也很大,把A的脸换到B的身上需要收集A、B各数百张各个角度、各个表情的照片,需要至少数小时才能完成模型的训练生成良好的图片,而且这个模型仅对A换B有效。所以显然地,这是一种UP主做视频给大家看的模式,并不能让所有人都参与到换脸的玩法中来。

image.png

至于识别到视频或图片中脸的位置贴狗头猫头之类的那一类所谓换脸应用,虽然有一部分在玩法上很有趣、传播上很病毒,不过在技术上就没太多好说的了。

而优酷的换脸玩法从一开始就是瞄准普惠所有用户,要让用户能以最低的门槛参与到视频换脸的玩法中来,并且承载的内容要有趣,所以我们从一开始就把算法能力目标设置为:

  1. 单图输入,用户仅仅使用一张照片即可换脸;
  2. 快速生成,对不同的用户和不同的换脸对象,采用相同的模型,不用反复训练;
  3. 普适内容,可以生成不同角度、表情、光照的脸。

image.png

我们采用了今年非常流行的深度学习3D生成模型,但是在研究过程中还是出现了很多问题:

首先是人的长相真的是区别非常大。皮肤好眼睛大妆容精致的年轻妹子,和满脸皱纹晒得黢黑的中年男人,都很难用同一个模型来生成看起来不违和的脸,更极端的情况还会包括婴儿和老人,以及人种的区别。所以我们试图用不同的算法来针对不同类型的人进行换脸,但针对人的分类就又变成一个新的问题。

其次是视频中需要置换的脸部区域很难很准确地分割出来。在视频中演员的脸总会被各种东西部分地遮挡,既包括手臂、道具、后期加上的字幕等在运动时造成的临时性遮挡,也包括眼镜、首饰、刘海尤其是古装剧中的夸张发型等脸部周围的持续性造型遮挡,尤其是当这些遮挡与五官等脸部关键信息有重叠时,需要准确地识别哪部分是需要置换的脸部五官、哪部分是需要保持原样的,才能生成合理的新脸。

再次是生成的视频中需要包含一些原始信息里没有的内容,比如用户提供的照片是闭着嘴的,在视频中有一个表情却要张嘴,牙齿的样子的信息是缺失的;或者用户提供的是正面照片,鼻子和嘴唇的翘度也是缺失的,在生成侧脸视频的时候难以准确得到鼻子和嘴唇的高度。

还有在视频中的连续性问题。脸的生成算法是帧级的,即视频中每一帧的脸是独立生成的。但是深度学习算法本身又具有一定的随机性,无法保证每一帧中生成的脸的样貌非常一致,以及五官的位置都可能发生轻微的偏移。这种情况在单幅图观看的时候不会造成困扰,但是当把这些帧合成连续视频的时候则会发生画面的抖动,非常影响观看体验。

最后是分辨率的问题。深度学习生成模型本身是靠猜的,所以生成高分辨率的图像是直到最近才被部分解决的问题。但是要在视频中显得自然,脸部的清晰度需要和画面其他部分的清晰度差不多甚至稍强,这就需要我们能产出至少256x256分辨率以上的清晰的脸部生成图片。

所以我们采用了一系列技术来解决上述各个问题:

我们首先根据性别、年龄区间、长相类型、脸型定义了若干种不同的人脸分类,针对每一个分类的人脸使用不同的训练数据集单独训练了不同的生成模型。在用户上传照片时,我们首先进行人脸检测和人脸分类,判断ta属于哪一类之后,再使用对应的生成模型进行换脸,最大程度上解决了生成图像是否自然的问题。

image.png

其次我们使用了基于深度学习的分割算法,对视频中的人脸进行分割,使用了包括肤色和脸部特征点在内的一些先验知识,得到一个只包含真实脸部五官和皮肤区域的掩模,生成模型生成的脸只会替换视频中这个区域之内的像素,避免对头发、遮挡物等区域的像素进行替换。

image.png

[1]

再次我们使用了一个3D模型来模拟脸部五官的高度,对2D的人脸图像进行3D建模,主要包括、鼻子、嘴巴、眼睛、颧骨等处,计算出该人脸部五官的高度。当人脸发生转向时,我们对生成的3D模型进行旋转之后投影到2D视频平面上,使得五官高度符合人眼正常预期。另外针对需露出牙齿的画面,在训练数据集中加入一定比例的开口露牙的训练数据,使用户图片张开嘴后能生成平均式的牙的形状。

image.png

[2]

至于视频中的连续性问题,我们采用特征点匹配滤波的方法进行位置稳定。我们首先提取视频每一帧中脸上的所有特征点,然后在相邻帧中做特征点匹配,进而在整段视频中得到每个特征点的运动轨迹。之后我们能发现这些特征点轨迹有时会出现位置的抖动,依抖动方式不同可能导致人脸位置平移或人脸大小缩放。当检测到这些抖动的时候,我们对特征点位置做滤波,重新标定准确的特征点位置进行换脸,则可使生成的新视频中脸部画面保持连续流畅。

image.png

生成高分辨率的脸方面,我们使用了多尺度+超分辨率的技术,首先用多尺度结构的网络生成128x128的脸部图像,然后使用超分辨率网络再将宽高翻倍,达到256x256的分辨率,这个分辨率已经达到正常的540p视频中特写脸的分辨率,并且在这个分辨率上图像的清晰程度与普通540p视频相当。

综上,我们的换脸算法的总流程图如下:

image.png

首先在原视频上逐帧做人脸检测、分割、特征点提取、轨迹平滑和3D建模,生成原视频上的脸部源信息。之后在用户上传照片上做人脸检测、图片分类、区域分割以及对应的3D建模和映射,生成用户脸信息。将这两张脸逐帧输入生成模型及后续的超分辨率模型,生成新的脸部图,经过图像融合后生成每个完整的视频帧,将这些帧重新连接并编码成视频则成为了最终的换脸视频。

但是,我们目前上线的换脸玩法中从算法效果上看仍然存在一些问题,主要分以下三种:

一是因为还没有加美颜功能,换出来的脸部的精致程度一般,男生觉得还算好玩,但爱美的妹子们就没那么爱秀给别人看了。

二是侧脸角度较大和大面积遮挡情况下仍然会出现匹配位置不准的问题,既局限了我们的可换脸视频的内容,又容易形成“脸皮自己飞起来了”的惊悚效果。

image.png

三是因为我们不像Deepfakes一样为每个用户训练不同的模型,换脸出来的相似度上还是不够理想,面部特征比较明显的、圆眼睛的、脸型发型和视频中演员类似的人换出来会比较像自己,否则可能会出现一个有点像自己也有点像演员的平均脸。

脸的长相是人眼辨识能力最强的观察对象,也是影视内容里商业价值最高的部分之所在。换脸迈出的是用算法针对视频内容中角色本身进行生成的重要一步,具有巨大的想象空间。除了在用户侧可以作为用户互动参与的玩法抓手之外,比内容侧有望在算法进一步优化的基础上实现任意明星的假人参演,无论是没档期的还是请不来的,都可以达到亲临观众眼前、演观众所想看的效果。

image.png


[1] On Face Segmentation, Face Swapping,and Face Perception

[2] Extreme 3D Face Reconstruction SeeingThrough Occlusions

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

官方博客
官网链接