baseline发布!OPPO安全AI挑战赛,人脸识别对抗攻击赛题详解
baseline線上評(píng)測(cè)101.53分,文末附項(xiàng)目github地址。
今年6月,由OPPO發(fā)起,OPPO安全主辦的“OPPO安全AI挑戰(zhàn)賽”正式拉開序幕。比賽主要聚焦人臉識(shí)別場(chǎng)景中的對(duì)抗攻擊。為了模擬真實(shí)的人臉識(shí)別場(chǎng)景并增加比賽的難度,主辦方在后臺(tái)使用了一組已經(jīng)添加了防御措施的識(shí)別模型,要求參賽選手在不知道這些后臺(tái)模型具體細(xì)節(jié)的前提下,對(duì)它們進(jìn)行黑盒攻擊。
掃描下方二維碼
或點(diǎn)擊閱讀原文
前往大賽官網(wǎng)報(bào)名參賽
賽題介紹
比賽任務(wù)
本次比賽主要使用人臉識(shí)別數(shù)據(jù)集,具體的圖片來自公開數(shù)據(jù)集 CASIA-FaceV5 和 CelebA 中的人臉圖片。每個(gè)人都有2-5張不同圖片,并被保存在一個(gè)文件夾中(如./images/0/,./images/1/…)。
參賽者需要修改這些圖片,并保留原始圖片尺寸和數(shù)據(jù)集目錄結(jié)構(gòu)。同時(shí),對(duì)圖片的修改必須足夠微小。關(guān)于擾動(dòng)的添加對(duì)于圖像質(zhì)量的影響,比賽組織者采用添加了擾動(dòng) Lp 范數(shù)和 Full Reference-IQA (FR-IQA) 來進(jìn)行評(píng)價(jià),其中 FR-IQA 部分將采用 MS-SSIM 圖像結(jié)構(gòu)相似性指標(biāo)來進(jìn)行量化。
除了自動(dòng)判斷外,在線下決賽環(huán)節(jié),組織者還會(huì)對(duì)對(duì)抗樣本的肉眼視覺差異進(jìn)行更加嚴(yán)格的評(píng)判,即對(duì)抗樣本和原始樣本的視覺差異越小越好。
在把數(shù)據(jù)集提交到系統(tǒng)后,后臺(tái)的防御模型會(huì)對(duì)上傳數(shù)據(jù)集進(jìn)行預(yù)測(cè)。攻擊數(shù)據(jù)集要盡量讓防御模型產(chǎn)生錯(cuò)誤的結(jié)果。當(dāng)攻擊不成功時(shí),得分為0,當(dāng)攻擊成功時(shí),得分由擾動(dòng)添加前后的圖像差異大小來衡量,對(duì)原圖的影響越小得分越高。最終得分由擾動(dòng)大小和判斷原圖片和修改后圖片的圖像質(zhì)量評(píng)分(multi-scale structural similarity)共同決定。
賽程與獎(jiǎng)勵(lì)
【大賽賽程】
06月18日-09月15日|組隊(duì)報(bào)名
07月12日-09月15日|線上初賽
09月26日-10月21日|線上復(fù)賽
? 11月|線下決賽
【獎(jiǎng)金設(shè)置】
總獎(jiǎng)金60萬元
冠軍:15萬元
亞軍(2支隊(duì)伍):每支隊(duì)伍9萬元
季軍(3支隊(duì)伍):每支隊(duì)伍5萬元
優(yōu)勝獎(jiǎng)(4支隊(duì)伍):每支隊(duì)伍3萬元
大賽地址:https://security.oppo.com/challenge/home.html
baseline
作者:孫裕道
北京郵電大學(xué)博士生,主要研究方向?yàn)槿斯ぶ悄馨踩猩疃惹榫w識(shí)別模型的攻擊和防御。
模型介紹
給定待攻擊的干凈樣本和不同人名的的目標(biāo)樣本。將干凈樣本,對(duì)抗樣本和目標(biāo)樣本一同輸入到多個(gè)人臉識(shí)別模型中,經(jīng)過多個(gè)模型整合后得到與之對(duì)應(yīng)的人臉編碼向量,和。計(jì)算和的相似度,并且我們希望的值越小越好。計(jì)算和的相似度,我們希望的值越大越好。通過優(yōu)化的損失,得到對(duì)抗擾動(dòng),從而能夠達(dá)到以上兩個(gè)目的。利用正則化損失來限制對(duì)抗擾動(dòng)擾動(dòng)的范圍。得到的對(duì)抗擾動(dòng)經(jīng)過高斯平滑后與人臉一起加在干凈樣中得到更新后的人臉對(duì)抗樣本。
人臉Mask
本次比賽的任務(wù)是攻擊人臉圖像,考慮現(xiàn)有神經(jīng)網(wǎng)絡(luò)模型在訓(xùn)練人臉數(shù)據(jù)的時(shí)候?qū)τ谥匾牟课皇潜容^敏感的。因此添加對(duì)抗擾動(dòng)時(shí)只針對(duì)人臉的五官。使用??標(biāo)定人臉的???,選取了??個(gè)點(diǎn)連接組成一個(gè)待攻擊的區(qū)域,對(duì)于很少的無法用??標(biāo)定??的圖片,手動(dòng)框出人臉范圍。最后將生成的人臉??轉(zhuǎn)化成??j矩陣對(duì)對(duì)抗擾動(dòng)??做矩陣乘法。
人臉識(shí)別模型
人臉識(shí)別模型的訓(xùn)練可以利用如下人臉識(shí)別網(wǎng)絡(luò)結(jié)構(gòu)在本地訓(xùn)練自己的人臉識(shí)別模型,也可以下載已經(jīng)訓(xùn)練好的人臉識(shí)別模型參數(shù)。給定一張人臉圖片,經(jīng)過多個(gè)人臉識(shí)別模型生成多個(gè)人臉編碼向量,最終整合成一個(gè)人臉編碼向量。
人臉識(shí)別模型網(wǎng)絡(luò)結(jié)構(gòu):
?鏈接:https://github.com/davidsandberg/facenet
?鏈接: https://github.com/luckycallor/InsightFace-tensorflow.git
鏈接:https://github.com/sirius-ai/MobileFaceNet_TF.git
?鏈接:https://github.com/yule-li/CosFace.git
相似度計(jì)算
人臉編碼向量之間的相似度計(jì)算可以分為和。表示的是對(duì)抗樣本與干凈樣本人臉編碼向量之間的相似度。表示的是為對(duì)抗樣本與目標(biāo)樣本編碼向量之間的相似度。給定向量和,向量的相似度計(jì)算公式可以被總結(jié)為:
內(nèi)積計(jì)算:
余弦相似度:
歐氏距離:
皮爾遜相關(guān)系數(shù):
斯皮爾曼相關(guān)系數(shù):
最常用的相似度計(jì)算公式是余弦相似度,時(shí)間允許的情況下其它的相似度計(jì)算公式可以嘗試看看,是否也會(huì)對(duì)成績(jī)有所提高。
在無目標(biāo)攻擊的視角下,對(duì)抗樣本的人臉編碼向量的與干凈樣本編碼向量的相似度越小越好,關(guān)于樣本的負(fù)梯度方向是我們想要的方向:
在有目標(biāo)攻擊的視角下,對(duì)抗樣本的人臉編碼向量的與目標(biāo)樣本編碼向量的相似度越大越好,關(guān)于樣本?的梯度方向是我們想要的方向:
綜上所述總的相似度計(jì)算如下公式:
此時(shí)對(duì)的梯度方向能夠同時(shí)獲得有無目標(biāo)攻擊和有目標(biāo)攻擊的這兩個(gè)梯度方向:
正則化損失
正則化損失可以分為損失函數(shù)和損失函數(shù),它們的作用是限制對(duì)抗擾動(dòng)的大小并對(duì)圖像進(jìn)行平滑處理。
范數(shù)損失
給定干凈人臉圖像和對(duì)抗圖像
形式:
形式2:
損失
全稱Total Variation Loss,其作用主要是降噪,圖像中相鄰像素值的差異可以通過降低TV Loss來一定程度上進(jìn)行解決 ,從而保持圖像的光滑性。
連續(xù)的定義為:
離散的定義為:
在比賽中,采用的是離散的,并且階數(shù)取為。
動(dòng)量迭代
本次比賽主要利用的是基于梯度的迭代攻擊,在迭代的攻擊過程中加入動(dòng)量項(xiàng)之后可以穩(wěn)定更新方向并在迭代期間從較差的局部最大值中離開,從而產(chǎn)生更多遷移性更強(qiáng)的的對(duì)抗樣本。為了進(jìn)一步提高黑盒攻擊的成功率。具體的計(jì)算公式如下所示:
圖像去噪平滑
生成的對(duì)抗擾動(dòng)通過高斯濾波進(jìn)行去噪平滑。考慮到OPPO人臉對(duì)抗樣本線上測(cè)試可能會(huì)有高斯濾波這種防御機(jī)制因而在算法生成噪聲的時(shí)候加入高斯濾波一定程度上也能使防御機(jī)制失效從而提高樣本攻擊率。使用高斯核函數(shù)進(jìn)行卷積就能完成上述操作,高斯核如下:
核心代碼
如下代碼為人臉對(duì)抗樣本生成的過程,對(duì)照上面的模型流程圖以及各個(gè)模塊的細(xì)節(jié)講解在代碼中都有所顯示,主要的核心代碼提供了詳細(xì)的解釋和注釋。
def?adv_attack(tmp_noise,?origin_img,?target_img,?mask,?gaussian_blur,?model_pool,?index,?loss1_v,?momentum=0,?lr=1):tmp_noise.requires_grad?=?True#?對(duì)對(duì)抗擾動(dòng)進(jìn)行高斯平滑處理noise?=?gaussian_blur(tmp_noise)#?對(duì)人臉圖像的擾動(dòng)范圍進(jìn)行限制noise?*=?maskloss1?=?0#?整合多個(gè)人臉識(shí)別模型的人臉編碼向量for?model_dict?in?model_pool:model?=?model_dict['model']proportion?=?model_dict['proportion']#?對(duì)抗樣本的人臉編碼向量v1?=?l2_norm(model(origin_img?+?noise))?#?干凈樣本的人臉編碼向量v2_1?=?l2_norm(model(origin_img)).detach_()??#?目標(biāo)樣本的人臉編碼向量v2_2?=?l2_norm(model(target_img)).detach_()?#?對(duì)抗樣本和干凈樣本之間的內(nèi)積相似度,越小越好tmp1?=?(v1*v2_1).sum()?#?對(duì)抗樣本和目標(biāo)樣本的內(nèi)積相似度,越大越好tmp2?=?(v1*v2_2).sum()??r1?=?1r2?=?1if?tmp1?<?0.2:??r1?=?0if?tmp2?>?0.8:?r2?=?0?#?將兩個(gè)相似度進(jìn)行整合成總的相似度函數(shù)loss1?+=?(r1?*?tmp1?-?r2?*?tmp2)?*?proportion??#?Cos?Loss#?求解相似度關(guān)于樣本的梯度loss1.backward(retain_graph=True)??loss1_v?=?tmp_noise.grad.detach()?*?(1?-?momentum)?+?loss1_v?*?momentum??tmp_noise.grad.data.zero_()#?L2范數(shù)損失和TV損失的量級(jí)比較大需要將它們適當(dāng)?shù)目s小r3?=?1if?index?>?100:r3?*=?0.1if?index?>?200:r3?*=?0.1#?L2范數(shù)的損失loss2?=?(noise**2).sum().sqrt()?#?TV損失loss3?=?tv_loss(noise)??#?TV?loss#?求解正則化L2和TV損失函數(shù)關(guān)于樣本的梯度loss?=?r3?*?0.025?*?loss2?+?r3?*?0.004?*?loss3loss.backward()#?將相似度損失的梯度與正則化損失的梯度進(jìn)行整合得到對(duì)抗擾動(dòng)tmp_noise?=?tmp_noise.detach()?-?lr?*?(tmp_noise.grad.detach()?+?loss1_v)#?將對(duì)抗擾動(dòng)的像素進(jìn)行適當(dāng)?shù)慕財(cái)鄑mp_noise?=?(tmp_noise?+?origin_img).clamp_(-1,?1)?-?origin_im?gtmp_noise?=?tmp_noise.clamp_(-0.2,?0.2)return?tmp_noise,?loss1_v(滑動(dòng)查看完整代碼)
github代碼及其成績(jī)
項(xiàng)目的??代碼鏈接為:https://github.com/guidao20/OPPO_ADVERSARIAL_ATTACK
相關(guān)的細(xì)節(jié)已經(jīng)在??中有所介紹。因?yàn)榍捌谛枰幚砩扇四?之類的操作需要耗費(fèi)一定的時(shí)間,在中程序共耗時(shí)一天多,前面的鋪墊工作完成后,生成人臉對(duì)抗樣本的時(shí)間大約只有不到個(gè)小時(shí)。
最終初賽的評(píng)測(cè)成績(jī)?yōu)?/strong>。
點(diǎn)擊“閱讀原文”進(jìn)入官網(wǎng)報(bào)名參賽~
總結(jié)
以上是生活随笔為你收集整理的baseline发布!OPPO安全AI挑战赛,人脸识别对抗攻击赛题详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国六标准对买车有什么影响吗?
- 下一篇: 博士申请 | 哥本哈根大学招收机器学习和