Deepfake Day1:Baseline解读

news/2024/9/19 15:32:42/文章来源:https://www.cnblogs.com/cauwj/p/18302101

Deepfake

Deepfake是一种使用人工智能技术生成的伪造媒体,特别是视频和音频

深度伪造技术(Deepfake)主要可以分为以下几个研究方向:

  • 面部交换:专注于在两个人的图像之间执行身份交换。
  • 面部重演:强调转移源运动和姿态。
  • 说话面部生成:专注于在角色生成中实现口型与文本内容的自然匹配。
  • 面部属性编辑:旨在修改目标图像的特定面部属性。

Deepfake图像识别baseline

1、使用resnet18模型作为预训练模型

预训练模型是指在特定的大型数据集(如ImageNet)上预先训练好的神经网络模型。这些模型已经学习到了丰富的特征表示,能够识别和处理图像中的多种模式。使用预训练模型的好处是,它们可以在新数据集或新任务上进行微调(Fine-tuning),从而加快训练过程并提高模型性能,尤其是当可用的数据量有限时。

ResNet-18模型是引入了“残差学习”框架,通过添加跳过一层或多层的连接(即残差连接或快捷连接),解决了随着网络深度增加时训练困难的一种深度卷积神经网络。

2、使用transforms.Compose进行数据增强

数据增强是一种在机器学习和深度学习中提升模型性能的重要技术。它通过应用一系列随机变换(如旋转、缩放、翻转)来增加训练数据的多样性,从而提高模型的泛化能力。

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

  • Resize: 调整图像大小,例如transforms.Resize((256, 256))将图像调整为256x256像素。
  • RandomHorizontalFlip: 随机水平翻转图像,增加数据多样性。
  • RandomVerticalFlip: 随机垂直翻转图像,进一步增加数据多样性。
  • ToTensor: 将PIL图像或Numpy数组转换为torch.FloatTensor类型,并归一化像素值到[0, 1]区间。
  • Normalize: 对图像进行标准化处理,使用均值和标准差进行缩放,例如使用ImageNet数据集的均值[0.485, 0.456, 0.406]和标准差[0.229, 0.224, 0.225]。

3、模型训练

深度学习模型的训练本质上是一个优化问题,目标是最小化损失函数。具体流程如下:

  1. 设置训练模式:通过调用model.train()将模型设置为训练模式。在训练模式下,模型的某些层(如BatchNorm和Dropout)会按照它们在训练期间应有的方式运行。
  2. 遍历数据加载器:使用enumerate(train_loader)遍历train_loader提供的数据批次。input是批次中的图像数据,target是对应的标签。
  3. 数据移动到GPU:通过.cuda(non_blocking=True)将数据和标签移动到GPU上。non_blocking参数设置为True意味着如果数据正在被复制到GPU,此操作会立即返回,不会等待数据传输完成。
  4. 前向传播:通过output = model(input)进行前向传播,计算模型对输入数据的预测。
  5. 计算损失:使用损失函数loss = criterion(output, target)计算预测输出和目标标签之间的差异。
  6. 梯度归零:在每次迭代开始前,通过optimizer.zero_grad()清空(重置)之前的梯度,以防止梯度累积。
  7. 反向传播:调用loss.backward()计算损失相对于模型参数的梯度。
  8. 参数更新:通过optimizer.step()根据计算得到的梯度更新模型的参数。

Deepfake多模态baseline

1、使用resnet18模型作为预训练模型

预训练模型是指在特定的大型数据集(如ImageNet)上预先训练好的神经网络模型。这些模型已经学习到了丰富的特征表示,能够识别和处理图像中的多种模式。使用预训练模型的好处是,它们可以在新数据集或新任务上进行微调(Fine-tuning),从而加快训练过程并提高模型性能,尤其是当可用的数据量有限时。

ResNet-18模型是引入了“残差学习”框架,通过添加跳过一层或多层的连接(即残差连接或快捷连接),解决了随着网络深度增加时训练困难的一种深度卷积神经网络。

2、提取音频特征:MEL频谱图(Mel-spectrogram)

Deepfake技术生成的视频中,音频可能存在不自然或重复的模式,例如重复的单词或短语。通过分析音频的频谱图,可以更容易地发现这些异常,从而帮助识别视频是否经过了深度伪造处理。

MEL频谱图(Mel-spectrogram)是一种在音频信号处理领域常用的可视化工具,它基于人耳的听觉特性来表示音频信号的频率内容。梅尔刻度是一种对频率进行非线性缩放的方法,它将线性频率映射到梅尔频率上,使得梅尔刻度上的间隔更接近人耳感知的间隔。

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

3、模型训练

