1. 程式人生 > >深度學習(二十七)視覺化理解卷積神經網路

深度學習(二十七)視覺化理解卷積神經網路

視覺化理解卷積神經網路

作者:hjimce

一、相關理論

本篇博文主要講解2014年ECCV上的一篇經典文獻:《Visualizing and Understanding Convolutional Networks》,可以說是CNN領域視覺化理解的開山之作,這篇文獻告訴我們CNN的每一層到底學習到了什麼特徵,然後作者通過視覺化進行調整網路,提高了精度。最近兩年深層的卷積神經網路,進展非常驚人,在計算機視覺方面,識別精度不斷的突破,CVPR上的關於CNN的文獻一大堆。然而很多學者都不明白,為什麼通過某種調參、改動網路結構等,精度會提高。可能某一天,我們搞CNN某個專案任務的時候,你調整了某個引數,結果精度飆升,但如果別人問你,為什麼這樣調參精度會飆升呢,你所設計的CNN到底學習到了什麼牛逼的特徵?(PS:之前領導一直鄙視我,要我解釋CNN的每一層到底學習到了什麼特徵,解答不上來,被鄙視了一番,最後才去學了這篇文獻)。

這篇文獻的目的,就是要通過特徵視覺化,告訴我們如何通過視覺化的角度,檢視你的精度確實提高了,你設計CNN學習到的特徵確實比較牛逼。這篇文獻是經典必讀文獻,才發表了一年多,引用次數就已經達到了好幾百,學習這篇文獻,對於我們今後深入理解CNN,具有非常重要的意義。總之這篇文章,牛逼哄哄。

二、利用反捲積實現特徵視覺化

為了解釋卷積神經網路為什麼work,我們就需要解釋CNN的每一層學習到了什麼東西。為了理解網路中間的每一層,提取到特徵,paper通過反捲積的方法,進行視覺化。反捲積網路可以看成是卷積網路的逆過程。反捲積網路在文獻《Adaptive deconvolutional networks for mid and high level feature learning》中被提出,是用於無監督學習的。然而本文的反捲積過程並不具備學習的能力,僅僅是用於視覺化一個已經訓練好的卷積網路模型,沒有學習訓練的過程。

反捲積視覺化以各層得到的特徵圖作為輸入,進行反捲積,得到反捲積結果,用以驗證顯示各層提取到的特徵圖。舉個例子:假如你想要檢視Alexnet 的conv5提取到了什麼東西,我們就用conv5的特徵圖後面接一個反捲積網路,然後通過:反池化、反啟用、反捲積,這樣的一個過程,把本來一張13*13大小的特徵圖(conv5大小為13*13),放大回去,最後得到一張與原始輸入圖片一樣大小的圖片(227*227)。

1、反池化過程

我們知道,池化是不可逆的過程,然而我們可以通過記錄池化過程中,最大啟用值得座標位置。然後在反池化的時候,只把池化過程中最大啟用值所在的位置座標的值啟用,其它的值置為0,當然這個過程只是一種近似,因為我們在池化的過程中,除了最大值所在的位置,其它的值也是不為0的。剛好最近幾天看到文獻:《Stacked What-Where Auto-encoders》,裡面有個反捲積示意圖畫的比較好,所有就截下圖,用這篇文獻的示意圖進行講解:


以上面的圖片為例,上面的圖片中左邊表示pooling過程,右邊表示unpooling過程。假設我們pooling塊的大小是3*3,採用max pooling後,我們可以得到一個輸出神經元其啟用值為9,pooling是一個下采樣的過程,本來是3*3大小,經過pooling後,就變成了1*1大小的圖片了。而upooling剛好與pooling過程相反,它是一個上取樣的過程,是pooling的一個反向運算,當我們由一個神經元要擴充套件到3*3個神經元的時候,我們需要藉助於pooling過程中,記錄下最大值所在的位置座標(0,1),然後在unpooling過程的時候,就把(0,1)這個畫素點的位置填上去,其它的神經元啟用值全部為0。再來一個例子:

 

在max pooling的時候,我們不僅要得到最大值,同時還要記錄下最大值得座標(-1,-1),然後再unpooling的時候,就直接把(-1-1)這個點的值填上去,其它的啟用值全部為0。

2、反啟用

我們在Alexnet中,relu函式是用於保證每層輸出的啟用值都是正數,因此對於反向過程,我們同樣需要保證每層的特徵圖為正值,也就是說這個反啟用過程和啟用過程沒有什麼差別,都是直接採用relu函式。

3、反捲積

對於反捲積過程,採用卷積過程轉置後的濾波器(引數一樣,只不過把引數矩陣水平和垂直方向翻轉了一下),這一點我現在也不是很明白,估計要採用數學的相關理論進行證明。

