当前位置: 首页 > news >正文

基于深度学习的AI生成式人脸图像鉴别

AIGC(AI内容生成)技术的快速发展确实为创作者提供了高效生产力工具,但同时也引发了一些问题和挑战。这些技术可以生成以假乱真的图像、视频换脸等,给不法分子提供了滥用的机会。其中,一些不法分子可能利用AIGC技术制造虚假新闻、违反版权、绕过活体身份验证、散布谣言和诽谤他人、进行敲诈勒索等非法活动,以谋取不当利益。这些行为给社会造成了严重的负面影响,破坏了信息的真实性和可信度。

因此,我们需要认识到AIGC技术的潜在风险,并采取相应的措施来应对。这包括加强法律法规的制定和执行,建立有效的监管机制,加强技术的安全性和可追溯性,提高公众的科技素养和警惕性,以及加强教育和宣传,提高人们对虚假信息的辨别能力。只有在合理监管和有效管理的前提下,AIGC技术才能更好地为创作者和社会带来益处,推动科技和艺术的进步。

如果有效地利用深度学习技术对AI生成式人脸图像进行辨别,成为近些年来的热点研究领域,越来越引起工业界和研究机构的重视和关注。本文选择公开的iFakeFaceDB数据集和ResNet-50深度学习模型来搭建一个基于深度学习的AI生成式人脸图像辨别系统。

数据集

iFakeFaceDB数据集是一个用于人脸图像合成和欺骗检测的数据集。它包含了真实的人脸图像以及通过人工合成生成的虚假人脸图像。该数据集的目的是帮助研究人员开发和评估人脸合成技术以及欺骗检测算法。iFakeFaceDB数据集的使用可以帮助提高人脸合成和欺骗检测的准确性和鲁棒性。与先前数据库相比且为了防止伪检测器,iFakeFaceDB在保持非常逼真的外观的同时,**通过一种称为GANprintR(GAN指纹移除)的方法去除了GAN体系结构产生的指纹。**作为GANprintR步骤的结果,与其他数据库相比,iFakeFaceDB对高级伪检测器提出了更高的挑战。

深度学习模型

ResNet-50是一种深度卷积神经网络模型,由微软研究院的Kaiming He等人在2015年提出。它是ResNet(Residual Network)系列模型中的一员,被广泛用于图像分类、目标检测和图像分割等计算机视觉任务中。

ResNet-50的主要特点是引入了残差连接(residual connection),通过跨层直接连接来解决深层网络中的梯度消失和表达能力退化问题。这种连接方式允许信息在网络中直接跳过一些层,使得网络可以更轻松地学习到更深层次的特征表示。

ResNet-50由50个卷积层组成,包括多个残差块(residual block)。每个残差块由两个3x3的卷积层和一个跳跃连接组成。在网络的开头和结尾,还有一个卷积层和一个全连接层,用于适应特定的任务。

在训练过程中,ResNet-50通常使用预训练的权重,这些权重是在大规模图像数据集上预先训练得到的。这样做可以加快模型的收敛速度,并提高模型的泛化能力。

鉴于此,本文选择ResNet-50作为首选模型,也可以方便地更换为其他分类模型如shufflenet,MobileNet、EfficientNet等。

训练代码

导入所需的库:

import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
from sklearn.model_selection import train_test_split
import os

设置数据集路径:

dataset_path = "~/data/iFakeFaceDB"

定义自定义数据集类:

class iFakeFaceDataset(Dataset):def __init__(self, root_dir, transform=None):self.root_dir = root_dirself.transform = transformself.images, self.labels = self.load_dataset()def __len__(self):return len(self.images)def __getitem__(self, idx):image = self.images[idx]label = self.labels[idx]if self.transform:image = self.transform(image)return image, labeldef load_dataset(self):images = []labels = []for idx, folder_name in enumerate(os.listdir(self.root_dir)):folder_path = os.path.join(self.root_dir, folder_name)if os.path.isdir(folder_path):for image_name in os.listdir(folder_path):image_path = os.path.join(folder_path, image_name)image = Image.open(image_path)images.append(image)labels.append(idx)return images, labels

数据预处理:

transform = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

加载数据集并划分训练集和测试集:

