近日有学习多模态技术的需求,碰巧撞上Datawhale的夏令营,初看要求颇高,既要打卡还要分享,心中顿起燥心,转念一想,其实不失为一次磨练机会,为提高自己逃课摆烂的成本,邃开始撰写自己第一篇公开的学习笔记,若多日后看见虎头蛇尾的学习笔记,想必羞愧难当。
闲话少说,先来看看学习的竞赛项目:
全球Deepfake攻防挑战赛 音视频赛题: https://www.kaggle.com/competitions/multi-ffdv/overview
- 在这个赛道中,比赛任务是判断一张人脸图像(目测是另一个赛道的要求,这里的识别目标是视频)是否为Deepfake图像,并输出其为Deepfake图像的概率评分。参赛者需要开发和优化检测模型,以应对多样化的Deepfake生成技术和复杂的应用场景,从而提升Deepfake图像检测的准确性和鲁棒性。
- 以AUC作为评价指标
- 需求非常明确:开发更加有效的深度学习模型来辨别真实视频和AI生成的人脸图像,我想这里应该
即对于模型要求能够接收视频作为输入,得到该视频是真实视频的概率,做一个深度学习分类模型,由于视频既包括连续的图片,有包括音频信息,需要模型能够处理这两种不同格式的数据,所谓多模态。
今日笔记简单介绍完成这样一个项目baseline的流程:
- 准备训练数据:项目主办方会提供的,而且使用私有数据可能违规哦
#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
- 下载导入pytorch以及可能需要的第三方工具:比如我是第一次处理视频数据,发现baseline中用到了可以在notebook中播放视频的工具Video
from IPython.display import Video Video("/kaggle/input/ffdv-sample-dataset/ffdv_phase1_sample/valset/00882a2832edbcab1d3dfc4cc62cfbb9.mp4", embed=True)
- 提取音频并做初处理,将音频转为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)
- 后续和其他深度学习任务相同:使用dataset和dataloader读取数据;训练验证;保存参数。这里的模型框架是残差神经网络resnet18
import timm #pretrueed设为true意味着要下载预训练参数,相较于从头训练,预训练模型+微调往往更快速准确 #由于是二分类任务num_cluss=2 model = timm.create_model('resnet18', pretrained=True, num_classes=2)
- 将prediction.txt.csv(这里面是训练集和验证集里的一小部分)中视频的预测结果作为submission提交得到分数
OKK,今天的任务马上完成,看了一遍下来我发现自己并没有理解所谓多模态技术。。。看起来似乎是用resnet18这个CV领域的模型处理音频,对此有许多困惑(图片的预训练网络处理音频是合理的吗???),希望在后续的学习过程中希望对这个问题做进一步回答。
标签:视频,AI,dB,Datawhale,sample,path,ffdv,Deepfake From: https://blog.csdn.net/Z_Zhangyijian/article/details/140363814