Datawhale AI 夏令营 全球Deepfake攻防挑战赛

        

        近日有学习多模态技术的需求,碰巧撞上Datawhale的夏令营,初看要求颇高,既要打卡还要分享,心中顿起燥心,转念一想,其实不失为一次磨练机会,为提高自己逃课摆烂的成本,邃开始撰写自己第一篇公开的学习笔记,若多日后看见虎头蛇尾的学习笔记,想必羞愧难当。

        闲话少说,先来看看学习的竞赛项目:

全球Deepfake攻防挑战赛 音视频赛题: https://www.kaggle.com/competitions/multi-ffdv/overview

  • 在这个赛道中,比赛任务是判断一张人脸图像(目测是另一个赛道的要求,这里的识别目标是视频)是否为Deepfake图像,并输出其为Deepfake图像的概率评分。参赛者需要开发和优化检测模型,以应对多样化的Deepfake生成技术和复杂的应用场景,从而提升Deepfake图像检测的准确性和鲁棒性。
  • 以AUC作为评价指标
  • 需求非常明确:开发更加有效的深度学习模型来辨别真实视频和AI生成的人脸图像,我想这里应该

        即对于模型要求能够接收视频作为输入,得到该视频是真实视频的概率,做一个深度学习分类模型,由于视频既包括连续的图片,有包括音频信息,需要模型能够处理这两种不同格式的数据,所谓多模态。

        今日笔记简单介绍完成这样一个项目baseline的流程:

  1. 准备训练数据:项目主办方会提供的,而且使用私有数据可能违规哦
    #notebook里使用shell中的命令需要再前面加!,下面两命令用于统计训练集和验证集行数
    !wc -l /kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/train_label.txt
    !wc -l /kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/val_label.txt

  2. 下载导入pytorch以及可能需要的第三方工具:比如我是第一次处理视频数据,发现baseline中用到了可以在notebook中播放视频的工具Video
    from IPython.display import Video
    Video("/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/valset/00882a2832edbcab1d3dfc4cc62cfbb9.mp4", embed=True)
  3. 提取音频并做初处理,将音频转为Mel频谱图并归一化,代码都太长了,后面就不粘贴了,官方文档里都有
    import moviepy.editor as mp
    import librosa
    import numpy as np
    import cv2
    
    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/ffdv-sample-dataset/ffdv_phase1_sample/trainset/001b0680999447348bc9f89efce0f183.mp4'  # 替换为您的视频文件路径
    mel_spectrogram_image = generate_mel_spectrogram(video_path)
  4. 后续和其他深度学习任务相同:使用dataset和dataloader读取数据;训练验证;保存参数。这里的模型框架是残差神经网络resnet18
    import timm 
    #pretrueed设为true意味着要下载预训练参数,相较于从头训练,预训练模型+微调往往更快速准确
    #由于是二分类任务num_cluss=2
    model = timm.create_model('resnet18', pretrained=True, num_classes=2)
  5. 将prediction.txt.csv(这里面是训练集和验证集里的一小部分)中视频的预测结果作为submission提交得到分数

OKK,今天的任务马上完成,看了一遍下来我发现自己并没有理解所谓多模态技术。。。看起来似乎是用resnet18这个CV领域的模型处理音频,对此有许多困惑(图片的预训练网络处理音频是合理的吗???),希望在后续的学习过程中希望对这个问题做进一步回答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值