影史经典《卡萨布兰卡》是大家耳熟能详的传世名作,那一首壮怀激烈,激奋昂扬的马赛曲,应当是通片最为激动人心的经典桥段了,本次我们基于faceswap和so-vits库让AI川普复刻美国演员保罗·亨雷德高唱《马赛曲》的名场面。

配置人脸替换DeepFakes项目

关于人脸替换,业内鼎鼎有名的deepfakes代表了这个人工智能细分领域的最高水平,旗下的faceswap库正好适合这种视频二次创作的场景。

首先克隆faceswap项目:

git clone https://github.com/deepfakes/faceswap.git

随后进入项目的目录:

cd faceswap

确保本地已经配置好python3.10的开发环境

随后在根目录即可编译安装:

python3.10 setup.py

这里的setup.py脚本会自动判断系统本地软件环境进行依赖的安装,如果想要手动安装依赖,也可以通过pip命令:

For Nvidia GPU users: pip install -r ./requirements/requirements_nvidia.txt
For AMD GPU users: pip install -r ./requirements/requirements_amd.txt
For CPU users: pip install -r ./requirements/requirements_cpu.txt

这里分为三种用户,N卡用户使用requirements_nvidia.txt,也是最主流的解决方案,其次是A卡用户:requirements_amd.txt,最后是cpu用户requirements_cpu.txt。

事实上,这里并不推荐cpu运行项目,因为无论是训练还是推理,速度实在是太慢了,就算是Intel最新的第十三代酷睿I9处理器,也是杯水车薪,更遑论苹果的M系列芯片,吹得再牛逼,也只是送人头的水平。

所以,玩深度学习,最低的要求就是手里得有一块N卡,不需要太高端,倾家荡产买一块3090或者是4090其实没有任何必要,一块相对亲民的4050或者是4060足矣,当然,有钱任性则另当别论。

至此,faceswap就配置好了。

构建训练集

让我们再来回顾一下需求场景,现在需要将懂王的脸替换到《卡萨布兰卡》中保罗·亨雷德的脸,所以我们现在需要收集两张脸,即原视频保罗·亨雷德的脸,以及替换者懂王的脸。

此时原视频素材是存在的,即《卡萨布兰卡》电影,而懂王的脸则需要在网上寻找视频素材进行下载,这里需要注意的是,素材中最好包含脸部的特写,并且不包括其他人的脸,否则会在模型训练环节产生“噪音”。

由于《卡萨布兰卡》中还有很多别的场景,而我们需要的只是保罗·亨雷德高唱《马赛曲》的面部特写片段,所以需要对素材进行剪辑,这里推荐使用ffmpeg,首先运行安装命令:

winget install ffmpeg

接着将可执行目录配置到系统的环境变量中:

C:\Users\[用户名]\AppData\Local\Microsoft\WinGet\Packages\Gyan.FFmpeg_Microsoft.Winget.Source_8wekyb3d8bbwe\ffmpeg-6.0-full_build\bin

随后通过命令将片段从原始素材中扣取出来:

ffmpeg -ss 01:34:00 -i 卡萨布兰卡.mp4 -to 01:55:00 -c copy 保罗面部素材.mp4

这里视频素材就保存好了。

接着利用faceswarp脚本将素材转换为面部的图片集合:

python3.10 faceswap.py extract -i ~/faceswap/src/保罗面部素材.mp4 -o ~/faceswap/faces/paul

效果就是将视频逐帧进行保存,只保留面部信息:

懂王的训练集也如法炮制。

至此,训练集就构建好了。

模型训练

当训练集配置好之后,下一步就是模型训练,模型训练是指使用已知的数据集对机器学习模型进行调整和优化,以便它能够更准确地对未知数据进行预测,没错,所谓换脸,就是在处理预测问题。

运行命令,开始训练:

python3.10 faceswap.py train -A ~/faceswap/faces/paul -B ~/faceswap/faces/trump -m ~/faceswap/mymodel/ -p

这里A数据集为保罗的,B则是懂王,-m参数是模型的保存目录,-p参数则可以对模型效果进行预览。

模型训练过程中会不断输出损失率函数,一般情况下,训练过程中损失率稳定在0.01左右代表模型已经收敛。