最後視覺化網路結構如下:

 

網路的整個過程,從右邊開始:輸入圖片-》卷積-》Relu-》最大池化-》得到結果特徵圖-》反池化-》Relu-》反捲積。到了這邊,可以說我們的演算法已經學習完畢了,其它部分是文獻要解釋理解CNN部分,可學可不學。

總的來說演算法主要有兩個關鍵點:1、反池化  2、反捲積,這兩個原始碼的實現方法,需要好好理解。

三、理解視覺化

特徵視覺化:一旦我們的網路訓練完畢了,我們就可以進行視覺化,檢視學習到了什麼東西。但是要怎麼看?怎麼理解,又是一回事了。我們利用上面的反捲積網路,對每一層的特徵圖進行檢視。

1、特徵視覺化結果


總的來說,通過CNN學習後,我們學習到的特徵,是具有辨別性的特徵,比如要我們區分人臉和狗頭,那麼通過CNN學習後,背景部位的啟用度基本很少,我們通過視覺化就可以看到我們提取到的特徵忽視了背景,而是把關鍵的資訊給提取出來了。從layer 1、layer 2學習到的特徵基本上是顏色、邊緣等低層特徵;layer 3則開始稍微變得複雜,學習到的是紋理特徵,比如上面的一些網格紋理;layer 4學習到的則是比較有區別性的特徵,比如狗頭;layer 5學習到的則是完整的,具有辨別性關鍵特徵。

2、特徵學習的過程作者給我們顯示了,在網路訓練過程中,每一層學習到的特徵是怎麼變化的,上面每一整張圖片是網路的某一層特徵圖,然後每一行有8個小圖片,分別表示網路epochs次數為:1251020304064的特徵圖:


結果:(1)仔細看每一層,在迭代的過程中的變化,出現了sudden jumps;(2)從層與層之間做比較,我們可以看到,低層在訓練的過程中基本沒啥變化,比較容易收斂,高層的特徵學習則變化很大。這解釋了低層網路的從訓練開始,基本上沒有太大的變化,因為梯度彌散嘛。(3)從高層網路conv5的變化過程,我們可以看到,剛開始幾次的迭代,基本變化不是很大,但是到了40~50的迭代的時候,變化很大,因此我們以後在訓練網路的時候,不要著急看結果,看結果需要保證網路收斂。

3、影象變換。從文獻中的圖片5視覺化結果,我們可以看到對於一張經過縮放、平移等操作的圖片來說:對網路的第一層影響比較大,到了後面幾層,基本上這些變換提取到的特徵沒什麼比較大的變化。

個人總結:我個人感覺學習這篇文獻的演算法,不在於視覺化,而在於學習反捲積網路,如果懂得了反捲積網路,那麼在以後的文獻中,你會經常遇到這個演算法。大部分CNN結構中,如果網路的輸出是一整張圖片的話,那麼就需要使用到反捲積網路,比如圖片語義分割、圖片去模糊、視覺化、圖片無監督學習、圖片深度估計,像這種網路的輸出是一整張圖片的任務,很多都有相關的文獻,而且都是利用了反捲積網路,取得了牛逼哄哄的結果。所以我覺得我學習這篇文獻,更大的意義在於學習反捲積網路。

參考文獻:

1、《Visualizing and Understanding Convolutional Networks》

2、Adaptive deconvolutional networks for mid and high level feature learning》

3、《Stacked What-Where Auto-encoders》

**********************作者:hjimce   時間:2016.1.10  聯絡QQ:1393852684   原創文章,轉載請保留原文地址、作者等資訊**************

相關推薦

深度學習視覺理解神經網路反池 pooling unpooling

本篇博文主要講解2014年ECCV上的一篇經典文獻:《Visualizing and Understanding Convolutional Networks》,可以說是CNN領域視覺化理解的開山之作,這篇文獻告訴我們CNN的每一層到底學習到了什麼特徵,然後作者通過視覺化進行調整網路,提高了精度。最近兩年深層

深度學習視覺理解神經網路

視覺化理解卷積神經網路作者:hjimce一、相關理論本篇博文主要講解2014年ECCV上的一篇經典文獻:《Visualizing and Understanding Convolutional Netw

用反捲Deconvnet視覺理解神經網路

視覺化理解卷積神經網路 作者:hjimce 一、相關理論 本篇博文主要講解2014年ECCV上的一篇經典文獻:《Visualizing and Understanding Convolutional Networks》,可以說是CNN領域視覺化理解的開山之作,這

視覺理解神經網路

視覺化理解卷積神經網路 原文地址:http://blog.csdn.net/hjimce/article/details/50544370 作者:hjimce 一、相關理論   本篇博文主要講解2014年ECCV上的一篇經典文獻:《Visualizing and Und

