GAN 的生成器产生图片及换脸检测
一、 *实验目的*
(1) 掌握在 WINDOWS 下安装和使用 GAN 图片生成系统、换脸检测系统
(2) 掌握 GAN 图片生成系统主要功能模块、换脸检测系统主要功能模块
(3) GAN 图片生成系统的原理、换脸检测系统的原理
二、 *实验内容*
(1) 分析并调试 GAN 图片生成系统程序主要功能模块、换脸检测系统程序主要功能模块
(2) 选取实验数据集
(3) 运行 WINDOWS 下的 GAN 图片生成系统、换脸检测系统
(4) 用 GAN 图片生成系统对实验数据集进行图片生成实验
(5) 用换脸检测系统对实验数据集进行换脸检测实验
三、 *系统整体描述和分功能描述*
*系统整体描述*
DCGAN系统:
通过GAN来生成生成图片
Deepfakes CNN-Detection系统:
通过CNN算法对图像进行鉴别,辨别是否是伪造信息。
*分功能描述*
1)生成头像算法训练
建立图像样本库,用Python在动漫素材相关网站爬取或使用网络上已有的数据集,按照固定比例划分训练集和测试集,并对样本进行标准化处理,使图像大小保持,每一张图片拥有唯一ID。
其次,选择深度卷积网络,实现目标特征提取以及图像分类。使用Visdom实现训练过程的可视化,通过控制学习率、迭代次数、训练比例等参数,设置多组对照实验,观察实验结果并利用测试集进行多次测试。
python main.py train –gpu –vis=False
2)生成动漫头像
使用训练好的生成模型,进行头像生成(说明文件给出的代码有误)
1 | python main.py generate --nogpu --vis=False --netd-path=checkpoints/netd_200.pth --netg-path=checkpoints/netg_200.pth --gen-img=result.png --gen-num=64 |
3)检测功能,检测一张照片真伪
读取到照片后进行检测
1 | python demo.py -f examples/real.png -m weights/blur_jpg_prob0.5.pth |
4)批量检测功能
读取照片集进行检测
1 | python train.py --name blur_jpg_prob0.5 --blur_prob 0.5 --blur_sig 0.0,3.0 --jpg_prob 0.5 --jpg_method cv2,pil --jpg_qual 30,100 --dataroot ./dataset/ --classes airplane,bird,bicycle,boat,bottle,bus,car,cat,cow,chair,diningtable,dog,person,pottedplant,motorbike,tvmonitor,train,sheep,sofa,horse |
四、 *实验步骤、结果及分析*
*实验步骤*
1. *安装PYcharm后配置环境*
在命令行安装PyTorch
安装其他支持文件
1 | pip install -r requirements.txt |
2. *准备数据*
在老师给的压缩包中已经包含了准备好的数据。
3. *通过已有数据进行训练*
1 | python main.py train --gpu --vis=False |
这个过程比较慢,可以尝试使用训练好的数据(已在压缩包中给出)
或者选择自己跑数据训练
4. *训练完成后即可生成图片*
1 | python main.py generate --nogpu --vis=False --netd-path=checkpoints/netd_200.pth --netg-path=checkpoints/netg_200.pth --gen-img=result.png --gen-num=64 |
生成结果会储存在DCGAN文件夹下,可根据修改日期看出是新生成的图片。
生成结果如下
第一个实验到此结束。
5. *配置Deepfakes CNN-Detection实验环境*
基本不用发生更改,在第一次配置时已经完成
6. *尝试运行一张图片,并检测真假*
1 | python demo.py -f examples/real.png -m weights/blur_jpg_prob0.5.pth |
其中真照片运行结果如下
其中假照片运行结果如下
尝试运行数据集检测
1 | python demo_dir.py -d examples/realfakedir -m weights/blur_jpg_prob0.5.pth |
尝试跑自己的数据集,效果并不好(已在后文中说明)
跑老师给的数据集(airplane)
- 对数据集进行检测
1 | python eval.py --no_crop --batch_size 1 |
实验二结束。
实验结果及分析
- 在实验一中进行多次实验,可以看出每次生成结果都不同。
但仿真程度都不是很高
2.在实验二的单张检测中可以尝试对实验一的生成图片进行检测。
首先对总生成结果进行检测,由于其中元素较多识别出错,程旭认为其为真实图片。
但从中截取一幅生成图片进行检测,这次检测结果正确。
说明可以正确检验真伪。
3.使用另一种权重进行实验
对比实验可以看出二者之间的差别,0.1版本的准确度更高一些
4.对数据集进行检验
老师给的数据集过大,因此在检测时选取了一个比对的数据集。
对airplane数据集进行测试,测试成功。准确率很高
五、 *实验中遇到的问题及改正的方法*
- 在安装其他支持文件时经常安装失败,这里可以提供三种安装方法
首先尝试直接使用命令pip install -r requirements.txt安装,如报连接失败错误可以尝试挂梯子再次链接。
其次可以尝试在Pycharm中单个添加。
如果上述方法都不可行,只能在官网或镜像站逐一下载,最后将其手动安装。
2.老师给的数据集过大,因此在检测时选取了一个deepfake人脸生成比对的数据集。
在测试前准备选取一真一假两张照片进行单张实验观察结果。由于deepfake技术效果比较好,比对结果显示为二者都为真的概率比较高。
这两张图片为:其中左图为真
df0.jpg
df1.jpg
进行检测的结果显示
虽可以看出伪造成分,但无法证明右图为伪造图片。
其后更改算法权重为另一版本,效果略有升高。
但仍然达到不了50%以上,无法证明图片为伪造。