深度学习模型的训练本质上是一个优化问题,目标是最小化损失函数。具体流程如下:

  1. 设置训练模式:通过调用model.train()将模型设置为训练模式。在训练模式下,模型的某些层(如BatchNorm和Dropout)会按照它们在训练期间应有的方式运行。
  2. 遍历数据加载器:使用enumerate(train_loader)遍历train_loader提供的数据批次。input是批次中的图像数据,target是对应的标签。
  3. 数据移动到GPU:通过.cuda(non_blocking=True)将数据和标签移动到GPU上。non_blocking参数设置为True意味着如果数据正在被复制到GPU,此操作会立即返回,不会等待数据传输完成。
  4. 前向传播:通过output = model(input)进行前向传播,计算模型对输入数据的预测。
  5. 计算损失:使用损失函数loss = criterion(output, target)计算预测输出和目标标签之间的差异。
  6. 梯度归零:在每次迭代开始前,通过optimizer.zero_grad()清空(重置)之前的梯度,以防止梯度累积。
  7. 反向传播:调用loss.backward()计算损失相对于模型参数的梯度。
  8. 参数更新:通过optimizer.step()根据计算得到的梯度更新模型的参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/743724.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Blog记录

2024-07-13 博客建立 2024-07-14 博客快照

【Unity】自制PolygonCollider2D

防止和UnityEngine的PolygonCollider2D重名,所有类包裹在了我自己定义的名称空间JimDevPack中,名称空间的声明部分在文章代码中略去了。定义PolygonCollider2D和基类 基类 public class Collider2D : MonoBehaviour {}PolygonCollider2D public class PolygonCollider2D : Co…

C++11 标准库 线程库thread梳理

目录<thread>this_thread命名空间1. get_id()2. sleep_for()3. sleep_until()4. yield()thread类构造函数:类方法1. get_id()2. join()3. detach()4. joinable()5. operator=6. hardware_concurrency(static)多线程的两种计算场景 <thread> this_thread命名空间 在…

大模型中的tempture以及top-p问题

原文:https://blog.csdn.net/jarodyv/article/details/128994176 参考:https://blog.csdn.net/engchina/article/details/138258047 为了使大模型的生成和表达更加多样,GPT采用了tempture以及top-p方法。 GPT的输出层后面一般跟着softmax,在判别式模型中我们会输出概率最高…

Java基础04:数据类型拓展

整型拓展 十进制整数,如:99, -500, 0。 八进制整数,要求以 0 开头,如:015。 十六进制数,要求 0x 或 0X 开头,如:0x15 。 //整型 int i=10; int i2=010; int i3=0x10; System.out.println(i); //10 System.out.println(i2); //8 System.out.println(i3); //16浮点型拓展…

Python 潮流周刊第 2 季完结了,分享几项总结

我订阅了很多的周刊/Newsletter,但是发现它们都有一个共同的毛病:就是缺乏对往期内容的整理,它们很少会对内容数据作统计分析,更没有将内容整理成合集的习惯。 在自己开始连载周刊后,我就想别开生面,除了每周更新正刊外,还计划定期做一些盘点。我认为过往周刊值得被串联…

BUUCTF Crypto 做题记录

目录: 1.一眼就解密 2.Url编码 3.MD5 4.看我回旋踢 5.摩丝 6.password # 1.一眼就解密 https://buuoj.cn/challenges#一眼就解密 ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30= 确实一眼看出是Base64,拿去解密即可2.Url编码 https://buuoj.cn/challenges#Url编码 直接网上搜url …

开源缺陷管理系统全解析:如何选择最适合你的?

国内外主流的10款开源缺陷管理系统软件对比:PingCode、Worktile、Bugzilla、osTicket、MantisBT、Trac、OpenProject、Phabricator、Request Tracker、The Bug Genie。在管理软件项目时,缺陷管理常常是团队面临的一大挑战。选择一个合适的开源缺陷管理系统可以显著提高错误跟…

视野修炼-技术周刊第92期 | 薅牛毛

① YakShaving - 薅牛毛 ② CSS OneLiners ③ Vue Vine - 单文件编写多 Vue 组件 ④ CDN 流量被盗刷经历 ⑤ es-toolkit ⑥ console.log 体验优化 ⑦ 诗境 - 根据图片匹配诗句欢迎来到第 92 期的【视野修炼 - 技术周刊】,下面是本期的精选内容简介 🔥强烈推荐YakShaving - 薅…

1、多线程同步——CPU、core核、线程、内存

CPU 的运行原理 控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后 CPU 将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后 CPU 把数据读到 CPU 的…

基础语法

单行注释 //加内容 多行注释 /内容/ 文档注释/** * */ 标识符Java中所有的组成部分都需要名字.类名,变量以及方法名都被称为标识符 标识符注意点 1.所有的标识符都应该以字母(A-Z或者a-z),美元符$或者下划线_开始 2.首字符之后可以是以字母(A-Z或者a-z),美元符$,下划线_或者数字…