实验说明
该实验是对于https://github.com/wangjk666/PyDeepFakeDet模型的复现。PyDeepFakeDet 是一款集成的、可扩展的 Deepfake 检测工具。目标是提供最先进的 Deepfake 检测模型以及用于在常用 Deepfake 数据集上训练和评估新模型的接口。
该库包括基于 CNN 和基于 Transformer 的方法的实现:
1)其中,基于CNN的模型如下:
- ResNet
- Xception
- EfficientNet
- MesoNet
- GramNet
- Thinking in Frequency: Face Forgery Detection by Mining Frequency-aware Clues
- Multi-attentional Deepfake Detection
2)基于Transformer 的模型如下:
- ViT
- M2TR: Multi-modal Multi-scale Transformers for Deepfake Detection
- 部署服务器Python环境(Anaconda)
- 查看服务器系统和GPU
- 查看服务器版本:cat /proc/version
- 查看GPU参数:lspci | grep -i nvidia
从显示结果可以看当前机器的操作系统为ubuntu 5.4.0,GPU卡的型号是NVIDIA Tesla M40。
安装Anaconda
1. 进入网址:
Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror(清华大学开源软件镜像站),进入该页面,复制适合linux系统的conda链接地址,复制链接:
我复制的为: wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh
2. 从清华镜像下载Anaconda:
输入命令:wget 你复制的链接
例如: wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh
之后等待下载:
3. 下载完成后:bash 你下载的Anaconda
例如:bash Anaconda3-2021.05-Linux-x86_64.sh
然后一直按回车继续,接着输入“yes”,然后继续回车。如下图:
继续输入“yes”:
直到出现下图内容表示anaconda安装好了:
4. 搭建自己的环境
首先输入:source ~/.bashrc,用来更新环境变量,前面就变成了(base):
接着输入conda create -n name python=3.x,可以根据具体任务来下载对应的python版本。
例如:conda create -n seg python=3.7,表示创建了名为seg的python3.7的环境。
输入 y ,确认。如图就算下载完成:
5. 使用自己的环境
使用自己创建的环境:conda activate name
我之前创建的环境名是seg,那么我输入:conda activate seg,就把环境由base变为了我的seg;
如果想返回base环境,可以输入:conda deactivate
如果想查看目前有哪些环境,可以输入:conda env list
如果想删除环境,可以输入:conda env remove -n name,name换成你想删的环境名。
6. 测试自己的环境
利用pip安装opencv:pip install opencv-python
PyDeepFakeDet项目复现
- 安装项目所需的依赖包:requirements.txt 1)利用pip安装:pip install -r requirements.txt 2)利用conda安装:conda install --yes --file requirements.txt
- 可能会遇到的问题:
- 镜像问题:可能因为网络原因无法下载成功,可以尝试使用国内镜像:pip install package==version -i Simple Index (清华镜像),其中package== version:包名==版本,不写会自动下载最新,常用的国内镜像有:
清华:Simple Index
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 Simple Index
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:Simple Index
- 有些包的版本无法下载:
此次下载过程中发现有以下包无法下载:
- timm==0.5.4
- torchaudio==0.11.0+cu113
- opencv-python-headless==4.5.5.64
- tensorboard-data-server==0.6.1
- torchvision==0.12.0+cu113
- torch==1.11.0+cu113
- albumentations==1.1.0
可以通过查找需要的库,这样就会显示可安装的版本,例如:anaconda search -t conda tensorflow
再用对应路径安装对应版本:
conda install -c https://conda.anaconda.org/GlaxoSmithKline tensorflow
(注意最后GlaxoSmithKline tensorflow中间为空格)
- Anaconda源可能无法下载某些包,可以尝试更换源:vim ~/.condarc
并在配置文件里修改对应源:
channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud |
2. 准备数据集
本项目用到的原始数据集为Celeb数据集,我们需要用retinaface去处理原始数据集,需要下载的依赖包有:retinaface_pytorch(retinaface-pytorch · PyPI)、opencv-python、numpy
- 原数据集结构:
包含590个从YouTube下载的名人视频;300个从YouTube下载的附加视频;5639个从真实视频合成的假视频;测试视频列表,共518个测试视频。
- 抽帧:从原始的Celeb数据集中抽出帧。
python preprocess/extract_frames.py --root_dir ROOT_PATH --save_dir SAVE_DIR --samples 128
其中:
--root_dir, 数据集根目录,原始视频存放目录
--save_dir, 保存目录,抽出的帧存放的目录
--samples, 帧数,需要从一个视频中抽出多少帧
--process, 处理的进程数, 默认为1
例如:python preprocess/extract_frames.py --root_dir data1/chenpeng/data/celebv2 --save_dir /data3/maxiaorong_root/tmp_data --samples 128
从每个视频中抽出128帧,抽出帧的图片如下:
- 裁剪:将抽出帧的裁剪到合适大小,使用retinaface来检测人脸并裁剪出人脸区域。
python preprocess/extract_faces.py --root_dir ROOT_PATH --save_dir SAVE_DIR
其中:
--root_dir, 帧数据的根目录,上一步的输出目录
--save_dir, 裁剪后的脸部保存目录
--process, 处理的进程数, 默认为1
python preprocess/extract_faces.py --root_dir tmp_data --save_dir face_tmp_data
- 可能遇到的问题:
- RuntimeError:CUDA error: invalid device ordinal.
造成这个错误的可能原因是:
1) 指定gpu序号时,多写了一个逗号。
比如:os.environ['CUDA_VISIBLE_DEVICES'] = '1,2',这样就可以了。
不要这样:os.environ['CUDA_VISIBLE_DEVICES'] = '1,2,'。指定使用单个显卡也是如此。
2) GPU编号或者cuda安装版本或数量不匹配,例如当本地只有一个GPU (GPU:0),而程序中使用 GPUs:1。
3) os.environ[‘CUDA_VISIBLE_DEVICES’] 和 torch.cuda.set_device的关系。
例如,在已经设置了os.environ[‘CUDA_VISIBLE_DEVICES’] =‘2,3’的情况下,torch.cuda.set_device(0)指定的就是使用第三个显卡(序号为2)。
4)数据集类别与预测不匹配。
解决:
1) 先用nvidia-smi命令查看服务器GPU数量,根据GPU的数量改以下代码里的进程数量,在本例中将config/resnet50.yaml配置中的GPU数改为1,程序正常启动。
2) 确定数据集类别与路径,修改代码中对应数据集的pkl路径与名字,pkl数对应着进程数。
3. 快速启动,训练模型
首先修改default.yaml中的训练集的路径:
之后快速启动:python run.py --cfg resnet50.yaml
模型开始训练:
模型训练共花费45小时,训练结束:
- 可能遇到的问题:
- 无法访问Github:
可能的原因:
1)网络原因,服务器无法连接外网。
2)解决网络原因之后,但服务器无法连接至Github。
解决方法:注释掉hub.py文件中的_validate_not_a_forked_repo
- Gpu被占用,进程与已有的进程产生冲突
- 解决:修改代码中的进程数,使GPU与cuda对应。
4. 模型测试
- 首先准备测试数据集
同训练数据集的处理,测试数据集同样有抽帧和裁剪两步操作,需要修改extract_faces.py和extract_frames.py中测试数据集的pkl路径:
抽帧:python preprocess/extract_frames.py --root_dir ROOT_PATH --save_dir SAVE_DIR --samples 128
裁剪:python preprocess/extract_faces.py --root_dir ROOT_PATH --save_dir SAVE_DIR
- 修改default.yaml中的测试集的路径,添加权重:
常用的权重文件类型:
.pt是pytroch框架的
.weights是Darknet框架的
.ckpt是tenseflow框架的
.h5是keras框架的
该项目要用的为pytorch框架的权重,一般存放在checkpoint文件夹下,可以在pytorch官网下载,之后把权重路径添加到default.yaml的TEST_CHECKPOINT_PATH。
- 启动测试:python test.py
得到模型在测试集上的测试精确度为:41.3%。(准确率较低)
原因:我在裁剪测试数据集时出现错误没有完全裁剪完成所有的测试数据集,所以准确率较低,这一步准备重新裁剪和测试。
接下来继续启动其他模型的训练,例如:python run.py --cfg f3net.yaml
可能出现的问题:
- 弃用警告DeprecationWarning
该类型的警告大多属于版本更新时,所使用的方法过时的原因,可以在该方法的说明处查找替换的方法。一般来说,开发人员正在开发库,有时在开发中添加或更改内容,有时删除主题。删除是危险的,因为用户可能会使用它,如果开发人员要删除一个东西,首先必须通知其他人不要使用这个功能或东西,然后他可以删除。而DeprecationWarning就是这个通知。
解决方法:
conda list查看当前的tensorboard版本:
如果版本低于1.15则卸载重新安装,但我的版本正常还是报错:
最终解决方法:将train.py文件中的from torch.utils.tensorboard import SummeryWriter改成:from tensorboardX import SummeryWriter
- GPU数目设置问题:
解决方法:在启动前需要先检查对应的f3net.yaml文件,确保gpu数目正常,之后启动。
成功启动如下F3net模型训练如下:
5. 实验总结文章来源:https://www.toymoban.com/news/detail-482589.html
本次实验成功复现了PyDeepFakeDet项目中ResNet50模型的训练与测试,其他模型的训练因时间原因还在训练中,但训练方法都相同。在此次实验中前期因为网络原因进展较慢,但总体来说进展顺利,在此次实验中我熟悉了项目复现的流程,以及Celeb数据集的处理流程,在此次实验中遇到了一些问题但都通过查阅资料而解决了。收获很大,会继续尝试复现其他项目。文章来源地址https://www.toymoban.com/news/detail-482589.html
到了这里,关于Deepfake检测模型-PyDeepFakeDet项目复现实验报告-深度学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!