请叫我
制片师
不知道差友们还记不记得两个月前 Reddit 上的科技界大事儿。。。
有个 id 叫 deepfakes 的神人,用机器学习框架写了一套工具,把女星的脸接到了某些不可描述的影片中。
和一般意义上的 P 图不同,这个方法是通过搭建神经网络来学习人脸,使替换以后的脸可以生动地模仿原来的表情,以假乱真。
差评君这两天闲来无事,逛 Reddit 的时候发现有了个以 deepfakes 命名的板块, 里面一堆人在讨论技术的同时还在贴着不可描述的内容, 一片欣( hei )欣( hei )向( hei )荣,学术氛围浓厚。。。
还有人分享大量训练样本
差评君觉得有些奇怪,虽然说那位叫 deepfakes 的大神把工具开源了,但是以大部分网友的水平应该是不会用他的源码的,咋这个社区这么热闹了呢。。。
直到我注意到了置顶帖,又有个 id 叫 deepfakeapp 的老哥在 deepfakes 的代码基础上做了一套傻瓜式工具,让没啥技术背景的人也能学会使用,这种分享精神实在是让我感动。。。
可惜的是虽然哥们儿精神可嘉,不过依然不够 geek --这套工具没有开源。
不过一开始 deepfakes 的代码库也没有用任何协议,所以不开源也没啥毛病。
那还等什么???我这就下载下来, 抱着学术态度 好好研究一下机器学习啊!!!
按照开发者的教程,这套工具的环境 需要 CUDA ,这是核弹厂 Nvidia 出的用显卡来做机器学习的工具,我装了一下。( 至于为啥要用显卡来搞,你可以看看我的旧文章 )
以及 Visual Studio ,微软家的开发工具,功能极为强大,这个差评君因为平时会玩儿 Unity, 早就装过了。
工具名叫 FakeApp,它目前有 3 个功能,我依次试了试。
第一个功能是 获取训练样本。
获取方式是逐帧截取一个视频文件,然后再把里面的脸部截出来,做成一个个 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 文件,我激动地仰天长叹。。。
估计是我太专注了,这一放松,回头发现办公室里的人都来围着我来看视频了。
看来他们也挺关心啊。。。
可以看到,脸部边上还是有些瑕疵,但是这个表情已经很到位了有木有。。。
而且音轨拉进去以后,说话的时候口型竟然对上了!!!
不说了,这个技术前景无限,我去喝瓶营养快线冷静冷静。
“ 从此看片不求人! ”
想看更多精彩优秀好文章,记得关注 微信公众号:差评(chaping321)
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。