代码解析—part1 数据准备—CVPR2023—Implicit Identity Leakage: The Stumbling Block to Improving Deepfake

深度伪造常用数据集 首个面向“多模态媒体篡改”任务的数据集,针对图像–文本新闻,进行检测与定位(bounding box / token)任务。 阅读详情

论文讲解请看:https://blog.youkuaiyun.com/JustWantToLearn/article/details/138758033
代码链接:https://github.com/megvii-research/CADDM
在这里,我们简要描述算法流程,着重分析模型搭建细节,以及为什么要这样搭建。
part 1:数据集准备 本文
part 2: 数据集加载,包含 Multi-scale Facial Swap(MFS) 模块:https://blog.youkuaiyun.com/JustWantToLearn/article/details/139092687
part 3:训练过程,ADM模块 https://blog.youkuaiyun.com/JustWantToLearn/article/details/139116455

环境准备

  • linux
  • Python 3 >= 3.6
  • Pytorch >= 1.6.0
  • OpenCV >= 4.4.0
  • Scipy >= 1.4.1
  • NumPy >= 1.19.5

在安装dlib库的时候卡了很久,先安装cmake,再去安装dlib。如果不成功,直接源码安装

git clone https://github.com/davisking/dlib.git
cd dlib
mkdir build
cd build
cmake ..
cmake --build . --config Release
cmake --build . --config Release --target install
cd ..
python setup.py install

数据准备 提取ff++数据集的ldm

1、下载FF++数据集

根据链接https://github.com/ondyari/FaceForensics/tree/master提示下载
放入特定文件夹中

.
└── data
    └── FaceForensics++
        ├── original_sequences
        │   └── youtube
        │       └── raw
        │           └── videos
        │               └── *.mp4
        ├── manipulated_sequences
        │   ├── Deepfakes
        │       └── raw
        │           └── videos
        │               └── *.mp4
        │   ├── Face2Face
        │		...
        │   ├── FaceSwap
        │		...
        │   ├── NeuralTextures
        │		...
        │   ├── FaceShifter
        │		...

2、提取ldm

 python lib/extract_frames_ldm_ff++.py

2.1 定义路径,函数

#extract_frames_ldm_ff++.py
#!/usr/bin/env python3
from glob import glob
import os
import cv2
from tqdm import tqdm
import numpy as np
import dlib
import json
import argparse
from imutils import face_utils

#定义路径
VIDEO_PATH = "./CADDM/data/FaceForensics++"
SAVE_IMGS_PATH = "./test_images"
#下载好的形状预测模型
PREDICTOR_PATH = "./CADDM/lib/shape_predictor_81_face_landmarks.dat"
DATASETS = {'Original', 'FaceSwap', 'FaceShifter', 'Face2Face', 'Deepfakes', 'NeuralTextures'}
COMPRESSION = {'raw'}
NUM_FRAMES = 1
IMG_META_DICT = dict()

def parse_labels(video_path):
    label = None
    if "original" in video_path:
        label = 0
    else:
        label = 1
    return label

def parse_source_save_path(save_path):
    source_save_path = None
    if "original" in save_path:
        source_save_path = save_path
    else:
        img_meta = save_path.split('/')
        source_target_index = img_meta[-1]
        source_index = source_target_index.split('_')[0]
        manipulation_name = img_meta[-4]
        original_name = "youtube"
        source_save_path = save_path.replace(
            "manipulated_sequences", "original_sequences"
        ).replace(
            manipulation_name, original_name
        ).replace(
            source_target_index, source_index
        )
    return source_save_path

2.2 main函数 主函数


def main():
	# 初始化dlib的面部检测器(HOG模型)
    face_detector = dlib.get_frontal_face_detector()
    # 加载形状预测模型
    face_predictor = dlib.shape_predictor(PREDICTOR_PATH)
    #遍历文件{'Original', 'FaceSwap', 'FaceShifter', 'Face2Face', 'Deepfakes', 'NeuralTextures'}
    for dataset in DATASETS:
        for comp in COMPRESSION:
            # 加载文件夹下所有mp4文件
            movies_path_list = parse_video_path(dataset, comp)
            n_sample = len(movies_path_list)
            for i in tqdm(range(n_sample)):
                #使用 replace 方法生成保存视频帧的路径
                save_path_per_video = movies_path_list[i].replace(
                    VIDEO_PATH, SAVE_IMGS_PATH
                ).replace('.mp4', '').replace("/videos", "/frames")
                preprocess_video(
                    movies_path_list[i], save_path_per_video,
                    face_detector, face_predictor
                )
    with open(f"{SAVE_IMGS_PATH}/ldm.json", 'w') as f:
        json.dump(IMG_META_DICT, f)


