Datawhale AI夏令营_多模态竞赛(Deepfake攻防)

214 阅读8分钟

Task1

Part1: Deepfake是什么?

● 定义:使用人工智能技术生成的伪造媒体,特别是视频和音频,看起来或听起来非常真实,但实际上是由计算机生成的,通常涉及深度学习算法,特别是生成对抗网络(GANs)。

● 危害:在政治、经济、法律等领域带来严重危害,如制造假新闻、操纵舆论、破坏企业形象、误导司法判断等,还可能加剧身份盗窃风险、成为恐怖分子工具、煽动暴力和社会动荡,威胁国家安全。

● 研究方向:分为面部交换、面部重演、说话面部生成、面部属性编辑四个主流方向。

Part2: 如何识别Deepfake?

●  视觉检测: 观察视频中的面部表情是否自然,是否有不协调的面部动作或不一致的光照和阴影。

●  技术检测: 使用专门的软件或算法来分析视频帧,检测Deepfake的典型特征,如不自然的纹理、像素级异常等。

● 通过观察图片细节(如人物面部特征、眨眼频率、口型与说话内容同步性)、检查光线和阴影(光源一致性、阴影方向)、分析像素(模糊或像素化部分)、注意背景(不协调元素、物体边缘平滑度、背景重复模式)等逻辑步骤进行人工识别。

Part3: 深度学习与Deepfake

●  机器学习与深度学习: 深度学习是机器学习的一个分支,专注于使用多层神经网络来学习数据的复杂模式。

●  深度学习在Deepfake中的应用: 通过训练神经网络,学习源图像和目标图像之间的映射关系,生成逼真的Deepfake内容。

Part4: Baseline 关键步骤

  1. 加载预训练模型: 使用预训练的深度学习模型可以加速开发过程,并提高生成内容的质量。

  2. 提取音频特征: 在生成或识别Deepfake内容时,音频特征的提取是一个关键步骤,有助于提高识别的准确性。

  3. 定义模型训练步骤: 明确训练模型的步骤和参数,确保模型能够有效地学习并生成或识别Deepfake内容。

  4. 数据集增强: 通过数据增强技术,可以增加训练数据的多样性,提高模型的泛化能力。

Kaggle实操

由于之前已经使用过Kaggle,所以教程中的注册阶段不再需要操作。完成报名和问卷。

通过baseline的文件,copy后选择好显卡,一键运行,得到第一次分数:

微信截图_20240712000142.png

Task2

Part1 深度学习是什么?

●  神经元模型:深度学习的基础,理解单个神经元如何工作。

●  从机器学习到深度学习:介绍机器学习的概念,以及如何过渡到深度学习。

●  层次化假设:深度学习通过分层结构学习数据的不同层次和抽象。

●  特征工程:传统机器学习需要人工设计特征,深度学习自动学习特征,减少人工需求。

●  端到端学习:深度学习模型可以直接从输入到输出,无需中间步骤。

Part2 深度学习如何训练的?

●  梯度下降算法:深度学习中用于优化模型参数的基本算法。

●  Pytorch训练代码:使用Pytorch框架进行深度学习模型的训练示例代码。

●  自动调整权重:深度学习通过大量数据和训练自动调整权重,提高任务完成的准确性。

Part3 深度学习与迁移学习

●  ImageNet 介绍:介绍ImageNet数据集,它是深度学习中常用的图像识别数据集。

●  迁移学习的实现方法:解释如何利用预训练模型来解决新问题,即迁移学习。

Part4 常见的图像分类网络

●  AlexNet:深度学习中的一个重要里程碑,是第一个在ImageNet竞赛中取得突破性成绩的网络。

●  AlexNet Wikipedia

●  ResNet:引入残差学习框架,解决深层网络训练难题。

●  ResNet Wikipedia

●  EfficientNet:一种新的缩放方法,通过复合缩放方法系统地改进网络精度和效率。

●  EfficientNet Papers with Code

Part5: 一些思路

一、多帧提取、面部识别与相似比较 - 多帧提取:从视频中提取多个帧进行分析。 - 面部识别:对帧中的面部进行识别和分析。 - 相似比较:比较不同帧之间的相似性,以检测异常。

二、音频 Fake - 对音频的伪造情况进行研究和分析。

三、特征提取 - 包括 chroma_stft、rms、spectral_centroid、spectral_bandwidth、rolloff、zero_crossing_rate、mfcc 等多种特征的提取,这些特征可能用于音频或视频的分析和处理,以识别 Deepfake 现象。

Kaggle实操

● 为了提升模型的性能,我们可以从以下几个方面进行改进:

○ 数据增强:增加更多的数据增强方法,如随机裁剪、随机旋转等,以提高模型的泛化能力。

