当前位置:首页 > 技术分析 > 正文内容

你还只是在玩换脸?赶紧来围观如何从头换到脚

ruisui883个月前 (02-17)技术分析10



摘要

本文介绍了人工智能的一个新领域,图像生成、视频生成。最近大热的DeepFake换脸,就是这一领域的爆款应用。我们分别介绍了图像生成、视频生成的几种典型方法。这几类方法,基本代表了各方向的最新进展state of the art。目前,我们仅对这些做了初步调研。后期,若我们在公司业务找到应用,可在这方面继续深入。

引言

人工智能浪潮正在往纵深发展。2012年到2017年,深度学习技术的最成功应用,是将物体识别的能力,提升到超过人类的级别,将人脸识别、目标检测、目标分割等技术推进到实用阶段。自2017年以来,深度学习最激动人心的进展是生成对抗网络GAN,Generative Adversary Network。

什么是生成对抗网络?我们回顾一段残酷的历史。南北朝时期,有个残暴的君主叫赫连勃勃,他在修建都城的城墙时,安排了两拨工匠。一波人负责修城墙,一波人负责造矛。墙修好后,拿矛来戳。戳得进,杀砌墙的工匠;戳不进,杀造矛的工匠。靠这种法子,他建造了极其坚固的城墙。他死后,继位者腐朽无能,邻居北魏来攻打,却对这城墙,一点办法都没有,最后靠引诱城内兵马出城作战才拿下都城。

GAN也就是这种思路。它构建了两个网络,生成器网络G,对抗器网络A。以图片生成为例,G的输入可以是噪声、也可以是别的输入,G的输出就是一张图片。这个图片会送入A,A会判断图片是真是假,并把结果反馈给G,让G改进。显然,一开始,G生成的图片,与真实图片,差别必然很大,A很容易就判断真假。但是,随着G的改进,A的判断就会越来越难。直到某一刻,A再也无法分辨,给一张图,到底是真实的,还是G生成的。这时,我们说,GAN网络就训练好了,我们拿生成器G,就能去生成各种以假乱真的图。

这种思想,催生的第一个爆款应用,就是换脸,DeepFake。

Deepfake掀起了一股换脸的热潮。美国国会甚至专门出台法案,限制换脸技术的使用,以免干扰即将到来的美国大选。


GAN其实并不神秘。我们都知道一款神器PS,photoshop。PS能对图片做各种各样的编辑。但是,PS都是靠人来用,而不能自动。而GAN在图像方面,其实是将人如何使用PS,变成自动化了。

除了图像、视频,GAN也能用于文本。最近的GPT-2网络,可以写诗、可以写小说,并且,逻辑关系很挺顺。


本篇总结,我们主要关心用GAN进行图像、视频的生成。

视频可以视为一组图像的序列。因此,图像生成是视频生成的基础。而在视频生成中,我们需要额外考虑的一点是,时间维度的一致性,temporal coherence。比如,在相邻两帧图像中,同一物体如同一只手,它的位置变化,是不可能太大的。如果变化很大,我们在视频中看起来,就会觉得很怪异,这就是temporal coherence的含义。


图像生成

最著名的图像生成,就是换脸。

先看一波换脸的效果图。

实现的效果:给一张source脸与target脸,最后得到的result:脸是source,其他如背景、脸部角度、姿态等与target相同。

换脸DeepFake

经典的换脸,过程如下图所示:

过程可描述为:

1. 输入为A与B的脸部图。通常是一段A的视频、一段B的视频。注意,视频可视为一个图片序列。

2. 网络结构:Encoder-decoder架构。流程如下:1)给定一张A脸的图片,它会输入到Encoder,Encoder的输出为A脸的特征向量。2)A脸的特征向量,输入到Decoder,Decoder的输出是重建的A脸。Encoder、Decoder通常由1-N个CNN结构组成。

3. 训练第一阶段:用A的视频,训练一个Encoder、DEcoder-A;同样,用B的视频,训练一个Encoder、Decoder-B。注意,Encoder是共享的,而Decoder则依赖于脸。这时,loss函数是,希望重建脸与输入脸尽可能一致。

4. 训练第二阶段:交换。即将Encoder-A的输出,送给Decoder-B,将Encoder-B的输出,送给Decoder-A。这时,loss函数是,希望Decoder-A的输出脸,与脸B尽量一致;Decoder-B的输出,与脸A尽量一致。注意,此时,训练不再对encoder进行调整,只调整decoder。

5. 测试:若输入为A脸视频,则采用Encoder、Decoder-B的网络来处理,获得将脸换为B的新视频。对B脸视频,亦如此。


主要缺陷:每一对脸,就需要训练一个模型。每换一对脸,都需要重新训练。带来显著缺陷:

· 训练成本太高:每一对脸,都需要收集训练视频

· 训练效果不好:一对脸,视频不够多时,容易过拟合。对于遮挡、侧脸等各种情形,效果往往不好。

换脸FaceShifter

生成器的网络如下图(a)所示。

功能描述:

