這篇文章初版2018年5月就寫好了,最近2022年12月才中。四年中得到了老闆們的許多支持和理解。
(這段經歷也希望給在投稿的同學們一點鼓舞,paper寫好肯定能中的,不要輕易放棄!)
arXiv早期版本為:Query Attack via Opposite-Direction Feature:Towards Robust Image Retrieval
論文連結:https://link.springer.com/article/10.1007/s11263-022-01737-y
論文備份連結:https://zdzheng .xyz/files/IJCV_Retrieval_Robustness_CameraReady.pdf
程式碼:https://github.com/layumi/U_turn
#作者:Zhedong Zheng, Liang Zheng, Yi Yang and Fei Wu
與早期版本相比,
實際使用的話。舉個例子,例如我們要攻擊google或百度的影像檢索系統,搞大新聞(大霧)。我們可以下載一張狗的圖像,透過imagenet模型(也可以是其他模型,最好是接近檢索系統的模型)計算特徵,透過把特徵調頭(本文的方法),來計算對抗雜訊(adversarial noise)加回到狗上。再把攻擊過後的狗使用以圖搜圖,可以看到百度谷歌的系統就不能回狗相關的內容了。雖然我們人還能辨識出這是狗的圖像。
P.S. 我當時也試過攻擊谷歌以圖搜圖,人還能識別出這是狗的圖像,但谷歌往往會返回“馬賽克”相關圖像。我估計谷歌也不全是用深度特徵,或者和imagenet模型有較大差異,導致攻擊後,往往趨向於“馬賽克”,而不是其他實體類別(飛機啊之類的)。當然馬賽克也算某種程度的成功!
1.本文的初衷其實特別簡單,現有reid模型,或者風景檢索模型已經達到了95%以上的Recall-1召回率,那我們是不是可以設計一種方式來攻擊檢索模型呢?一方面探探reid模型的老底,一方面攻擊是為了更好的防禦,研究一下防禦異常case。
2.檢索模型與傳統的分類模型的差異在於檢索模型是用提取出來的特徵來比較結果(排序),這與傳統的分類模型有較大的差異,如下表。
3. 檢索問題還有一個特點就是open set也就是說測試的時候類別往往是訓練時沒見過的。如果大家熟悉cub資料集,在檢索設定下,訓練的時候訓練集合100多種鳥,和測試時測試100多種鳥,這兩個100種是沒有overlapp種類的。純靠提取的視覺特徵來匹配和排序。所以有些分類攻擊方法不適合攻擊檢索模型,因為攻擊時基於類別預測的graident往往是不準的。
4. 檢索模型在測試時,有兩部分資料一部分是查詢圖片query,一部分是圖片庫 gallery(資料量較大,而且一般不能access)。考慮到實際可行性,我們方法將主要瞄準攻擊query的圖像來導致錯誤的檢索結果。
1. 很自然的一個想法就是攻擊特徵。那怎麼攻擊特徵?基於我們之前對於cross entropy loss的觀察,(可以參考large-margin softmax loss這篇文章)。往往我們使用分類loss的時候,特徵f會存在一個放射形的分佈。這是由於特徵在學習的時候與最後一層分類層權重W計算的是cos similarity。如下圖,導致我們學完模型,同一類別的樣本會分佈在該類別W附近,這樣f*W才能到達最大值。
2. 所以我們提出了一個特別簡單的方法,就是讓特徵調頭。如下圖,其實有兩種常見的分類攻擊方法也可以一起視覺化出來。如(a)這種就是把分類機率最大的類別給壓下去(如Fast Gradient),透過給-Wmax,所以有紅色的梯度傳播方向沿著反Wmax;如(b)還有一種就是把最不可能的類別的特徵給拉上來(如Least-likely),所以紅色的梯度沿著Wmin。
3. 這兩種分類攻擊方法在傳統分類問題上當然是很直接有效的。但由於檢索問題中測試集都是沒見過的類別(沒見過的鳥種),所以自然f的分佈沒有那麼緊密貼合Wmax或者Wmin,因此我們的策略很簡單,既然有了f,那我們直接把f往-f去移動就好了,如圖(c)。
這樣在特徵匹配階段,原來排名高的結果,理想情況下,與-f算cos similarity,從接近1變到接近-1,反而會排到最低。
達成了我們攻擊檢索排序的效果。
4. 一個小extension。在檢索問題中,我們也常用multi-scale來做query augmentation,所以我們也研究了一下怎麼在這種情況下維持攻擊效果。 (主要困難在於resize操作可能把一些小卻關鍵的抖動給smooth了。)
其實我們應對的方法也很簡單,就如model ensemble一樣,我們把多個尺度的adversarial gradient做個ensemble平均就好。
1. 在三個資料集三個指標下,我們固定了抖動幅度也就是橫座標的epsilon,比較在同樣抖動幅度下哪一種方法能使檢索模型犯下更多錯誤。我們的方法是黃色線 都處在最下面,也就是攻擊效果更好。
2. 同時我們也提供了在5個資料集上(Food,CUB,Market,Oxford,Paris)的量化實驗結果
3. 為了展示模型的機制,我們也嘗試攻擊了Cifar10上的分類模型。
可以看到我們改變最後一層特徵的策略,對於top-5也有很強的壓制力。對於top-1,由於沒有拉一個候選類別上來,所以會比least-likely略低一些,但也差不多。
4. 黑盒子攻擊
我們也嘗試了使用ResNet50產生的攻擊樣本去攻擊一個黑盒的DenseNet模型(這個模型的參數我們是不可取得的)。發現也能取得比較好的遷移攻擊能力。
5. 對抗防禦
#我們採用online adversarial training的方式來訓練一個防禦模型。我們發現他在接受新的白盒攻擊的時候依然是不行的,但是比完全沒有防禦的模型在小抖動上會更穩定一些(掉點少一些)。
6. 特徵移動的視覺化
這也是我覺得最喜歡的實驗。我們利用Cifar10,把最後分類層的維度改為2,來plot分類層的feature的變化。
如下圖,隨著抖動幅度epsilon的變大,我們可以看到樣本的特徵慢慢「調頭」了。例如大部分橘色的特徵就移動到對面去了。
以上是逆轉特徵讓re-id模型從88.54%到0.15%的詳細內容。更多資訊請關注PHP中文網其他相關文章!