快速获取AI人脸数据集/适用AI人脸检测

本文介绍了一种基于爬虫的快速获取AI生成人脸数据集的算法。制作不易,感谢关注!

AI人脸检测目前是CV发展非常火爆的方向,这里https://github.com/Daisy-Zhang/提供了非常非常全面的综述和算法,以及开源项目,sota和cvpr的方向论文。

接下来介绍一些paper,AI人脸数据获取最后附上,小编也是爬了2w张数据集作为base。

人脸伪装图根据身份信息是否更改划分为身份信息不变类和身份替换类。

身份不变类伪造图在图片修改/生成时不修改图片中人物的身份信息,包括:

身份替换类伪造图在图片修改时同时改变其中人的身份信息:

  • 人脸转移:它将源脸部的身份感知和身份不相关的内容(例如表情和姿势)转移到目标脸部,换脸也换表情等等,相当于把自己脸贴在别人的头上;
  • 换脸:它将源脸部的身份信息转移到目标脸部,同时保留身份不相关的内容。即换脸,但不换表情,自己的脸在别人脸上做不变的事情;
  • 人脸堆叠操作(FSM):指一些方法的集合,其中部分方法将目标图的身份和属性转移到源图上,而其他方法则在转移身份后修改交换后图的属性,多种方法的复合;

Arxiv 2023 工作,介绍了DL方法、物理学方法(Physical-based Methods)、生理学方法(Physiological-based Methods)的检测方法,同时给出了不同生成模型的时间线(上图)。文章指出根据调研显示,GAN-face现在AI检测性能高于人,因为有些图一眼看过去非常真,人的识别准确率也只有50%~60%。在这三类方法中

  • DL方法的图片识别(分类)可解释性不太行,如果人看不出来,AI识别出来但又没有原因,比较难解释;
  • 基于物理的方法通过寻找人工信息或面部与物理世界之间的不一致,例如透视中的照明和反射,来识别gan-face;
  • 基于生理学的方法研究人脸的语义方面[14],包括对称性、虹膜颜色、瞳孔形状等线索,其中识别的伪像用于暴露gan人脸。
  1. 作者还给出了归类的不同方法及性能(如下),但我分析后发现这个表存在不足:
  2. 作者在第3章提到的很多DL方法的结果没有出现在此表中;
  3. 该表格的测试集不统一,每个方法的结果不能与其他方法公平的比较,无法较高凸显性能优劣;

CVPR2021 工作,该文章也针对视频检测,利用唇部运动进行检测,是文章最大的亮点

  1. 在lipreading任务上预训练CNN(freeze框内),作者称根据之前经验“在正常任务上训模型能提高模型对异常值(虚假)的敏感性”,事实上他的实验证实了这一点,lipreading的预训练任务能大幅提升其结果;
  2. 在虚假检测(也就是假脸检测)任务上finetune 时空网络(我个人理解这里的时空网络其实就是一个多帧特征融合,直接用个Transformer应该效果一样甚至更优)
  3. 损失用交叉熵做 2 分类;

预处理方面细节:

  1. 使用25帧图作为输入,使用RetinaFace[16]检测每一帧的脸,只提取最大的脸同时Crop 1.3 倍防止丢失信息;
  2. 用FAN[15]计算脸部 landmarks 进行唇部的裁剪,同时还做了对齐,作为模型输入;

实验:

  1. lipreading的预训练任务能大幅提升其结果
  2. 在其他数据集上泛化性也比较好,毕竟主要针对唇部还用其他模型做了对齐,泛化性好可以理解;

旷视科技的CVPR2023工作,开源在其官方github中,落地性应该有背书,属于训练复杂推理简单的。

通常用一个二分类训deepfake模型时可能存在一个问题,模型会把身份信息也学到,导致在鉴别fake图片时借用了id信息来辅助判决(比如某ID的脸都是真脸,模型通过记住ID来检测真假)。这些泄露的ID信息会在unseen数据上误导判决,这显然是不利于模型泛化的。作者将这一现象称为 隐式身份泄露(Implicit Idenetity Leakage)。

作者认为ID信息通常是由全局信息反应的,局部特征比较难反映出这些信息(比如单独的嘴、鼻子等),因此为了防止“隐式身份泄露”,作者干了两件事:

  1. 提出人工伪装检测模型(Artifact Detection Module,ADM)来使模型聚焦于局部信息;
  2. 同时为了配合ADM训练,设计了多尺度的面部交换方法(Multi-scale Facial Swap,MFS)来生成具有不同尺度的人工伪造信息(Artifact)的图片,增强数据集。

参考:

通过爬虫获取网站https://thispersondoesnotexist.com的数据,这个网站是一个神奇的网站,每进入一次,会根据你的时间戳随机生成一张AI人脸,代码附上:

import os
import requests
import random
import string
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor

# 定义图片保存路径
save_dir = "C:/py/jiaguwen/ai_face/pachong/ai1024" # 修改为你的输出文件夹路径
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# 生成随机文件名的函数
def random_filename(extension=".jpg", length=10):
    letters = string.ascii_lowercase
    return ''.join(random.choice(letters) for i in range(length)) + extension

# 爬取单张图片的函数
def fetch_image(i):
    url = "https://thispersondoesnotexist.com"
    try:
        response = requests.get(url, timeout=5)  # 设置超时防止卡住
        if response.status_code == 200:
            # 保存图片
            file_name = random_filename()
            file_path = os.path.join(save_dir, file_name)
            with open(file_path, 'wb') as f:
                f.write(response.content)
        else:
            print(f"Failed to retrieve image {i}, status code: {response.status_code}")
    except Exception as e:
        print(f"Error occurred while fetching image {i}: {e}")

# 设置下载的图片数量
num_images = 1000

# 使用 ThreadPoolExecutor 进行并发下载
with ThreadPoolExecutor(max_workers=1) as executor:  # max_workers 控制并发数量
    list(tqdm(executor.map(fetch_image, range(num_images)), total=num_images))

print(f"Downloaded {num_images} images to folder '{save_dir}'")

图片为单一模型GAN生成,注意若仅使用此数据集,算法的泛化将得不到保证,添加一些其他模型生成的AI数据集即可。

注意不要并行访问egde,会导致访问时间一样生成了一样的数据集,如果生成了一样的图片修改下代码对应的地方即可,此外无碍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值