对抗攻击论文阅读—AAAI2022—CMUA-Watermark

news2024/12/26 1:34:07

文章目录

CMUA-Watermark: A Cross-Model Universal Adversarial Watermark for Combating Deepfakes

论文地址:https://arxiv.org/abs/2105.10872
github地址:https://github.com/VDIGPKU/CMUA-Watermark

背景

对抗 StarGAN、AGGAN、AttGAN和 HiSD等一系列人脸变换网络。

  • StarGAN 和 AGGAN 均在 CelebA 数据集上针对五个属性进行训练:黑发、金发、棕色头发、性别和年龄。
  • AttGAN 在 CelebA 数据集上进行了多达 14 个属性的训练,与上述两个网络相比更加复杂。
  • 面部修改网络 HiSD,该网络也是在 CelebA 数据集上进行训练的,并且可以为目标人添加一副眼镜。

1、什么是对抗攻击

一般来说,图片放入deepfake生成模型中,获得相应的视觉效果改变(换脸、属性编辑等)。
对抗攻击,训练一个对抗扰动加入图片中,在不影响原图的视觉效果的同时,图片+对抗扰动 放入deepfake生成模型中,破坏生成效果。

1.1 主动防御与被动防御

前面的deepfake检测论文讲解:https://blog.csdn.net/JustWantToLearn/article/details/138758033 是被动防御,图片被恶意更改后判断是否是AI合成的。
这一篇是主动防御,图片中加入扰动,防止被AI合成。如下图解释所示:

2、整体思路

在这里插入图片描述

以前论文的不足:先前对抗性水印具有较低的图像级别和模型级别可转移性,只能保护一个特定deepfake模型的一张面部图像
本文:生成跨模型通用对抗水印(CMUA-Watermark),保护大量面部图像免受多个深度伪造模型的攻击。
方法:提出了一个跨模型通用攻击管道,迭代地攻击多个deepfake模型。

  • 首先引入了生成跨模型对抗水印(CMUAWatermark)的新思想,以保护人类面部图像免受多次深度伪造的影响,只需要128张训练面部图像就可以保护无数的面部图像。
  • 提出了一种简单而有效的扰动融合策略来缓解冲突,并增强所提出的图像级和模型级可转移性CMUA-watermark。
  • 分析跨模型优化过程,并开发了一种自动步长调优算法,以找到适合不同模型的攻击步长。

3、方法

3.1 整体流程

在这里插入图片描述
给定不同的人脸图片 X 1 , . . . , X o X_1,...,X_o X1,...,Xo,不同的deepfake合成方法 G 1 , . . . , G m G_1,...,G_m G1,...,Gm,

  • 输入图像批次迭代地通过PGD攻击产生对抗扰动,重复执行小批量(为了更快的搜索)的跨模型通用攻击,评估生成的CMUA - Watermark,然后使用自动调整步长来选择新的攻击步长 a 1 , . . . a m a_1,...a_m a1,...am
  • 然后通过两级扰动融合机制组合成融合的CMUA - Watermark,作为下一个模型的初始扰动;使用发现的步长 a 1 , . . . a m a_1,...a_m a1,...am进行大批量(为了提高扰乱能力)的跨模型通用攻击,并生成最终的CMUA - Watermark。

3.2 如何破坏单个面部修改模型 G G G

