介绍
最近接到一个项目,做一个换脸算法,能实现任意人脸的互换。天天p图,zao的换脸是目前市面上做的比较好的产品,有比较高的技术及资源门槛。国外deepfake刚出来的时候也引起了不小的轰动,甚至影响到立法。
在github上搜索swapface,相关项目有这些特点:
1针对特定人脸,即训练针对特定人物的模型,不能实现任意两人的互换,尤其是视频,甚至是两个指定视频要训练后才能进行互换;
2效率过低,显卡上跑着都很吃力,动不动几百毫秒没有了;
3效果太差,尤其是对肤色角度的相似性要求太高。
就上面几点,形成了天天p图和zao的技术难点及应用难点,据说zao刚运营的时候,日亏百万。
方法
本文所属方法,目标如下:
1 实现任意人脸互换
2 实现高效率的运行,在pc机单核200ms以下的处理时间
3 实现对肤色和角度的最大限度的支持
算法实现
整体步骤如下:
1 人脸识别,得到人脸位置及特征点;
2 采用人脸剖分方法,将一个人脸映射到另一个人脸上;
3 采用gan对人脸进行精修,实现多余物体取出(阴影,留海等),肤色融合及畸变矫正
其中gan的方法借鉴了deep fake的思想,主要在训练样本对的设计上很有讲究,这是本文所述方法的技术核心,不方便透露。
效果展示
上面的例子展示了一些肤色不一样,角度变化大的情况,当然角度变化是有限度的,越大效果越差,肤色也是一样的,差距越大也差。
总结
本文所述方法还处在研发期,不过效果还是可圈可点的,尤其是时间现在控制在100ms左右,i5单核上。未来计划应用在视频换脸上,只要能解决帧间稳定性,尽量向zao看齐