博客:blog.shinelee.me | 博客園 | CSDN
寫在前面
ZFNet出自論文《 Visualizing and Understanding Convolutional Networks》,作者Matthew D. Zeiler和Rob Fergus——顯然ZFNet是以兩位作者名字的首字母命名的,截止20190911,論文引用量為4207。ZFNet通常被認為是ILSVRC 2013的冠軍方法,但實際上ZFNet排在第3名,前兩名分別是Clarifai和NUS,不過Clarifai和ZFNet都出自Matthew D. Zeiler之手,見ILSVRC2013 results。
ZFNet(2013)在AlexNet(2012)的基礎上,性能再次提升,如下圖所示,圖片來自cs231n_2019_lecture09。
論文最大的貢獻有2個:
- 提出了ZFNet,一種比AlexNet性能更好的網絡架構
- 提出了一種特征可視化的方法,並據此來分析和理解網絡
本文將圍繞上述2點展開,先介紹網絡架構,再介紹特征可視化的方法。
網絡架構與動機
ZFNet的網絡架構如下
ZFNet的網絡架構是在AlexNet基礎上修改而來,與AlexNet相比,差異不大:
- 第1個卷積層,kernel size從11減小為7,將stride從4減小為2(這將導致feature map增大1倍)
- 為了讓后續feature map的尺寸保持一致,第2個卷積層的stride從1變為2
僅這2項修改,就獲得了幾個點的性能提升。所以,重要的是為什么這樣修改?這樣修改的動機是什么?文中這樣敘述:
通過對AlexNet的特征進行可視化,文章作者發現第2層出現了aliasing。在數字信號處理中,aliasing是指在采樣頻率過低時出現的不同信號混淆的現象,作者認為這是第1個卷積層stride過大引起的,為了解決這個問題,可以提高采樣頻率,所以將stride從4調整為2,與之相應的將kernel size也縮小(可以認為stride變小了,kernel沒有必要看那么大范圍了),這樣修改前后,特征的變化情況如下圖所示,第1層呈現了更多更具區分力的特征,第二2層的特征也更加清晰,沒有aliasing現象。更多關於aliasing的內容,可以參見Nyquist–Shannon sampling theorem和Aliasing。
這就引出了另外一個問題,如何將特征可視化?正如論文標題Visualizing and Understanding Convolutional Networks所顯示的那樣,與提出一個性能更好的網絡結構相比,這篇論文更大的貢獻在於提出一種將卷積神經網絡深層特征可視化的方法。
特征可視化
在博文《卷積神經萬絡之卷積計算、作用與思想》 博客園 | CSDN | blog.shinelee.me 中,我們講到卷積神經網絡通過逐層卷積將原始像素空間逐層映射到特征空間,深層feature map上每個位置的值都代表與某種模式的相似程度,但因為其位於特征空間,不利於人眼直接觀察對應的模式,為了便於觀察理解,需要將其映射回像素空間,“從群眾中來,到群眾中去”,論文《 Visualizing and Understanding Convolutional Networks》就重點介紹了如何“到群眾中去”。
可視化操作,針對的是已經訓練好的網絡,或者訓練過程中的網絡快照,可視化操作不會改變網絡的權重,只是用於分析和理解在給定輸入圖像時網絡觀察到了什么樣的特征,以及訓練過程中特征發生了什么變化。
下面這張圖截自論文同款talk:
給定1張輸入圖像,先前向傳播,得到每一層的feature map,如果想可視化第\(i\)層學到的特征,保留該層feature map的最大值,將其他位置和其他feature map置0,將其反向映射回原始輸入所在的像素空間。對於一般的卷積神經網絡,前向傳播時不斷經歷 input image→conv → rectification → pooling →……,可視化時,則從某一層的feature map開始,依次反向經歷 unpooling → rectification → deconv → …… → input space,如下圖所示,上方對應更深層,下方對應更淺層,前向傳播過程在右半側從下至上,特征可視化過程在左半側從上至下:
可視化時每一層的操作如下:
- Unpooling:在前向傳播時,記錄相應max pooling層每個最大值來自的位置,在unpooling時,根據來自上層的map直接填在相應位置上,如上圖所示,Max Locations “Switches”是一個與pooling層輸入等大小的二值map,標記了每個局部極值的位置。
- Rectification:因為使用的ReLU激活函數,前向傳播時只將正值原封不動輸出,負值置0,“反激活”過程與激活過程沒什么分別,直接將來自上層的map通過ReLU。
- Deconvolution:可能稱為transposed convolution更合適,卷積操作output map的尺寸一般小於等於input map的尺寸,transposed convolution可以將尺寸恢復到與輸入相同,相當於上采樣過程,該操作的做法是,與convolution共享同樣的卷積核,但需要將其左右上下翻轉(即中心對稱),然后作用在來自上層的feature map進行卷積,結果繼續向下傳遞。關於Deconvolution的更細致介紹,可以參見博文《一文搞懂 deconvolution、transposed convolution、sub-pixel or fractional convolution》 博客園 | CSDN | blog.shinelee.me。
不斷經歷上述過程,將特征映射回輸入所在的像素空間,就可以呈現出人眼可以理解的特征。給定不同的輸入圖像,看看每一層關注到最顯著的特征是什么,如下圖所示:
其他
除了網絡架構和可視化方法,論文中還有其他一些值得留意的點,限於篇幅就不展開了,這里僅做記錄,詳細內容可以讀一讀論文:
- Occlusion Sensitivity 實驗:使用一個灰色的小塊,遮擋輸入圖像的不同區域,觀察對正類輸出概率的影響,以此來分析哪個區域對分類結果的影響最大,即對當前輸入圖像,網絡最關注哪個區域。結果發現,feature map最強響應可視化后對應的區域影響最大。
- Feature Generalization:在ImageNet上預訓練,固定權重,然后遷移到其他庫上(Caltech-101、Caltech-256),重新訓練最后的softmax classifier,只需要很少的樣本就能快速收斂,且性能不錯。
- Feature Analysis:對訓練好的網絡,基於每一層的特征單獨訓練SVM或Softmax分類器,來評估不同層特征的區分能力,發現越深層的特征區分能力越強。
以上。