【阅读笔记】基于扩散模型的人脸隐私保护DiffAM(含代码实现)

【阅读笔记】基于扩散模型的人脸隐私保护:DiffAM

原始论文地址

原始论文github代码

0. 摘要

信息技术的快速发展使得社交媒体上的人脸信息隐私会受到一些未经授权的人脸识别系统 (Facial Recognition, FR) 的威胁。目前一些主流的方法通过生成对抗性的案例来误导恶意的FR系统,但这些方法生成的图像具有视觉质量差以及迁移性差的特点。在本文中提出了一种新的面部隐私的保护的方法,成为DiffAM,利用扩散模型(Diffusion Model)的生成能力来生成高质量的面部保护图像,这些图像具有从参考图像中转移而来的化妆。

1.介绍

目前许多方法利用对抗性攻击(Adversarial Attacks)来进行人脸隐私的保护,这种方式往往是基于噪声或是基于补丁的,旨在原始的人脸图像上添加噪声以误导FR系统,但缺点是图像的质量差。

为了获取更加自然图像,提出了将噪声替换为化妆,生成带有妆容的被保护图像。然而这种方法也存在以下问题:1.妆容中容易产生伪影(artifacts)导致图像质量差;2.生成的妆容与期望的妆容不一致;3.黑盒模型的可迁移性差。如下图所示。
基于文本的对抗性化妆

基于文本引导的对抗性化妆生成的被保护的图像在细节部分与期望的妆容不一致。

为了解决这些问题,作者提出了一个全新的基于扩散模型的对抗性化妆转移模型DiffAM。模型整体由两个模块组成:文本引导卸妆模块(text-guided makeup removal module)图像引导妆容转移模块(image-guided makeup transfer module)

2.相关工作

2.1.对抗性攻击

对抗性攻击旨在通过在原始的人脸图像中加入微小的扰动,从而欺骗FR系统使其产生错误的输出结果。根据对FR模型的了解,攻击可以分为白盒攻击和黑盒攻击。

在实际应用中往往难以得知那些未授权的FR模型的具体信息,因此绝大多数的攻击都是以黑盒攻击为主(如基于噪声的对抗性扰动)。难点在于在保证图像质量的同时保证攻击的有效性,同时具有良好的可迁移性。

2.2.妆容转移

妆容转移(Makeup Transfer) 旨在将妆容的风格从参考图像转移到原始图像中,同时保持原始人脸图像的身份不变。

2.3.扩散模型与风格迁移

扩散模型(Diffusion Model) 是一种概率生成模型,在生成高质量的模型方面具有强大的性能。有关Diffusion Model的原理解析等,可以参考其他博主的文章。风格迁移(Style Transfer) 是一种图像到图像的翻译任务,能够将参考图像的风格原图像的内容 相结合,生成新的图像,例如用一张油画的风格生成城市街道的风景照。

3.提出的方法与原理

3.1.问题描述

人脸隐私保护可以分为冒充攻击(impersonation)躲避攻击(dodging)。更详细的解释可以参考我的另一篇文章 https://blog.csdn.net/qq_52374095/article/details/144061278?spm=1001.2014.3001.5501

简单来看,冒充攻击 旨在欺骗FR系统将A的身份识别为另一个冒充身份B;躲避攻击 旨在使得FR系统识别不出A的具体身份。

为了更好的保护人脸图像,作者此处重点研究冒充攻击。对于被保护的人脸图像 x ′ x' x冒充身份 x ∗ x^* x, 冒充攻击可以被简化为一个优化问题:
min ⁡ x ′ L a d v = D ( m ( x ′ ) , m ( x ∗ ) ) \min_{x'}L_{adv} = D(m(x'),m(x^*)) xminLadv=D(m(x),m(x))
其中 m m m代表FR模型的特征提取算法, D ( ⋅ ) D(\cdot) D()代表距离度量。

需要注意的是,这里的 x ′ x' x是化妆后的人脸图像,由具有化妆的参考图像 y y y和原始的干净人脸 x x x得到。假设生成模型是 G ( ⋅ ) G(\cdot) G() x ′ x' x可以表示为:
x ′ = G ( x , y ) x' = G(x,y) x=G(x,y)

3.2.DiffAM

为了生成外观自然且可迁移的对抗性化妆图像,DiffAM模型包括两个模块:文本引导卸妆模块(text-guided makeup removal module)图像引导妆容转移模块(image-guided makeup transfer module)

3.2.1.文本引导卸妆模块