if __name__ == '__main__':
    main()
# vim: ts=4 sw=4 sts=4 expandtab

2.3 parse_video_path函数 读取所有video

def parse_video_path(dataset, compression):
    # this path setting follows FF++ dataset
    if dataset == 'Original':
        dataset_path = f'{VIDEO_PATH}/original_sequences/youtube/{compression}/videos/'
    elif dataset in ['FaceShifter', 'Face2Face', 'Deepfakes', 'FaceSwap', 'NeuralTextures']:
        dataset_path = f'{VIDEO_PATH}/manipulated_sequences/{dataset}/{compression}/videos/'
    else:
        raise NotImplementedError
    # get all videos under the specific manipulated/original sequences
    #使用 glob 模块查找所有以 .mp4 结尾的视频文件
    movies_path_list = sorted(glob(dataset_path+'*.mp4'))
    print("{} : videos are exist in {}".format(len(movies_path_list), dataset))
    return movies_path_list

2.4 preprocess_video函数,检测面部并保存地标

def preprocess_video(video_path, save_path, face_detector, face_predictor):
    # save the video meta info here
    video_dict = dict()
    # get the labels
    #真实视频标签为0,假视频标签1
    label = parse_labels(video_path)
    # 获取原始视频id,如果造假视频id   110_043,则source id 110,原始视频不变
    #'./manipulated_sequences/FaceSwap/raw/frames/110_043' --》'./original_sequences/youtube/raw/frames/110'
    source_save_path = parse_source_save_path(save_path)
    # prepare the save path
    os.makedirs(save_path, exist_ok=True)
    # read the video and prepare the sampled index
    #使用OpenCV的VideoCapture类打开视频文件
    cap_video = cv2.VideoCapture(video_path)
    #获取视频的总帧数
    frame_count_video = int(cap_video.get(cv2.CAP_PROP_FRAME_COUNT))
    #使用numpy.linspace生成一个等间隔的整数数组,表示要提取的帧的索引,NUM_FRAMES为1
    #这里只保存了每个视频第一帧图片
    frame_idxs = np.linspace(0, frame_count_video - 1, NUM_FRAMES, endpoint=True, dtype=int)
    # process each frame
    # 循环遍历视频的每一帧
    for cnt_frame in range(frame_count_video):
        # cap_video.read() 读取当前帧并返回读取状态ret和帧数据frame
        ret, frame = cap_video.read()
        height, width = frame.shape[:-1]
        if not ret:
            tqdm.write('Frame read {} Error! : {}'.format(cnt_frame, os.path.basename(video_path)))
            continue
        # 检查当前帧索引是否在要提取的帧索引数组中。如果不是,跳过此帧
        if cnt_frame not in frame_idxs:
            continue
        # 将当前帧从BGR颜色空间转换为RGB颜色空间,以便与dlib的面部检测器兼容
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        # 使用dlib的面部检测器检测当前帧中的面部,1 表示检测器将图像进行上采样一次,以检测更小的面部
        faces = face_detector(frame, 1)
        if len(faces) == 0:
            tqdm.write('No faces in {}:{}'.format(cnt_frame, os.path.basename(video_path)))
            continue
        # 一个用于保存面部特征点,另一个用于保存检测到的面部大小
        landmarks = list()  # save the landmark
        size_list = list()  # save the size of the detected face
        for face_idx in range(len(faces)):
            landmark = face_predictor(frame, faces[face_idx])
            landmark = face_utils.shape_to_np(landmark)
            x0, y0 = landmark[:, 0].min(), landmark[:, 1].min()
            x1, y1 = landmark[:, 0].max(), landmark[:, 1].max()
            face_s = (x1 - x0) * (y1 - y0)
            size_list.append(face_s)
            landmarks.append(landmark)
        # save the landmark with the biggest face
        #若一张图片上出现多张人脸,选择人脸特征最大的脸
        # 将所有面部特征点数组连接成一个NumPy数组,并根据面部大小排序,选择最大的面部特征点。
        landmarks = np.concatenate(landmarks).reshape((len(size_list),)+landmark.shape)
        landmarks = landmarks[np.argsort(np.array(size_list))[::-1]][0]
        # save the meta info of the video
        # 将最大的面部特征点、帧路径和标签保存到video_dict字典中
        video_dict['landmark'] = landmarks.tolist()
        video_dict['source_path'] = f"{source_save_path}/frame_{cnt_frame}"
        video_dict['label'] = label
        IMG_META_DICT[f"{save_path}/frame_{cnt_frame}"] = video_dict
        # save one frame
        # 将帧从RGB颜色空间转换回BGR颜色空间,构建保存帧图像的路径
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
        image_path = f"{save_path}/frame_{cnt_frame}.png"
        cv2.imwrite(image_path, frame)
    cap_video.release()
    return

