Deepfake安装调试心得

想用这个库来做AI智能脸部替换的,然后越挖越多,发现了很多自己以前不知道的东西

运行环境

不建议在自己电脑上运行,我的是mac但是光预处理就至少要花40小时(下载视频,然后把视频一帧帧截图,再进行人脸识别),更别提后面的train model了,整个电脑就废了
在这里插入图片描述

所以我的建议是:
1.你有自己的工作站,那当我前面的没说
2.找个云服务器,在那个上面跑程序

然后重要的就是环境配置,你先根据github里的requirement.txt,看一下要装哪些支持库,然后开始配环境

这边默认采用云平台的虚拟机

虚拟环境下安装

怎么设置虚拟环境看我另一个帖子,虚拟环境可以确保——如果出了问题,不至于影响整体
比如讲一个我实际遇到的问题:负责面部识别的face_recognition怎么都装不了,一直告诉我dlib包出错(它的支持库)
我的解决办法:
1.开一个新的虚拟环境
2.在这个新环境里
First:dlib
Second:face_recognition_models
Third:face_recognition
当然,dlib有可能会出错,可以参考我另一篇文章最后总结的dlib安装指南
https://blog.csdn.net/qq_36257407/article/details/85038052

总之,如果哪个虚拟环境出了问题,而且一直解决不了,那就开一个新虚拟环境再来试一试

运行时的细节

很多时候程序需要放到后台运行

1.在terminal内,用ctrl+z是暂停程序

2.输入

bg

(background)切换到后台运行
顺便提一下,ctrl+c是终止程序。
如果不想后台运行,再次ctrl+z暂停后,输入

fg

(frontground)就可以调到前台来。

安装的库环境读不出来

那是因为安装的包的路径没有添加系统读取路径里——你可以理解为小区里住人了,但是物业不知道这个人住在哪,自然物业也找不到这个人
那么就要添加一下路径了,我这边用折磨我很久的brew来举例子(brew怎么装的三种办法,我另一个帖子里也有)

1.进入用户的根目录

cd ~

2.打开.bashrc,若不存在则新建.bashrc文件

nano .bashrc

不建议用vim来打开,因为vim操作我不喜欢,你可以搜一搜对应的操作方法
nano保存只要ctrl+x退出,然后下面有详细的步骤教你怎么弄。

3.将下方两行配置添加到你的 .bashrc

export PATH=“ H O M E / . l i n u x b r e w / b i n : HOME/.linuxbrew/bin: HOME/.linuxbrew/bin:PATH”
export LD_LIBRARY_PATH=“ H O M E / . l i n u x b r e w / l i b : HOME/.linuxbrew/lib: HOME/.linuxbrew/lib:LD_LIBRARY_PATH”

4.最后执行

source ~/.bashrc

上传文件到云平台

代码肯定要上传了才能在云平台虚拟机上运行。
如果代码少的话,nano一个文件,然后再把代码复制过去,这的确是可以的
但问题是代码如果很多,就要用ftp的传文件方式了,不然你一个个命名会很麻烦
这边我会单独总结一篇。

18.Dec.27 update

imageio报错

代码在自己的电脑上跑没毛病,但是在gcp平台上跑一堆毛病
这个会告诉你,linux Need ffmpeg exe. " imageio.core.fetching.NeedDownloadError: need install imageio

解决办法

import imageio
imageio.plugins.ffmpeg.download()

很简单。
但是!!!这句话必须写在所有Import之前!我试着放在别的import之后,就给我报错,但是放在开头第一个就没问题

其他所需要支持的库

会告诉你需要install requests这个库

pip install requests

就行

youtube-dl出问题

运行的时候出现need to install ffmpeg and avconv
ffmpeg安装过没问题了,但是如果你用pip install avconv就会告诉你找不到这个包
特意搜了一下,这两个包是依存的关系,理论上安装ffmpeg就行了,pip用不同只能用apt-get了

sudo apt-get install ffmpeg

亲测有效

识别人脸错误率太高

