FakeApp2.2 使用笔记

时间:2018-09-18 作者:包包 164人已阅读 学习笔记

我觉得有时候人学习一些东西,是需要有一点动力的,虽然有时候这些动力看上去可能会很荒唐。


最近晚上没事的时候看了一部网剧,一开始听说是因为敏感的题材而被封的片,顿时觉得很有兴趣,等到真正看的时候才发现剧情太狗血,能支撑着我看下去的只有男主的颜值。



9月15日,这个周末遇到了台风山竹,这场声势浩大的台风横扫了整个广东,粤东地区基本是最早体会到台风的威力的,傍晚,风已经把门窗吹得呼呼响了,所以这个周末只能宅在家里,不能出门。不知道就怎么突发奇想的想尝试一下大半年前热过一小会的换脸的应用FakeApp。想尝试把男主这逆天的容颜换到一个普通人的脸上。于是搜索了相关的资料就开始操作了,这个过程算是比较顺利也比较无奈,因为中间夹杂着无数次孩子喊“妈妈”,无数次离开电脑陪孩子一会再回来。


安装的过程算是比较顺利的,软件都找到了。下载cuda/cudnn,安装,电脑中已安装python3.6和vc++ 2015 64位运行库,所以只需pip下载tensorflow1.5再安装,基本工作完成了之后就安装了FakeApp2.2。

下载和安装大概折腾了两三个小时之后终于把软件装好了。此过程还算是比较顺利,当看到主界面弹出的时候心里非常开心。



FakeApp安装完之后我把沈教授(男主)的脸裁了一部分的视频出来,作为要替换的B角,然后在QQ音乐上找了一段普通人演唱《Remember me》的视频,把歌唱者作为被替换的A角。


A角的脸部提取比较成功,很快就把视频切成了帧,脸部的图像也被提取了出来。B角的就比较麻烦,因为电视剧里有沈教授的视频比较零碎,所以必须在很多个视频里面截取,截取的每一段小视频生成的帧数量又不够。所以必须分多个视频多次生成,生成出来之后把帧放在同一个文件夹里。


运行了之后又发现B角的头像提取不出来。我再仔细的研究了一下B角视频生成的图片,发现原来是原视频达到了1920*1080的分辨率,ffmpeg提取出来一张图竟有2m多,文件夹里有不少于1000张图片。而我的电脑显存和内存都是4G,我觉得是图片太大,硬件配置还不够,不能支持。所以只能批量压缩图片之后再来试试看。


网上查了一下,发现photoshop就有批量压缩图片的功能,于是学习了一下使用教程,自己摸索了一会,实验了几次失败之后,终于成功的用photoshop自动把1000张以上的图片压缩在800K以下。


这时候再运行一下FakeApp的提取功能,发现B角的脸成功的被提取下来,一个文件夹里全部都是沈教授的脸,看着真的是身心都舒畅。


A角和B角脸部都被提取成功之后,就是开始训练模型的过程,这个过程也是比较容易操作,也试过一两次失败,在网上的教程看了再看之后发现主要还是因为配置了错误的路径,调整了之后就看到那6行12列的训练窗口,loss A和loss B这两个数字随着时间的推移缓慢的减小,减小到0.01以下就说明失真的程度比较低,可以比较完美的替换了。



而训练的时间实在是太长了,我没办法呆在电脑前面等。差不多16个小时的时间过去后, Loss A训练到0.018左右,Loss B还在0.020以上,但是我的电脑已经连续保持16个小时CPU 40%以上,内存90%以上的工作状态,整只电脑发热得厉害,运行这种这么耗资源的程序,我这台只有4G内存的笔记本显然还比较吃力。


我终止了训练,打算就使用这个0.018失真效果来换脸。


在创建视频的过程中,发现还是同样的,视频被一帧一帧的提取出来,然后每一帧A角的脸部被替换成B角的脸部,然后在最后,再把替换好的B角合并成视频,最终的视频生成了。但是还有一个问题,合成的视频只有图像部分,音频部分丢失了。而显然的FakeApp没提供这部分的复原。所以为了要达到完美替换,得再做一步从原视频提取音频再把音频合并到目标视频的操作。


这一部分我没有继续做下去,主要是因为生成的视频实在是太惨不忍睹了,表情怪异,脸全都胡了,白瞎了那么好看的一张脸。这个其实不能怪人家的软件,主要还是有下面几个原因造成的。


1.硬件配置不足,主要是4G的内存实在太小,所以处理不了清晰一些的原图片。而且没有经过一个非常长的时间的训练,也训练不出好的模型。


2.训练的精度不够,普遍的要求是0.01以下,但是为了我可怜的电脑,0.18的时候就被我终止了,所以运行到最终,每个模型第3列的替换效果还是比较模糊的。


3.选择的A角和B角脸型差别太大,A角的脸太小,B角的脸套上去明显下巴要比A角大一圈。


4.A角的表情和B角的表情差太远。A角在唱歌的过程中大部分的时间是皱眉闭眼的表情,B角却有双大眼睛,图片也大部分是睁着大眼睛微笑的图,更过分的是还戴眼镜,当然我也是想试试看戴眼镜人脸的替换效果。所以整个结果就是眼睛那块显得最莫名其妙。


虽然结果不尽然美好,但是过程还是蛮好玩的,算是体验了一把人工智能技术分析和处理实际应用的过程。特别是看到那个训练窗口,看着两张不同的脸是怎么样的一步一步转换是挺有趣的。


这个应用大概就会闲置在电脑里了,或者等哪天内存条降价了,换上了两条好的,再来跑跑别的。更希望能有时间和动力学习tensorflow这么优秀的框架。联想到之前在工作中遇到的一些场景,比如车架码分析车系车型这些算法,如果能够使用tensorflow来训练模型和做分析,一定能够做得很好。但是目前无论时间还是精力和动力都稀缺。


最后附上两张动图,纪念我这一无聊的操作,也体验一下什么叫做吓人的效果。


原视频


换脸后视频