在这里插入图片描述
将一批干净图像 I 1 , . . . , I n I_1,...,I_n I1,...,In输入到 Deepfake 模型 G G G中,并获得原始输出 G ( I 1 ) . . . G ( I n ) G(I_1)...G(I_n) G(I1)...G(In)。然后,我们输入 I 1 , . . . , I n I_1,...,I_n I1,...,In以及初始对抗性扰动 W W W G G G,得到初始扭曲输出 G ( I 1 + W ) . . . G ( I n + W ) G(I_1 + W )...G(I_n + W ) G(I1+W)...G(In+W)。随后,我们利用均方误差 (MSE) 来测量 G ( I 1 ) . . . G ( I n ) G(I_1)...G(I_n) G(I1)...G(In) G ( I 1 + W ) . . . G ( I n + W ) G(I_1 + W )...G(I_n + W ) G(I1+W)...G(In+W)之间的差异
m a x W ∑ i = 1 n M S E ( G ( I i ) , G ( I i + W ) ) , s . t . ∥ W ∥ ∞ ≤ ϵ \underset{W}{max}\sum_{i=1}^{n}MSE(G(I_i),G(I_i+W)),s.t.\left \| W \right \|\infty \le \epsilon Wmaxi=1nMSE(G(Ii),G(Ii+W)),s.t.Wϵ
其中 ϵ \epsilon ϵ是对抗性水印 W W W的上限大小。最后,我们使用 PGD 作为基本攻击方法,在每次攻击迭代时更新对抗性扰动
I a d v 0 = I + W I_{adv}^{0} = I+W Iadv0=I+W
I a d v r + 1 = c l i p I , ϵ { I a d v r + a ⋅ s i g n ( ▽ I L ( G ( I a d v r ) , G ( I ) ) ) } I_{adv}^{r+1} = clip_{I,\epsilon }\left \{ I_{adv}^{r}+a\cdot sign(\bigtriangledown _I L(G(I_{adv}^{r}),G(I))) \right \} Iadvr+1=clipI,ϵ{Iadvr+asign(IL(G(Iadvr),G(I)))}

其中 I I I是干净的面部图像, I a d v r I_{adv}^{r} Iadvr是第 r 次迭代中的对抗性面部图像, a a a 是基本攻击的步长, L L L 是损失函数(MSE), G G G是我们攻击的人脸修改网络,操作剪辑将 I a d v I_{adv} Iadv限制在 [ I − ϵ , I + ϵ ] [I − \epsilon, I +\epsilon ] [Iϵ,I+ϵ]范围内。

通过这个过程,可以获得单图像对抗水印(SIA-Watermarks),保护一张面部图像免受特定深度伪造模型的影响。然而,精心制作的SIA-Watermarks在跨模型设置下是不够的;它们缺乏图像和模型级别的可移植性

论文中代码

代码位置:attacks.py

class LinfPGDAttack(object):
    def __init__(self, model=None, device=None, epsilon=0.05, k=10, a=0.01, star_factor=0.3, attention_factor=0.3, att_factor=2, HiSD_factor=1, feat=None, args=None):
    #epsilon: 攻击强度,即扰动的最大幅度。k: 攻击迭代次数。a: 每次迭代的步长。
        """
        FGSM, I-FGSM and PGD attacks
        epsilon: magnitude of attack
        k: iterations
        a: step size
        """
        self.model = model
        self.epsilon = epsilon
        self.k = k
        self.a = a
        self.loss_fn = nn.MSELoss().to(device)
        self.device = device

        # Feature-level attack? Which layer?
        self.feat = feat

        # PGD or I-FGSM?
        self.rand = True

        # Universal perturbation
        self.up = None
        self.att_up = None
        self.attention_up = None
        self.star_up = None
        self.momentum = args.momentum
        
        #factors to control models' weights
        self.star_factor = star_factor
        self.attention_factor = attention_factor
        self.att_factor = att_factor
        self.HiSD_factor = HiSD_factor
    def perturb(self, X_nat, y, c_trg):
        """
        Vanilla Attack.
        """
        if self.rand:
        #如果 self.rand 为真,则在原始输入上添加一个在 [-epsilon, epsilon] 范围内的随机扰动。
            X = X_nat.clone().detach_() + torch.tensor(np.random.uniform(-self.epsilon, self.epsilon, X_nat.shape).astype('float32')).to(self.device)
        else:
            X = X_nat.clone().detach_()
        for i in range(self.k):
            #每次迭代,将 X 标记为需要梯度
            X.requires_grad = True
            #通过模型计算输出 output 和特征 feats
            output, feats = self.model(X, c_trg)
            if self.feat:
                output = feats[self.feat]
            #将模型的梯度清零
            self.model.zero_grad()
            # Minus in the loss means "towards" and plus means "away from"
            #计算损失,并对损失进行反向传播以获得梯度
            loss = self.loss_fn(output, y)
            loss.backward()
            #根据梯度方向更新输入 X
            grad = X.grad
            X_adv = X + self.a * grad.sign()
            #使用 epsilon 对扰动进行裁剪,并确保输入在 [-1, 1] 范围内
            eta = torch.clamp(X_adv - X_nat, min=-self.epsilon, max=self.epsilon)
            X = torch.clamp(X_nat + eta, min=-1, max=1).detach_()

        self.model.zero_grad()

        return X, X - X_nat