对于一张给定的具有化妆风格的参考图像 y y y,首先用预训练的扩散模型 ϵ θ 1 \epsilon_{\theta_1} ϵθ1通过扩散过程将得到潜在的噪声图像 y t 0 y_{t_0} yt0。在反向扩散过程中,对 ϵ θ 1 \epsilon_{\theta_1} ϵθ1进行去妆微调,得到无妆图像 y ^ \hat{y} y^。这一过程由CLIP损失指导得到:

L M R = 1 − Δ I y ⋅ Δ T ∣ ∣ Δ I y ∣ ∣ ⋅ ∣ ∣ Δ T ∣ ∣ Δ I y = E I ( y ^ ( θ ^ 1 ) ) − E I ( y ) Δ T = E T ( t c l e a n ) − E T ( t m a k e u p ) L_{MR}=1-\frac{\Delta I_y \cdot \Delta T}{||\Delta I_y|| \cdot ||\Delta T||} \\ \Delta I_y = E_I(\hat{y}(\hat{\theta}_1)) - E_I(y) \\ \Delta T = E_T(t_{clean}) - E_T({t_{makeup}}) LMR=1∣∣ΔIy∣∣∣∣ΔT∣∣ΔIyΔTΔIy=EI(y^(θ^1))EI(y)ΔT=ET(tclean)ET(tmakeup)

  • E I E_I EI E T E_T ET分别是CLIP模型中的图像和文本编码器,将图像和语义描述文本编码为同一纬度的向量便于后续计算;
  • y y y是具有化妆风格的参考图像, y ^ ( θ ^ 1 ) \hat{y}(\hat{\theta}_1) y^(θ^1)是从噪声图像 y t 0 y_{t_0} yt0开始进行逆扩散过程得到的无化妆图像, θ ^ 1 \hat{\theta}_1 θ^1是需要优化的参数(这里我的理解是这是一个参数的集合向量,而非单个参数)。
  • t c l e a n t_{clean} tclean t m a k e u p t_{makeup} tmakeup是非化妆图像和化妆图像的文本描述,可以简单的设置为 “face without makeup”“face with makeup”
    在这里插入图片描述

为了保持生成图像的质量并保持自然,引入身份损失(face identity loss) L i d L_{id} Lid感知损失(perceptual loss) L L P I P S L_{LPIPS} LLPIPS ,乘以权重得到总损失:

L t o t a l = λ M R L M R + λ i d L i d + λ L P I P S L L P I P S L_{total}=\lambda_{MR}L_{MR} + \lambda_{id}L_{id} + \lambda_{LPIPS}L_{LPIPS} Ltotal=λMRLMR+λidLid+λLPIPSLLPIPS

总体来看,这一模块的功能是对带化妆的参考图像 y y y进行卸妆,得到干净的参考图像 y ^ \hat{y} y^

3.2.2.图像引导妆容转移模块

我们希望根据 y y y的妆容风格对原始人脸图像 x x x进行化妆,得到 x ′ x' x,并误导FR模型将 x ′ x' x识别为另一身份 x ∗ x^* x

具体来看,首先用另一个预训练的扩散模型 ϵ θ 2 \epsilon_{\theta_2} ϵθ2通过扩散过程得到潜在噪声图像 x t 0 x_{t_0} xt0,再通过反向扩散得到化妆后的图像 x ′ x' x。为了保证化妆后的图像 x ′ x' x具有参考图像 y y y的妆容风格,在反向扩散过程中需要对 ϵ θ 2 \epsilon_{\theta_2} ϵθ2进行指导和微调。

基于clip的化妆损失
在卸妆阶段,从参考图像的化妆域到非化妆域的指导为 Δ I y = E I ( y ^ ) − E I ( y ) \Delta I_y = E_I(\hat{y}) - E_I(y) ΔIy=EI(y^)EI(y),将这个过程反向即可得到从非化妆域到化妆域的指导,即 Δ I r e f = E I ( y ) − E I ( y ^ ) \Delta I_{ref} = E_I(y) - E_I(\hat{y}) ΔIref=EI(y)EI(y^)。对模型进行微调并得到带参考化妆风格图像的损失如下:

