最后两周!60万奖金AI攻防赛进入冲刺(附baseline代码及实操)
由于篇幅原因,本篇文字介紹主要以第一篇baseline為例。
第二篇baseine參考如下:
代碼:https://pan.baidu.com/s/1QYJ5azudMqWMqKv57MjpzA 提取碼: cr9p
文章鏈接:baseline | OPPO 安全AI挑戰賽,人臉識別對抗攻擊賽題詳解
今年6月,由OPPO發起,OPPO安全主辦的“OPPO安全AI挑戰賽”正式拉開序幕。比賽主要聚焦人臉識別場景中的對抗攻擊。為了模擬真實的人臉識別場景并增加比賽的難度,組織者在后臺使用了一組已經添加了防御措施的識別模型,要求參賽選手在不知道這些后臺模型具體細節的前提下,對它們進行黑盒攻擊。
本次比賽已經入最后兩周沖刺階段(9月15日截止報名與組隊),還沒有報名的同學可借助本次分享的2篇baseline分享快速上手實戰。掃描下方二維碼,或點擊閱讀原文即可前往大賽官網報名參賽。
賽題介紹
比賽任務
本次比賽主要使用人臉識別數據集,具體的圖片來自公開數據集 CASIA-FaceV5 和 CelebA 中的人臉圖片。每個人都有2-5張不同圖片,并被保存在一個文件夾中(如./images/0/,./images/1/…)。
參賽者需要修改這些圖片,并保留原始圖片尺寸和數據集目錄結構。同時,對圖片的修改必須足夠微小。關于擾動的添加對于圖像質量的影響,比賽組織者采用添加了擾動 Lp 范數和 Full Reference-IQA (FR-IQA) 來進行評價,其中 FR-IQA 部分將采用 MS-SSIM 圖像結構相似性指標來進行量化。
除了自動判斷外,在線下決賽環節,組織者還會對對抗樣本的肉眼視覺差異進行更加嚴格的評判,即對抗樣本和原始樣本的視覺差異越小越好。
在把數據集提交到系統后,后臺的防御模型會對上傳數據集進行預測。攻擊數據集要盡量讓防御模型產生錯誤的結果。當攻擊不成功時,得分為0,當攻擊成功時,得分由擾動添加前后的圖像差異大小來衡量,對原圖的影響越小得分越高。最終得分由擾動大小和判斷原圖片和修改后圖片的圖像質量評分(multi-scale structural similarity)共同決定。
賽程與獎勵
【大賽賽程】
06月18日-09月15日|組隊報名
07月12日-09月15日|線上初賽
09月26日-10月21日|線上復賽
11月|線下決賽
【獎金設置】
總獎金60萬元
冠軍:15萬元
亞軍(2支隊伍):每支隊伍9萬元
季軍(3支隊伍):每支隊伍5萬元
優勝獎(4支隊伍):每支隊伍3萬元
大賽地址:https://security.oppo.com/challenge/home.html
baseline分享
作者:劉羽中
科大訊飛AI金牌講師,多次在國內數據競賽中獲得優異成績,曾獲四維圖新自動駕駛算法賽冠軍,愛奇藝視頻版權檢測三等獎,微眾人臉對抗優勝獎。擅長計算機視覺和深度學習相關應用。
代碼鏈接:https://pan.baidu.com/s/1QYJ5azudMqWMqKv57MjpzA
提取碼: cr9p
數據集分析
賽題數據從公開數據集`CASIA-FaceV5`、`CelebA`中抽取人臉圖像,這些人臉圖片分屬于不同的人物對象。
每個對象擁有約2~5張圖片,并且已經進行了人臉區域裁剪,且裁剪至正方形尺寸。
人臉尺寸
賽題人臉圖片并沒有縮放操作,而保留了原圖尺寸,即圖片的尺寸各不相同,選手可以按照自身的需要進行縮放操作。
選手提交結果數據(對抗樣本)時需要保證每張圖片的尺寸大小和測試數據的原始圖像大小保持一致。
基礎思路
賽題任務為典型的黑盒無目標攻擊,需要選手對給定的圖片進行「加噪」,以得到與原圖盡可能相似的對抗樣本。
由于對抗樣本具有傳遞性,可以使用已有的人臉識別模型來進行黑盒攻擊。即使用開源的人臉識別模型來生成對抗樣本。
步驟1:加載人臉模型
為了保證模型的便捷性,這里我們選擇了Pytorch版本的InsightFace實現,安裝方法如下:
#?https://github.com/nizhib/pytorch-insightface pip?install?git+https://github.com/nizhib/pytorch-insightface加載iresnet34人臉識別模型:
import?insightface model?=?insightface.iresnet34(pretrained=True) model.eval()步驟2:提取比賽人臉特征
使用iresnet34模型對初賽數據集的2000張照片提取特征,這里只需要做正向傳播即可。
img_feats?=?torch.zeros(2000,?512).float().cuda() idx_img?=?0 with?torch.no_grad():for?img_data,?_?in?train_loader:feat?=?m(img_data.cuda())img_feats[idx_img,?:]?=?featidx_img?+=?1進而對特征進行歸一化,保證計算人臉相似度保持在0-1之間:
import?torch.nn.functional?as?F img_feats?=?F.normalize(img_feats,?p=2,?dim=1)步驟3:多步FGSM攻擊
FGSM(Fast Gradient Sign Method)是經典有效的對抗樣本產生方法,具體思路如下:
擾動變化量與梯度的變化方向一致,則誤差函數就會增大。
使用Sign函數保證了擾動同梯度方向一致,對分類結果產生最大化改變。
由于比賽是無目標攻擊,所以具體的攻擊步驟如下:
步驟1:計算人臉特征相似度,選擇與當前人臉最相似的人臉作為攻擊目標。
步驟2:執行單步FSGM產生對抗樣本,并對擾動大小進行截斷。
步驟3:重復多次步驟2,直到目標人臉的概率值達到閾值。
具體實現代碼如下:
def?one_step_attack(source_idx,?aim_idx=10):#?計算人臉相似度,得到攻擊目標aim_idx?=?torch.matmul(img_feats[source_idx].view(1,?512),?img_feats.T)[0].argsort()[-5].item()#?讀取原始人臉圖片ori_image?=?cv2.imread(paths[source_idx])img?=?preprocess(transforms.ToPILImage()(ori_image))img?=?img.reshape(-1,?3,?112,?112).cuda()?img_ori?=?img.clone().detach()img_adv?=?Nonebest?=?0#?執行多步擾動,記錄最優結果for?_?in?range(50):#?每次對擾動后的圖像都需要重新計算特征img?=?Variable(img,?requires_grad=True)img_embedding?=?model(img.cuda())img_embedding?=?F.normalize(img_embedding,?p=2,?dim=1)feat_ids?=?torch.matmul(img_embedding,?img_feats.T)objective_aim?=?feat_ids[0][aim_idx]objective_source?=?feat_ids[0][source_idx]if?objective_aim.item()?-?objective_source.item()?>?best?and?objective_aim.item()?==?feat_ids[0].max().item():img_adv?=?img.clone().detach()model.zero_grad()objective_aim.backward()#?根據梯度信息,單步FGSMdata_grad?=?img.grad.data.sign()?*?0.0075with?torch.no_grad():delta_diff?=?img?+?Variable(data_grad)?-?img_oridelta_diff?=?torch.clamp(delta_diff,?min=-0.13,?max=0.13)img?=?img_ori?+?delta_diffreturn?img,?img_ori(滑動查看完整代碼)
步驟4:保存測試集攻擊結果
對于測試集每張照片,重復上述操作得到對抗樣本,并進行保存為原始格式。
for?idx?in?range(len(paths)):????path1,?path2?=?paths[idx].split('/')[-2:]img1,?img2?=?one_step_attack(idx)img1?=?unorm(img1[0])img1?=?img1.data.cpu().numpy().round()img1?=?np.clip(img1,?1,?255)img1?=?img1.transpose([1,?2,?0])h,?w?=?cv2.imread(paths[idx]).shape[:2]img1?=?cv2.resize(img1,?(h,?w))cv2.imwrite(f'./images/{path1}/{path2}',?img1)賽題進階思路
1. 本次比賽是黑盒攻擊,建議在本地構建驗證集。即使用人臉識別模型B對人臉識別模型A產生的對抗樣本進行驗證,模擬線上的打分。
2. 賽題人臉圖像尺度大小不一,但現有的人臉識別模型大都接受112*112的輸入尺寸,因此使用pooling代替圖片縮放操作。
大尺寸圖片?->?圖片縮放?->?人臉識別模型 大尺寸圖片?->?pooling?->?人臉識別模型Baseline在初賽線上評測得分44分,代碼鏈接:https://pan.baidu.com/s/1QYJ5azudMqWMqKv57MjpzA
提取碼: cr9p
點擊閱讀原文報名參賽
總結
以上是生活随笔為你收集整理的最后两周!60万奖金AI攻防赛进入冲刺(附baseline代码及实操)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 客厅放米碗怎么放最旺财呢?
- 下一篇: 深圳市黄贝岭一室租金多少钱一个月?