WAIC2023| AIGC究竟在向善还是向恶而行?

news2024/11/20 9:43:30

目录

  • 一、常见图像篡改技术
  • 二、传统篡改图像检测方法
    • 2.1、基于光源和噪声的拼接图像篡改检测方法
    • 2.2、基于马尔科夫特征的检测方法
  • 三、基于深度学习的图像篡改检测方法
    • 3.1、基于Fisher编码和SVM模型的方法
    • 3.2、 基于局部异常特征检测的Mantra-Net方法
    • 3.2、基于HRNet的编码器——解码器结构的图像真实性鉴别模型
  • 四、图像篡改检测方法初体验
  • 五、图像安全技术助力AI向善而行

随着数字图像处理技术的发展和以ChatGPTMidjourneyStable Diffusion等为代表的AIGC产品的爆火,各种数字图像编辑处理软件和生成式模型正在变得越来越强大,普通用户已经可以方便地对图像进行绘制、编辑和篡改,这些技术和软件在带来便利的同时,也使得用户更容易伪造或篡改数字图像而不留痕迹,人工智能生成内容以假乱真、数据泄露以及侵权的风险被进一步放大。

在这里插入图片描述

对图像的篡改和伪造简单易行且难以通过肉眼鉴别,目前已有部分别有用心的人对数字图像进行恶意伪造和篡改,并用于行政报表合同作假,转账记录、交易记录、聊天记录、身份伪造、医学、虚假新闻等扰乱经济秩序社会秩序等领域。
图像内容的安全与可信性已经成为了公众关注的焦点,但图像领域的“可信AI”才刚刚起步。

一、常见图像篡改技术

图像篡改技术可以用于欺骗、误导或者破坏图像的真实性和可信度,这些技术带来的盗版问题和信息安全风险也往往容易成为社会问题,要获得篡改数字图像的证据,首先要了解数字图像的篡改方法:

  1. 合成:合成方法选择一幅图像或多幅图像的一部分拼接到另一幅图像中,以遮挡目标图像中的信息或添加额外的信息,是图像伪造中最常用的伪造技术之一;
  2. 修图:主要是指利用图像编辑工具对图像的内容进行美化、拉伸、打磨,从而隐藏图像中的一些重要细节或修复一些受损的图像,如使用Photoshop、美图等图像编辑工具对图像进行修改。
  3. 生成式模型:生成式模型以MidjourneyStable Diffusion为代表,通过使用了深度学习技术学习大量的图像数据这种模型可以生成非常逼真、高质量的图像,人眼很难分辨出是真实的还是生成的。
  4. 图像转译:主要是将一张图像作为需要更改的图像,另一张图像作为需要更改的图像,逐渐将一种图像变成另一种图像。
  5. 图像增强:图像增强是通过一定的手段向原图像中添加一些信息或变换数据,有选择地突出图像中感兴趣的特征或抑制图像中一些不需要的特征从而有目的地强调图像的整体或局部特征。
  6. 手工重绘:人工通过绘图软件(如PhotoshopCAD等)或其他绘图工具进行绘制。

二、传统篡改图像检测方法

2.1、基于光源和噪声的拼接图像篡改检测方法

基于光源颜色和噪声的图像拼接篡改检测方法根据篡改图像光源颜色噪声特性的不一致,通过对二者的混合特征提取,实现对拼接区域的正确检测与定位。

首先其将待检测的彩色图像利用简单线性迭代聚类SLIC(Simple Linear Iterative Clustering)算法分割成不重叠的超像素块;其次将每个图像块转换到YCbCr颜色空间提取光源颜色特征,同时将图像块表示为四元数并利用PCA提取噪声特征;然后将这2种特征组合作为最终特征向量,采用K-means聚类将特征向量分为2类,并将所含特征数较少的一类标记为篡改区域 ,实现彩色图像拼接篡改检测。

在这里插入图片描述

绝大部分拼接篡改图像中,篡改区域所占图像比例小于原始区域所占图像的比例,故可以利用K-means算法将混合特征SF划分为2个簇,统计2个簇中所含超像素块的数量,并将数量较少的簇标记为可疑区域。在超像素分割结果中存在块区域较小的问题,可能导致本应属于拼接区域的超像素未被标记,或者原始区域的超像素被误标记为篡改区域。针对此问题,为进一步提高检测精确率,将经过聚类的初始标记结果在超像素块级做后处理操作,包括孤立块过滤和空洞填充。

  • 孤立块过滤的主要步骤是:遍历所有超像素块k(k=1,2,…,K),如果与其邻接的超像素块都被标记为原始区域,则将k也标记为原始区域。
  • 空洞填充的主要步骤是:遍历所有超像素块k,如果超像素块k的所有邻接块都被标记为篡改区域,则将k也标记为篡改区域。初始分类结果如图a所示,经过孤立块过滤和空洞填充处理后的分类结果如图b所示。其中,灰色表示原始区域,白色表示篡改区域。
    在这里插入图片描述

