安全AI挑战赛
比赛名称:安全AI挑战者计划人脸识别对抗
比赛类型:学术、对抗样本、计算机视觉
赛题背景
近年来随着科技的蓬勃发展,AI逐步成为各类应用技术的驱动器,推动行业及技术发展。在安全领域,AI也正发挥越来越重要的作用,随着流量识别、人脸识别、动作识别、假货识别等应用场景的出现,AI与安全结合的成果愈加丰硕,但AI面临的安全问题也逐渐浮出水面。
AI安全性有诸多挑战,为了抵御未来AI面临的安全风险,阿里安全联合清华大学,以对抗样本为核心,假想未来作为安全AI防守者的身份,结合内容安全场景,从文字、图像、视频、声音等多个领域针对对抗样本技术资源赏金召集“挑战者”共同打磨AI模型安全,为打造更安全的AI共同努力。
赛题介绍
人脸识别(face recognition)系统作为人工智能最成熟的应用领域,已经大规模落地并服务于人们的日常生活,例如基于二代身份证的实人认证,刷脸支付,人脸闸机验证等。但是,在大规模商业化的同时,人脸识别技术也面临更多方面的威胁。人脸对抗样本通过对人脸图像做微小的改动,欺骗AI系统做出错误的决断,破坏实人认证系统,将会给社会造成重大的损失。
此次比赛模拟人脸场景下的对抗攻击。在不知道模型详细信息的前提下,选手在线下对测试样本进行修改,然后提交至线上做攻击测试。
数据与评测
赛题使用从著名的人脸识别评测集LFW(Labeled Faces in the Wild)中抽取了712张不同人脸图像子集,作为比赛的测试集。所有人脸图像都经过MTCNN对齐并缩放到112*112
尺寸。
选手使用提供的712张人脸测试图像进行攻击,因评测端是根据dev.csv
文件来读取图像,提交结果时必须保证图像尺寸(112*112
)、原始命名方式(jpg
格式)以及存放路径不变。
为了保证扰动后人脸的视觉效果,本次比赛限制单个像素的扰动在[-25.5, 25.5]区间内,对于扰动超出该范围的提交结果,我们会在后台强制把图像扰动截断至[-25.5, 25.5]区间(使用numpy.clip函数)。所以请参赛选手控制提交的对抗样本与原图在单像素上的差异。
对每个生成的对抗样本,后台会采用模型对该样本进行预测,并根据识别结果计算相应的扰动量,具体计算公式如下:
第1名分享
对抗样本(Adversarial Sample)指在正常样本上引入不易察觉的噪声后形成的样本。这类样本可以使CNN模型输出高置信度的错误输出。如图1所示,只需要对原图(雪山或者河豚)添加一些肉眼难以察觉的噪声,即可使模型给出完全错误的预测。
同样的问题也会出现在生物识别算法中。图2就给出了人脸比对算法中的对抗样本。叠加对抗噪声后,人脸的比对分从100分急剧下降到了60以下。也就是说,人脸比对算法此时已经无法成功识别出这两个人了。
本次天池的人脸识别对抗竞赛的题目是,给定712张LFW中的人脸图片,要求生成对应的对抗样本,使得人脸识别算法给出错误的结果。评测标准是对抗样本对于原始样本的像素扰动值。由于本次比赛并没有提供人脸识别的API调用接口,黑盒攻击方法并不适用。因此,我们将问题转化为白盒攻击。通过对现有攻击方法的优化结合一些新的调优思路,我们的方法在此次比赛中获得第一名(score=1.20)。
具体的攻击框架图如图所示。首先,我们挑选了若干种常用的比对模型结构(包括inceptionV3,resnet family和VGG等)和其对应的预训练模型,并将他们的ensemble作为目标模型。其次,我们采用IPGD攻击和GAN-based攻击融合的方法(sample-wise ensemble),产出攻击样本。相比单一类型的方法,融合攻击能在相同扰动下,获得比单一方法更高的攻击成功功率。最后,我们提出了一种自动参数寻优(hyper-parameter search)和结果融合(dataset-wise ensemble)的方法,从而针对部分样本进一步降低像素扰动,提升比赛成绩。
我们使用的攻击方法可以被分为三步。第一步,对于一张输入样本,我们分别利用IPGD和GAN-based进行攻击,得到若干对抗样本备选。对抗攻击过程中,经常会使用范数进行约束减小扰动量,在这里我们受[5]的启示使用l1 ball进行约束和投影达到了最好的效果。同时针对最小扰动,我们对梯度值进行了排序,只选择top10%的像素点进行扰动。在损失函数选择上,考虑到GAN-base等训练方式引入不确定性,我们选用Cosine Embedding Loss作为损失函数,通过margin的调整有效的控制干扰量。
最后,我们通过对不同样本的对抗噪声做若干种ensemble(加权相加、相乘或者直接选择最优)得到扰动最小且攻击效果最好的图作为这张输入的对抗样本。在对整个数据集完成第一步后,就可以得到一个对抗样本数据集。
第二步,我们通过grid-search来进行hyper-parameter的遍历。对于每一次遍历,我们都可以得到一个对抗样本数据集。因此,第二步就会得到N个对抗样本数据集,即图中的Result_1 - Result_N。
最后一步,我们通过Dataset-wise Selection,在N个对抗样本数据集中挑选最优的样本集合。具体来说,就是对每个输入样本,选取扰动最小且攻击效果最好的对抗样本。最后,这些最优的样本组成了最终的结果。
在实验的过程中,我们还尝试了用1:N(targeted)top1检索与1:1(non-targeted)两种对应的攻击思路。实验结果表明,1:1的方法更具有泛化性及迁移性,因此我们选择了1:1。但同时1:N的攻击在现实的人脸识别系统里显得风险更为高。另外,在对对抗样本的观察,我们同时发现了有趣的现象,主要的干扰区域都集中在鼻子和眼睛。这个结论也符合我们对人脸识别模型的认知,主要的区分区域为鼻子和双眼。
第1名分享原文:
/forum/postDetail?postId=79472
第2名分享
解题思路分两个方面,一个是提高fooling rate,第二个就是减小单像素扰动。
攻击方法基于PGD:
由于人脸识别是比对不同人脸特征的相似度,所以我们直接增大对抗样本与原图的距离,这里我们选用余弦距离(即降低余弦相似度),则
为了最小化对原图的扰动,加入对扰动图的约束
最终loss为
此外,降低扰动一个方法是前面所述的在攻击过程中加入对单像素扰动的约束;还有就是攻击结束后精简已经生成的扰动图。这里受 Curls&Whey 方法的启发,Curls&Whey 将所有像素分为255组,一组一组迭代缩小扰动。我们采用一种新的方式将像素分组
Curls&Whey通过减小所有像素的扰动量来降低平均单像素扰动,而我们通过降低扰动像素个数达到同样的目的。实际上扰动图中多数像素上的微小扰动对攻击成功与否是不起决定作用的,对于每张扰动图算出所有像素扰动,按扰动大小百分位数逐步置零再进行攻击,直至攻击成功保存扰动图,反之继续向下迭代。测试证明这一方法能够明显降低扰动。
另外我们还使用dlib检测人脸,并框选出人脸部分,只保留框选区域。但额头的皱纹、发际线这些纹理明显的地方对识别结果也有非常重要的影响。攻击失败则保留整个扰动图。至于使用关键点检测做五官的mask实测效果不好,因为观察发现扰动区域有很大一部分并不在五官上,而是周围的纹理。
第2名分享原文:
/forum/postDetail?postId=79443
第3名分享
作为攻击者,我们希望获得更多的数据信息来支持模型和算法的建立。因此,我们结合需要评测的人脸识别数据集LFW构建人脸数据特征、人脸特征距离以及线下攻击验证方法。
我们从http://vis-www.cs.umass.edu/lfw/lfw.tgz下载了lfw.tgz全集,并用MTCNN对原始数据进行对齐并缩放到112*112尺寸,得到5749个人的人脸数据库,并进行了简单的数据清洗。在这里,每个人的照片数量不同,对每一张照片计算模型最后一层输出的特征向量,同时对个人的特征向量进行平均,以该平均向量作为特定人脸的特征标准,最终得到的人脸平均特征向量库mean.csv。
这里其实隐含了一个假设,即我们所要攻击的系统具有和我们所建立的类似的人脸数据库。由于后台系统需要经过模型计算、距离度量、验证对比等一系列操作来判断攻击是否成功,因此,我们希望建立比较完善的线下验证机制来提高攻击算法的开发效率,从而提升攻击成功率,降低扰动量等相关指标。
距离度量
我们需要尝试不同的损失函数(余弦距离、L2距离等)来验证最终的效果,在这里我们采用了MSE作为损失函数,因为MSE比余弦距离约束更强一些。
模型选择
我们尝试了很多模型集成的方案,其中有人脸识别模型IR-152,ResNet50, ResNet101,IR-50,最终我们采用了开源的IR-50作为替代模型。
算法设计
我们采用多步迭代的FGSM算法,用L2范数对梯度进行归一化。这里有一个细节,我们对三个通道分别进行L2范数的归一话,效果比,所有像素点进行归一化要来的好。
第3名分享原文:
/forum/postDetail?postId=79323
第4名分享
首先本问题是基于黑盒的人脸攻击,考虑到是人脸数据集,我们针对常用的模型结构进行集成,分别集成了IR50,IR101,IR152(模型深度不同)。考虑到线上的评测系统可能是通过相似来判定图片的类别,我们使用了目标攻击,通过多模型集成计算出图片之间的相似度,我们选取第二相似的图片作为目标图片进行攻击。
同时我们的损失函数有三个部分,经典的距离计算loss如L2,cos loss。TV loss是为了保持图像的光滑性,后面部分会具体介绍。最后生成的noise会经过gauss卷积,最后叠加在原图上。不断迭代上述流程,直到当前图片与自己的矩阵相似度超过0.25之后终止。
除此之外,我们的模型还是用了多进程多显卡加速,在实际测试中是用两块1080Ti多进程计算,生成712张对抗样本所花费的时间不到1小时。
干扰噪声区域限制
考虑现有神经网络模型在训练人脸数据的时候对于重要的部位是比较敏感的。我们尝试在图像上生成attention map,发现面部区域的颜色更加突出。
因此我们添加的噪声时只针对人脸的五官。具体的实现过程,我们使用dlib标定人脸的68个landmark,选取了17个点连接组成一个非mask区域,对于很少的无法用dlib标定landmark的图片,我们手动框出人脸范围。
TV loss
在降噪过程中,图像上的较大的噪声可能就会对结果产生非常大的影响,这时候我们就需要在最优化问题的模型中添加一些正则项来保持图像的光滑性,TV loss是常用的一种正则项,在图像中,连续域的积分就变成了像素离散域中求和,具体计算过程如下:
高斯滤波
高斯滤波在图像处理概念下,将图像频域处理和时域处理相联系,作为低通滤波器使用,可以将低频能量(比如噪声)滤去,起到图像平滑作用。
对生成的干扰噪声进行高斯滤波,使得生成的每个像素的噪声与周围像素具有相关性,降低了不同模型生成的干扰噪声之间的差异,(因为不同模型有相似的分类边界),有效提升对抗样本攻击成功率。同时考虑到线上测试可能会有高斯滤波这种防御机制因而在算法生成噪声的时候加入高斯滤波一定程度上也能使防御机制失效从而提高样本攻击率。使用高斯核函数进行卷积就能完成上述操作,高斯核如下:
动量项
通过将动量项集成到攻击的迭代过程中,加入动量项之后可以稳定更新方向并在迭代期间从较差的局部最大值中离开,从而产生更多迁移性更强的的对抗样本。为了进一步提高黑盒攻击的成功率,我们将动量迭代算法应用于集成,实验表明加入动量项之后黑盒攻击的效果更好。计算的公式如下:
第4名分享链接:
/forum/postDetail?postId=79471
第5名分享
本次竞赛形式在对抗机器学习领域属于黑盒非定向攻击。根据相关领域知识,我们知道黑盒攻击成功的关键就在于替代模型以及相关损失函数的选择,这也是我们首先需要做的。我们就需要通过不断的尝试选择与目标模型(victim model)相近的模型结构和损失。找到合适的模型和损失后就是要设计合适的攻击算法,我们认为此次竞赛的目的就是找2-范数意义下的鲁棒下界,即攻击者需要找到2-范数度量下的最小对抗扰动。
在模型和损失搜索阶段,我们首先采用Project Gradient Desent (PGD)作为基础攻击算法,然后通过尝试不同的模型结构以及损失来估计目标模型的结构和损失.选择PGD的原因是PGD作为一种迭代攻击方法,结合了基于梯度攻击算法的简单以及优化攻击方法效果好的特点. 在此过程中我们尝试了基于传统分类的结构(卷积,池化加全连接)以及backbone+head的结构。传统分类器结构一般采用cross-entropy等统计相关损失,backbone+head(backbone就是深度模型分类器来提取人脸特征,head结构完成识别任务主要采用余弦相似度,arcface等损失)。
最终在固定攻击算法为PGD的情况下我们选择攻击效果最好的模型作为我们的攻击模型。所以我们最终选择的本地模型为backbone+head结构backbone结构为IFR-50。损失为余弦相似度。
首先根据我们的知识我们知道基于优化的攻击算法最有可能实现最小范数攻击,所以我们就把攻击算法设计为一种基于优化的攻击方法,可以形式化描述为:
第5名分享原文:
/forum/postDetail?postId=79275
其他分享汇总
第7名分享原文:
/forum/postDetail?postId=79439
第8名分享原文:
/forum/postDetail?postId=79473
第9名分享原文:
/forum/postDetail?postId=76834
第11名分享原文:
/forum/postDetail?postId=79273
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:/662nyZF本站qq群70425。加入微信群请扫码进群(如果是博士或者准备读博士请说明):