dataset = iFakeFaceDataset(dataset_path, transform=transform)
train_dataset, test_dataset = train_test_split(dataset, test_size=0.2, random_state=42)

创建数据加载器:

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

构建ResNet-50模型:

model = torchvision.models.resnet50(pretrained=True)
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 2)

定义损失函数和优化器:

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

训练模型:

num_epochs = 100
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)best_accuracy = 0.0
for epoch in range(num_epochs):print(f"Epoch {epoch + 1}/{num_epochs}")print("-" * 10)model.train()running_loss = 0.0for images, labels in train_loader:images = images.to(device)labels = labels.to(device)optimizer.zero_grad()outputs = model(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item() * images.size(0)epoch_loss = running_loss / len(train_dataset)print(f"Train Loss: {epoch_loss:.4f}")model.eval()correct = 0total = 0with torch.no_grad():for images, labels in test_loader:images = images.to(device)labels = labels.to(device)outputs = model(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()accuracy = 100 * correct / totalprint(f"Test Accuracy: {accuracy:.2f}%")print()if accuracy > best_accuracy:best_accuracy = accuracybest_model_wts = copy.deepcopy(model.state_dict())

保存模型:

model.load_state_dict(best_model_wts)
torch.save(model.state_dict(), "resnet50_model.pth")
print(f"Best Accuracy: {best_accuracy:.2f}%")

训练结果如下:

Epoch 100/100
----------
Best val Acc: 99.50%

推理代码

import torch
import torch.nn as nn
import torchvision.transforms as transforms
from PIL import Image
from torchvision.models import resnet50
import time# 加载预训练的ResNet-50模型
model = resnet50(pretrained=True)
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 2)
model.load_state_dict(torch.load('resnet50_model.pth'), strict=False)
model.eval()# 定义图像预处理的转换
preprocess = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])# 加载图像并进行预处理
image_path = '~/data/iFakeFaceDB/TPDNE/0000011.jpg'  # 替换为实际图像的路径image = Image.open(image_path)since = time.time()
input_tensor = preprocess(image)
input_batch = input_tensor.unsqueeze(0)# 使用GPU进行推理(如果有可用的GPU)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
input_batch = input_batch.to(device)
model = model.to(device)# 进行推理
with torch.no_grad():output = model(input_batch)# 获取预测结果的索引和概率
_, predicted_idx = torch.max(output, 1)
predicted_prob = torch.nn.functional.softmax(output, dim=1)[0] * 100time_elapsed = time.time() - since
print("FPS:", 1/ time_elapsed)# 打印预测结果
print("预测结果:", predicted_idx.item())
print(f"概率: {predicted_prob[predicted_idx.item()].item():.2f}%")

预测结果如下:

预测结果: 1
概率: 99.92%

部署到AlxBoard

在这里插入图片描述
在这里插入图片描述

后记

基于深度学习的AI生成式人脸图像辨别系统可以应用于多个领域,如社交媒体平台的人脸识别、虚假信息的辨别和防范等。但是,需要注意的是,这种系统仍然存在一定的误判率和局限性,因此在实际应用中需要综合考虑其他因素,如人工审核和其他辅助技术,以提高准确性和可靠性。

相关文章:

基于深度学习的AI生成式人脸图像鉴别

AIGC(AI内容生成)技术的快速发展确实为创作者提供了高效生产力工具,但同时也引发了一些问题和挑战。这些技术可以生成以假乱真的图像、视频换脸等,给不法分子提供了滥用的机会。其中,一些不法分子可能利用AIGC技术制造…...

iOS开发Swift-1-Xcode创建项目

1.创建项目 双击Xcode App,选择Create a new Xcode project。 选择创建一个iOS普通的App项目。选择Single View App,点击Next。 填写项目名,组织名称等,点击next。 选择好文件的存储路径,点击create。 2.为前端添加组件…...

AI 领域中 SLAM、Planning 和 Perception 的区别和联系