2.2、基于马尔科夫特征的检测方法

马尔科夫特征反映了每个像素和其临近像素之间的关系,篡改图像中不自然的边界和模糊、插值等后处理手段会破坏自然图像邻接像素的分布特性。马尔科夫特征提取的步骤为:首先在待检测图像的横、纵方向以及主、副对角线方向上求取残差,然后对残差图进行截断以减小特征维度。最后计算邻接像素残差截断值的转移概率。该转移概率就是马尔科夫特征。

在这里插入图片描述

基于马尔科夫特征的篡改图像检测方法是一种常用的图像篡改检测方法,该方法基于马尔科夫随机场模型,通过对图像的像素进行分析,提取出图像的局部特征,然后利用这些特征来检测图像是否被篡改。

首先将图像分成若干个小块,然后对每个小块进行特征提取。这些特征包括灰度直方图、梯度直方图、颜色直方图等。接着,将这些特征组合成一个特征向量,用于表示该小块的特征。然后,利用马尔科夫随机场模型对这些特征进行建模描述图像中像素之间的相互关系,从而检测出图像中的篡改区域。但其极易受到图像噪声、压缩等因素的影响,容易产生误检测和漏检测,且对于复杂的篡改操作,如图像合成、图像融合等,检测效果较差。

三、基于深度学习的图像篡改检测方法

3.1、基于Fisher编码和SVM模型的方法

基于Fisher编码和SVM模型的篡改图像检测方法是一种常用的图像篡改检测方法,其提取真实图像和伪造图像数据集对应的颜色通道特征,分别进行Fisher编码,Fisher编码是一种基于局部二进制模式(LBP)的特征提取方法,它可以提取图像的纹理特征,模型利用编码后的颜色通道特征训练SVM模型。该方法的可以有效地检测出图像篡改,具有较高的准确率和鲁棒性。但是需要对图像进行特征提取和特征选择,需要较高的计算复杂度和时间成本。其步骤如下:

  • 对于真实数据集,选取5类图像,每类图像经Fisher编码后提取100张图像中的a、b颜色通道特征;
  • 对于假数据集,选取与真实图像相同的5类图像,每类图像经Fisher编码后提取100张图像中的a、b颜色通道特征;
  • 之后随机选择5个类别作为真实和虚假数据集的训练和测试数据集,从分类图像中提取a和b颜色通道特征;
  • 对提取的颜色通道特征进行Fisher编码。使用Fisher编码特征进行SVM建模;
  • 使用筛选后的特征训练SVM模型,将篡改图像和非篡改图像分别作为正负样本进行训练,使用训练好的SVM模型对待检测图像进行分类,判断其是否为篡改图像。
  • 使用测试数据集的图像来测试拟合的SVM模型的准确性。

3.2、 基于局部异常特征检测的Mantra-Net方法

ManTra-Net方法由两个子网络组成,即创建统一特征表示的图像处理-跟踪特征提取器和直接定位伪造区域的局部异常检测网络(LADN),从局部特征与其引用到伪造标签之间的差异中学习决策函数映射。从技术上来说,ManTraNet 由两个子网络组成,如下所示:

  1. 图像处理轨迹特征提取器:用于图像处理分类任务的特征提取网络,对不同的处理类型敏感,并将补丁中的图像处理编码为固定维度的特征向量。
  2. 局部异常检测网络:异常检测网络将局部特征与局部区域平均的主导特征进行比较,其激活取决于局部特征偏离参考特征的程度,而不是局部特征的绝对值。
    在这里插入图片描述

ManTraNet 是一种端到端图像伪造检测和定位解决方案,通过识别局部异常特征来检测伪造像素,因此不限于特定的伪造或篡改类型,具有简单、快速和高鲁棒性,但是其局限性在于不能准确检测多篡改对象图像。

3.2、基于HRNet的编码器——解码器结构的图像真实性鉴别模型

在本届世界人工智能大会(WAIC 2023)上,合合信息技术人员提出了一种基于HRNet的编码器-解码器结构的图像真实性鉴别模型。
在这里插入图片描述

这种网络结构在图像真实性鉴别中具有很大的优势,它能够更好地捕捉到图像中的细节信息。在基于HRNet的编码器-解码器结构,编码器将输入图像转换为高维特征向量,提取深度特征信息,信息包括但不限于噪声、光线、频谱等,解码器将这些特征向量转换为掩码分析图, 从而捕捉到细粒度的视觉差异,达到高精度鉴别效果。