3、结果

保存每个视频的第一帧,ldm.json保存每个视频的第一帧人脸81个关键点,原始人脸图片地址,label
ldm.json
在这里插入图片描述
在这里插入图片描述

3.1 在提取ldm时很多图片并没有检测出ldm

这样损失了很多数据,不确定作者数据这里有没有再做一些额外的处理
在这里插入图片描述

代码解析—part3 训练ADM—CVPR2023—Implicit Identity Leakage: The Stumbling Block to Improving Deepfake 论文代码训练模块 阅读详情

相关推荐

FaceForensics++数据集高效下载与配置全攻略

本文详细介绍了FaceForensics++数据集的下载与配置全攻略,包括数据集简介、下载准备、官方脚本优化、分场景下载配置及常见问题解决方案。通过实战技巧和优化方案,帮助用户高效下载这一Deepfake检测领域的权威数据集,大幅缩短下载时间并确保数据完整性。

weixin_29310605的博客 511

FF++数据集下载脚本代码

【代码】FF++数据集下载脚本代码。

weixin_56180495的博客 3049

Detecting Deepfakes with Self-Blended Images翻译

以前的方法混合两个不同的脸,并基于选定的源图像和目标图像之间的差异生成伪影。相比之下,我们的方法混合了来自单个图像的稍微变化的脸,并通过变换主动生成伪影。在本例中,我们对源图像应用颜色抖动、锐化、调整大小和平移,而不对目标图像进行任何变换。

jjw_zyfx的博客 3450

FaceForensics++数据集下载、视频帧提取及面部提取教程

本文主要总结多媒体取证领域数据集FaceForensics++的下载、视频帧提取和面部提取方法,并提供一个完整的能够正确运行代码的教程。本文会提供数据集的下载脚本,可以帮助大家节省向官方申请的环节。本文内容仅供参考,如果有问题欢迎大家提出宝贵意见!

m0_52807769的博客 1万+

Deepfake检测入门:如何用FF++数据集划分训练集与验证集(附数据处理脚本)

本文详细介绍了如何使用FaceForensics++(FF++)数据集进行Deepfake检测的实战流程,包括数据预处理、训练集划分、标签生成等关键步骤。通过提供完整的数据处理脚本和智能划分策略,帮助开发者高效构建标准数据集,提升Deepfake检测模型的训练效果。

weixin_32380501的博客 287

保姆级教程:用Python脚本搞定FaceForensics++数据集下载(附EU2服务器避坑指南)

本文提供FaceForensics++数据集的高效下载指南,详细解析官方Python脚本的使用方法,包括服务器选择、压缩等级优化及常见问题解决方案。特别针对EU2服务器进行速度对比和避坑建议,帮助研究者快速获取这一深度伪造检测(Deepfake Detection)领域的权威数据集。

weixin_30134145的博客 517

代码解析—part 2 数据集加载MFS—CVPR2023—Implicit Identity Leakage: The Stumbling Block to Improving Deepfake

MFS模块代码解析

JustWantToLearn的博客 1068

【FF++】FaceForensics++: Learning to Detect Manipulated Facial Images