在人工智能(AI)领域,SLAM、Planning 和 Perception 是三个关键的概念,它们在机器人、自主驾驶车辆等领域中扮演着重要的角色。以下是它们之间的区别和联系: SLAM SLAM(Simultaneous Localization and Map…...

【数据库】MySQL基础知识全解

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于拓跋阿秀、小林coding等大佬博客进行的,每个知识点的修…...

【golang】调度系列之goroutine

前面的两篇,从相对比较简单的锁的内容入手(也是干货满满),开始了go的系列。这篇开始,进入更核心的内容。我们知道,go应该是第一门在语言层面支持协程的编程语言(可能是我孤陋寡闻),goroutine也完全算的上是go的门面。g…...

A 股个股资金流 API 数据接口

A 股个股资金流 API 数据接口 全量股票资金流数据,全量A股数据,最长30日历史数据 1. 产品功能 支持所有A股资金流数据查询;每日定时更新数据;支持多达 30 日历史数据查询;超高的查询效率,数据秒级返回&am…...

【前端】Layui动态数据表格拖动排序

目录 一、下载layui-soul-table 二、使用 三、Layui实际使用 1、html代码 2、JS代码 3、PHP后台代码 目的:使用Layui的数据表格,拖动行进行排序。 使用插件:layui-soul-table 和 Layui 1.layui-soul-table文档:https://…...

Linux 忘记密码解决方法

很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?答案是不需要进入单用户模式更改一下root密码即可。 步骤如下: 重启linux系统 3 秒之内要按一下回车,出现如下界面 …...

【计算机组成 课程笔记】2.1 设计自己的计算机

课程链接: 计算机组成_北京大学_中国大学MOOC(慕课) 2 - 1 - 201-设计自己的计算机(14‘24’‘)_哔哩哔哩_bilibili 什么是指令系统体系结构?这个问题其实非常简单,但要想解释清楚也没有那么容易。我们还是从一个小故事…...

vb房屋销售管理系统设计与实现

摘 要 当今社会经济高速发展,人们的生活节奏日益加快。随着人们生活水平的提高,相应地人们对住房的需求也随之增大,对于购房者来说,如何在琳琅满目的商品房中方便快捷的选择到自己称心如意的家居便成了一个难题;对于房屋开发商和销售商来说,如何对众多的房屋产品进行科…...

SpringCloud学习笔记(十三)_Zipkin使用SpringCloud Stream以及Elasticsearch

在前面的文章中,我们已经成功的使用Zipkin收集了项目的调用链日志。但是呢,由于我们收集链路信息时采用的是http请求方式收集的,而且链路信息没有进行保存,ZipkinServer一旦重启后就会所有信息都会消失了。基于性能的考虑&#xf…...

重仓“AI”的百度迎来收获季?

今年以来,由AIGC引发的“行业旋风”持续席卷各行各业,给沉闷已久的互联网赛道带来了一股暖流。这场AI旋风对于重仓押注AI的玩家而言,更是如同“久旱逢甘霖”,终于迎来了“柳暗花明”的一天。 作为重仓押注AI赛道的头部玩家&#x…...

Linux 通过 Docker 部署 Nacos 2.2.3 服务发现与配置中心

目录 环境准备Nacos 数据库创建Docker 部署 Nacos1. 创建挂载目录2. 下载镜像3. 创建和启动容器4. 访问控制台 导入 Nacos 配置SpringBoot 整合 Nacospom 依赖application.yml 配置 参考官方链接微服务商城源码 环境准备 名称版本IP端口Nacos2.2.3192.168.10.218848、9848MySQ…...

macOS上制作arm64的jdk17镜像

公司之前一直用的openjdk17的镜像,docker官网可以直接下载,但是最近对接的一个项目,对方用的是jdk17,在对接的时候有加解密异常的问题,为了排查是不是jdk版本的问题,需要制作jdk17的镜像。docker官网上的第…...

对话永洪科技CEO何春涛:专注BI,决胜AI时代丨数据猿专访

大数据产业创新服务媒体 ——聚焦数据 改变商业 大数据、云计算、人工智能为代表的新一代信息技术走向普及,数据驱动业务,逐渐成为现代化企业管理、运作的日常。对于年均复合增长率超过20%的国内商业智能(BI)市场而言&#xff0c…...

Redis 数据类型详细解析

Redis是一个开源的、内存中的数据结构存储系统,可用作数据库、缓存和消息代理。Redis支持多种类型的数据结构,包括字符串(String)、哈希(Hashes)、列表(Lists)、集合(Set…...

NOR型flash vs NAND型flash

FLASH是一种存储芯片,全名叫Flash EEPROM Memory,通过程序可以修改数据,即平时所说的“闪存”。 闪存可以在软件的控制下写入和擦写数据。其存储空间被分割成相对较大的可擦除单元,成为擦除块(erase block&#xff09…...

基于FPGA的图像sobel边缘提取算法开发,包括tb测试文件以及matlab验证代码

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 202…...

设计模式-7--代理模式(Proxy Pattern)

一、什么是代理模式(Proxy Pattern) 代理模式(Proxy Pattern)是一种结构型设计模式,它允许一个对象(代理)充当另一个对象(真实对象)的接口,以控制对该对象的…...

音频——I2S 左对齐模式(三)

I2S 基本概念飞利浦(I2S)标准模式左(MSB)对齐标准模式右(LSB)对齐标准模式DSP 模式TDM 模式 文章目录 I2S left波形图逻辑分析仪抓包 I2S left I2S 左对齐标准 标准左对齐格式的数据的 MSB 没有相对于 BCLK 延迟一个时钟。左对齐格式的左右声道数据的 MSB 在 LRCLK 边沿变化后…...

css-grammar

语法格式 选择器 {属性名称 : 属性值; 属性名称 : 属性值;...}语法特点: CSS声明总是以键值对(key\value)形式存在。CSS声明总是以分号(;)结束。声明组以大括号({})括起来。为了让CSS可读性更强,每行只描述一个属性。 CSS 注释 注释是用来解释你的代码&#xff…...

ubuntu创建自定义开机服务

创建启动脚本 如/usr/sbin/hikcam.sh 里面写要开机执行的命令 chmod 777 赋予权限 /lib/systemd/system下创建 .service文件 [Unit] Description"bringup hikcam" Afternetwork.target[Service] EnvironmentLD_LIBRARY_PATH/opt/MVS/lib/aarch64 Typesimple ExecS…...

Cocos独立游戏开发框架中的日志模块:Bug无所遁形

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。 在Cocos独立游戏开发框架中,一个强大的日志模块是不可或缺的组成部分。日志不仅仅是记录应用程序的运行状态,还可以用于故障排除、性能监测和安全审计…...

设计模式行为模式-命令模式

文章目录 前言定义结构工作原理优点适用场景消息队列模式Demo实现分写业务总结 前言 定义 命令模式(Command Pattern)是一种行为型设计模式,用于将请求封装为对象,从而使你可以使用不同的请求、队列或者日志请求来参数化其他对象…...

Linux-安装redis6.2.1及主备复制模式(replication)

Linux-安装redis6.2.1 下载redis6.2.1资源上传至安装目录解压及编译解压修改名称编译 修改配置文件主节点从节点 启动及测试启动主节点从节点 测试 下载redis6.2.1资源 地址》https://redis.io/download/ 上传至安装目录 例:/data/replication/ 解压及编译 解…...

新手做TikTok适合哪些类目?

现在很多小伙伴争先恐后想要在TikTok入驻,开店开直播带货赚钱,但是又怕自己是小白,不好拿捏这个平台。TikTok平台,适合小白做吗?现在tiktok千亿级的流量还处于蓝海阶段,想入局要趁早。那么肯定又有小伙伴疑…...

Open3D(C++) 点云格网分块

目录 一、算法概述二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法概述 点云格网分块是点云二维格网化的一个具体应用案例,与Open3D (C++) 使用点云创建数字高程模型DEM类似,对每个格…...

基于springboot跟redis实现的排行榜功能(实战)

概述 前段时间,做了一个世界杯竞猜积分排行榜。对世界杯64场球赛胜负平进行猜测,猜对1分,错误0分,一人一场只能猜一次。 1.展示前一百名列表。 2.展示个人排名(如:张三,您当前的排名106579)。 一.redis so…...

Mongodb常见操作命令

一、登录相关以及启动 启动服务mongodb: cd /usr/local/mongodb/bin ./mongod -f /data/mongodb/mongodb1.conf./mongod -f /data/mongodb/mongodb2.conf./mongod -f /data/mongodb/mongodb3.conf 登录mongodb数据库(mongodb默认端口:27017&#xff0…...

springcloud-nacos简述

Spring Cloud alibaba: nacos服务注册中心&#xff0c;配置中心 服务注册中心 1.项目父工程添加springcloudalibaba依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><ve…...