如何识别假视频?二等奖 DeepFake 挑战赛 项目记录
1 比赛概述
DeepFake技术是可以生成换脸的视频。这些内容生成和修改的技术可能会影响公共话语的质量或者侵犯他人的权力,尤其是考虑到这种伪造的视频可能被而已用来误导、操纵、骚扰和诈骗。
识别这种合成视频是一个要求高技术、且迫切需要的一种技术。这次挑战的目标是促使一种新算法的诞生,来帮助检测深层伪造的合成视频。
2 数据
这次比赛要预测的就是一个视频是否是伪造的,预测的是一个视频是假视频的概率。
给出的训练数据如下图:
3 Metric
比赛的评估就是用二分类交叉熵。有意思的是,在比赛初期,很多人的成绩非常差的原因是,这里面的预测值1是fake,0是true,和一般的逻辑是反着的哈哈。
4 处理思路
这是一个视频分类任务,把视频分解成多个图像,然后用图像分类之后再汇总起来。
一个视频有300多帧,我们均匀的取出17帧,然后从17帧中每一帧取出一个人脸图片。
其中从视频帧中检测人脸使用的是MTCNN模型,然后保存的人脸图片中,有80.8%的都是Fake的人脸,有19.2%的是真实的,所以需要对样本进行筛选和正负样本的平衡。
检测出来的人脸不一定都是人脸,所以这里需要去除一些噪音。
在推理阶段,从一个视频中取出17帧,然后检测到17个人脸图片,然后得到17个图片是否被修改的17个概率。
这是两个被伪造的人脸:这是能看出被伪造的。随机抽取一帧,然后检测人脸,然后将人脸图片截出来。
5 截取人脸
在截取人脸的时候,一般并不是检测到哪里,就只截取那部分的图片。截图到一个图,然后首先要把长方形扩展到正方形,然后再扩大1.5倍候选框。这样就可以保留更多一些人脸的细节:黑色是模型检测出来的人脸,然后扩展成红色的正方形,然后再扩大1.5倍变成蓝色的
6 如何去除脏数据
这里设计了一个检测差异度的指标:
效果如下:
但是这个也有弊端,对于这种仅仅修改了鼻子的图片,这个指标就会这些微小修改的伪造图筛选掉:
最后实验证明,这个指标对最终精度的提升非常可观。机器学习关键还是数据呀!
7 如何平衡正负样本
使用欠采样来平衡。要求在一个batch内,每一个真实的人脸都有其对应的虚假的人脸。
【真实样本】:随机找一个视频,然后从这个视频中的17帧图片中选取一个人脸;
【伪造样本】:随机选取该真实视频对应的虚假视频之一,从选取17帧中随机选择一个人脸。
8 模型选用
EfficientNet效果最好了。
9 数据增强
关键在于使用ShiftScaleRotate(),提高0.02的成绩。
10 推理过程
一个视频,随机抽取17帧,去掉其中的无效帧(没有人脸)
预测人脸,得到置信度,然后将置信度按照顺序排列。
然后将置信度较大的8个图像,求置信度的平均值,大于0.5就按照这个提交成绩;小于0.5就按照全部人脸的置信度均值提交。(我也不知道为啥这样,其他的队友提出的建议2333)
11 具体参数
optimizer:SGDM,momentum=0.9
lr=0.001 学习率衰减策略,iter=60000的时候乘上0.1,iter=90000再乘上0.1
batchz_size=16
欢迎与作者交流哈~
机器学习炼丹术:统计学,数据科学,机器学习,深度学习,以及一些参加Kaggle竞赛的经验。