看了cs231的課程,想自己嘗試做下視覺化,權當加深對卷積神經網路的理解吧。
課程:課程裡提到第一層卷積一般做的是傳統視覺的工作,主要提取一些有向邊,視覺化卷積核的原因是類似模板匹配的思想啥的,具體我也沒有深究。我自己的看法是,視覺化卷積核,權重大的位置說明該點對輸出啟用影響大,第一層卷積恰好對應影象的三個顏色通道,因此直接視覺化卷積核可以反應該個卷積操作主要尋找的特徵。
實踐:我用pytorch官方的resnet50預訓練模型、voc2007的一些做測試實驗,視覺化第一層64個7x7x3的卷積核,如下圖所示。
可以看到,跟課程裡講的類似,大部分卷積核都關注有向邊,或者一些顏色通道(上圖就有一些紅色、綠色、藍色,反應這些卷積核主要關注哪些通道)
課程也提到中間層的卷積核看不出什麼資訊(不是直接對原始影象操作),中間層的我也沒去做。
按照卷積核視覺化理解,視覺化第一層featuremap會發現一些有趣的現象(我這裡實際視覺化的是relu之後的層,檢視啟用部分)
右側是原圖,左邊一共64個feturemap分別對應每個卷積操作的輸出結果(截圖沒有全部顯示64個),可以看到上面卷積核視覺化中,第二個卷積核比較關注綠色通道的特徵,從上圖第二個featuremap裡也能看出主要啟用了原圖綠草部分。
再比如下圖,從卷積核視覺化中,第四行第六列(第24個卷積核)主要關注棕紅色,而對應的featuremap中,基本只啟用了棕紅的飛機頭那部分。
也可以看到,大部分卷積核都在關注一些有向邊,比如橫線、豎線、斜線等等,下圖看起來就比較明顯。這個比較好理解,opencv的canny、sobel等輪廓提取運算元也是特定卷積操作的結果嘛。
大概的觀點就是說同類別的物件在模型底層特徵向量是接近的,這個也比較好理解,最後一層接的是輸出,模型已經訓好的情況下,同類別影象類別輸出基本都一致,最後一層特徵肯定也是相近的。特徵空間降維視覺化還不想花時間去做。。
課程:課程裡提到中間層featuremap可以提取對最終分類有用的特徵,對某個featuremap,通過測試大量影象後對啟用值進行排序後選取高啟用的,對映回原圖後(按感受野範圍)可以發現該featuremap主要尋找的特徵。
測試:對resnet50的較深層進行測試,該層輸出維度是【n,1024,14,14】(對應下圖原始碼處layer3),即1024個featuremap。記錄voc2007的2000多張圖各自的1024個featuremap,然後對每個featuremap,選取啟用值最高的8張,作為每個featuremap學習的特徵參考。(這裡沒有按課程的感受野大小,把高啟用值對映到原圖相應影象區域,因為我算了一下,這一層感受野已經超過原始輸入大小了,所以直接使用原圖)
這裡選幾個特徵明顯的,效果如下。
一些可以基本分析出該個featuremap主要尋找的特徵,不過在1024張圖中,發現大部分結果都比較難以分析,也許本身深層特徵本身就比較抽象了,或者畢竟pytorch resnet50預訓練訓的資料集並不是voc資料集,特徵學習的目標不一樣。
介紹鏈結
待更新。。
卷積神經網路的視覺化
2014eccv紐約大學 matthew d.zeiler,rob fergus文章主要技巧 使用視覺化技巧 反卷積網路 deconvnet 來直 到cnn中間層的特徵對應的影象區域,deconvnet在 zeiler et al.2011 中被用作無監督學習,本文則用來進行視覺化演示。一層反卷積網...
視覺化探索卷積神經網路提取特徵
卷積神經網路的發展主要是為了解決人類視覺問題,不過現在其它方向也都會使用。發展歷程主要從lenet5 alexnet vgg goolenet resnet等。傳統bp神經網路層與層之間都是全連線的,對於影象處理領域,當神經網路處理大影象時,全連線會導致待訓練的引數非常龐大,比如100萬個畫素的影象...
神經網路 權重視覺化
深度學習已經應用在各種不同的領域,並且都取得了不錯的效果,但是在很多情況下,深度學習網路被我們看做乙個黑匣子,我們不知道通過訓練,我們的網路到底學習到了什麼。今天給大家分享乙個簡單的權重視覺化的方法,在我們訓練完網路之後,可以通過權重視覺化,直觀的理解網路到底學習到了什麼。本次實驗基於mnist資料...