kaggle-The-Global-Multimedia-Deepfake-Detection

Deepfake-Detection

        随着人工智能领域技术的飞速发展,深度伪造技术已成为一把双刃剑。它不仅创造了大量 AI 生成的内容,还对数字安全提出了前所未有的挑战Global Multimedia Deepfake旨在真实场景中针对各种类型的 Deepfake 攻击开发、测试和进一步发展更准确、有效和创新的检测模型,并激发创新的防御策略并提高 Deepfake 识别的准确性。

1. 什么是Deepfake?

        Deepfake是一种运用深度学习技术(尤其是生成式对抗网络, GANs)来创建高度逼真的合成媒体内容的方法。这种技术能够精确地模拟某人的形象、声音乃至动作。Deepfake 最常见的用途是在视频中替换人物的面部,使之看起来像是另一人的脸,同时保持原有的表情和口型动作自然流畅。

        尽管 Deepfake 技术在许多领域展示了其创新潜力,但其不当使用也引发了诸多严重问题。具体而言:

  • 政治领域:Deepfake 可能被用于制造假新闻或操纵舆论,进而影响选举结果及政治稳定。
  • 经济影响:它可能损害企业声誉,引起市场恐慌,甚至被用来操纵股票市场。
  • 法律体系:伪造的证据可能会误导司法程序。
  • 身份盗窃:Deepfake 技术加大了身份盗窃的风险。
  • 恐怖主义:该技术可能成为恐怖分子的新工具,用以煽动暴力和社会动荡,威胁国家安全。

        Deepfake 技术的滥用不仅对政治稳定和经济秩序构成威胁,还可能对法律公正性产生负面影响,并加剧身份盗窃的风险,甚至成为恐怖主义活动的助推器,从而对国家安全构成威胁。

深度伪造技术通常可以分为四个主流研究方向:

  • 面部交换专注于在两个人的图像之间执行身份交换;

  • 面部重演强调转移源运动和姿态;

  • 说话面部生成专注于在角色生成中实现口型与文本内容的自然匹配;

  • 面部属性编辑旨在修改目标图像的特定面部属性;

2. 如何识别Deepfake?

如果想要人工识别Deepfake的图片,可以通过以下逻辑步骤进行:

首先,观察图像或视频中的细节,仔细检查面部特征,例如眼睛的状态可能会突然变化,说话时嘴唇的动作与声音不同步,皮肤可能显得过于光滑或有不自然的斑点。

接着,检查照明或阴影,分析图片中的光源是否一致,阴影的方向是否与光源相符,不自然的光线或阴影可能是图片被修改的迹象。

然后,分析像素。放大图片,寻找是否有模糊或像素化的部分,这可能是Deepfake技术留下的瑕疵。Deepfake视频可能会有抖动或闪烁的现象,分辨率低于原视频,播放速度忽快忽慢。

此外,注意背景。人物边缘是否模糊或不自然,以及人物与背景是否协调。

3. Deepfake检测主要代码解读

完整代码地址:GitHub - 24447808721/kaggle-The-Global-Multimedia-Deepfake-Detection: 用于多媒体深度伪造检测,包含了代码和数据集用于多媒体深度伪造检测,包含了代码和数据集. Contribute to 24447808721/kaggle-The-Global-Multimedia-Deepfake-Detection development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/24447808721/kaggle-The-Global-Multimedia-Deepfake-Detection.git

音视频数据预处理

        在识别Deepfake视频时,音频分析之所以相对简单,是因为Deepfake技术生成的视频中,音频部分可能存在不自然或重复的模式,例如重复的单词或短语。通过分析音频的频谱图,可以更容易地发现这些异常,从而帮助判断视频是否经过了深度伪造处理。通常,Deepfake视频中的语音合成技术可能导致音频与视频不完全同步,或者产生不自然的停顿、重复的声音模式。这些特点在频谱图上会表现为不连续或非自然的模式,与真实录音的平滑连贯特性形成对比。

        MEL频谱图(Mel-spectrogram)是一种在音频信号处理领域常用的可视化工具,它基于人耳的听觉特性来表示音频信号的频率内容。梅尔刻度是一种对频率进行非线性缩放的方法,它将线性频率映射到梅尔频率上,使得梅尔刻度上的间隔更接近人耳感知的间隔。MEL频谱图将声音信号转换为一个二维图像,其中横轴代表时间,纵轴代表按Mel标度排列的频率,而颜色或灰度值则表示对应时间和频率下的声能强度。Mel标度反映了人类听觉系统对于不同频率范围内的敏感度差异,使得MEL频谱图能够更好地捕捉到信号的细节。在检测Deepfake视频中的异常时,MEL频谱图尤其有用,因为它能够突出显示音频信号中的不一致性,如不自然的停顿、重复的声音模式等,这些在MEL频谱图上会表现为异常的模式或不连续性。

