天池大赛通用目标检测的对抗攻击方法一览
?PaperWeekly 原創 · 作者|文永亮
學校|哈爾濱工業大學(深圳)
研究方向|時空序列預測,目標檢測
賽題:1000張圖,在圖上貼補丁,最多不超過10個,導致檢測框失效就算得分。
比賽鏈接:https://tianchi.aliyun.com/competition/entrance/531806/information
數據描述:從 MSCOCO 2017 測試數據集中有條件的篩選了 1000 張圖像,這些圖像不會包含過多或者過少的檢測框(至少會有一個檢測框),并且檢測框的面積相對于整圖不會太小。每張圖都被 resize 到500 * 500的大小,并以.png的格式存儲。
攻擊的檢測器:Faster RCNN,YOLOv4,另外三個是黑盒。
最近做了一段時間,分享一下思路,我做的分數不高,只是做個入門介紹。
首先介紹一下相關的論文:
Adversarial Patch
DPatch
On Physical Adversarial Patches for Object Detection
Fooling automated surveillance cameras: adversarial patches to attack person detection
Adversarial Patch
1.1 簡要思路
沒有接觸過對抗攻擊的可以從這篇入手,這是第一個在對抗攻擊中提出 Patch 的。
論文標題:Adversarial Patch
論文來源:NIPS 2017
論文鏈接:https://arxiv.org/abs/1712.09665
傳統的對抗攻擊就是在原圖的基礎上加入肉眼不可見的噪音干擾分類器,用數學的方式定義就是,給定分類器 ,其中 為樣本, 為樣本自身的類別,假設我們需要誤判為的目標類別為 ,想要找到一個與 相近的 最大化 ,相近的約束表示為存在一個 誤差滿足 。
通俗點講,就是把 Patch 貼在圖上,跟原圖相差不大并且使分類器分類失誤,如下圖表示了 Patch 粘貼的方式:
1.2 損失函數
就是最大化目標類別的概率期望,導致分類器誤判即可,A 就是 apply 函數,把 Patch 粘貼到圖中的方式,p 為 Patch 的參數,x 為原圖,l 為位置。
但是這個與天池的比賽有點差距,因為是目標檢測的對抗攻擊,不是分類器的對抗攻擊,所以就有了下面 DPatch 的論文,其實道理變化不大。
DPatch
2.1 簡要思路
論文標題:DPatch: An Adversarial Patch Attack on Object Detectors
論文來源:AAAI 2019
論文鏈接:https://arxiv.org/abs/1806.02299
代碼鏈接:https://github.com/veralauee/DPatch
這篇是 AAAI 2019 Workshop 的論文,這個思路是最貼切賽題而且非常簡單容易實現的,就是在原圖的基礎上直接添加 Patch,固定住 YOLO 或者 Faster R-CNN 等檢測器的權重,反向傳播只更新 Patch,文章只在圖片的左上角貼了 Patch,這里需要看他的損失函數如何設計的。
如下圖所示,只在單車左上方貼上 40*40 的 Patch,即可讓檢測器失效。
2.2 損失函數
為了訓練無目標的 DPatch,這里的無目標 DPatch 是指只需要把檢測框失效,不需要把單車誤識別為人,這樣是有目標攻擊。所以我們希望找到一個 Patch,假設把 Patch 貼上圖中的 apply 函數為 A,我們需要最大化與真正的類標簽 和邊界框標簽 目標檢測器的損失:
如果是有目標攻擊,我們希望找到一個 P,它能使目標類標簽 和邊界框標簽 的損失最小化:
GT 的類別標簽在這個比賽中沒有提供,其實也很簡單,可以直接用未攻擊過的檢測器模型得到 label 存下來,我也直接用了官方給的 YOLOv4 的代碼跑了結果存下了類別標簽以及檢測框 BBox 的位置,大小。
2.3 論文效果
從指標上看,小物體如鳥這樣的無目標攻擊會比較困難。論文作者指出 DPatch 是具有泛化能力的,YOLO 訓練出來的 Patch 給 Faster-RCNN 用也是沒問題的,反之也行。
有一份 github 的開源代碼 https://github.com/veralauee/DPatch,我在這個基礎上把 Patch 與 pytorch-yolov4 結合,做了論文的思路,但是效果不是很好只有 56 分,如果把 Patch 貼在中心有 200 分左右。
ICML 2019
3.1 簡要思路
論文標題:On Physical Adversarial Patches for Object Detection
論文來源:ICML 2019
論文鏈接:https://arxiv.org/abs/1906.11897
這是一篇 ICML 2019 Workshop 的論文,其實就是在 DPatch 的基礎上的一點改進,改進了參數更新的方式,應用對抗攻擊的手段,視頻效果非常好,先看效果吧。
但是這里他是顯示了有目標的全圖攻擊,把所有的框都失效了,并且把 Patch 中檢測出斑馬,這個跟我們的賽題其實不太符合,天池的比賽是把框都失效才有分,如果失效一個又多一個別的框并不得分。
3.2 改進點
給 Patch 貼的方式發生一些變化,不只是左上的角落,而是增加一些旋轉,亮度,位置的變化
損失函數用了 PGD 的方式
第一點其實很容易實現,在貼 Patch 之前應用一些變換函數上去即可, 是 Patch 的參數, 是損失函數,權重的更新方式如下:
可以對照著 DPatch 的更新方式:
DPatch 的損失函數的更新是直接的最小化目標類別,或者最大化 GT 的類別,并沒有用到對抗攻擊的手段,這里直接使用了 PGD 一階最強攻擊,可以理解為最大化 GT 類別的一種方式。仔細的看更新方式,最原始的 SGD 就是沿著梯度的負方向更新達到最小化 loss 的目的,如果要最大化 loss 就是得沿著梯度的正方向。
PGD 的方式,就是對同一樣本多次沿著梯度正方向更新,但是更新的值不能太大,所以 clip 成 0 到 1,也就是每次沿著梯度正方向更新 0 到 1 的值數次,達到攻擊樣本的目的。
3.3 效果
論文指出這樣訓練要比 DPatch 快,可是他也更新了 30w 輪,而且每輪還多次攻擊。
我改了以上的改進點發現并沒有太大的改變,也是 200 分左右。
Adversarial YOLO
4.1 簡要思路
論文標題:Fooling automated surveillance cameras: adversarial patches to attack person detection
論文來源:CVPR?2019
論文鏈接:https://arxiv.org/abs/1904.08653
代碼鏈接:https://gitlab.com/EAVISE/adversarial-yolo
這篇是 2019 的論文,給了代碼的,主要是對人這個類別進行攻擊,而天池這個比賽其中人的類別就有 600 多張是有的,所以 1000 張中搞定人的類別的框就已經可以說很成功了。
其中 loss 的設計不太符合比賽,因為他這里的 loss 由三部分組成,考慮了可打印出真實世界進行物理攻擊的因素。
方法思路是差不多的,都是在原圖上貼 Patch 然后只更新 Patch 的部分,在于損失函數如何設計了。
4.2 損失函數
損失函數包含了三個,其中前兩個 是關于物理因素的,是可否打印出來進行物理攻擊的因素,在 中 是 patch P 中的一個像素, 是一組可打印顏色 C 集合中的一種顏色。
這 loss 傾向于使模型中生成的 Patch 與我們的可打印顏色非常接近。而第二個 loss 是關于輪廓的 smooth 程度的, 確保了我們的加了 Patch 的圖像傾向于一個平滑的顏色轉換圖像。
如果相鄰像素相似,則 loss 較低;如果相鄰像素不同,loss 較高。那我們這個比賽其實不需要考慮可否打印或者平滑度,其實我在實踐中也沒有加入這兩個 loss 去訓練。
最后一項 loss 是關于有沒有物體的,其中 YOLO 的 loss 是有一項 的,YOLO 預測得到的 output?第四維 channel 就是該特征的 , 但是需要 sigmoid 后處理,而?5 到 85 維是 coco 數據集中的 80 類分類分數,需要 softmax 處理。另外 0,1,2,3 維分別是 x,y,w,h 用處不大。
具體代碼如下,其中 output 為 YOLOv4 模型的輸出,n_ch 為 85 維,fsize 是特征圖大小,人類類別在 coco 數據集的 80 類中是第 0 類,所以 confs_for_class 只取了第 0 類的分類分數,最后 loss 是分類的分數和有無目標的分數的乘積。
????????????output?=?output.view(batchsize,?self.n_anchors,?n_ch,fsize?*?fsize)output?=?output.transpose(1,?2).contiguous()output?=?output.view(batchsize,?n_ch,self.n_anchors?*?fsize?*?fsize)output_objectness?=?torch.sigmoid(output[:,?4,?:])??#?[batch,?1805]output?=?output[:,?5:n_ch,?:]??#?[batch,?80,?1805]#?perform?softmax?to?normalize?probabilities?for?object?classes?to?[0,1]normal_confs?=?torch.nn.Softmax(dim=1)(output)#?we?only?care?for?probabilities?of?the?class?of?interest?(person)confs_for_class?=?normal_confs[:,?0,?:]confs_if_object?=?confs_for_class?*?output_objectness但是作者最后也嘗試了多種組合方式,只用分類 CLS 的 loss,只用有無目標 OBJ 的 loss,以及代碼所示的兩個都用的 loss,結果如下圖,AP 應該越低越好。而用 OBJ-CLS 的 AP 值有 42.8%,只用 OBJ 的 AP 值為 25.53%,只用 CLS 的 AP 值為 82.08%。所以要是無目標攻擊的話,最好只攻擊 OBJ 的 loss。
我也在天池的比賽中嘗試過這篇論文的這個點,但是分數不升反降了。
結論
本次比賽重在學習,我也沒有做過對抗攻擊的研究,這番下來對目標檢測對抗攻擊領域其實有了一定的了解,也希望能夠幫助更多的人入門這個領域,我看到落地的 demo 有很多,攻擊的效果也是驚人,但是我的嘗試過后分數并沒有明顯的提升,也有可能是我訓練得次數太少了,目前我都是只訓練了最多 500 輪,論文中都是 30w 輪的迭代。
想法十分有趣,攻擊的套路其實變化不大,都是在原圖貼?Patch,然后設計 loss 反向傳播只更新 Patch 的參數,另外我發現 Patch 的位置其實對結果影響很大。
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的天池大赛通用目标检测的对抗攻击方法一览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单面彩钢酚醛风管大小头带直管怎么下料?
- 下一篇: ECCV 2020 | 史上最强二值化网