被替换的是target图,表示为Xt。

用于替换的是source图,表示为Xs。

最后得到的输出Y:脸是source所包含的脸;脸部姿态、角度及图的背景,是target所描述。


过程描述:

Target图的处理,是一个典型的Encoder-Decoder过程。Encoder是一个多层神经网络,它的输出尺寸逐步减少;Decoder则相反,逐步增大输出尺寸。在图(a)中,Z1是最后一层Encoder的输出,即尺寸最小的。注意,Encoder与decoder之间有残差连接,并非简单的层次结构。

Source图,首先进入identity encoder,这其实是arcface的特征提取,最终的输出是人脸特征向量,即Zid。

生成成过程:即(a)中的AAD generator模块,它包含多层的AAD resBLK。一个resBLK的结构,如(b)所示,这里面又包含两层的AAD、Relu、conv。AAD的结构如(c)所示。限于篇幅,b、c两个图,不再解释。

每个AAD resBlk,接受三个输入:来自target图的Zi;来自Source图的Zid;上一层AAD resBlk的输出。

直观理解每一层在做什么:将source的脸,与target的背景等属性,进行融合。

为什么要多层:实现多分辨率的生成,逐步提高分辨率,最终得到高清的生成结果。

AAD generator模块的最终输出,就是生成的图。


优点:

· 训练数据易得:网络的输入是一对脸的图,这样的训练数据,可以很轻松地获得大量数据。

· 一次训练,反复使用:只要训练一次。测试是,给定一对脸的图片,就能交换。无需对不同的脸,训练不同的模型。

换人instaGAN

解决几个问题

· 当图片中有多个实例时,怎么换?上面介绍的换脸技术,只能将一张脸换为另一张,不能同时将两张脸换为另外两张。

· 当目标的形状shape,有很大变化,如何做?换脸技术,一般都要求,交换的两张脸,脸型比较相近;若差别大,则效果不好。

这时,我们关心的,不只是换脸了,而是instance-level的交换。这个instance,可以是脸部,也可以是其他部位、其他物体。


效果如下图


网络结构如下所示。基本过程是,输入是一张图及其object mask。注意,此时的输入并不是所有目标的semantic mask,而是只含有targeted object的mask。网络会将source object mask,变换为target object mask,然后再结合原输入图,合并生成结果图。结果图中的object,已不是source,而是target。

视频生成

广义而言,只要系统输出是一个新创造的视频,都可以认为是视频生成,比如从噪声向量生成视频的无条件视频生成任务,和一系列有条件视频生成任务,比如 text2video, image2video,video2video,multi-condition video generation (e.g. head image + speech)。 一些特定的视频生成任务有其专属的称号,如 DeepFake 换脸、视频超分、视频预测等。

下图是来自知乎的一个总结。无条件视频生成文章并不太多,目前看来其生成效果距离实际应用还有较长距离。

我们这里介绍有条件视频生成的一类典型技术。它们均由英伟达公司的研究人员发明。

vid2vid

vid2vid是NVIDIA公司提出的一种图像翻译模型 ,通过输入语义图来生成视频,其是在pix2pix、pix2pixHD基础上改进出的模型,三者的演进思想如下:

· 最早pix2pix框架提出了一种统一的简洁优雅的框架解决了图像翻译问题,使用CGAN代替专家知识实现基本图像翻译效果。

· pix2pixHD是在pix2pix基础上改进G和D,可以生成高分辨率图像,并使用一点技巧,能够控制生成多样化的输出。

· 前两种方式只是针对静态图片的翻译进行设计,如果直接用于视频的翻译会导致帧间不连续的问题,vid2vid是在pix2pixHD基础上考虑加入视频连贯性的设计所提出的视频翻译模型,改造G和D来生成连贯且高质量的视频。

上图展示了主要功能。这里以行为识别为例。

基本思想:左图为原始输入。先将输入图的行为,提取出来,表示为pose map。pose map可用densepose、openpose等方法来提取。然后用另一个目标,生成与pose map一致的新图。


vid2vid的训练,使用8块V100,训了10天左右,实现了1080p的视频生成。


这是Nvidia公司在NIPS 2018提出的工作。

few-shot vid2vid

在NIPS 2019,Nvidia同一波人,对vid2vid又进行了改进。

vid2vid存在的主要缺陷是,它的生成,局限于训练集中已有的目标(如人)。所以,如果要对新人做视频生成,就需要收集该人的大量视频,重新进行训练。

与此同时,vid2vid的另一个缺陷,若某人的某个动作,在训练集中没有,则生成效果就不好。比如,训练时都是A的舞蹈视频;测试时,拿一段B的武术视频,试图将之替换成A的武术视频,效果就不会很好。

这两个缺陷其实是一体的。后一个缺陷的根源是,vid2vid对每个人(目标),训练不同的模型。由于单个人的视频不可能收集的很完整,所以自然,训练的泛化能力就比较差。



few shot vid2vid对以上缺点,进行了改进。

