
古往今來,大家都知道:只要圖像一平移,CNN就認不出來了。
原因就在降採樣身上。不管是最大池化,跨步卷積,還是平均池化,都對平移太敏感:
比如,0、0、1、1、0、0、1、1……這樣的週期,最大池化是這樣:

但如果平移一格,最大池化完全變了一個樣子:

雖然,有著名的抗鋸齒 (Anti-Aliasing,AA) 方法,致力解決這個問題。但把這種模塊直接插進網絡,會嚴重影響模型的表現。
而現在,來自Adobe的Richard Zhang (簡稱「理查」) ,讓抗鋸齒和各種降採樣和平共處了。
在保留平移不變性的情況下,還能提升ImageNet上的分類準確率。VGG、ResNet、DenseNet……各種架構都適用。
不止如此, 面對其他干擾更穩定了,如旋轉如縮放;面對輸入圖像的損壞,還更魯棒了。

研究登上了ICML 2019,代碼已經開源,還有演講可以看。Reddit熱度已經超過了250,觀衆紛紛表達了謝意:
論文很厲害,演講也很好。
怎樣和解的?
想知道怎樣幫助CNN保留平移不變形,就要了解平移不變性是怎樣打破的。
理查觀察了VGG的第一個卷積層,發現它對平移毫無波瀾,並不是在這裏打破的。
但再觀察第一個池化層,對平移有了反應:平移偶數個像素,表徵還不改變,平移奇數個像素,表徵就完全變了。
向網絡深處走,經過的池化層越多,問題就越嚴重。

想解決這個問題,就要把抗鋸齒和降採樣友好地結合到一起。
於是,理查又仔細查看了降採樣過程,把它 (按順序) 分成了兩個部分:
一是取最大值,用密集的方式。
二是在中間特徵圖 (Intermediate Feature Map) 上做子採樣 (Sub-Sampling) 。
第一步沒有問題,完全不會出現鋸齒。
第二步就要改了。理查給中間特徵圖,加了個模糊濾波器 (Blur Filter) 來抗鋸齒,然後再做子採樣:

那麼,「抗鋸齒版最大池化」效果怎麼樣?
平移不變性與準確率兼得
理查用ImageNet分類任務測試了一下進化後的VGG,原以爲會損失一些準確率,結果:


在解鎖平移不變性的同時,準確率還提升了。
如果降採樣方法不是最大池化,又怎麼樣呢?
所以,理查還測試了ResNet和MobileNetv2,它們用的是跨步卷積;以及DenseNet,它用的是平均池化:

這些架構也獲得了類似的提升。全面成功。
上面只講了分類這一項任務。而進化後的降採樣,在圖到圖翻譯任務上也同樣有效。
不懼各種變換,以及圖像損壞
不只是平移,像旋轉、縮放這樣的干擾,都可以應對自如;另外,面對輸入圖像損壞 (Image Corruption) ,也變得更加魯棒了。
ImageNet-P數據集裏,有受到各類干擾的圖像;而ImageNet-C數據集裏,包含了系統性損壞的圖像。

左邊一欄 (除了Baseline) 之外,是不同的濾波器,從上到下依次變強。mCE和mFR,都是越小越好。
數據顯示,各種濾波器都能有效增強,應對干擾的穩定性,和應對圖像損壞的魯棒性。其中,最強的過濾器Bin-5表現最佳。
One More Thing
如果小夥伴們沒有看夠,可以點開演講視頻:
https://www.zhihu.com/video/1139957074610950144
然後,還有一大波傳送門。
論文在此:
https://arxiv.org/abs/1904.11486
項目主頁:
https://richzhang.github.io/antialiased-cnns/
開源代碼:
https://github.com/adobe/antialiased-cnns#1-quickstart-load-an-antialiased-model
— 完 —