來自 | 量子位
你能看出下面兩張圖有什么區別嗎?
它們看起來一樣,都是廣場風景照,只是右邊的仔細一看,會發現有些“奇怪的點陣”,
但在AI的眼里,右邊的照片卻是一只哈士奇,為什么?
問題就出在那些“奇怪的點陣”里,原來把點陣重新組合,就能看到哈士奇的縮略圖,
這種騙過AI的方法其實并不新鮮,也不復雜,AI技識訓未流行的時候,已經有網友在泡論壇的時候發現了這種技巧:
把一張正常圖片縮小后在色情圖片里,沒點進帖子,縮略圖上看到的是一張無害照片,但是如果你當眾點開了這個帖子,一張黃圖顯示在眼前,立刻讓你“社會性死亡”,
比如把著名的花花公子封面女郎Lena稍微偽裝一下,縮略圖就變成了一個長發男子,
在今年的USENIX安全研討會上,來自德國布倫瑞克大學的團隊提出了這種攻擊AI的方法:圖片縮放攻擊(image scaling attack),
騙過AI和人眼
圖片縮放攻擊的操作原理很簡單,把需要隱藏的影像按比例插在新影像的像素中,一般大圖是小圖的5到10倍,
當影像交給AI模型處理時,出于計算成本考慮,系統一般會進行預處理,也就是圖片壓縮到比較小的尺寸,而且卷積神經網路本身處理影像時,還會進行池化(pooling),
不僅AI,人眼也會過濾掉影像像素中的“少數派”,被這種攻擊方法騙過,
下面,我們來看看把文章開頭的右側圖片用OpenCV的影像壓縮預處理一下的結果:
廣場照真的變成了哈士奇,縮小的圖片和原來的圖片完全不一樣!

除了OpenCV外,該團隊還測驗了PyTorch的Pillow和TensorFlow的tf.image,幾種常見的影像濾波器全部都中招了,
原理
縮放攻擊的根本原因是,下采樣和卷積相互作用的結果,通俗來說,就是演算法沒有同等地考慮源影像中的所有像素,
因此,攻擊者只需修改一小部分權重較高的像素,就能改變縮略圖,圖片其余大部分像素保持不變,
下面以一維情況來簡單說明一下攻擊的基本原理,
壓縮圖的像素是這樣算出來的:濾波器視窗在圖片源信號s上移動,將視窗中的每個像素值(圖中圓圈)乘以該位置視窗上的權重,得到縮略后的點值,
可以看到,輸出縮略圖圖中的第一個像素是s第三、第四個像素的平均結果,而第二個像素僅考慮了s第七個像素,導致9個像素中只有3個被用于計算縮略圖,
只有那些靠近內核中心(三角形部分)的像素會獲得較高的權重,而其他像素對縮略圖的作用有限,
如果演算法的步長超過視窗寬度,甚至有些像素還會被忽略,因此,攻擊的成功取決于高權重像素的稀疏性,
如果要進行影像縮放攻擊,需要做到兩點,首先,修改少數影響壓縮演算法的像素;其次,攻擊影像在視覺上與源影像匹配,
如何預防
影像縮放攻擊原理簡單,能同時騙過人眼和AI,因此布倫瑞克大學團隊認為這種攻擊具有一定的迷惑性,
經過處理的影像中,在后端,可以逃過AI對圖片的審查;在前端,可以騙過收集資料集的人,污染AI訓練資料集,
如果有人把這些影像摻進自動駕駛訓練資料集,那么我們用訓練出來的自動駕駛系統可靠嗎?在這種情況下,汽車會不會發生意外?
當然,這種方法并非不可預防,
既然問題出在影像壓縮的濾波器上,那么我們只要選擇合適的濾波器就能抵御攻擊,
實驗表明,中值濾波和隨機濾波對非自適應攻擊提供了有效的防御,
具體到代碼上,如果你在使用OpenCV,可以通過在呼叫resize API時使用interpolation引數來解決,而不要使用默認值,
TensorFlow 2.0依然容易受到攻擊,雙線性和雙三次縮放對影像縮放攻擊具有魯棒性,可將引數antialias設定為true,但是此舉會影響網路性能,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253423.html
標籤:其他
上一篇:初學編程,你寫的是死代碼嗎?如何判斷和清理,一招搞定~
下一篇:貪心演算法