四、图像篡改检测方法初体验

以下是一个使用PyTorch实现的图像篡改检测代码,基本思路是使用卷积神经网络(CNN)来学习图像的特征,然后将提取的特征输入到分类器中来判断图像是否被篡改。

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.transforms as transforms
import torchvision.datasets as datasets
from torch.utils.data import DataLoader

class ImageForgeryDetector(nn.Module):
    def __init__(self):
        super(ImageForgeryDetector, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1)
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
        self.conv3 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.fc1 = nn.Linear(128 * 8 * 8, 512)
        self.fc2 = nn.Linear(512, 2)
        self.relu = nn.ReLU()

    def forward(self, x):
        x = self.relu(self.conv1(x))
        x = self.pool(x)
        x = self.relu(self.conv2(x))
        x = self.pool(x)
        x = self.relu(self.conv3(x))
        x = self.pool(x)
        x = x.view(-1, 128 * 8 * 8)
        x = self.relu(self.fc1(x))
        x = self.fc2(x)
        return x
def train(model, train_loader, optimizer, criterion, device):
    model.train()
    running_loss = 0.0
    for i, (inputs, labels) in enumerate(train_loader):
        inputs, labels = inputs.to(device), labels.to(device)
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    return running_loss / len(train_loader)

def test(model, test_loader, criterion, device):
    model.eval()
    correct = 0
    total = 0
    running_loss = 0.0
    with torch.no_grad():
        for i, (inputs, labels) in enumerate(test_loader):
            inputs, labels = inputs.to(device), labels.to(device)
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            running_loss += loss.item()
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    accuracy = 100 * correct / total
    return running_loss / len(test_loader), accuracy
    
def main():# 设置超参数
    batch_size = 32
    learning_rate = 0.001
    num_epochs = 10# 加载数据集
    transform = transforms.Compose([
        transforms.Resize((32, 32)),
        transforms.ToTensor(),
        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
    ])
    train_dataset = datasets.ImageFolder(root='train', transform=transform)
    train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
    test_dataset = datasets.ImageFolder(root='test', transform=transform)
    test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

    # 初始化模型和优化器
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model = ImageForgeryDetector().to(device)
    optimizer = optim.Adam(model.parameters(), lr=learning_rate)
    criterion = nn.CrossEntropyLoss()

    # 训练模型for epoch in range(num_epochs):
    train_loss = train(model, train_loader, optimizer, criterion, device)
    test_loss, test_accuracy = test(model, test_loader, criterion, device)
    print('Epoch [{}/{}], Train Loss: {:.4f}, Test Loss: {:.4f}, Test Accuracy: {:.2f}%'.format(epoch+1, num_epochs, train_loss, test_loss, test_accuracy))

    # 保存模型
    torch.save(model.state_dict(), 'model.pth')

然而上述代码模型结构较为简单,在实际使用发现其准确率极低,容易出现误判和漏判的情况,且无法准确找到篡改位置,需要进一步提高算法的准确性,而且对于不同类型的篡改手段和篡改痕迹的鲁棒性还需要进一步提高。

在这里插入图片描述

合合信息提供了一款成熟的PS篡改检测系统,系统采用神经网络模型捕捉图像在篡改过程中留下的细微痕迹,基于百万级的数据学习图像被篡改后统计特征的变化,智能判断图片是否被篡改,除此之外,其还支持检测复制粘贴、拼接、擦除等多种篡改形式与混合篡改,支持重点检测材料中的姓名、出生日期、地址、照片等区域,并标记PS痕迹,支持以热力图形式展示图像区域篡改置信度,检测准确率远超传统检测方法和人眼判断。

今年更是将AI图像篡改检测“黑科技”优化升级,应用面拓展至“截图篡改检测”。可检测包括转账记录、交易记录、聊天记录等多种截图,无论是从原图中“抠下”关键要素后移动“粘贴”至另一处的“复制移动”图片篡改手段,还是“擦除”“重打印”等方式,图像篡改检测技术均可“慧眼”识假。

在这里插入图片描述
该技术的主要难点在于,与证照篡改检测相比,截图的背景没有纹路和底色,整个截图没有光照差异,难以通过拍照时产生的成像差异进行篡改痕迹判断,现有的视觉模型通常难以充分发掘原始图像和篡改图像的细粒度差异特征。

在这里插入图片描述

五、图像安全技术助力AI向善而行

