查看原文
其他

我把石原里美的脸,合成到日本小短片儿里了。。。

2018-02-09 差评君 差评

请叫我

制片师



不知道差友们还记不记得两个月前 Reddit 上的科技界大事儿。。。


有个 id 叫 deepfakes 的神人,用机器学习框架写了一套工具,把女星的脸接到了某些不可描述的影片中。


和一般意义上的 P 图不同,这个方法是通过搭建神经网络来学习人脸,使替换以后的脸可以生动地模仿原来的表情,以假乱真。


差评君这两天闲来无事,逛 Reddit 的时候发现有了个以 deepfakes 命名的板块,里面一堆人在讨论技术的同时还在贴着不可描述的内容,一片欣( hei )( hei )( hei )荣,学术氛围浓厚。。。


还有人分享大量训练样本


差评君觉得有些奇怪,虽然说那位叫 deepfakes 的大神把工具开源了,但是以大部分网友的水平应该是不会用他的源码的,咋这个社区这么热闹了呢。。。


直到我注意到了置顶帖,又有个 id 叫 deepfakeapp 的老哥在 deepfakes 的代码基础上做了一套傻瓜式工具,让没啥技术背景的人也能学会使用,这种分享精神实在是让我感动。。。


可惜的是虽然哥们儿精神可嘉,不过依然不够 geek --这套工具没有开源。


不过一开始 deepfakes 的代码库也没有用任何协议,所以不开源也没啥毛病。


那还等什么???


我这就下载下来,抱着学术态度好好研究一下机器学习啊!!!


按照开发者的教程,这套工具的环境需要 CUDA,这是核弹厂 Nvidia 出的用显卡来做机器学习的工具,我装了一下。( 至于为啥要用显卡来搞,你可以看看我的旧文章 )


以及 Visual Studio,微软家的开发工具,功能极为强大,这个差评君因为平时会玩儿 Unity, 早就装过了。


工具名叫 FakeApp,它目前有 3 个功能,我依次试了试。


第一个功能是获取训练样本。


获取方式是 43 33237 43 14444 0 0 6809 0 0:00:04 0:00:02 0:00:02 6855帧截取一个视频文件,然后再把里面的脸部截出来,做成一个个 256 × 256 像素的矩形。


差评君征集了一下公司里小伙伴们的意见,选择了女神石原里美作为训练对象。


我找到了一段采访视频,用 FakeApp 的素材制作工具成功获得了大量石原女神的脸部图片。


在剔除了一些不含脸部,或者不清晰的图片以后,得到了两千多张脸部图片。


好。。。可爱。。。


然后,在网上随便找了一个不认识的日本妹子拍的视频,也做了差不多的操作,获得了另一组素材。


差评君准备好了素材,开始使用第二个功能,训练。


结果刚点下去没多久,这玩意儿报了个错。。。


考虑到这是个人开发项目,稳定性很差也是情有可原的嘛,而且人家也没收钱。。。


但是我不知道问题出在哪啊?!


后来通过各种研究,发现有人和我碰到了一样的问题,最后开发者回答:因为执行训练时用的代码调用的是 CUDA 8.0( 最新的是 9.1,你特么研究这么先进的技术,环境能不能也用新的!?),而 CUDA 8.0 配套的 Visual Studio 插件最新的也只支持到 2015 版本,差评君用的是 2017,因此失败了。


总而言之,就是环境配置的时候我没有按要求的版本搞!


而且这朋友又没开源,我想改代码也没办法,只好老老实实地去搞定环境了。


但是问题来了,微软作为一家在科技行业中的领先企业,为了推动新标准自然是义不容辞的,所以旧版的工具 VS 2015 在官网上肯定是没收啦,给我用新版本去啊混蛋!


我看着文件夹里几千张石原小姐姐的微笑,正准备砸电脑的时候,在旁边偷窥我的世超给了我个 U 盘,里面静静的躺着 VS 2015 的镜像文件,他朝我露出了一个鼓励的微笑。。。


果然还是你们程序员靠谱啊


差评君卸载了电脑上的 VS 2017,装上了 2015,又重新装了遍 CUDA 8.0,打上了补丁,我可以说我上学的时候都没这么认真的钻研技术。。。


随后,设置好了一些选项,例如训练素材和模型的路径,神经网路层数,节点数等等。。。


项目代号:石原里美,启动!


顺路还在工作群里装了个逼!


一开始,效果很次,啥也看不出。。。


工具运行时会出现两组不断变小的叫作 “ Loss ” 的属性,差评君猜这是素材组转化的时候体现损失率的参数,值越低越好。


随着时间的推移,图像变得清晰以后,就能看见训练代码会在左边不知名妹子的脸型基础上,用石原妹子的脸型代替成右边的样子。


这期间,电脑卡得一塌糊涂。。。


我嫌它太慢了,抢过了 KK 装了 1080 Ti ,32G 内存的高配 PC,把环境全部搞定了以后开始了全速训练,目测大概是我 16G, 960 GTX 的小破电脑 5 倍速度,我把进程挂在那儿跑了 20 个小时。


这个训练过程没有结束的时候,我只要按照自己的需求,掐掉训练就行。


第二天,我从 KK 这里把训练好的模型拷贝了过来,开始了最后一步。


转化素材。


这一步我做了以后发现,原理其实没有我想象的那么牛逼。。。


在我依次指定完训练好的模型和原视频的路径,设定好视频帧率以后,这个工具会逐帧分离视频,把人脸抽出来,然后从模型里找到数据替代像素,再嵌回去做成新的逐帧画面,最后把画面合成视频。


然而,这个个人项目再次证明了它还有进步空间,最后一步合成的时候出错了,而且找不到原因。。。


看着这 8 千多张合成好的视频帧,我快急死了。。。


赶紧上 Reddit 的对应板块去研究一下,结果。。。


没错,其实我比这些新闻网站都要先知道这个消息,因为我这两天一直混在这儿研究技术问题。。。


最后我通过长时间搜索找到了个工具:FFMPEG,可以把逐帧的图片转换成视频,我配置好了命令行工具以后,一行命令就搞定了。。。

( 而且我知道这么搞视频肯定没声音,

机智地顺便还从原视频里拉了个音轨 


我再用 FFMPEG 把音轨放了进去,看到静静地躺在那儿的 MP4 文件,我激动地仰天长叹。。。


估计是我太专注了,这一放松,回头发现办公室里的人都来围着我来看视频了。


看来他们也挺关心啊。。。


可以看到,脸部边上还是有些瑕疵,但是这个表情已经很到位了有木有。。。


而且音轨拉进去以后,说话的时候口型竟然对上了!!!


不说了,这个技术前景无限,我去喝瓶营养快线冷静冷静。



“ 从此看片不求人! ”

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存