ZFNet(2013)及可視化的開端

博客:blog.shinelee.me | 博客園 | CSDNhtml

寫在前面

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架構

ImageNet Winners

論文最大的貢獻有2個:ide

  • 提出了ZFNet,一種比AlexNet性能更好的網絡架構
  • 提出了一種特徵可視化的方法,並據此來分析和理解網絡

本文將圍繞上述2點展開,先介紹網絡架構,再介紹特徵可視化的方法。函數

網絡架構與動機

ZFNet的網絡架構以下性能

ZFNet Architecture

ZFNet的網絡架構是在AlexNet基礎上修改而來,與AlexNet相比,差別不大:ui

  • 第1個卷積層,kernel size從11減少爲7,將stride從4減少爲2(這將致使feature map增大1倍)
  • 爲了讓後續feature map的尺寸保持一致,第2個卷積層的stride從1變爲2

僅這2項修改,就得到了幾個點的性能提高。因此,重要的是爲何這樣修改?這樣修改的動機是什麼?文中這樣敘述:spa

ZFNet Architecture Selection

經過對AlexNet的特徵進行可視化,文章做者發現第2層出現了aliasing。在數字信號處理中,aliasing是指在採樣頻率太低時出現的不一樣信號混淆的現象,做者認爲這是第1個卷積層stride過大引發的,爲了解決這個問題,能夠提升採樣頻率,因此將stride從4調整爲2,與之相應的將kernel size也縮小(能夠認爲stride變小了,kernel沒有必要看那麼大範圍了),這樣修改先後,特徵的變化狀況以下圖所示,第1層呈現了更多更具區分力的特徵,第二2層的特徵也更加清晰,沒有aliasing現象。更多關於aliasing的內容,能夠參見Nyquist–Shannon sampling theoremAliasing.net

stride 2 vs 4, kernel size 7x7 vs 11x11

這就引出了另一個問題,如何將特徵可視化?正如論文標題Visualizing and Understanding Convolutional Networks所顯示的那樣,與提出一個性能更好的網絡結構相比,這篇論文更大的貢獻在於提出一種將卷積神經網絡深層特徵可視化的方法

特徵可視化

在博文《卷積神經萬絡之卷積計算、做用與思想》 博客園 | CSDN | blog.shinelee.me 中,咱們講到卷積神經網絡經過逐層卷積將原始像素空間逐層映射到特徵空間,深層feature map上每一個位置的值都表明與某種模式的類似程度,但由於其位於特徵空間,不利於人眼直接觀察對應的模式,爲了便於觀察理解,須要將其映射回像素空間,「從羣衆中來,到羣衆中去」,論文《 Visualizing and Understanding Convolutional Networks》就重點介紹瞭如何「到羣衆中去」。

可視化操做,針對的是已經訓練好的網絡,或者訓練過程當中的網絡快照,可視化操做不會改變網絡的權重,只是用於分析和理解在給定輸入圖像時網絡觀察到了什麼樣的特徵,以及訓練過程當中特徵發生了什麼變化。

下面這張圖截自論文同款talk

Projecting Back

給定1張輸入圖像,先前向傳播,獲得每一層的feature map,若是想可視化第\(i\)層學到的特徵,保留該層feature map的最大值,將其餘位置和其餘feature map置0,將其反向映射回原始輸入所在的像素空間。對於通常的卷積神經網絡,前向傳播時不斷經歷 input image→conv → rectification → pooling →……,可視化時,則從某一層的feature map開始,依次反向經歷 unpooling → rectification → deconv → …… → input space,以下圖所示,上方對應更深層,下方對應更淺層,前向傳播過程在右半側從下至上,特徵可視化過程在左半側從上至下:

deconvnet

可視化時每一層的操做以下:

  • 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

不斷經歷上述過程,將特徵映射回輸入所在的像素空間,就能夠呈現出人眼能夠理解的特徵。給定不一樣的輸入圖像,看看每一層關注到最顯著的特徵是什麼,以下圖所示:

Visualization of features in a fully trained model

其餘

除了網絡架構和可視化方法,論文中還有其餘一些值得留意的點,限於篇幅就不展開了,這裏僅作記錄,詳細內容能夠讀一讀論文:

  • Occlusion Sensitivity 實驗:使用一個灰色的小塊,遮擋輸入圖像的不一樣區域,觀察對正類輸出機率的影響,以此來分析哪一個區域對分類結果的影響最大,即對當前輸入圖像,網絡最關注哪一個區域。結果發現,feature map最強響應可視化後對應的區域影響最大。
  • Feature Generalization:在ImageNet上預訓練,固定權重,而後遷移到其餘庫上(Caltech-10一、Caltech-256),從新訓練最後的softmax classifier,只須要不多的樣本就能快速收斂,且性能不錯。
  • Feature Analysis:對訓練好的網絡,基於每一層的特徵單獨訓練SVM或Softmax分類器,來評估不一樣層特徵的區分能力,發現越深層的特徵區分能力越強。

以上。

參考

相關文章
相關標籤/搜索