L M T d i r = 1 − Δ I x ⋅ Δ I r e f ∣ ∣ Δ I x ∣ ∣ ⋅ ∣ ∣ Δ I r e f ∣ ∣ Δ I x = E I ( x ^ ( θ ^ 2 ) ) − E I ( x ) Δ I r e f = E I ( y ) − E I ( y ^ ) L_{MT}^{dir}=1-\frac{\Delta I_x \cdot \Delta I_{ref}}{||\Delta I_x|| \cdot ||\Delta I_{ref}||} \\ \Delta I_x = E_I(\hat{x}(\hat{\theta}_2)) - E_I(x) \\ \Delta I_{ref} = E_I(y) - E_I(\hat{y}) LMTdir=1∣∣ΔIx∣∣∣∣ΔIref∣∣ΔIxΔIrefΔIx=EI(x^(θ^2))EI(x)ΔIref=EI(y)EI(y^)

  • E I E_{I} EI是CLIP模型中的图像编码器, x x x是原始人脸图像, x ^ ( θ ^ 2 ) \hat{x}(\hat{\theta}_2) x^(θ^2)是微调后的扩散模型 ϵ θ 2 \epsilon_{\theta_2} ϵθ2生成的带参考图像的化妆风格的化妆图像。

此外,还引入像素级化妆损失(pixel-level makeup loss) 对化妆的强度、颜色等进行约束。损失定义为:

L M T p x = ∣ ∣ x ′ − H M ( x ′ , y ) ∣ ∣ L_{MT}^{px} = ||x' - HM(x',y)|| LMTpx=∣∣xHM(x,y)∣∣

  • x ′ x' x是扩散模型得到的带参考风格的化妆图像, y y y是具有化妆的参考图像, H M ( ⋅ ) HM(\cdot) HM()代表直方图匹配(Histogram Matching)。

将这两个损失结合起来,得到指导被保护图像 x ′ x' x生成的总损失:

L M T = λ d i r L M T d i r + λ p x L M T p x L_{MT} = \lambda_{dir} L_{MT}^{dir} + \lambda_{px} L_{MT}^{px} LMT=λdirLMTdir+λpxLMTpx

综上,这些操作最终得到的是具有参考化妆风格的被保护图像,如下图所示。
在这里插入图片描述
综合攻击(Ensemble Attack)
在多个FR模型上进行微调,在对抗方向上进行引导,找到一个通用的对抗化妆域的方向。选择 k k k个识别精度较高的预训练的FR模型,综合攻击的损失表达为:

