醋醋百科网

Good Luck To You!

重磅!带你解析2020 Kaggle DeepFake 排行榜前1.5%技术方案

Deepfake -假视频检测


最近的2020 Deepfake假视频检测挑战赛,旨在帮助世界各地的研究人员检测线上视频及语音是否被伪造和篡改,帮助提升线上人权和保护网络上个人隐私。经过老师们和学员们数个昼夜的共同努力,昂钛客在2265支队伍中,位列第32名!占总排行榜前1.5%!想知道我们是怎么做到的么?本篇文章为大家分享了本次比赛应用的技术。


一、简介

Deepfake作为新的技术发展方向,受到了很大的关注。但是这也出现了一定的伦理问题,所以攻克deepfake的滥用,也是让AI可以造福于人类的一个科研重心,本次比赛以FaceBook牵头制作了上TB的视频用于deepfake视频的识别工作。


二、问题梳理

对于整个比赛,为我们进行了简单的数据层面的分析

1. Fake的数据多于real,切一个real不一定对应几个Fake;

2.这个问题本质上是一个视频的分类问题;

3.给的数据包括,视频,标签,和real和fake的对应关系;

4.视频中的任务场景非常复杂。


三、简单的背景知识梳理

Deepfake:就是常见的AI换脸,可推测的就是视频的主要不同就是人脸处

基于背景知识可以得到的几种常见的思路:

1. 同一个real的视频做帧差,然后又去区别作为实例识别的mask;

2. 使用换的是人脸的先验,先做人脸检测,再进行分类;

3. 直接使用RCNN或者CNN3d来进行视频分类。

经过大量的实验,发现,第一种和第三种效果都不是很理想;


四、我们的策略

验证集划分:直接将一个part作为验证集;

理由:

1. 保证演员的不一致性;

2. 保证real视频不以任何方式泄露:包括穿的衣服,提醒,亮度对比度等等;

3. 分割简单,便于代码编写;

这里需要注意,某开源Notebook作者的分割的方式,会出现验证集效果和测试集相差非常大的情况;因为真实情况是数据会通过其他方式进行泄露,所有必须保证演员是从来没有见过的,我们发现每一个part基本能保证演员是独立的,所以我们指定了这一策略;

数据处理策略:

1.因为数据本身不均衡,我们人为将数据在一个batch中保证,real和fake做到1:1

2. 对于每一个视频,我们针对性的使用网上训练好的MTCNN进行了人脸框提取(这里有两个细节:a) 部分人脸抠不出来(这是之后的一个改进方向,因为太黑,或者人脸换成了马赛克)b) 人脸框需要放大(因为换的脸和原来的头发等的连接处经常出现问题)

3. 人脸的选取策略和我们之前视频中的讲解相同,对于框(x1,y1,x2,y2)表示对角线,如下图,上面取0.4是因为有头发


4. 因为神经网络接到的任务是分类两个图片,你拿着两个人的图片,神经网络会觉得衣服的不同,发型的不同也是重要的特征,所以我要求每个real的图片要有对应fake视频中的同帧图片,保证模型只找到real和fake真正的不同。

5. 使用一个简单的神经网络,我们使用预训练的SeResnext-50,Xception,Eff-b4,Eff-b5四种模型。

6. 参数:

a) lr:0.01, 12000个batch后除以10,之后6000batch后再除以10,之后 6000batch后再除以10;b) 优化模型,SGD,momentum=0.9, 参数衰减为1e-5;c) Dropout: 0.5, 预训练模型(非常重要),batch_size:内存允许下越大越好,epoch:因为强制1:1所以没有epoch,直接用的batch;d) 需要说明的一点,学习率下降后,验证集结果可能会变差,很多同学们就停了,实际学习率高的时候分高很可能是过拟合,低的学习率得到的结果一般会比较稳定。

7. 模型融合:SeResnext-50,Eff-b4,Eff-b5根据不同的比例(根据每个模型的分数,得分高的就给高权重,低的就低权重);

8. 人脸提取采取MTCNN(因为某开源Notebook作者的模型,有一部分人脸找不出来),但是在讨论中我们看到了其他的更好的选择retinanet;而且针对找不到的人脸做了一系列优化;

9. 数据增强:

ShiftScaleRotate(p=0.3, scale_limit=0.25, border_mode=1), # 随机平移,旋转,缩放

HorizontalFlip(p=0.5), # 垂直翻转

RandomBrightnessContrast(p=0.5, brightness_limit=0.2, contrast_limit=0.2), # 随机亮度对比度

GaussianBlur(), # 高斯模糊

CLAHE(p=0.3), # 直方图均衡化

OpticalDistortion(), # 光学畸变

MotionBlur(p=0.3, blur_limit=3) # 运动模糊

10. 虽然是迁移学习但是使用所有的参数进行训练;


其他一些说明:

学习率衰减策略,试了挺多,有时候有用,有时候没用;

很多学生喜欢Adam优化器,其实这个对初学者比较友好,实际上是前期效果好,后期效果差,而且占用内存非常大的一个东西(是SGD的3倍,momentum的0.5倍);

第二名解决方案请联系我们索取源码。


还使用过的一些策略:

1)Mixup:前期有用,但是有的时候有用,有的时候反作用,所以之后就没用;

2)重训练:就是把模型得到的效果不好的数据拿出来重训一下,看运气,有时候有用,有时候效果反而变差;

3)使用全图进行训练:模型不会进行梯度下降;

4)不使用预训练模型:模型误差下降很慢,而且得分不会很低;

5)使用多个模型将关注点放在不同的人脸部分:梯度不会下降;

6)将所有得分不好的视频拿出来重新训练一个模型:结果还是不会让效果变化;

7)对模型进行小范围微调;使用小的学习率对得分很低的视频进行微调(大调会炸);

8)使用公开的新数据集:有一点点的提升,非常有限;

9)更加深的神经网络:seresnext-101等,效果只会更差;


但是我们仍然发现我们能在其他任何线下测试集(包括黑人黑灯情况下)得到0.1左右得分,但是只能在线上得到0.3左右的得分;

而且后期很多的策略并不能得到好的提高,大多数没有任何用处;


五、总结

本次比赛的关键点主要有数据均衡策略,数据增强策略,和一些简单的实现细节,总体解决策略是人脸的识别加分类,选用模型是不要太深的CNN

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言