它的输入:1) 一段目标A的视频;2) 多张B的各种姿态的图片。

它的输出:一段B的视频,B的动作与原来A的动作是相同的。


few-shot vid2vid的思想,可通过下图表示。

先看右侧子图,即红框内。它实现的功能是:从pose map生成realistic image。

那么,左侧子图做了什么:左侧子图,生成了一组权值。这些权值,会用于右侧子图。


我们来直观地理解这个过程。

假设我们有十个人,每人一组视频,来对右侧子图,做训练。最有的情况当然是,对每个人,都学到一组权值,让右侧子图能生成该人的视频。

但是,如果这么做,我们不能实现泛化。

如何泛化呢?我们引入左侧子图,它负责生成右侧的权值。也就是,对一个人来说,我们用左侧子图来获得,适合于他的权值(对应于右侧子图);然后,将这个权值,加载到右侧子图,就可生成该人的视频。

显然,对右侧子图,不同人的权值,其实是有共同点的。共同的地方就是对动作的描述,不同的地方就是该人的属性(如身高、脸部、衣物等)。

所以,在我们的训练过程中,右侧子图自己学到的权值,描述了共性特征。左侧子图输出的权值,是特定目标的属性特征。

而在测试阶段,右侧子图的权值,是它自己学到的权值,与左侧输出权值,相加而得到。


通过这种思想,few shot vid2vid就可用一套模型,适配于新目标。

公开数据集

图像分割、行为识别等的数据集

图像分割的结果,即semantic map,是一种重要的中间表示手段。因此,图像分割数据集,在图像生成中,得到了广泛应用。类似地,视频分割,也被用于视频生成。典型的包括街景CityScapes、COCO、PASCAL-VOC等。

对人的行为,skeleton是一种重要的表示手段。因此,行为识别数据集,也在图像生成、视频生成中被广泛使用。典型的包括ActivityNet、UCF101等。

FaceForensics++

这是用于脸部重建的经典数据集。最初的版本为FaceForensics,包含数万张高清人脸图片。后来扩展为FaceForensics++,规模更大。

该数据集,需要申请使用。对中国用户很不友好,基本难以获取。

Facebook FakeVideo检测竞赛

不久前,Facebook发起了一项竞赛,提供了数千个Fake videos,号召人工智能研究者参与进来,开发新的算法,区分facked video与native video。

小结与讨论

本文对图像生成、视频生成这一新的热门领域,进行了介绍。限于时间,我们还有许多主题没有谈及。包括:1. GAN的基本思想,GAN的发展历史;2. 通用的图片生成;3. 对虚假视频的检测与发现。有矛就有盾,造假与打假,是硬币的两面。

希望通过本文,能帮助感兴趣的人,快速入门。相关项目的论文、代码、数据、预训练权值等,可与作者联系。


扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2010.html

标签: pix2pixhd
分享给朋友:

“你还只是在玩换脸?赶紧来围观如何从头换到脚” 的相关文章

首个支持苹果 M1 Mac 的 Linux 发行版发布,面向用户开放下载

IT之家 3 月 20 日消息,Asahi Linux 是研究 Linux for Apple Silicon macs 的组织群体,3 月 18 日,Asahi Linux 宣布成功在 M1 MacBook Air 笔记本电脑上运行,并开放了 Asahi Linux 的下载安装。Asahi Lin...

Java教程:gitlab-使用入门

1 导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作GitLab简介GitLab环境搭建GitLab基本使用(组、权限、用户、项目)2 GitLab简介GitLab是整个DevOps生命周期...

三维家-系统快捷键使用

快键件使用:通过简单的键盘+鼠标操作,快速完成搭配。1.基础快捷键1) Ctrl+V:复制选中对象第一步:鼠标左击物体,按下Ctrl+V 即可复制选中对象。2) Ctrl+G:组合多选对象第一步:按住Ctrl键多选对象--按住Ctrl+G--确定。3) Ctrl+B:解组选中对象第一步:左击选中对象...

从 Vue2.0 到 React17——React 开发入门

作者:佚名来源:前端大全前言找工作时发现有一些公司是以React作为技术栈的,而且薪资待遇都不错,为了增加生存的筹码,所以还是得去学一下React,增加一项求生技能。因为我用Vue2.0开发项目已经四年了,故用Vue2.0开发项目的思路来学习React。前端项目是由一个个页面组成的,对于Vue来说,...

vue 开发规范

项目运行指南(#项目运行指南)开发本地环境(#开发本地环境)开发相关插件/工具(#开发相关插件工具)开发规范(#开发规范)vue(#vue)【数据流向】(#数据流向)【慎用全局注册】(#慎用全局注册)【组件名称】(#组件名称)【组件中的 CSS】(#组件中的-css)【统一标签顺序】(#统一标签顺序...

uni-app基于vue开发小程序与标准vue开发新增点

1、路由跳转传参uni.navigateTo({ url: `/pages/transition/spreadTextAction?t=${this.options.t}&rt=${this.options.rt}&l=${this.options.l}`});uni.navigateBack({...