1. 程式人生 > >CNN入門必讀經典:Visualizing and Understanding Convolutional Networks

CNN入門必讀經典:Visualizing and Understanding Convolutional Networks

本文主要是藉助deconvnet來視覺化卷積網路,這對於理解卷積網路還是非常重要的,同時本文又是13年ImageNet分類任務的冠軍。
程式碼:
https://github.com/guruucsd/CNN_visualization

1 Deconvolution

首先我們先對Deconvolution有個瞭解,這裡推薦知乎裡面的一個回答:
http://zhihu.com/question/43609045/answer/120266511
對於Deconvolution我們可能會稱其為反捲積,是因為其正向傳播中的計算過程與卷積中反向傳播中的過程相似,在實際計算時使用引數的轉置
對於卷積和反捲積知乎中的參考資料挺好,有興趣可以看看:
-

https://arxiv.org/pdf/1603.07285.pdf

2 視覺化

這裡寫圖片描述

總體的思路就是將某一層的feature maps 經過相反的結構,即如上圖所示:
如經過max pooling層那麼就在對稱位置記住所取位置後,unpooling到響應位置,如經過relu那麼在對稱位置在經過一次relu,如經過conv那麼在對稱位置使用相同的Filter的轉至進行deconv。
即將視覺化的原模型如下圖:
這裡寫圖片描述

2.1 Feature Visualiztion

對於給定的feature map選取9個最大的activations,以下給出了經過反捲積投影之後的featuremap及相應的原圖。
這裡寫圖片描述


可以看出第二層一般對應邊角或者色彩反應
這裡寫圖片描述
第三層對應著紋理,有著更強的不變性
這裡寫圖片描述
第四層有著較多的類別資訊,比如狗臉等物體的區域性
這裡寫圖片描述
第五層對應著更強的不變性,可以包含物體的整體資訊。
放在一起看下圖:
這裡寫圖片描述
至於文中的第一層,應該是說的卷積核,feature map應該是一些邊緣
這裡寫圖片描述

2.2 特徵的學習變化過程

這裡寫圖片描述
上面每層從左到右訓練次數為1,2,5,10,20,30,40,64個epoch。
可以看出前幾層(lower)收斂較快,後幾層收斂較慢。

2.3 feature ivariance

這裡寫圖片描述
上圖是對應著影象平移、縮放、旋轉給featuremap帶來的變化,可以看出第一層中對於影象變化非常敏感,第7層就接近於線性變化,最後的輸變化就相對較小了。

2.4 改進結構

下圖給出了為什麼把11x11改成了7x7,stride 也減小的原因。
這裡寫圖片描述

2.5 occlusion sensitive

這裡寫圖片描述
c是在第5層 響應最高的feature map的projecttion。b是遮擋不同部分得到的feature map,d是遮住不同部分得到的groundtruth所在類的score map,e是 score maps的分類結果。可以看出對於物體的關鍵部分遮擋之後會極大的影響分類結果。有趣的是第二個和第三個例子中分別是文字和人臉的響應更高,但是卻不是關鍵部分。

2.6 同類部位相關性分析

文章通過遮擋5只狗的左眼,右眼,鼻子等部分,分析不同狗在遮擋相同物體部位時的相關性。
這裡寫圖片描述

可以看出同樣是遮擋眼鏡、鼻子帶來的特徵變化要比隨機遮擋帶來的一致性變化要小,說明相似部位有著內在的一致性。
(個人認為要計算下左眼 右眼 及 鼻子之間交叉的一致性變化)

3 網路結構ablation

這裡寫圖片描述

4 其他

雖然網路結構已經早已被ResNet等網路代替了,可是本文對於網路的視覺化,仍然還是值得入門的同學讀一讀的。