训练过程中每隔一段时间会保存一次模型,程序中断后再次执行会在上次的模型基础上训练,训练需要手动停止,训练完后模型保存在上面指定的路径下。

这里需要注意的是,模型训练过程将会付出大量的时间成本,多长时间取决于许多因素,使用的模型,训练集的数量,N卡等级等等。在GTX4060的GPU上大概5个小时左右损失率会相对稳定,如果在CPU上训练,短时间内很难看到损失率下降。

本地推理

模型训练完毕后,我们就可以使用模型来进行换脸的推理操作,这里有个问题需要澄清一下,即我们训练的不是通用模型,而是针对训练集的模型,也就是说,这个模型只是为了将原素材中保罗的脸替换为懂王的脸而训练的,并不是在任意素材中都能够这样替换。

因此,就算模型有过拟合问题,也不会影响最终效果。

所以,我们就可以直接使用训练集数据进行验证,运行命令进行推理:

python3.10 faceswap.py convert -i ~/faceswap/faces/paul -o ~/faceswap/faces/output -m ./mymodel/  

这里使用模型针对原训练集数据进行替换。

效果如下:

保罗英俊的面庞瞬间灰飞烟灭,懂王睿智的面容缓缓浮现。

相同的流程,将片中好莱坞巨星英格丽·褒曼的脸:

替换为漫威超级女英雄寡姐的脸:

脸型有些违和,但音容宛在。

最后,只须将《马赛曲》的歌声替换为懂王即可,请移步:AI天后,在线飙歌,人工智能AI孙燕姿模型应用实践,复刻《遥远的歌》,原唱晴子(Python3.10) ,囿于篇幅,这里不再赘述。

结语

看到这里,相信很多朋友都不约而同地有了一些非常大胆却又不太成熟的想法,但请记住,无论何时何地,互联网都并非法外之地,当运行推理脚本的那一刻,需要思考一下自己是不是真的很刑。在Youtube(B站)搜索刘悦的技术博客,即可欣赏复刻版本的《卡萨布兰卡》,欢迎诸君品鉴。

音容笑貌,两臻佳妙,人工智能AI换脸(deepfake)技术复刻《卡萨布兰卡》名场面(Python3.10)的更多相关文章

  1. 人工智能AI库Spleeter免费人声和背景音乐分离实践(Python3.10)

    在视频剪辑工作中,假设我们拿到了一段电影或者电视剧素材,如果直接在剪辑的视频中播放可能会遭遇版权问题,大部分情况需要分离其中的人声和背景音乐,随后替换背景音乐进行二次创作,人工智能AI库Spleete ...

  2. 好饭不怕晚,Google基于人工智能AI大语言对话模型Bard测试和API调用(Python3.10)

    谷歌(Google)作为开源过著名深度学习框架Tensorflow的超级大厂,是人工智能领域一股不可忽视的中坚力量,旗下新产品Bard已经公布测试了一段时间,毁誉参半,很多人把Google的Bard和 ...

  3. 人工智能AI智能加速卡技术

    人工智能AI智能加速卡技术 一. 可编程AI加速卡 1. 概述: 这款可编程AI加速器卡具备 FPGA 加速的强大性能和多功能性,可部署AI加速器IP(WNN/GNN,直接加速卷积神经网络,直接运行常 ...

  4. 程序员体验AI换脸就不要用ZAO了,详解Github周冠军项目Faceswap的变脸攻略

    本文链接:https://blog.csdn.net/BEYONDMA/article/details/100594136       上个月笔者曾在<银行家杂志>发文传统银行如何引领开放 ...

  5. 从Vehicle-ReId到AI换脸,应有尽有,解你所惑

    最近在做视频搜索的技术调研,已经初步有了一些成果输出,算法准确性还可以接受,基本达到了调研的预期.现将该技术调研过程中涉及到的内容总结一篇文章分享出来,内容比较多,初看起来可能关系不大,但是如果接触面 ...

  6. 人工智能AI芯片与Maker创意接轨 (中)

    在人工智能AI芯片与Maker创意接轨(上)这篇文章中,介绍人工智能与深度学习,以及深度学习技术的应用,了解内部真实的作业原理,让我们能够跟上这波AI新浪潮.系列文来到了中篇,将详细介绍目前市面上的各 ...

  7. 人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

    图像风格迁移(Style Transfer)是一种计算机视觉技术,旨在将一幅图像的风格应用到另一幅图像上,从而生成一幅新图像,该新图像结合了两幅原始图像的特点,目的是达到一种风格化叠加的效果,本次我们 ...

  8. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics)之间有什么关系?

    本来我以为不需要解释这个问题的,到底数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)有什么区别,但是前几天因为有个学弟问我,我想了想发现我竟然也回答 ...

  9. 人工智能--AI篇

    AI背景 在当今互联网信息高速发展的大背景下,人工智能(AI)已经开始走进了千家万户,逐渐和我们的生活接轨,那具体什么是AI呢? 什么是人工智能(AI)? 人工智能:简单理解就是由人制造出来的,有一定 ...

  10. 解读 --- 基于微软企业商务应用平台 (Microsoft Dynamics 365) 之上的人工智能 (AI) 解决方案

    9月25日微软今年一年一度的Ignite 2017在佛罗里达州奥兰多市还是如期开幕了.为啥这么说?因为9月初五级飓风厄玛(Hurricane Irma) 在佛罗里达州登陆,在当地造成了挺大的麻烦.在这 ...

随机推荐

  1. 基于 Web SDK 实现视频通话场景 | 声网 SDK 教程

    声网视频 SDK 被广泛应用于多种实时互动场景中,例如视频会议.视频通话.音视频社交.在线教育等.为了让刚刚接触声网 SDK 的开发者,可以更顺畅地实现基础的视频通话功能,我们基于声网 Web SDK ...

  2. 深入理解Go语言中的sync.Cond

    1. 简介 本文将介绍 Go 语言中的 sync.Cond 并发原语,包括 sync.Cond的基本使用方法.实现原理.使用注意事项以及常见的使用使用场景.能够更好地理解和应用 Cond 来实现 go ...

  3. Apinto Dashboad V2.0 发布:可视化控制台让配置更轻松!

    大家好, Eolink 旗下开源网关 Apinto 本次带来了 Apinto Dashboad V2.0 的版本发布. Dashboad 需要与 Apinto 主版本一起使用,目前 Dashboad ...

  4. eval有时候也可以用,而且有奇效

    eval,一个我曾经避之不及的函数,最近我对它产生了一点新的感触:eval有时候也可以用,有奇效. 一般在使用js进行开发时,是不建议使用eval这类函数的.在JavaScript中,eval可以计算 ...

  5. 谁能真正替代你?AI辅助编码工具深度对比(chatGPT/Copilot/Cursor/New Bing)

    写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了,作为一个被裹挟在AI时代浪潮中的程序员,在这几个月里我也是异常兴奋和焦虑.甚至都兴奋的不想拖更了.不仅仅兴奋于AI对于我们生产力的全面提升,也 ...

  6. kubernetes(k8s)安装BGP模式calico网络支持IPV4和IPV6

    kubernetes(k8s)安装BGP模式calico网络支持IPV4和IPV6 BGP是互联网上一个核心的去中心化自治路由协议,它通过维护IP路由表或"前缀"表来实现自治系统A ...

  7. pandas之分组操作

    在数据分析中,经常会遇到这样的情况:根据某一列(或多列)标签把数据划分为不同的组别,然后再对其进行数据分析.比如,某网站对注册用户的性别或者年龄等进行分组,从而研究出网站用户的画像(特点).在 Pan ...

  8. [Linux]常用命令之【which/whereis/whatis】

    1 which shows the full path of (shell) commands. 显示(系统)命令所在目录 [root@test ~]# which ls alias ls='ls - ...

  9. Go For Web:踏入Web大门的第一步——Web 的工作方式

    前言: 本文作为解决如何通过 Golang 来编写 Web 应用这个问题的前瞻,对 Golang 中的 Web 基础部分进行一个简单的介绍.目前 Go 拥有成熟的 Http 处理包,所以我们去编写一个 ...

  10. 【深度学习】【图像分类网络】(一)残差神经网络ResNet以及组卷积ResNeXt

    ResNet网络 论文:Deep Residual Learning for Image Recognition 网络中的亮点: 1 超深的网络结构(突破了1000层) 上图为简单堆叠卷积层和池化层的 ...