本来想逐字翻译 DeepFake Clud 的这篇教程，但是在翻译了其 Google Cloud FakeApp Tutorial（在 Google Cloud 上使用 FakeApp）之后有点累。那就简要地说明一下好了，哈哈。网上也有其他详细文字及视频教程可供参考。如果你还不知道"DeepFakes""FakeApp"到底是什么，自己搜索一下。简言之就是利用深度学习来给视频中的人物换脸。深度学习依赖 GPU 的计算能力，所以要么得有相应的设备（钱），要么得有获得相应计算能力（云等）的途径。云的话可以考虑一下 Google Cloud.准备好硬件之后，可以开始玩耍。注： FakeApp 仅支持 Windows，但很多基于 DeepFakes 的应用支持在 Python 下使用，可在 Github 上看看。1.软件安装CUDA Toolkit 8.0Toolkit 可以帮你安装显卡的驱动及相关运算平台。一般深度学习框架都基于CUDA 7.5 或 8.0版本，所以装了最新的9.1版可能会无法使用哦。此处下载，一个主体一个补丁，依次安装。一般装完就可以了，如果有问题再按此文检查环境变量。FakeAppFakeApp 最新版本为2.1，提供更为便利的操作，可以自动从视频中提取截图、自动拼合换脸后的图片，推荐小白安装此版本。我之前安装的是1.1版的，需要手动对训练数据进行提取。可以在此下载1.1版或在此下载2.1版。下载完后解压，我使用的是 Google Cloud 的 Windows 实例，只有一个分区，就解压到了C盘根目录下。然后，在C盘根目录下创建 fakes 文件夹，在其下创建两个新文件夹：data_A 和 data_B. 然后把刚才解压的 FakeApp 目录下的 model 文件夹复制到这个文件夹下，最后的文件夹结构是这样的。图：DFCVisual C++ Redistributable for Visual Studio 2015并不需要安装 Visual Studio，有这个运行库就行了。未安装可能会报错。ffmpeg如果你选择的是2.1版本的 FakeApp，那么你可以用其自带功能进行截图和整合。如果是其他版本，可以利用第三方软件来操作。小白推荐使用PotPlayer 等软件在图形界面下进行操作（参考这个图解）。可以的话，在命令行界面下用 ffmpeg 可以进行更随心所欲的操作。如果截取 png，图片清晰，但体积较大；如果截取 jpg，默认设置压缩比较严重，画面不清，要自行设置图片质量参数 -qscale:v 2~31，数字越小质量越高。我使用的命令是（作为参考）：1ffmpeg -i VideoName.mp4 -qscale:v 2 -vf fps=10 "ImageName%04d.jpg"训练时可以斟酌每秒截几帧，但要替换的视频的请每帧截取（不然合成视频之后会很奇怪）。2.准备训练数据集从上面的文件夹结构就可以看出，至少得准备两个数据集。简单说来，A是想被替换原始视频的数据（身子），B是想用来替换脸的理想视频的数据（脸）。但一般放在A里用来训练的数据并不限于要被替换的视频（[被替换]是[训练]的子集），有些人甚至一开始用不同人的脸来训练模型，此处不做展开。理论上，换与被换的两人最好本身就长得比较像，两个视频的拍摄环境也最好相似（光线、角度）。素材的选取很大程度上决定了模型的质量以及最后换脸的效果。一般来说每个数据集要有几百上千张图片才能构建一个比较理想的模型。在我的测试中，A用了750张图片，B用了1600张图片，但是两人的角度都不是正面，且比较单一，对合成效果有所影响。2.1版本的 FakeApp 可以直接在软件用视频进行截取，我所使用的1.1版本需要手动将视频转化为截图之后再进行脸部提取。用 ffmpeg 将两个视频片段进行截图后，将截图文件分别放入 data_A 和 data_B 文件夹。3. 提取脸部数据进入 FakeApp 目录下，点击 fakeapp.bat 运行程序。在第一个选项卡 Extract 中，设置数据集的路径、图片格式（ jpg 或 png 等）、是否含有多张脸。记得处理器要选 GPU 噢，CPU 也可以跑但是速度，呵呵。分别对数据集 A 和 B 进行操作。这一操作会将每张数据集图片中的脸部提取（并对齐）为 256256 的小图放置在 aligned* 子目录下。4. 模型训练将 A 和 B 两个数据集都进行脸部提取之后就可以进行训练了。在第二个选项卡 Train 中，可以调整模型参数。一般来说默认的设置在跑够时间、损失函数达到一个较小的值之后可以获得一个还不错的效果。所以当程序提示内存不足的时候，要么缩小数据集原图的尺寸，要么将 Batch Size 缩小至32或16（最小为16）。还不行再缩小层级和节点。设置完之后按 “Start” 就会开始训练啦。训练过程中能看到损失函数在逐渐缩小，而预览图中的A会越来越像B。图：Vox原理大概是，在A和B间构建一个神经网络，里面有若干层级，每层都有若干神经元，各层神经元依不同权重进行连接。而训练的目的，就是找到最合适的权重，使得A能够尽可能地接近B。模型的训练是可以中断的，数据集也是可以进行修改的。相信不久以后，就会有很多网友共享已经训练好的模型，节省训练时间。5. 换脸模型训练好之后（模型训练是没有自动终止点的，练到你满意的效果即可，一般来说需要耗费16~30个小时），就可以进行换脸了。如果A中的训练数据和要替换的素材是一样，那直接进行转化即可，否则要先将要替换的数据放入A目录中并进行提取。要注意这里A目录下的截图应为要替换视频的每帧截图（比如一个10秒的25 fps 的片段就得有250张截图）。合成的参数可以自己折腾一下。Convert 选项卡中按 “Start” 开始合成，合成后的图片会被存储在 merged 子目录下。6. 生成视频FakeApp 2.1版本会自动合成图片、生成视频。若是1.1版本，在上一步合成了所有视频帧之后，可以用 ffmpeg 来将图片转化为视频。借用 DFC 一句命令：1ffmpeg -f image2 -i ImageName%04d.jpg -vcodec libx264 -crf 15 -pix_fmt yuv420p Output_VideoName.mp4之后再配上原视频的音轨或自己配音即可。如果想看详细教程可以看DFC的这篇文章（英文）。还是那句话，技术无罪，请谨慎使用！
本文由 5moon 译注自 DeepFakes Club 的 How to Create DeepFakes with Google Cloud GPU Services，原文地址为 https://www.deepfakes.club/google-cloud-fakeapp-tutorial/ 5moon 注：基本按照原文译，有点长了，给个 30s Takeaway:Google Cloud 提供 GPU 服务，可选 Tesla K80 或 P100，跑 FakeApp 是够的；GPU 需要在控制台手动申请配额；Google Cloud 的新用户300美元赠金可用于 GPU 服务，但是要通过 GPU 配额的审批有可能得支付 35 美金作为预付款。译文：如果你想在 Windows 上使用 FakeApp 软件但是自己的电脑配置太差跑不起来，那你可以试试 Google Cloud 提供的 GPU 服务。这个教程会向你展示如何在 Google Cloud 里使用 FakeApp 制造“假象”。重要提醒Google Cloud 会按照使用其服务的时间来收取费用。如果你不能在使用结束后正确地终止一个虚拟机实例，月末的时候你可能会收到一张巨额账单。所以你最好清楚自己在做些什么。你应该使用 Google Cloud 的 GPU 服务么？云计算的价格Google 的 GPU 服务并不便宜。一个还算可以的配置24小时不停跑满一个月要耗费200到300美元。有几个办法来减少费用。你可以在不使用实例的时候停止它。你还是得付一小笔钱来保留你的设置和数据，但假设你一个月只用一半时间，你就能减少一两百块的花费。Google 目前给新用户提供了 300 美刀的免费额度。尽管你得升级为付费用户才能使用其 GPU 服务，但是这300美刀是可以使用的。这就足够你折腾 Google 云服务一个月并尝试做视频了。请不要滥用 Google 的慷慨善意。Google 的云服务不仅有商业用户，也有很多依赖它进行重要研究（如生物医学研究）的研究者和学生，谨记这点。如果经常使用请自觉付费（5moon 注：意思是不要故意注册好几个账号来获取免费额度）。5moon 注：微软的 Azure 本来也提供200刀体验金。可是在创建实例时其带 GPU 的资源总是不可用，我刷了半天后来发现提示写的是并不向中国区域销售此服务。哼，还是用 Google 好了。用云服务还是买一台新电脑你应该看看你的钱包（和女朋友的脸色）来考虑是剁手一台新电脑还是升级现有电脑。如果你想全新配置一台机器来跑 FakeApp，你可能至少得花1000美刀来买一台中端。电费也是要考虑的呢（如果一直跑的话）。如果你打算连着几个月都折腾 Deepfakes 视频的话，你最好就买一台新电脑。如果你只是想尝尝鲜，或者偶尔跑一跑，那么Google Cloud 就是你的贴心好朋友。准备一个 Google Cloud 账号注册并免费试用你要做的第一件事就是注册。点这里注册并获取其赠送的300美金。注册并填写资料。你必须有一个 Google 账户（或新建一个）。完成之后，你会被带到一个欢迎界面。点击“创建一个新项目”。（5moon 注：Google Cloud 有中文版的，这里懒，用了原文的截图）升级到付费服务来获取 GPU你现在应该会拥有300美刀可以用于使用 Google Cloud. 但是，这个免费试用并不包含 GPU 服务。创建完项目后，为了获取 GPU，你必须升级你的账户。“升级”的按钮可能在顶部的横幅里，没看到的话，点击左上“菜单”-“账单”，你应该会在右上角看到这个选项。点击“升级”，填写账单信息并确认。（5moon 注：需要绑定银行卡，我以前绑定过澳洲 Master 储蓄卡）申请 GPU 配额注意：有些用户反映 Google 现在要求支付一笔35美刀的费用来获取配额。这个要求是否是根据地域或是其他账户属性而异目前尚不清楚。5moon 注：我在申请之后就收到了邮件要求我支付一笔35美刀的费用或者出示曾经使用过的等额费用的账单。作为参考，我绑定的银行卡和账单信息都是澳洲的。即使你升级了账户，你仍然需要手动申请增加 GPU 配额，因为默认在全域都没有配额。配额是根据主机所在地区来划分的，所以先决定好区域再来申请。只有部分区域提供 GPU 服务。点此看看哪个区离你最近。不同区域 GPU 价格有些许不同，但为了减少访问实例时的延迟，选一个地理上离你最近的吧。（5moon 注：对中国用户来说，海外线路一直很迷。比如以前很多人选择日本机房，造成拥堵之后，实际访问体验甚至还不如延迟高的美国东部。）你可以选择 Tesla K80 或 P100 显卡。P100 性能确实强劲，但价格是 K80 的三倍。作为首次尝试，你可以选择更便宜的K80. 壕当我没说。现在假设你选择了一个提供 GPU 的区域，比如我选择可以提供 K80 的 asia-east1-a。单击“菜单”-“Compute Engine”-“配额”，你会看到一个很长的列表。在“区域”下拉菜单选择你的区域来缩小范围，比如这里我选择“asia-east1”。在筛选过的列表中（通常在下方）找到 NVIDIA K80 GPUs 配额。勾选它，回到页面上方选择“编辑配额”。在跳出的表格中，选择1枚GPU，因为 FakeApp 并不会利用多枚 GPU 来运行。你还得写下理由，然后提交申请等就行了。我在一分钟内审批成功，有些人则花了5分钟不等。（5moon 注：我从提交申请到收到要求缴费的邮件到获取配额大概一个工作日的时间，猜测也许在美帝会快一些）获得配额后就可以来部署 GPU 实例了。在 Google Cloud 上安装 FakeApp创建一个GPU实例我们现在需要新建一台虚拟机用来安装 FakeApp。回到 Google Cloud 控制台，点击“菜单”-“Compute Engine”-“VM实例”。如果这是你的第一个实例，你可能会看到上面图片那样的选项。点击“创建”。你现在需要对虚拟机配置进行一些选择。你可以使用默认的实例名字。在区域一栏，记得选择申请了 GPU 配额的同一区域。虚拟机的类型有很多不同的选项。我会建议使用2个vCPU和7.5G作为起步。添加更多资源会增加这个实例的费用。在启动盘一栏选择 Windows Server 2016.你可以选择 SSD 或者普通永久磁盘，最低容量为50G。我最终选择了稍微贵那么一点点的 SSD。（5moon 注：穷如我还是用了普通磁盘 =.=）我们还得加上 GPU。在虚拟机类型栏目下选择自定义。点击"GPU"展开更多菜单。设置 GPU 数量为“1”，并且选择你的 GPU（这里为 NVIDIA Tesla K80）。防火墙选项下勾选允许 HTTP 和 HTTPS 流量。其他选项按需选择之后点击“创建”。右上角你可以看到一个月的估计花费。如果你按照上面说的来设置，这个花费大约在350~375 美刀每个月。如果你允许你的实例以“抢占式”模式运行，每个月还能再省个100刀。抢占式实例是允许 Google 在别人需要用到资源的时候中断你的服务的一种模式，你的服务最多不能连续运行超过24小时。点此了解更多。这里我先选非抢占式的实例。如果你愿意，可以在上图“管理，磁盘，网络，SSH密钥”菜单中找到并调整这个选项。创建实例之后可能需要等几分钟才能开始使用。你会看到关于你的实例的一个概要。连接到实例你会用上远程桌面协议（RDP）来连接实例。如果你在用 Windows，那么你已经有一个很好的自带的 RDP 客户端了。否则，你得自己找一个客户端。剩下的教程会假设你在自己的电脑上使用Windows.在实例概要中点击“RDP”右边的下拉按钮选择“设置 Windows 密码”。选择一个用户名用来登录（默认为你的 Google 用户名）。点击“设置”会生成一个密码，把这个密码记下来。如果按了“设置”按钮之后除了一直在移动的点的动画效果外就没反应了，那么尝试：关掉广告屏蔽插件/软件；清除Cookies，关掉并重开浏览器，再试一次；换个浏览器，有些 Chrome 或 Firefox 用户偶尔会出现问题。（注：我一开始用 Chrome 出现了此问题，换成 Firefox 就好了。奇怪，自己家的东西反而不好使了。）回到那个“RDP”按钮并选择“下载 RDP 文件”。在键盘上按下“Win”键或者在系统的搜索中输入“远程桌面连接”。单击运行搜索结果。在弹出的窗口中，在“连接设置”下选择“打开”，载入刚才下载的 RDP 文件，它便会帮你自动填写设置。注意，在没有申请静态IP的情况下每一次停止实例运行都可能更换一次IP地址。如果你无法连接，重新下载一次RDP文件。（5moon 注：如果需改了默认用户名，记得用修改后的用户名登录）最简单的在家里电脑和虚拟机实例之间传输文件的办法就是向虚拟机共享硬盘。在远程桌面连接的“本地资源”选项卡中，点击最下面一栏“本地设备和资源”中的“更多”按钮，在弹出的窗口中选择想要共享的分区。设置完毕后，点击“连接”，输入密码，你就可以连接到这台虚拟机了。（5moon 注：Link S-tar-t!）DeepFakes 软件安装软件的安装和在正常 Windows 上安装大致相同。下面是几个在 Windows 虚拟机实例上使用的技巧。你可以用上面说的共享驱动器的办法来传输文件。打开文件浏览器，你会看到一个类似“李狗蛋的D盘”之类的文件夹。需要注意的是你的RDP连接受到上传和下载速度的限制。如果你在上传文件，那么你的操作可能会有个10秒左右的延迟。还有，当你在共享文件驱动器里打开了一个拥有很多文件的文件夹，它可能需要很长时间来把所有文件列出。我建议你在家里的硬盘上创建一个文件夹专门用来放这些要传输的文件。对于大文件夹可能还得压缩成ZIP（5moon 注：Windows 支持解压ZIP文件）。传输文件的时候请耐心等候。当你用虚拟机上网的时候，安全设置可能对新手来说会有一点麻烦（5moon 注：诶，我并没有进行什么安全设置直接就能上网了吖）。我建议你在本地准备好所有需要的文件再传输过去（5moon 注：我不建议。自己下载+传输在国内这种小水管中太慢了，我在虚拟机中直接下载速度可以达到150兆每秒，需要安装的 G 级软件十几秒就下完了）。简要安装步骤（详见此）：安装显卡驱动安装 CUDA 8.0 和补丁安装 Visual C++ Redistributable for Visual Studio 2015安装 FakeApp设置与检查所有相关 PATH 环境变量准备好训练数据集Have Fun!现在你应该可以用 Google Cloud 来训练你的 FakeApp 模型了。默认的模型参数在 K80 的 11G 显存下表现良好。5moon 注：也得根据实际情况进行调整。我在A有600张图，B有1000张图的情况下，默认参数运行良好；然而当A增加到900张以上的时候，机子的7.5G内存就不够了。后来还是 Google 智能地建议我增大了实例的内存才能跑起来。模型方面，为了质量考虑，层级和节点并没有更改，但是 Batch Size 降低到了32来运行。显存的话基本是够的。退出会话想退出，关掉RDP窗口即可。然后，回到控制台中停止实例。停止后的实例仍然会产生一笔小费用用于维护，但是肯定比一直运行要便宜的多。当然，如果你已经玩够了，那删除实例就好。不过删除之前记得备份（5moon 注：特别是模型，模型是可以再用的）。不要忘了这一步噢，不然可能会产生天价账单。5moon 后记：这是一篇傻瓜式的教程，原作者讲的很详细，有些话我还没翻译出来。环境配置不是难点，我也是第一次使用 Windows 作为服务器端的系统，以前都是 CentOS、Ubuntu之类的，就是 Win 还要 License Fee 有些心疼，系统升级自动重启还一度中断了程序。如果使用 FakeApp 2.1 版本，基本可以做到不输入代码全图形化操作了。1.1的版本相对麻烦一点。感谢算法和软件的作者让小白也有机会可以近距离体验什么是「深度学习」、「机器学习」和「AI」。也感谢 Google 这样的公司，在赚大钱的同时，切实地推动技术进步，为社会提供先进的生产工具。最后说一句，技术无罪，谨慎使用！