#实现将视频音频转换成MEL频谱图
def generate_mel_spectrogram(video_path, n_mels=128, fmax=8000, target_size=(256, 256)):
    # 提取音频
    audio_path = 'extracted_audio.wav'
    video = mp.VideoFileClip(video_path)
    video.audio.write_audiofile(audio_path, verbose=False, logger=None)

    # 加载音频文件
    y, sr = librosa.load(audio_path)

    # 生成MEL频谱图
    S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=n_mels)

    # 将频谱图转换为dB单位
    S_dB = librosa.power_to_db(S, ref=np.max)

    # 归一化到0-255之间
    S_dB_normalized = cv2.normalize(S_dB, None, 0, 255, cv2.NORM_MINMAX)
    
    # 将浮点数转换为无符号8位整型
    S_dB_normalized = S_dB_normalized.astype(np.uint8)

    # 缩放到目标大小
    img_resized = cv2.resize(S_dB_normalized, target_size, interpolation=cv2.INTER_LINEAR)

    return img_resized

# 使用示例
# video_path = '/kaggle/input/alldeepfake/phase1/trainset/00154f42886002f8a2a6e40343617510.mp4'  # 替换为您的视频文件路径
# mel_spectrogram_image = generate_mel_spectrogram(video_path)

#下面内容是直接将数据集的所有视频音频转换成MEL频谱图,处理时间较长,这边上传了转换好的所有频谱图,可以跳过这段代码,感兴趣的也可以自己尝试一下转换
# !mkdir ffdv_phase1_sample
# !mkdir ffdv_phase1_sample/trainset
# !mkdir ffdv_phase1_sample/valset

# 时间太长可以将241991和79500修改较小的数
# for video_path in glob.glob('/kaggle/input/alldeepfake/phase1/trainset/*.mp4')[:241991]:
#     mel_spectrogram_image = generate_mel_spectrogram(video_path)
#     cv2.imwrite('./ffdv_phase1_sample/trainset/' + video_path.split('/')[-1][:-4] + '.jpg', mel_spectrogram_image)
    
# for video_path in glob.glob('/kaggle/input/alldeepfake/phase1/valset/*.mp4')[:79509]:
#     mel_spectrogram_image = generate_mel_spectrogram(video_path)
#     cv2.imwrite('./ffdv_phase1_sample/valset/' + video_path.split('/')[-1][:-4] + '.jpg', mel_spectrogram_image)

数据集增强

        数据增强是提升机器学习和深度学习模型性能的关键技术之一。它通过在训练集上应用一系列随机变换来增加数据的多样性,这样可以有效地扩大训练集的规模并提高模型的泛化能力。常见的数据增强技术包括旋转、缩放、翻转图像等操作,这些变换可以帮助模型学习到更多样化的特征表示。

transforms.Compose: 这是一个转换操作的组合,它将多个图像预处理步骤串联起来:

  • transforms.Resize((256, 256)):将所有图像调整为256x256像素的大小。

  • transforms.RandomHorizontalFlip():随机水平翻转图像。

  • transforms.RandomVerticalFlip():随机垂直翻转图像。

  • transforms.ToTensor():将PIL图像或Numpy数组转换为torch.FloatTensor类型,并除以255以将像素值范围从[0, 255]缩放到[0, 1]。

  • transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]):对图像进行标准化,使用ImageNet数据集的均值和标准差。

train_loader = torch.utils.data.DataLoader(
    FFDIDataset(train_label['path'].values, train_label['target'].values, 
            transforms.Compose([
                        transforms.Resize((256, 256)),
                        transforms.RandomHorizontalFlip(),
                        transforms.RandomVerticalFlip(),
                        transforms.ToTensor(),
                        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ])
    ), batch_size=40, shuffle=True, num_workers=12, pin_memory=True
)

val_loader = torch.utils.data.DataLoader(
    FFDIDataset(val_label['path'].values, val_label['target'].values, 
            transforms.Compose([
                        transforms.Resize((256, 256)),
                        transforms.ToTensor(),
                        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ])
    ), batch_size=40, shuffle=False, num_workers=10, pin_memory=True
)

PS

首先感谢dataWhale提供这次难得学习机会,还有感谢Inclusion会议提供的这次比赛,很遗憾因为个人原因没有提交最后的结果导致错失了决赛,但是也从这次比赛中学到了很多,在此对两个团队人员表示真挚的感谢。这篇内容是对这次学习的一个总结,对于这次音视频的识别主要还是对于音频进行一个检测,虽然没有用到多模态的检测,但也取得了不错的效果。讲一下可以优化的点:1.在进行音频转化时,可以进行一个并行处理或利用GPU处理,提升转换速度。 2.增加数据多样性,可以增加高斯处理。3.利用多模态进行一个处理,只利用音频还是较为局限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值