我这边是要识别尹正的脸,然后我发现跑别的时候都要20s才能识别一张脸,到他的时候只要3s一张,我还心想:难道亚洲人的脸特别好识别?
于是我打开了文件夹一看(采用的是某一期《声临其境》的视频)
Deepfake安装调试心得_第1张图片

Deepfake安装调试心得_第2张图片
出现了大量不是我要的脸,比如杜海涛的
这个就是算法的问题了,为了确保最后的效果好,你必须保证training data要错误率尽可能的小——换句话说,不是你需要的那些脸就只能剔除了
目前我的解决办法就是手动一张张删除wrong training data,算法的锅只能手动解决。

另外讲一个事:
在face_recognition的这个环节,本质上是先切割一帧帧的画面,再对一帧帧画面做人脸是别的。
如果你觉得切割的图片过多,想手动删除一些没有人脸的照片,那么我可以告诉你,会报错。
我是在运行的时候将没有人脸的那些帧的画面删除的,然后就报错了。
估计是因为每帧的图片序号对不上了,所以报错

还没试过在切割完画面之后,先手动删除减少运算量,再运行人脸识别的,不知道有没有勇士愿意尝试一下。

配置ImageMagick

最后转换视频的时候会告诉你缺少这个组件
This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn’t specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect

Mac
这是官方给的下载地址
http://www.imagemagick.org/script/download.php
对于mac,只要用一行命令即可
Deepfake安装调试心得_第3张图片

sudo port install ImageMagick
Mac这一步就行了

Windows:
windows下面需要进入moviepy\config_defaults.py来配置路径,不然moviepy会找不到这个组件
参考链接:https://blog.csdn.net/kd_2015/article/details/80157713

没有output([Errno 32] Broken pipe)

首先理解error32代表的是向服务器发消息,太久没回复,过了timeout自动停止
这边它会告诉你没有output文件
在这里插入图片描述
你再往下看就会发现告诉你没有output文件夹
在这里插入图片描述
问题出在它不会自己创建一个output文件夹
Solution:
在它告诉你缺失的地方自己创建一个output文件夹就行了,再试一次你就会发现运行的很成功

训练模型的时间过长

开始训练的时候,模型错误率降低的很快,但是到了后面,会出现饱和
Deepfake安装调试心得_第4张图片
如图所示,当出现这种情况时,基本上准确率就稳定了,无论你再怎么努力,准确率也不会提高了,这个时候基本上就可以停止训练了
当然,我这个模型最后合成的视频很不好,替换脸的时候只有满脸模糊的马赛克,感觉更像打码

猜测可能的原因
1.没有把要转换的视频作为training data
2.准确率还是不够高
我会再次尝试,然后给出自己测试的结果

#19.April.20 update
重新配了个新环境,发现

Failed to load the native TensorFlow runtime.

原因:operating system does not follow AVX instruction sets.
自己是mac系统,解决方案
1.

conda install tensorflow

pip install tensorflow==1.5

讲个小插曲,我朋友问我deepfake的配制方法,我把这篇文章转发给她了,然后她是windows系统,发现windows貌似不支持tensorflow。
我自己手边没有windows的系统,没有亲自测试过,不知官方最近有没有解决这个事情了。

训练时间

一般要比较好的换脸效果,需要迭代多次,这里有几个可以参考的参数
1.模型的迭代次数
2.模型的训练时间
3.loss rate
这是一个我自己训练的模型(郭达换脸杰森斯坦森)
在这里插入图片描述
效果任然一般,部分原因是因为找的郭达的训练素材不是高清的,而是来自于他早年的小品
总结一下:
1.迭代次数20000-50000次,这是外网上比较公认的区间
2.训练时间,视你的CPU/GPU而定,像我这边,loss rate卡在0.023之后就一直在波动,下不去。
所以并不是训练的越久就越好,大概会有一个天花板
3.error rate/loss rate,一般在0.02左右的效果就会很不错了,但是我由于是mac,没法外接GPU,加上时间不够,所以只能逼近0.02.

你可能感兴趣的:(笔记)