低质量视频的挑战性案例也可以通过基于学习的方法来解决,在这种情况下,人类和手工制作的特征表现出困难。为了使用特定领域的知识来训练检测器,我们引入了一个新的被操纵面部视频数据集。聚焦于压缩的影响于最先进的操作方法的可检测性,为后续工作提出标准化基准。随着新的操纵方法日益出现,必须开发出能够在几乎没有训练数据的情况下检测出假货的方法。我们的数据库已经用于取证迁移学习任务,其中一个源操作领域的知识被转移到另一个目标领域,如Cozzolino等人[17]所示。注:仅供学习交流。

人生不是轨道,是旷野。希望每天都有好心情。 828

Single-CenterLoss for Face Forgery Detection论文阅读

实验 FF ++ 数据集【36】 由4种面部操作过的1000个视频组成,分别是DeepFakes[1]、Face2Face[40]、FaceSwap[3]和NeuralTexture[39]。 FF++数据集,以压缩程度为标准,可以分为3个版本,c0 原始版本 c23 轻压缩 c40 重压缩。 本文着重在重压缩视频上进行实验 预处理 从每个处理过的视频中抽取20帧,从每个原视频抽取80帧。 利用retinaface[11] 在每一帧中检测人脸。 评估标准 使用AUC[29] pAUC[..

qq_39601839的博客 2629

〖TensorFlow2.0笔记10〗关于数据集的加载,测试,实战+补充: 数据集下载慢的解决方法!

数据集加载! 文章目录一、数据的加载1.1、tensorflow.keras.datasets接口1.1.1、MNIST数据集1.1.2、cifar 10/100数据集 一、数据的加载 这节主要介绍一些比较小型的常用的数据集的加载。 1.1、tensorflow.keras.datasets接口 1.1.1、MNIST数据集 代码如下: import tensorflow as t...

AI新视界 9877

论文阅读-Joint Audio-Visual Deepfake Detection(音视频Deepfake检测)

本文提出一种新的视觉-听觉Deepfake联合检测任务,利用视觉和听觉两种模式之间的内在关系可以帮助deepfake检测。

一位不是很硕的鉴伪方向硕士 2855

FaceForensics++下载教程

如果您想下载FaceForensics,FaceForensics ++或DeepFakeDetection数据,这包括从YouTube下载的977个视频,1000个原始提取的序列,其中包含可以轻松跟踪的无障碍人脸,以及使用我们的四种方法操作的版本:Deepfakes,Face2Face,FaceSwap和NeuralTextures。我们还提供所有Deepfakes模型。DeepFakeDetection数据集包含来自16个不同场景中28个付费演员的363个原始序列以及使用DeepFakes操作的3000

weixin_45640448的博客 3987

人脸数据集

深度学习必用人脸数据集,该数据集共60人,每个人采集了500张正面各种姿态的图片,大小为128*128,直接利用笔记本的前置摄像头拍摄,是为了训练人脸识别专门搭建的数据集,人脸质量较好。

FaceForensics++数据库下载(一步步解析过程)

相信很多做deepfake相关研究的朋友,在对模型进行测试或者对潜前人的研究进行复现时,都需要下载一系列数据库并进行预处理等操作,而FaceForensics++数据库是一个由数千个使用不同DeepFake方法操纵的视频组成,并包含四个假子数据集,即DeepFake Detection (DFD), DeepFake (DF), Face2Face (F2F)和FaceSwap (FS)。将文后我给的代码粘贴并后缀改为.py文件,确保你的文件命名为FaceForensics++.py。

weixin_58183392的博客 4294

用于毕业设计模型训练的数据集

GP_dataset 用于毕业设计模型训练的数据集 数据来源 Faceforensics 包含: 从YouTube上下载的约一千个影片(真实) 通过DF伪造技术生成的约一千个视频(伪造) 2022.2.1 update: Faceforensics已经做通关了,换个赛道做Celeb-DF Celeb-DF Celeb-DF-v1和Celeb-DF-v2两个版本 提取landmarks 使用mediapipe方法提取人脸三维特征(468维) 运行方式 将需要提取landmark的视频存放在一个文件夹中,并在extract_landmarks_for_dataset.py中更改文件夹路径。 ''' python extract_landmarks_for_dataset.py '''

BitLocker磁盘锁定解决方法

摘要:本文介绍了BitLocker加密磁盘被锁的两种情况及解决方法。对于系统盘锁定,建议在微软账户中查找48位恢复密钥;数据盘锁定可尝试密码或恢复密钥解锁。若密钥丢失,可通过IT支持或数据恢复服务尝试解决。预防措施包括妥善备份密钥到微软账户和离线位置,避免随意更改系统硬件配置。BitLocker安全性高,恢复密钥是解锁关键,提醒用户务必做好备份以防数据丢失。(148字)

yueke06442300的专栏 2674

FaceForensics++数据集高效下载与本地管理全攻略

本文提供了FaceForensics++数据集的高效下载与本地管理全攻略。详细解析了官方Python脚本的核心参数,指导用户根据研究需求定制化下载原始视频及多种深度伪造视频,并重点推荐使用c23压缩等级以平衡画质与体积。同时分享了分步下载、目录规划、断点续传等实用技巧,以及针对下载速度慢、磁盘空间不足等常见问题的解决方案,帮助研究者快速构建本地数据集。

weixin_29268637的博客 233

从原理图到GDSII:Virtuoso+Pcell实战避坑指南(以TSMC65nm振荡器为例)

本文以TSMC65nm工艺下的振荡器设计为例,详细解析了Virtuoso环境中Pcell的最佳实践方案,涵盖变量管理、版图设计、Calibre验证等关键环节。通过实战案例和避坑指南,帮助工程师高效完成从原理图到GDSII的转化,特别针对LVS验证和参数化单元设计提供了实用解决方案。

fff88的博客 899

集成卷积神经网络鉴别伪造视频基于EfficientNet

Video Face Manipulation Detection Through Ensemble of CNNs 论文地址 代码位置 创新点: 注意力机制:发现检测真伪的关键部分,增强可解释性 The proposed attention-based solution provides interesting insights on which part of each frame drives face manipulation detection, thus enabling a small s

LittleCAIyuan的博客 1628

细节增强卷积DEConv详解及代码复现

这种预训练模型能够捕捉图像的基本特征,为后续的端到端训练提供良好的初始参数。例如,在RESIDE和RESIDE-6K数据集上的实验结果表明,使用MSPLCK模块的MixDehazeNet-L模型在RESIDE-IN数据集上首次超过了42dB的PSNR指标,且在所有数据集上均优于先前的方法。例如,在RESIDE和RESIDE-6K数据集上的实验结果表明,使用MSPLCK模块的MixDehazeNet-L模型在RESIDE-IN数据集上首次超过了42dB的PSNR指标,且在所有数据集上均优于先前的方法。

hasakie的博客 1910

声音特征提取--Demon谱分析(舰船水声)

不同频带的DEMON谱线相互之间也不一样,有的频带内会发生线谱遗失,有的频带内的线谱并不是真正的谱线。当舰船航速达到某个极限时,螺旋桨的高速旋转将产生空化噪声,由螺旋桨产生的一系列周期信号被空化噪声调制,在频域上表现为将低频的离散线谱线性搬移到较高频率噪声所处的频率周围,这些周期信号在频域是离散的线谱系列,对应舰船的轴频、叶频以及谐波频率,由于舰船辐射噪声低频部分还有其它噪声源,很难从低频段直接提取出螺旋桨产生的线谱系列,而是要先对高频段的调制信号进行解调,通过低通滤波得到信号的低频包络谱,即。

qq_52631753的博客 6506

数据集下载渠道汇总

Hugging Face – The AI community building the future. Machine Learning Datasets | Papers With Code

sslfk的博客 3万+

Gephi新手必看:如何用Excel整理CSV数据快速生成网络图(附模板)

本文为Gephi新手提供了一份从Excel数据整理到生成专业网络图的完整指南。详细讲解了如何构建规范的节点表和边表CSV文件,并导入Gephi进行可视化分析。通过实战案例,帮助读者快速掌握利用Excel整理数据、规避常见错误,并运用布局算法与视觉编码,将复杂关系数据转化为直观的网络洞察。

weixin_28487433的博客 389
上一篇: deepfake检测——Implicit Identity Leakage: The Stumbling Block to Improving Deepfake Detection Ge
下一篇: AIGC这是我想进入就能进的吗——研二找暑期实习AIGC方向严重受挫
DeepLearning01
博客等级 码龄7年 242粉丝 18原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值