除了上述提到的图像篡改检测技术,合合信息还研发了针对AI生成图片鉴别技术,帮助个人及机构识别判断AI图片是否为生成的,防止“虚拟人”欺诈。该技术基于空域与频域关系建模,能够在不用穷举图片的情况下,利用多维度特征来分辨真实图片和生成式图片的细微差异。

可以看到,模型设计了多个空间注意力头,这些注意力头可以帮助模型更好地理解图像中的细节和空间特征,紧接着,模型使用纹理增强模块放大浅层特征中的细微伪影,增强模型对真实人脸和伪造人脸的感知与判断准确度。

在这里插入图片描述

另一方面,合合信息进行了创新技术探索,研发了OCR对抗攻击技术来进行文档图片“加密”。该技术可在不影响肉眼观看与判断的情况下,通过场景文本或者文档内文本进行扰动的方式,实现对中文、英文、数字等关键信息的内容进行“攻击”的目标,防止第三方通过OCR系统读取并保存图像中所有的文字内容。这项技术不影响肉眼观看与判断,既可以满足生活、工作场景中的信息传输需要,也可以降低数据泄露的风险,以此达到保护信息的目的。这些技术通过解决生成式AI面临的伦理和道德问题,正助力生成式AI健康发展。

在这里插入图片描述

AI向善还是向恶而行,不法分子和守护者们每天都在未知的角落里上演无数次隐形的争斗。哪一方的技术实力更为强劲,是决定道高一尺还是魔高一丈的关键。图像安全的重要性与日俱增,标准规范的出台迫在眉睫。合合信息与中国信通院等权威机构一道,携手国内顶尖院校、研究机构及企业,共同探索AI技术在图像领域的可信化落地这一深远命题,助力科技向上的同时向善发展。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink是什么

先看下大数据的发展历程 随着公司业务的增加,各种场景都要大量的业务数据产生,对于这些不断产生的数据如何进行有效的处理? 由此诞生了大数据处理工具: 数据存在关系型数据库,比如mysql,如何分析数据&#…

css之混合模式、文字智能适配背景、文字镂空效果、差值模式、滤色模式、difference、screen、overlay、mix、blend、mode