【轉】JMeter學習Jmeter常見問題

pre 麻煩 continue 而不是 行為 let 方式 prop 右上角 收集工作中JMeter遇到的各種問題 1. JMeter的工作原理是什麽?   向服務器提交請求;從服務器取回請求返回的結果。 2. JMeter的作用?   JMeter可以用於測試

python學習郵件發送及面向對象編程1

() ive none 類名 學習 什麽 安全 password 一個 郵件發送 使用郵件發送功能,需要先做以下三點: 1、在郵箱設置裏面打開smtp服務 2、開啟郵箱授權碼,記住這個授權碼 3、安裝yagmail, 用 pip install yagmail-0.10.

深度學習——L2 Normalization, Attention1

L2 Normalization L2 Normalization本身並不複雜,然而多數資料都只提到1維的L2 Normalization的計算公式: x=[x1,x2,…,xd]y=[y1,y2,…,yd]y=x∑di=1x2i‾‾‾‾‾‾‾√=xxT

深度學習基於多尺度深度網路的單幅影象深度估計

基於多尺度深度網路的單幅影象深度估計作者:hjimce一、相關理論本篇博文主要講解來自2014年NIPS上的一篇paper:《Depth Map Prediction from a Single Image using a Multi-Scale Deep Network》,

深度學習——Normalization進階, CTC

Normalization進階 和Batch Normalization類似的概念還有Weight Normalization和Layer Normalization。 Batch Normalization 從上圖可以看出,BN是對input tensor的每個通道進

系統學習深度學習--GoogLeNetV4與Inception-ResNet V1,V2

[v4] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning,top5 error 3.08% 上面那篇論文,主要貢獻如下: 1、在Inception v3

深度學習Batch Normalization 學習筆記

Batch Normalization 學習筆記 作者:hjimce 一、背景意義 本篇博文主要講解2015年深度學習領域,非常值得學習的一篇文獻:《Batch Normalization: Acc

深度學習tensorflow andorid yolo物體檢測測試

一、修改tensorflow/workspace檔案,取消android相關注釋:# Uncomment and update the paths in these entries to build t

深度學習——SRCNN, DRCN, VDSR

影象超解析度演算法(續) 前DL時代的SR 從訊號處理的角度來說,LR之所以無法恢復成HR,主要在於丟失了影象的高頻資訊。(Nyquist取樣定理) Harry Nyquist,1889~1976,University of North Da

C++學習C語言部分之 預處理命令

world! 條件編譯 *** 所有 表達 自己 函數的參數 .lib 修改 結構體 聯合 枚舉 聯合 只能保存最後賦值的結果枚舉 所有可能值列出來 預處理命令是在編譯前期的階段 代碼-(編譯)-->可執行文件(exe)預編譯 編譯前對代碼處理 *1.插

軟體設計模式學習訪問者模式

> 訪問者模式是一種較為複雜的行為型設計模式,它包含訪問者和被訪問元素兩個主要組成部分,這些被訪問的元素具有不同的型別,且不同的訪問者可以對其進行不同的訪問操作 ## 模式動機 對於系統中某些物件,它們儲存在同一個集合中,且具有不同的型別。對於該集合中的物件,可以接受一類稱為訪問者的物件來訪問,不

Pytest 學習- Jenkins+Allure+Pytest的持續整合

## 一、配置 allure 環境變數 ### 1、下載 allure是一個命令列工具,可以去 github 下載最新版:https://github.com/allure-framework/allure2/releases ![](https://img2020.cnblogs.com/blog/7188

深度學習基於級聯神經網路的人臉特徵點定位

基於級聯卷積神經網路的人臉特徵點定位作者:hjimce一、相關理論本篇博文主要講解2013年CVPR的一篇利用深度學習做人臉特徵點定位的經典paper:《Deep Convolutional Netwo

Deep Learning深度學習學習筆記整理系列之Convolutional Neural Networks神經網路

轉處:http://blog.csdn.net/zouxy09/article/details/8781543/ Deep Learning(深度學習)學習筆記整理系列 作者:Zouxy version 1.0 2013-04-08 宣告: 1)該Deep

CNN筆記:通俗理解神經網路

   在深度學習中,有一個很重要的概念,就是卷積神經網路(CNN),是入門深度學習需要搞懂的東西。 1 卷積網路         也叫卷積神經網路(convolutional neural networ

視覺探索神經網路提取特徵

前言 卷積神經網路的發展主要是為了解決人類視覺問題,不過現在其它方向也都會使用。發展歷程主要從Lenet5->Alexnet->VGG->GooLenet->ResNet等。 傳統神經網路 傳統BP神經網路層與層之間都是全連線的,對於影象處理領域,當神