L a d v = 1 K ∑ k = 1 K [ 1 − c o s ( m k ( x ′ ) , m k ( x ∗ ) ) ] L_{adv} = \frac{1}{K} \sum^{K}_{k=1} [1 - cos(m_k(x'), m_k(x^*))] Ladv=K1k=1K[1cos(mk(x),mk(x))]

  • m k m_k mk代表第 k k k个FR模型的特征提取, x ′ x' x代表被保护的图像(具有化妆风格), x ∗ x^* x代表冒充身份(误导FR识别为 x ∗ x^* x)。
  • 使用余弦相似度(Cosine Similarity)进行距离的度量。

通过这种方式可以提高模型可迁移性,提高了黑盒模型下的攻击成功率。

化妆无关信息的保存
为了使得生成的被保护图像 x ′ x' x保持自然,在妆容转移过程中应尽量减少与妆容无关信息的转移。可以减少DDIM反演和采样的时间步长,以保留大多数与化妆无关的信息。

L v i s = L L P I P S ( x ′ , x ) + λ l 1 ∣ ∣ x ′ − x ∣ ∣ L_{vis} = L_{LPIPS}(x',x)+\lambda_{l_1}||x'-x|| Lvis=LLPIPS(x,x)+λl1∣∣xx∣∣

损失 L v i s L_{vis} Lvis能够指导生成的 x ′ x' x保持自然,和原始图像尽可能接近。

综合以上所有的损失函数,最终得到图像引导妆容转移模块的总体损失为:

L = λ M T L M T + λ a d v L a d v + λ v i s L v i s L = \lambda_{MT}L_{MT} + \lambda_{adv}L_{adv}+\lambda_{vis}L_{vis} L=λMTLMT+λadvLadv+λvisLvis

总体的模型框架如下图所示。
在这里插入图片描述

简单来看,就是先对具有化妆风格的参考图像 y y y进行卸妆,得到干净的图像 y ^ \hat{y} y^。再将化妆风格转移到需要保护的原始人脸 x x x上得到具有化妆保护的图像 x ′ x' x,使得FR模型将 x ′ x' x错误的识别为另一冒充身份 x ∗ x^* x,从而在保持自然的情况下达到人脸隐私保护的目标。

4.实验

4.1.实验设置

数据集: 对于卸妆,从MT数据集随机抽取200张化妆的人脸图像进行卸妆处理;对于化妆转移,从CelebA-HQ数据集随机抽取200张人脸图像。测试集选择CelebA-HQ和LADN。

目标FR模型: 选择4种主流的FR模型,IR152, IRSE50,
FaceNet和MobileFace. 选取了其中的三个模型用于综合攻击训练模型,剩下的一个作为黑盒模型进行测试。

4.2.实验结果


表1对比了基于噪声的模型和基于化妆的模型黑盒攻击攻击成功率。与现有的最先进的技术相比,DiffAM的平均攻击成功率提高了12.98%。

表中评价指标为攻击成功率(Attack Success Rate, ASR),即
A S R = 成功攻击次数 总攻击次数 ASR = \frac{成功攻击次数}{总攻击次数} ASR=总攻击次数成功攻击次数
当黑盒FR模型将化妆后的保护图像 x ′ x' x错误的识别为了冒充身份 x ∗ x^* x时,视为进行了一次成功的攻击。在计算ASR时,将每个FR模型的错误接受率(FAR)设置为0.01。

0
表2比较了生成的保护图像的质量。DiffAM生成的对抗性化妆更自然,对像素级图像的影响更小。

在这里插入图片描述

图四(上图)是CelebA-HQ数据集上通过不同面部隐私保护方法生成的受保护面部图像的可视化。对于文本引导的化妆保护方式,使用文本提示(例如红色口红与红色眼影)来生成。

评价分数成为置信度分数,分数代表商业api判断被保护的图像和冒充图像的相似度,分数越高越相似。绿色和蓝色分别代表Face++和Aliyun的置信度分数。

从结果可以看出,DiffAM生成的受保护的图像保护成功率更高,且面部图像看起来更自然,没有明显的噪声模式。

5.代码实现

5.1.代码下载

原始论文GitHub代码地址
具体步骤可以参考文档中的README

首先将代码下载到本地,新建Anaconda环境

conda create -n diffam python=3.8
conda activate diffam

这里我个人使用的是pycharm编译器,在pycharm终端中激活环境,安装需要的包

pip install -r requirements.txt
pip install git+https://github.com/openai/CLIP.git

下载预训练的模型:预训练模型下载

下载并解压FR模型,MT数据集与目标图像:assets.zip下载

下载并解压 CelebAMask-HQ数据集:CelebAMask-HQ数据集下载

最终文件夹的应该像这样的
DiffAM
  └- assets
     └- datasets
     	└- CelebAMask-HQ
     	└- MT-dataset
     	└- pairs
     	└- target
     	└- test
     └- models
  └- pretrained
       └- celeba_hq.ckpt
       └- ...- ...

5.2.快速实现

微调对抗性化妆转移的预训练扩散模型

python main.py --makeup_transfer --config celeba.yml --exp ./runs/test --do_train 1 --do_test 1 --n_train_img 200 --n_test_img 100 --n_iter 4 --t_0 60 --n_inv_step 20 --n_train_step 6 --n_test_step 6 --lr_clip_finetune 8e-6 --model_path pretrained/celeba_hq.ckpt --target_img 1 --target_model 2 --ref_img 'XMY-060'
  • target_image: 选择需要被攻击的图像
  • target_model: 对进行攻击的黑盒模型,作者此处提供了IRSE50, IR152, Mobileface, Facenet,此处设置target model为2,即使用IR152作为黑盒FR,其他三种模型用于训练。
  • ref_img: 选择带有化妆的图像进行化妆风格的迁移,此处选择的图像是’XMY-060’,图像化妆风格见下图。
    化妆风格为紫色眼影和口红
    完成后开始微调模型。模型训练结果将会保存在checkpoint文件夹中。

5.3.对单张图像进行化妆风格转移

这里以make up transfer为例,实现对原始图像进行化妆。实现代码如下:

python main.py --edit_one_image_MT --config celeba.yml --exp ./runs/test --n_iter 1 --t_0 60 --n_inv_step 20 --n_train_step 6 --n_test_step 6 --img_path {IMG_PATH} --model_path {MODEL_PATH}

需要将模型路径改为预训练的模型路径(不过似乎如果没有输入正确的模型路径,会自动替换为预训练的模型),将图像地址改为需要进行化妆的原始图像。

在makeup_transfer.py文件中出现报错,需要对部分代码进行修改。将以下代码:

 img = img.resize((self.config.data.image_size,
                          self.config.data.image_size), Image.ANTIALIAS)                   

替换为:

img = img.resize(
            (self.config.data.image_size, self.config.data.image_size),
            Image.Resampling.LANCZOS)   # 替代 Image.ANTIALIAS

执行代码,原始人脸图像如下:
在这里插入图片描述
生成的带有化妆风格的被保护的图像如下:
在这里插入图片描述

使用预训练的IR152模型对这两张图像进行特征提取,并计算余弦相似度,最终结果得到两张图像的相似度为0.44.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值