文章目录 文字智能适配背景(差值模式)文字镂空效果(滤色模式)文字与背景叠加(叠加模式)css3混合模式mix-blend-mode功能表格混合模式的分类 文字智能适配背景(差值模式) <div class"main"><span>文字智能适配背景</span> </div>.main {widt…

【python】python手机评论抓取+情感分析(python代码+报告)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、51CTO技术博主 &#x…

1.8 运用C编写ShellCode代码

在笔者前几篇文章中&#xff0c;我们使用汇编语言并通过自定位的方法实现了一个简单的MessageBox弹窗功能&#xff0c;但由于汇编语言过于繁琐在编写效率上不仅要考验开发者的底层功底&#xff0c;还需要写出更多的指令集&#xff0c;这对于普通人来说是非常困难的&#xff0c;…

Linux —— 进程介绍

目录 一&#xff0c;进程介绍 二&#xff0c;进程使用 进程查看 通过系统调用获取进程标识符 通过系统调用创建进程 fork 一&#xff0c;进程介绍 进程是正在执行的程序或命令&#xff0c;每个进程都是一个运行的实体或程序的执行实例&#xff0c;有自己的地址空间&#x…

RNA病毒基因组的重头组装-内含tophat2报错的快速解决办法-CPIV3数据分析-2023-07-13

1、使用Trim Galore软件对两次数据进行质控&#xff0c;去掉20bp以下的reads vim新建RNA_seq_script_1对CPIV3测序数据进行质控分析 #!/bin/bash # 上面一行宣告这个script的语法使用bash语法&#xff0c;当程序被执行时&#xff0c;能够载入bash的相关环境配置文件。 # Prog…

Java 核心技术 卷I 第4章 对象与类

第4章 对象与类 4.1 面向对象程序设计概述 面向对象程序设计&#xff08;OOP&#xff09;是当今主流的程序设计范型。 Java是完全面向对象的&#xff0c;必须熟悉OOP才能够编写Java程序。 面向对象的程序是由对象组成的&#xff0c;每个对象包含对用户公开的特定功能部分和…

云计算相关概念

文章目录 一、云计算的三种部署模式&#xff1a;公有云、私有云、混合云--区别和特性二、华为云&#xff1a;简介、主要业务、特点和优势、不同场景和行业中的应用三、华为云-三剑客&#xff1a;IaaS、PaaS、SaaS 一、云计算的三种部署模式&#xff1a;公有云、私有云、混合云–…

驱动程序——字符设备驱动框架

文章目录 编写驱动程序的步骤代码hello_drv.chello_drv_test.c驱动模块代码编译&#xff08;编写Makefile&#xff0c;编译时间短&#xff09;驱动模块代码编译&#xff08;修改Makefile&#xff0c;编译时间长&#xff09;测试 应用调用open函数打开文件应用调用open函数打开设…

学习使用FAsyncTask执行异步任务

目标 要想在另一个线程中执行代码&#xff0c;使用FRunnable是一种方式。而使用FAsyncTask是另一种方式&#xff08;这也是UE的DDC相关代码中所使用的方式&#xff09;。 本篇尝试运行一个 FAsyncTask 的最简单的例子。 1. FAsyncTask 对于任务类的要求 FAsyncTask是一个类…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试【4】-O3 不支持 编译失败

gcc -O3 编译失败 结论&#xff1a;默认情况下SPEC CPU 2006 1.2 不支持 gcc -O3编译参数。

谈 Delphi 中 JSON 的简便操作(非常简单)

我曾有讲过Delphi操作JSON的方法&#xff0c;特别是这一篇【delphi】类和记录的 helpers&#xff08;助手&#xff09;。但是因为当时是主要介绍的是Delphi的Helper&#xff0c;大家可能并没注意到Delphi中JSON的简便操作方法。 早期Delphi并没有自己的JSON操作库&#xff0c;大…

51. N 皇后 (递归+回溯)

题目链接&#xff1a;力扣 解题思路&#xff1a;递归回溯&#xff0c;n个皇后不能在同一行&#xff0c;同一列&#xff0c;同一斜线上&#xff0c;需要将n个皇后放在n*n的棋盘上&#xff0c;所以棋盘的每一行一定有一个皇后&#xff0c;因此可以第一行开始&#xff0c;在当前行…

计算机毕设 大数据电商用户行为分析及可视化

文章目录 1. 数据集说明2. 数据处理2.1 数据导入2.2 数据清洗 3.数据分析可视化3.1 用户流量及购物情况3.2 用户行为转换率3.3 用户行为习惯3.4 基于 RFM 模型找出有价值的用户3.5 商品维度的分析 4 最后 1. 数据集说明 这是一份来自淘宝的用户行为数据&#xff0c;时间区间为…

大数据分析平台能为企业带来哪些好处_光点科技

大数据分析平台是近年来迅速发展的一项关键技术&#xff0c;它利用先进的数据处理和分析技术&#xff0c;帮助企业从海量数据中提取有价值的信息和见解。对于企业来说&#xff0c;拥有一个强大的大数据分析平台可以带来许多好处。 首先&#xff0c;大数据分析平台可以帮助企业更…

【ArcGIS微课1000例】0070:制作宾馆酒店分布热度热力图

本文讲解在ArcGIS中,基于长沙市酒店宾馆分布矢量点数据(POI数据)绘制酒店分布热力图。 相关阅读: 【GeoDa实用技巧100例】004:绘制长沙市宾馆热度图 【ArcGIS Pro微课1000例】0028:绘制酒店分布热力图(POI数据) 文章目录 一、加载宾馆分布数据二、绘制热度图一、加载宾…

[QT编程系列-11]:C++图形用户界面编程,QT框架快速入门培训 - 5- QT主要控件与自定义控件

目录 5. QT主要控件 5.1 预定义控件 5.2 自定义控件 5.3 用预定义容器橙子和提升自定义控件 5.3 后记 5. QT主要控件 5.1 预定义控件 在Qt中&#xff0c;有许多预定义的控件&#xff08;Widgets&#xff09;可用于创建用户界面。这些控件提供了各种常见的用户界面元素&am…

五笔没落之五笔学习热潮

1998年&#xff0c;一个风雨交加的下午&#xff0c;有一个年轻人骑着一辆破旧的自行车来到电脑培训班&#xff0c;学习五笔打字。那时电脑还很贵&#xff0c;他一个月的工资只有几百元&#xff0c;根本买不起电脑&#xff0c;所以选择参加培训班。那时会打字就像现在的硕士生那…

Java----Nacos服务注册

除了通过Eureka&#xff0c;还可以通过我们的Nacos进行注册服务&#xff0c;方法也很简单。 前提&#xff01;需要开启Nacos服务&#xff0c;在官网中下载对应的压缩包&#xff0c;然后启动&#xff0c;如下windows需要输入命令&#xff1a; startup.cmd -m standalone 然后会…

Qt+C++多线程thread-QThread-QTimer视频-控件动画-混合应用实例

程序示例精选 QtC多线程thread-QThread-QTimer混合应用实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC多线程thread-QThread-QTimer混合应用实例>>编写代码&#xff0c…