3.3 对抗扰动融合

不同图像和模型生成的对抗水印之间的冲突会降低CMUA-Watermark的可移植性。
为了减弱这种冲突,提出了攻击过程中的两级扰动融合策略。
1、当我们攻击一个特定的深度伪造模型时,我们进行一个图像级别的融合来平均来自一组面部图像的符号梯度
G a v g = ∑ j b s s i g n ( ▽ I j L ( G ( I j a d v , G ( I j ) ) ) b s G_{avg} = \frac{ {\textstyle \sum_{j}^{bs}sign(\bigtriangledown _{I_j}L(G(I_{j}^{adv},G(I_j)))} }{bs} Gavg=bsjbssign(IjL(G(Ijadv,G(Ij)))
其中 b s bs bs 是面部图像的批次大小, I j a d v I_{j}^{adv} Ijadv是批次中的第 j 个对抗图像。此操作将使 G a v g G_{avg} Gavg更加关注人脸的共同属性,而不是特定人脸的属性。然后,我们使用 PGD 通过 G a v g G_{avg} Gavg生成对抗性扰动 P a v g P_avg Pavg,如式3.2所示。

2、从一个模型获得 P a v g P_{avg} Pavg后,我们进行模型级融合,将特定模型生成的 P a v g P_{avg} Pavg迭代地结合到训练中的 W C M U A W_{CMUA} WCMUA中,初始 W C M U A W_{CMUA} WCMUA就是根据第一个deepfake模型计算出的 P a v g P_{avg} Pavg
W C M U A 0 = P a v g 0 W_{CMUA}^{0} = P_{avg}^{0} WCMUA0=Pavg0

W C M U A t + 1 = α ⋅ W C M U A t + ( 1 − α ) ⋅ P a v g t W_{CMUA}^{t+1} = \alpha \cdot W_{CMUA}^{t}+(1-\alpha )\cdot P_{avg}^{t} WCMUAt+1=αWCMUAt+(1α)Pavgt

其中 α \alpha α是衰减因子, P a v g t P_{avg}^{t} Pavgt是第t次攻击deepfake模型生成的平均扰动, W C M U A t W_{CMUA}^{t} WCMUAt是第t次攻击deepfake模型后的训练CMUA-Watermark。

3.4 基于TPE的自动步长调整

除了上面提到的两级融合之外,我们发现不同模型的攻击步长对于生成的 CMUA-Watermark 的可转移性也很重要。因此,我们利用启发式方法来自动找到合适的攻击步长。
根据公式3.2可知,整体优化方向受 a 1 , . . . a m a_1,...a_m a1,...am影响较大,跨模型选择合适的 a 1 , . . . a m a_1,...a_m a1,...am以找到理想的整体方向是跨模型攻击的关键问题。

这里引入TPE(Bergstra et al. 2011)算法来解决这个问题,自动搜索合适的 a 1 , . . . a m a_1,...a_m a1,...am来平衡多个模型计算出的不同方向。 TPE是一种基于序列模型优化(SMBO)的超参数优化方法,它根据历史测量值顺序构建模型来近似超参数的性能,然后基于该模型选择新的超参数进行测试。在我们的任务中,我们将步长 a 1 , . . . a m a_1,...a_m a1,...am视为输入超参数 x,将攻击的成功率视为 TPE 的相关质量得分 y。 TPE使用 P ( x ∣ y ) P(x|y) P(xy) P ( y ) P(y) P(y)来建模 P ( y ∣ x ) P(y|x) P(yx), P ( x ∣ y ) P(x|y) P(xy)由下式给出:
p ( x ∣ y ) = { l ( x ) i f y < y ∗ g ( x ) , i f y ≥ y ∗ p(x|y) = \left\{\begin{matrix} l(x) & if\quad y< y^*\\ g(x), & if\quad y \ge y^* \end{matrix}\right. p(xy)={l(x)g(x),ify<yifyy
其中 y ∗ y^* y由历史上最好的观测值确定, l ( x ) l(x) l(x)是由观测值 x ( i ) {x^{(i)}} x(i)形成的密度,使得相应的损失低于 y ∗ y^* y g ( x ) g(x) g(x) 是由观测值形成的密度剩余的观察结果。对 P ( y ∣ x ) P (y|x) P(yx) 进行建模后,我们通过优化每次搜索迭代中的预期改进 (EI) 标准来不断寻找更好的步长。具体的细节,可以查看TPE的论文。

4、攻击效果

4.1 对比现有方法

我们的方法在所有模型上都取得了优异的性能。
所提出的方法比现有方法具有更好的图像级和模型级可移植性。
在这里插入图片描述

4.2 ϵ \epsilon ϵ设置的影响

在这里插入图片描述
当参数 ϵ \epsilon ϵ变大时,生成的假人脸图像更加扭曲,意味着防护性能变得更好。然而,当变得太大时,产生的对抗性水印更有可能被看到。我们根据经验发现,设置在 0.05 左右可以在保护性能和生成的对抗性水印的不可察觉性之间取得良好的权衡。

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

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

相关文章

【Linux文件篇】软硬链接与动静态库链接的实用指南

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 目录 文件的软硬链接 动静态库 回归动静态库 创建动静态库 生成静态库 生成动态库 库搜索路径 文件的软硬链接 上篇文章中我们讲述了文件系统从硬件到软件&#xff0c;理解了如何创建一个文件的具体流程&#xff…

AI数字人的开源解决方案

目前&#xff0c;国内外已经涌现出一些优秀的数字人开源解决方案&#xff0c;这些解决方案为开发者提供了构建数字人应用的工具和基础设施。以下是一些比较知名的数字人开源解决方案。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1…

java Springboot网上音乐商城(源码+sql+论文)

1.1 研究目的和意义 随着市场经济发展&#xff0c;尤其是我国加入WTO &#xff0c;融入经济全球化潮流&#xff0c;已进入国内外市场经济发展新时期&#xff0c;音乐与市场联系越来越紧密&#xff0c;我国音乐和网上业务也进入新历史发展阶段。为了更好地服务于市场&#xff0…

5.7 Python内置函数

文章目录 1. 内置模块Aabs()all()any()ascii() Bbin()bool()bytearra()bytes() Ccallable()chr()classmethod()compile()complex() Ddelattr()dict()dir()divmod() Eenumerate()eval()exec()execfile() Ffile()filter()float()format()frozenset() Ggetattr()globals() Hhasatt…

【分布式技术专题】「OceanBase深度解析」 探索OceanBase产品矩阵与核心设计

探索OceanBase产品矩阵与核心设计 OceanBase的六大特性高扩展高可用多租户&#xff08;资源隔离&#xff09;OceanBase架构和功能OceanBase广泛的数据源支持 OceanBase的六大特性 OceanBase以其卓越的产品平台整合方案&#xff0c;充分展现了六大核心特性的卓越与全面。这一方…

进击算法工程师深度学习课程

"进击算法工程师深度学习课程"旨在培养学员在深度学习领域的专业技能和实战经验。课程涵盖深度学习基础理论、神经网络架构、模型优化方法等内容&#xff0c;通过项目实践和算法实现&#xff0c;帮助学员掌握深度学习算法原理和应用&#xff0c;提升在算法工程师领域…

SAP Web IDE 安装使用

For training SAP Web IDE 是基于 Eclipse 内核的在线开发 IDE&#xff0c;可以使用在线的试用版本&#xff0c;但服务器在德国&#xff0c;访问的网速特别慢。也可以使用 Personal Edition&#xff0c;在本机启动和编写代码。 打开官网下载WEBIDE工具包&#xff0c;包含 Tri…

SAP ABAP 之面向对象OO

文章目录 前言一、类的理解二、如何创建ABAP类 a.类的定义与构成 b.类的访问区域 c.特殊方法 d.类的继承 三、类中参数的使用 a.IMPORTING / EXPORTING b.CHANGING c.RETURNING d.EX…

省市县选择三级联动(使用高德API实现)

省市县选择如果自己实现是比较麻烦的&#xff0c;最近发现可以使用高德实现省市县联动选择&#xff0c;实现后来记录一下供大家参考。 文章目录 最终效果&#xff1a;一、准备工作二、完整页面代码 最终效果&#xff1a; 实现单次点击获取省市县名称&#xff0c;选择完成后返回…

复旦微FMQL20SM全国产ARM+FPGA核心板,替代xilinx ZYNQ7020系列

FMQL20SM核心板一款全国产工业核心板。基于复旦微FMQL20S400M四核ARM Cortex-A7&#xff08;PS端&#xff09; FPGA可编程逻辑资源&#xff08;PL端&#xff09;异构多核SoC处理器设计的全国产工业核心板&#xff0c;PS端主频高达1GHz。 核心板简介 FMQL20SM核心板是一款全国…

键盘、鼠标、轴体选购指南

起因 买了块27寸的屏幕msi&#xff0c;一旦入坑爬不起来了。 这不是要配个键盘么。 鼠标的左键也不够灵敏&#xff0c;不知道是电池不足还是使用时间太久&#xff0c;也萌生换的念头。有一个重要原因也是跟电脑和鼠标垫整体不搭。 搜集信息 原本的一个键盘是ikbc国产牌子&am…

【C++】STL中stack和queue(适配器版)的模拟实现

前言&#xff1a;在此之前我们讲到了stack和queue还有deque的常见的使用方法&#xff0c;并且也在数据结构的时候用C语言去实现过栈和队列&#xff0c;今天我们将进一步的用C去模拟实现stack和queue &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; …

Apache Doris 基础 -- 部分数据类型及操作

您还可以使用SHOW DATA TYPES;查看Doris支持的所有数据类型。 部分类型如下&#xff1a; Type nameNumber of bytesDescriptionSTRING/可变长度字符串&#xff0c;默认支持1048576字节(1Mb)&#xff0c;最大精度限制为2147483643字节(2gb)。大小可以通过BE配置string_type_le…

2. Revit API UI 之 IExternalCommand 和 IExternalApplication

2. Revit API UI 之 IExternalCommand 和 IExternalApplication 上一篇我们大致看了下 RevitAPI 的一级命名空间划分&#xff0c;再简单讲了一下Attributes命名空间下的3个类&#xff0c;并从一个代码样例&#xff0c;提到了Attributes和IExternalCommand &#xff0c;前者是指…

Cisco Packet Tracer实验(二)

二、用交换机构建 LAN 构建物件如下&#xff1a; 四个PC 两个交换机 一个Multi Switch多功能拓展控制器 连线必须是这个直线&#xff01;&#xff01;&#xff01;不是虚线 最后实现效果如下&#xff1a; 全部的线是绿的&#xff0c;就表示是通的。 尝试一下&#xff0c;看PC…

JVM性能优化案例:减少对象频繁创建

JVM性能优化案例&#xff1a;减少对象频繁创建 案例背景 某金融应用系统在处理大量并发交易时&#xff0c;响应时间过长&#xff0c;并且有时出现内存溢出&#xff08;OutOfMemoryError&#xff09;的问题。经过分析&#xff0c;发现问题主要出在频繁的对象创建和较差的内存管…

热门开源项目OpenHarmony

目录 1.概述 1.1.开源项目的意义 1.2.开源项目对软件行业的促进作用 1.3.小结 2.OpenHarmony 2.1.技术架构 2.2.分布式软总线 2.2.1.架构 2.2.2.代码介绍 2.2.2.1.代码目录 2.2.2.2.说明 2.2.2.3.发现组网和传输 2.2.2.3.1.发现 2.2.2.3.2.组网 2.2.2.3.3.传输…

力扣148. 排序链表

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示例 3&…

数据分析常用6种分析思路(下)

作为一名数据分析师&#xff0c;你又没有发现&#xff0c;自己经常碰到一些棘手的问题就没有思路&#xff0c;甚至怀疑自己究竟有没有好好学过分析&#xff1f; 在上篇文章里&#xff0c;我们讲到了数据分析中的流程、分类、对比三大块&#xff0c;今天&#xff0c;我们继续讲…

PHP地方门户分类信息网站源码讯客分类信息系统源码(含手机版)

源码介绍 1.上传程序到网站根目录,访问http://域名/install/index.php 进行安装,不要直接打开网址&#xff0c;先直接安装; 2.安装完成后 后台恢复数据即可 默认帐号密码都是admin http://域名/admin/ 3.不要删除任何文件&#xff0c;因为删除文件或者修改代码可能造成错误 运…