○ 模型选择:尝试使用更复杂的模型,如ResNet50或EfficientNet,这些模型通常具有更强的特征提取能力。

○ 学习率调整:使用更复杂的学习率调整策略,如余弦退火学习率,以帮助模型更好地收敛。

○ 损失函数:尝试使用不同的损失函数,如Focal Loss,以更好地处理类别不平衡问题。

○ 优化器:尝试使用不同的优化器,如SGD with Momentum,以提高模型的训练速度和稳定性。

● 修改部分:

○ 数据增强:增加了随机旋转和随机裁剪,以提高模型的泛化能力。

○ 模型选择:从ResNet18改为ResNet50,以提高模型的特征提取能力。

○ 学习率调整:从StepLR改为CosineAnnealingLR,以帮助模型更好地收敛。

○ 优化器:从Adam改为SGD with Momentum,以提高模型的训练速度和稳定性。

○ 这些修改有助于提高模型的性能和泛化能力。

● FFDIDataset类可以做一些小的改进来提高代码的可读性和效率。以下是改进后的代码:

○ 使用torchvision.transforms而不是手动转换图像:这样可以更方便地进行数据增强和标准化。

○ 使用torch.tensor而不是np.array:这样可以避免不必要的转换,并且更符合PyTorch的习惯。

2-1.png

Task3

根据提供的文档内容,以下是针对每个部分的学习笔记概要:

Part1 数据增强基础

●  定义:数据增强是一种技术,用于通过变换操作增加训练数据的多样性,提高模型的泛化能力。

●  目的:模拟真实世界中的变化,如视角、光照和遮挡,使模型学习到更鲁棒的特征表示。

●  注意:数据增强应与目标任务的实际场景相符,避免引入无关噪音或导致图像失真。

Part2 常见数据增强方法

●  几何变换:包括图像大小调整、旋转、剪切、平移等,用于模拟不同视角和位置的观察。

●  颜色变换:调整图像的亮度、对比度、饱和度等,模拟不同光照条件下的图像。

●  自动增强:使用自动化工具或算法来选择和应用数据增强操作。

Part3 进阶数据增强方法

●  Mixup:一种数据增强技术,通过线性插值的方式混合两个图像及其标签,增加数据的多样性。

●  Cutmix:类似于Mixup,但混合时只取一部分图像区域进行插值,模拟遮挡情况,增加模型的鲁棒性。

Part4 实操代码地址

●  提供了Kaggle上的代码示例,包括:

●  Deepfake-FFDI-图像赛题的修改版本。

●  展示数据增强变换的插图。

●  原始的Deepfake-FFDI代码。

Kaggle实操

继续改进代码

for video_path in glob.glob('/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/trainset/*.mp4')[:2000]:

这里限制了数据集只取头400个,可以修改

3-2.png

这里修改训练epoch

在timm项目的github中可以查看内置模型的测试结果情况

pytorch-image-models/results/results-imagenet-r-clean.csv at main · huggingface/pytorch-image-models (github.com)

有不同的数据集结果,这里主要参考下面两种:

mageNet-Adversarial - results-imagenet-a.csv

github.com/huggingface…

A collection of 7500 images covering 200 of the 1000 ImageNet classes. Images are naturally occurring adversarial examples that confuse typical ImageNet classifiers. This is a challenging dataset, your typical ResNet-50 will score 0% top-1.

For clean validation with same 200 classes, see results-imagenet-a-clean.csv

● Source: github.com/hendrycks/n…

● Paper: "Natural Adversarial Examples" - arxiv.org/abs/1907.07…

ImageNet-Rendition - results-imagenet-r.csv

github.com/huggingface…

Renditions of 200 ImageNet classes resulting in 30,000 images for testing robustness.

For clean validation with same 200 classes, see results-imagenet-r-clean.csv

● Source: github.com/hendrycks/i…

● Paper: "The Many Faces of Robustness" - arxiv.org/abs/2006.16…

3-3.png

修改模型为“eva02_large_patch14_448.mim_in22k_ft_in22k_in1k”,因为它在-r-clean排名中为第一,发现batchsize设为1,显存也会爆,模型太大。

考虑图片尺寸问题,往更小尺寸的模型找:

eva02_small_patch14_336.mim_in22k_ft_in1k,也不行

最终找到caformer_s36.sail_in22k_ft_in1k模型,

在batch_size=32, shuffle=True, num_workers=4, pin_memory=True可以运行(GPU:P100)

3-4.png

在总排行中还是比较靠前的,其384版本排第67

3-5.png

原本的训练数据使用的很少,通过[:400]只取了前400个数据,如果使用更多数据,效果应该会更好。

因此,如果选择全量数据,然后进行一定的处理,效果应该会更好.

由于时间不够,这里没法选择全体数据,最终选择了部分数据训练一个epoch: