人脸对抗样本生成策略
- 攻击前的数据预处理
- 攻击模型选择
- 攻击方法选择
1. face recognize 的流程 识别过程
一般流程是,先检测 后识别 。检测部分现在商用的moel 加入了活体检测。这个检测主要是针对于五官部分的。
正常传统的 人脸识别过程 face detection ,face alignment(没有理解这部分的作用),face recognize(进行特征提取),后面接的就是数据库查询,对比,相似度最高的那个即为那个人。
1. face detection
人脸检测,常用的是2015年的mtcnn 工业界主要使用的是这个。
获取的是 人脸面部的五个点坐标,两个眼睛、鼻子、左右嘴唇,五个点 。然后进行透视变化 , 人脸检测中一般是将 人脸由侧脸或者其他姿态的变为正脸 进行train之前就已经变化完 ,
lfw 数据集的size为250*250 大小,model 的输入尺度一般 112*112 或者112*96 所以在输入train 之前需要对照片进行resize,透视变化后resize或者 透视变化那个矩阵就直接使用那个尺度。
2. face recognize
人脸识别,可以理解为一个分类任务或者是一个特征提取任务。 如果比较两个人是不是同一个人,即val验证 ,这个就是得到人面部的feature map 一般为512维的特征向量 ,通过计算余弦相似度(cosface,arcface)或者 欧式距离(facenet),通过model提取到face 的feature 计算sim。
2. 攻击方法总结 attack
1.基于梯度 fgsm系列
- fgsm 单步迭代攻击(最原始)
- i-fgsm 更改迭代步数(迭代)
- mifgsm 添加动量项 稳定梯度下降的方向(加速下降 但是会陷入局部最优点 特别容易过拟合)
- nifgsm 使用方差进行调整梯度下降的大小(会增大很多的计算量看个人的需求,牺牲计算资源换取提升)
- tifgsm 利用图像的输入不变性 对梯度进行一定的处理(线性或者平滑处理,我理解的就是相当于滤波处理)
- difgsm 针对于input 进行变化,传统的输入是固定的,容易过拟合,可以对input 进行resize ,论文源码里面是用过padding 填充黑边(可以使用随机颜色,这样鲁棒性会更强一些)
- sifgsm 针对于图像进行除以固定的值输入到网络中,si将输入进行变化,中间生成的梯度进行叠加(对输入进行变化)
总结下来,基于梯度的攻击,无非两种 一种是想办法对输入进行augement,尽量多样性(di,si),一种是对梯度的处理(mi,ni,ti)。归根到底的想法都是提高 adv-example的鲁棒性。
2.其他攻击方法(不是很熟悉)
- PGD,可以理解成ifgsm吧,但是他的初始化有一个随机噪声,所以 pgd 目前还是攻击效果最好的单种攻击方法。
- cw,基于优化的方法,看看就好,感觉好像没有什么人使用,如果需要使用时候在仔细研究
- deepfool,基于决策边界,模拟边界,想以最小的扰动去攻击model(黑盒无效)
- 纯黑盒的就是基于问询的那一系列
- One Pixel Attack 这种修改比较少的像素,感觉就很扯
3. 对扰动进行限制,或者对mask进行扰动
如果对 扰动大小进行分类就是 无限制扰动 跟有限制扰动。
无限制扰动在0-255之间,但是一般会 对区域进行限制,会寻找最小的区域或者说固定区域去攻击。这变成最重要的策略是如何选取mask。
有限制扰动,一般会限制扰动大小,这种一般是图像的,不会对区域限制。
扰动不是越大越好,扰动大了,会更加的overfitting ,扰动小了会导致你的attack 的acc 不高,这个需要进行取舍。 归根到底就是去提高对抗样本的迁移性,不要陷入overfitting。
2. face attack
还是对抗攻击那一套,但是就主要是一些trick的使用
- 模型的选择问题, 使用模型集成需要使用的(1. 高精度模型(决策边界很明确)跟低精度模型(决策边界需要模糊),因为不通模型的决策边界不通,低精度的model 的鲁棒性更强一些 2. 使用不同数据集训练的model,丰富数据集 模拟真实的场景 3. 使用不用结构的model facenet 使用的是vgg,在找一些resnet 或者其他的model 4. 使用添加了对抗训练的model 这个很重要 对抗训练之后的model 跟没有对抗训练的鲁棒性差别很大)
- input 的下采样问题 ,使用torch.nn.upsample() 这样下采样会带有原始的梯度。 下采样有双线性插值跟三线性插值 如果只使用一个线性插值,可能会导致有的点在下采样的时候没有梯度 使用下采样函数将输入的照片resize成model 的输入大小,进行回传梯度
- 攻击方法 可以使用集成方法 mi+di +ti +si+ni
- 模型集成策略 可以添加一个drop 层 控制选择哪些model 激活,随机激活 这样也可以提高adv-eaxmple 的迁移性
- 关于每个模型的权重问题,可以使用 sim 作为权重,优先优化精度不高的,sim比较低的模型使用(1-sim),选择一个优化方向