① [圖像演算法]-卷積神經網路(CNN)的結構設計都有哪些思想
LeNet5不是CNN的起點,但卻是它的hello world,讓大家看到了卷積神經網路商用的前景。
1*1卷積本身只是N*N卷積的卷積核半徑大小退化為1時的特例,但是由於它以較小的計算代價增強了網路的非線性表達能力,給網路結構在橫向和縱向拓展提供了非常好的工具,常用於升維和降維操作,尤其是在深層網路和對計算效率有較高要求的網路中廣泛使用。
GoogLeNet奪得ImageNet2014年分類冠軍,也被稱為Inception V1。Inception V1有22層深,參數量為5M。同一時期的VGGNet性能和Inception V1差不多,但是參數量卻遠大於Inception V1。Inception的優良特性得益於Inception Mole,結構如下圖:
脫胎於Xception的網路結構MobileNets使用Depthwise Separable Convolution(深度可分離卷積)構建了輕量級的28層神經網路,成為了移動端上的高性能優秀基準模型。
當深層網路陷身於梯度消失等問題而導致不能很有效地訓練更深的網路時,脫胎於highway network的殘差網路應運而生,附帶著MSRA和何凱明的學術光環,詮釋了因為簡單,所以有效,但你未必能想到和做到的樸素的道理。
② 卷積神經網路
關於花書中卷積網路的筆記記錄於 https://www.jianshu.com/p/5a3c90ea0807 。
卷積神經網路(Convolutional Neural Network,CNN或ConvNet)是一種具有 局部連接、權重共享 等特性的深層前饋神經網路。卷積神經網路是受生物學上感受野的機制而提出。 感受野(Receptive Field) 主要是指聽覺、視覺等神經系統中一些神經元的特性,即 神經元只接受其所支配的刺激區域內的信號 。
卷積神經網路最早是主要用來處理圖像信息。如果用全連接前饋網路來處理圖像時,會存在以下兩個問題:
目前的卷積神經網路一般是由卷積層、匯聚層和全連接層交叉堆疊而成的前饋神經網路,使用反向傳播演算法進行訓練。 卷積神經網路有三個結構上的特性:局部連接,權重共享以及匯聚 。這些特性使卷積神經網路具有一定程度上的平移、縮放和旋轉不變性。
卷積(Convolution)是分析數學中一種重要的運算。在信號處理或圖像處理中,經常使用一維或二維卷積。
一維卷積經常用在信號處理中,用於計算信號的延遲累積。假設一個信號發生器每個時刻t 產生一個信號 ,其信息的衰減率為 ,即在 個時間步長後,信息為原來的 倍。假設 ,那麼在時刻t收到的信號 為當前時刻產生的信息和以前時刻延遲信息的疊加:
我們把 稱為 濾波器(Filter)或卷積核(Convolution Kernel) 。假設濾波器長度為 ,它和一個信號序列 的卷積為:
信號序列 和濾波器 的卷積定義為:
一般情況下濾波器的長度 遠小於信號序列長度 ,下圖給出一個一維卷積示例,濾波器為 :
二維卷積經常用在圖像處理中。因為圖像為一個兩維結構,所以需要將一維卷積進行擴展。給定一個圖像 和濾波器 ,其卷積為:
下圖給出一個二維卷積示例:
注意這里的卷積運算並不是在圖像中框定卷積核大小的方框並將各像素值與卷積核各個元素相乘並加和,而是先把卷積核旋轉180度,再做上述運算。
在圖像處理中,卷積經常作為特徵提取的有效方法。一幅圖像在經過卷積操作後得到結果稱為 特徵映射(Feature Map) 。
最上面的濾波器是常用的高斯濾波器,可以用來對圖像進行 平滑去噪 ;中間和最下面的過濾器可以用來 提取邊緣特徵 。
在機器學習和圖像處理領域,卷積的主要功能是在一個圖像(或某種特徵)上滑動一個卷積核(即濾波器),通過卷積操作得到一組新的特徵。在計算卷積的過程中,需要進行卷積核翻轉(即上文提到的旋轉180度)。 在具體實現上,一般會以互相關操作來代替卷積,從而會減少一些不必要的操作或開銷。
互相關(Cross-Correlation)是一個衡量兩個序列相關性的函數,通常是用滑動窗口的點積計算來實現 。給定一個圖像 和卷積核 ,它們的互相關為:
互相關和卷積的區別僅在於卷積核是否進行翻轉。因此互相關也可以稱為不翻轉卷積 。當卷積核是可學習的參數時,卷積和互相關是等價的。因此,為了實現上(或描述上)的方便起見,我們用互相關來代替卷積。事實上,很多深度學習工具中卷積操作其實都是互相關操作。
在卷積的標準定義基礎上,還可以引入濾波器的 滑動步長 和 零填充 來增加卷積多樣性,更靈活地進行特徵抽取。
濾波器的步長(Stride)是指濾波器在滑動時的時間間隔。
零填充(Zero Padding)是在輸入向量兩端進行補零。
假設卷積層的輸入神經元個數為 ,卷積大小為 ,步長為 ,神經元兩端各填補 個零,那麼該卷積層的神經元數量為 。
一般常用的卷積有以下三類:
因為卷積網路的訓練也是基於反向傳播演算法,因此我們重點關注卷積的導數性質:
假設 。
, , 。函數 為一個標量函數。
則由 有:
可以看出, 關於 的偏導數為 和 的卷積 :
同理得到:
當 或 時, ,即相當於對 進行 的零填充。從而 關於 的偏導數為 和 的寬卷積 。
用互相關的「卷積」表示,即為(注意 寬卷積運算具有交換性性質 ):
在全連接前饋神經網路中,如果第 層有 個神經元,第 層有 個神經元,連接邊有 個,也就是權重矩陣有 個參數。當 和 都很大時,權重矩陣的參數非常多,訓練的效率會非常低。
如果採用卷積來代替全連接,第 層的凈輸入 為第 層活性值 和濾波器 的卷積,即:
根據卷積的定義,卷積層有兩個很重要的性質:
由於局部連接和權重共享,卷積層的參數只有一個m維的權重 和1維的偏置 ,共 個參數。參數個數和神經元的數量無關。此外,第 層的神經元個數不是任意選擇的,而是滿足 。
卷積層的作用是提取一個局部區域的特徵,不同的卷積核相當於不同的特徵提取器。
特徵映射(Feature Map)為一幅圖像(或其它特徵映射)在經過卷積提取到的特徵,每個特徵映射可以作為一類抽取的圖像特徵。 為了提高卷積網路的表示能力,可以在每一層使用多個不同的特徵映射,以更好地表示圖像的特徵。
在輸入層,特徵映射就是圖像本身。如果是灰度圖像,就是有一個特徵映射,深度 ;如果是彩色圖像,分別有RGB三個顏色通道的特徵映射,深度 。
不失一般性,假設一個卷積層的結構如下:
為了計算輸出特徵映射 ,用卷積核 分別對輸入特徵映射 進行卷積,然後將卷積結果相加,並加上一個標量偏置 得到卷積層的凈輸入 再經過非線性激活函數後得到輸出特徵映射 。
在輸入為 ,輸出為 的卷積層中,每個輸出特徵映射都需要 個濾波器以及一個偏置。假設每個濾波器的大小為 ,那麼共需要 個參數。
匯聚層(Pooling Layer)也叫子采樣層(Subsampling Layer),其作用是進行特徵選擇,降低特徵數量,並從而減少參數數量。
常用的匯聚函數有兩種:
其中 為區域 內每個神經元的激活值。
可以看出,匯聚層不但可以有效地減少神經元的數量,還可以使得網路對一些小的局部形態改變保持不變性,並擁有更大的感受野。
典型的匯聚層是將每個特徵映射劃分為 大小的不重疊區域,然後使用最大匯聚的方式進行下采樣。匯聚層也可以看做是一個特殊的卷積層,卷積核大小為 ,步長為 ,卷積核為 函數或 函數。過大的采樣區域會急劇減少神經元的數量,會造成過多的信息損失。
一個典型的卷積網路是由卷積層、匯聚層、全連接層交叉堆疊而成。
目前常用卷積網路結構如圖所示,一個卷積塊為連續 個卷積層和 個匯聚層( 通常設置為 , 為 或 )。一個卷積網路中可以堆疊 個連續的卷積塊,然後在後面接著 個全連接層( 的取值區間比較大,比如 或者更大; 一般為 )。
目前,整個網路結構 趨向於使用更小的卷積核(比如 和 )以及更深的結構(比如層數大於50) 。此外,由於卷積的操作性越來越靈活(比如不同的步長),匯聚層的作用變得也越來越小,因此目前比較流行的卷積網路中, 匯聚層的比例也逐漸降低,趨向於全卷積網路 。
在全連接前饋神經網路中,梯度主要通過每一層的誤差項 進行反向傳播,並進一步計算每層參數的梯度。在卷積神經網路中,主要有兩種不同功能的神經層:卷積層和匯聚層。而參數為卷積核以及偏置,因此 只需要計算卷積層中參數的梯度。
不失一般性,第 層為卷積層,第 層的輸入特徵映射為 ,通過卷積計算得到第 層的特徵映射凈輸入 ,第 層的第 個特徵映射凈輸入
由 得:
同理可得,損失函數關於第 層的第 個偏置 的偏導數為:
在卷積網路中,每層參數的梯度依賴其所在層的誤差項 。
卷積層和匯聚層中,誤差項的計算有所不同,因此我們分別計算其誤差項。
第 層的第 個特徵映射的誤差項 的具體推導過程如下:
其中 為第 層使用的激活函數導數, 為上采樣函數(upsampling),與匯聚層中使用的下采樣操作剛好相反。如果下采樣是最大匯聚(max pooling),誤差項 中每個值會直接傳遞到上一層對應區域中的最大值所對應的神經元,該區域中其它神經元的誤差項的都設為0。如果下采樣是平均匯聚(meanpooling),誤差項 中每個值會被平均分配到上一層對應區域中的所有神經元上。
第 層的第 個特徵映射的誤差項 的具體推導過程如下:
其中 為寬卷積。
LeNet-5雖然提出的時間比較早,但是是一個非常成功的神經網路模型。基於LeNet-5 的手寫數字識別系統在90年代被美國很多銀行使用,用來識別支票上面的手寫數字。LeNet-5 的網路結構如圖:
不計輸入層,LeNet-5共有7層,每一層的結構為:
AlexNet是第一個現代深度卷積網路模型,其首次使用了很多現代深度卷積網路的一些技術方法,比如採用了ReLU作為非線性激活函數,使用Dropout防止過擬合,使用數據增強來提高模型准確率等。AlexNet 贏得了2012 年ImageNet 圖像分類競賽的冠軍。
AlexNet的結構如圖,包括5個卷積層、3個全連接層和1個softmax層。因為網路規模超出了當時的單個GPU的內存限制,AlexNet 將網路拆為兩半,分別放在兩個GPU上,GPU間只在某些層(比如第3層)進行通訊。
AlexNet的具體結構如下:
在卷積網路中,如何設置卷積層的卷積核大小是一個十分關鍵的問題。 在Inception網路中,一個卷積層包含多個不同大小的卷積操作,稱為Inception模塊。Inception網路是由有多個inception模塊和少量的匯聚層堆疊而成 。
v1版本的Inception模塊,採用了4組平行的特徵抽取方式,分別為1×1、3× 3、5×5的卷積和3×3的最大匯聚。同時,為了提高計算效率,減少參數數量,Inception模塊在進行3×3、5×5的卷積之前、3×3的最大匯聚之後,進行一次1×1的卷積來減少特徵映射的深度。如果輸入特徵映射之間存在冗餘信息, 1×1的卷積相當於先進行一次特徵抽取 。
③ (7)卷積神經網路的基本結構
卷積神經網路主要結構有:卷積層、池化層、和全連接層。通過堆疊這些層結構形成一個卷積神經網路。將原始圖像轉化為類別得分,其中卷積層和全連接層擁有參數,激活層和池化層沒有參數。參數更新通過反向傳播實現。
(1)卷積層
卷積核是一系列的濾波器,用來提取某一種特徵
我們用它來處理一個圖片,當圖像特徵與過濾器表示的特徵相似時,卷積操作可以得到一個比較大的值。
當圖像特徵與過濾器不相似時,卷積操作可以得到一個比較小的值,實際上,卷積的結果特徵映射圖顯示的是對應卷積核所代表的特徵在原始特徵圖上的分布情況。
每個濾波器在空間上(寬度和高度)都比較小,但是深度和輸入數據保持一致(特徵圖的通道數),當卷積核在原圖像滑動時,會生成一個二維激活圖,激活圖上每個空間位置代表原圖像對該卷積核的反應。每個卷積層,會有一整個集合的卷積核,有多少個卷積核,輸出就有多少個通道。每個卷積核生成一個特徵圖,這些特徵圖堆疊起來組成整個輸出結果。
卷積核體現了參數共享和局部連接的模式。每個卷積核的大小代表了一個感受野的大小。
卷積後的特徵圖大小為(W-F+2*P)/s+1 ;P 為填充 s 為步長
(2)池化層
池化層本質上是下采樣,利用圖像局部相關性的原理(認為最大值或者均值代表了這個局部的特徵),對圖像進行子抽樣,可以減少數據處理量同時保留有用信息。這里池化有平均池化,L2範式池化,最大池化,經過實踐,最大池化的效果要好於平均池化(平均池化一般放在卷積神經網路的最後一層),最大池化有利於保存紋理信息,平均池化有利於保存背景信息。實際上(因為信息損失的原因)我們可以看到,通過在卷積時使用更大的步長也可以縮小特徵映射的尺寸,並不一定要用池化,有很多人不建議使用池化層。32*32在5*5卷積核步長為1下可得到28*28。
池化操作可以逐漸降低數據體的空間尺寸,這樣的話就能減少網路中參數的數量,使得計算資源耗費變少,也能有效控制過擬合。
(3)全連接層
通過全連接層將特徵圖轉化為類別輸出。全連接層不止一層,在這個過程中為了防止過擬合會引入DropOut。最新研究表明,在進入全連接層之前,使用全局平均池化可以有效降低過擬合。
(4)批歸一化BN——Batch Normal
隨著神經網路訓練的進行,每個隱層的參數變化使得後一層的輸入發生變化,從而每一批的訓練數據的分布也隨之改變,致使網路在每次迭代中都需要擬合不同的數據分布,增大訓練復雜度和過擬合的風險,只能採用較小的學習率去解決。
通常卷積層後就是BN層加Relu。BN已經是卷積神經網路中的一個標准技術。標准化的過程是可微的,因此可以將BN應用到每一層中做前向和反向傳播,同在接在卷積或者全連接層後,非線性層前。它對於不好的初始化有很強的魯棒性,同時可以加快網路收斂速度。
(5)DropOut
Dropout對於某一層神經元,通過定義的概率來隨機刪除一些神經元,同時保持輸入層與輸出層神經元的個數不變,然後按照神經網路的學習方法進行參數更新,下一次迭代中,重新隨機刪除一些神經元,直至訓練結束。
(6)softmax層
Softmax層也不屬於CNN中單獨的層,一般要用CNN做分類的話,我們習慣的方式是將神經元的輸出變成概率的形式,Softmax就是做這個的: 。顯然Softmax層所有的輸出相加為1,按照這個概率的大小確定到底屬於哪一類。
④ 卷積神經網路CNN在圖像識別問題應用綜述(20191219)
這兩天在公司做PM實習,主要是自學一些CV的知識,以了解產品在解決一些在圖像識別、圖像搜索方面的問題,學習的主要方式是在知網檢索了6.7篇國內近3年計算機視覺和物體識別的碩博士論文。由於時間關系,後面還會繼續更新圖片相似度計算(以圖搜圖)等方面的學習成果
將這兩天的學習成果在這里總結一下。你將會看到計算機視覺在解決特定物體識別問題(主要是卷積神經網路CNNs)的基礎過程和原理,但這里不會深入到技術的實現層面。
計算機視覺(Computer vision)是一門研究如何使機器「看」的科學,更進一步的說,就是指用攝影機和計算機代替人眼對目標進行識別、跟蹤和測量等機器視覺,並進一步做圖像處理,用計算機處理成為更適合人眼觀察或傳送給儀器檢測的圖像。
————維基網路
通常而言,計算機視覺的研究包括三個層次:
(1)底層特徵的研究:
這一層次的研究主要聚焦如何高效提取出圖像對象具有判別性能的特徵,具體的研究內容通常包括:物體識別、字元識別等
(2)中層語義特徵的研究:
該層次的研究在於在識別出對象的基礎上,對其位置、邊緣等信息能夠准確區分。現在比較熱門的:圖像分割;語義分割;場景標注等,都屬於該領域的范疇
(3)高層語義理解:
這一層次建立在前兩層的基礎上,其核心在於「理解」一詞。 目標在於對復雜圖像中的各個對象完成語義級別的理解。這一層次的研究常常應用於:場景識別、圖像摘要生成及圖像語義回答等。
而我研究的問題主要隸屬於底層特徵和中層語義特徵研究中的物體識別和場景標注問題。
人類的視覺工作模式是這樣的:
首先,我們大腦中的神經元接收到大量的信息微粒,但我們的大腦還並不能處理它們。
於是接著神經元與神經元之間交互將大量的微粒信息整合成一條又一條的線。
接著,無數條線又整合成一個個輪廓。
最後多個輪廓累加終於聚合我們現在眼前看到的樣子。
計算機科學受到神經科學的啟發,也採用了類似的工作方式。具體而言,圖像識別問題一般都遵循下面幾個流程
(1)獲取底層信息。獲取充分且清潔的高質量數據往往是圖像識別工作能否成功的關鍵所在
(2)數據預處理工作,在圖像識別領域主要包括四個方面的技術:去噪處理(提升信噪比)、圖像增強和圖像修復(主要針對不夠清晰或有破損缺失的圖像);歸一化處理(一方面是為了減少開銷、提高演算法的性能,另一方面則是為了能成功使用深度學習等演算法,這類演算法必須使用歸一化數據)。
(3)特徵提取,這一點是該領域的核心,也是本文的核心。圖像識別的基礎是能夠提取出足夠高質量,能體現圖像獨特性和區分度的特徵。
過去在10年代之前我們主要還是更多的使用傳統的人工特徵提取方法,如PCALCA等來提取一些人工設計的特徵,主要的方法有(HOG、LBP以及十分著名的SIFT演算法)。但是這些方法普遍存在(a)一般基於圖像的一些提層特徵信息(如色彩、紋理等)難以表達復雜的圖像高層語義,故泛化能力普遍比較弱。(b)這些方法一般都針對特定領域的特定應用設計,泛化能力和遷移的能力大多比較弱。
另外一種思路是使用BP方法,但是畢竟BP方法是一個全連接的神經網路。這以為這我們非常容易發生過擬合問題(每個元素都要負責底層的所有參數),另外也不能根據樣本對訓練過程進行優化,實在是費時又費力。
因此,一些研究者開始嘗試把諸如神經網路、深度學習等方法運用到特徵提取的過程中,以十幾年前深度學習方法在業界最重要的比賽ImageNet中第一次戰勝了SIFT演算法為分界線,由於其使用權重共享和特徵降采樣,充分利用了數據的特徵。幾乎每次比賽的冠軍和主流都被深度學習演算法及其各自改進型所佔領。其中,目前使用較多又最為主流的是CNN演算法,在第四部分主要也研究CNN方法的機理。
上圖是一個簡易的神經網路,只有一層隱含層,而且是全連接的(如圖,上一層的每個節點都要對下一層的每個節點負責。)具體神經元與神經元的作用過程可見下圖。
在諸多傳統的神經網路中,BP演算法可能是性能最好、應用最廣泛的演算法之一了。其核心思想是:導入訓練樣本、計算期望值和實際值之間的差值,不斷地調整權重,使得誤差減少的規定值的范圍內。其具體過程如下圖:
一般來說,機器學習又分成淺層學習和深度學習。傳統的機器學習演算法,如SVM、貝葉斯、神經網路等都屬於淺層模型,其特點是只有一個隱含層。邏輯簡單易懂、但是其存在理論上缺乏深度、訓練時間較長、參數很大程度上依賴經驗和運氣等問題。
如果是有多個隱含層的多層神經網路(一般定義為大於5層),那麼我們將把這個模型稱為深度學習,其往往也和分層訓練配套使用。這也是目前AI最火的領域之一了。如果是淺層模型的問題在於對一個復雜函數的表示能力不夠,特別是在復雜問題分類情況上容易出現分類不足的弊端,深度網路的優勢則在於其多層的架構可以分層表示邏輯,這樣就可以用簡單的方法表示出復雜的問題,一個簡單的例子是:
如果我們想計算sin(cos(log(exp(x)))),
那麼深度學習則可分層表示為exp(x)—>log(x)—>cos(x)—>sin(x)
圖像識別問題是物體識別的一個子問題,其魯棒性往往是解決該類問題一個非常重要的指標,該指標是指分類結果對於傳入數據中的一些轉化和扭曲具有保持不變的特性。這些轉化和扭曲具體主要包括了:
(1)噪音(2)尺度變化(3)旋轉(4)光線變化(5)位移
該部分具體的內容,想要快速理解原理的話推薦看[知乎相關文章] ( https://www.hu.com/search?type=content&q=CNN ),
特別是其中有些高贊回答中都有很多動圖和動畫,非常有助於理解。
但核心而言,CNN的核心優勢在於 共享權重 以及 感受野 ,減少了網路的參數,實現了更快的訓練速度和同樣預測結果下更少的訓練樣本,而且相對於人工方法,一般使用深度學習實現的CNN演算法使用無監督學習,其也不需要手工提取特徵。
CNN演算法的過程給我的感覺,個人很像一個「擦玻璃」的過程。其技術主要包括了三個特性:局部感知、權重共享和池化。
CNN中的神經元主要分成了兩種:
(a)用於特徵提取的S元,它們一起組成了卷積層,用於對於圖片中的每一個特徵首先局部感知。其又包含很關鍵的閾值參數(控制輸出對輸入的反映敏感度)和感受野參數(決定了從輸入層中提取多大的空間進行輸入,可以簡單理解為擦玻璃的抹布有多大)
(b)抗形變的C元,它們一起組成了池化層,也被稱為欠采樣或下采樣。主要用於特徵降維,壓縮數據和參數的數量,減小過擬合,同時提高模型的容錯性。
(c*)激活函數,及卷積層輸出的結果要經過一次激勵函數才會映射到池化層中,主要的激活函數有Sigmoid函數、Tanh函數、ReLU、Leaky ReLU、ELU、Maxout等。
也許你會抱有疑問,CNN演算法和傳統的BP演算法等究竟有什麼區別呢。這就會引出區域感受野的概念。在前面我們提到,一個全連接中,較高一層的每個神經元要對低層的每一個神經元負責,從而導致了過擬合和維度災難的問題。但是有了區域感受野和,每個神經元只需要記錄一個小區域,而高層會把這些信息綜合起來,從而解決了全連接的問題。
了解區域感受野後,你也許會想,區域感受野的底層神經元具體是怎麼聚合信息映射到上一層的神經元呢,這就要提到重要的卷積核的概念。這個過程非常像上面曾提到的「神經元與神經元的聯系」一圖,下面給大家一個很直觀的理解。
上面的這個過程就被稱為一個卷積核。在實際應用中,單特徵不足以被系統學習分類,因此我們往往會使用多個濾波器,每個濾波器對應1個卷積核,也對應了一個不同的特徵。比如:我們現在有一個人臉識別應用,我們使用一個卷積核提取出眼睛的特徵,然後使用另一個卷積核提取出鼻子的特徵,再用一個卷積核提取出嘴巴的特徵,最後高層把這些信息聚合起來,就形成了分辨一個人與另一個人不同的判斷特徵。
現在我們已經有了區域感受野,也已經了解了卷積核的概念。但你會發現在實際應用中還是有問題:
給一個100 100的參數空間,假設我們的感受野大小是10 10,那麼一共有squar(1000-10+1)個,即10的六次方個感受野。每個感受野中就有100個參數特徵,及時每個感受野只對應一個卷積核,那麼空間內也會有10的八次方個次數,,更何況我們常常使用很多個卷積核。巨大的參數要求我們還需要進一步減少權重參數,這就引出了權重共享的概念。
用一句話概括就是,對同一個特徵圖,每個感受野的卷積核是一樣的,如這樣操作後上例只需要100個參數。
池化是CNN技術的最後一個特性,其基本思想是: 一塊區域有用的圖像特徵,在另一塊相似的區域中很可能仍然有用。即我們通過卷積得到了大量的邊緣EDGE數據,但往往相鄰的邊緣具有相似的特性,就好像我們已經得到了一個強邊緣,再擁有大量相似的次邊緣特徵其實是沒有太大增量價值的,因為這樣會使得系統里充斥大量冗餘信息消耗計算資源。 具體而言,池化層把語義上相似的特徵合並起來,通過池化操作減少卷積層輸出的特徵向量,減少了參數,緩解了過擬合問題。常見的池化操作主要包括3種:
分別是最大值池化(保留了圖像的紋理特徵)、均值池化(保留了圖像的整體特徵)和隨機值池化。該技術的弊端是容易過快減小數據尺寸,目前趨勢是用其他方法代替池化的作用,比如膠囊網路推薦採用動態路由來代替傳統池化方法,原因是池化會帶來一定程度上表徵的位移不變性,傳統觀點認為這是一個優勢,但是膠囊網路的作者Hinton et al.認為圖像中位置信息是應該保留的有價值信息,利用特別的聚類評分演算法和動態路由的方式可以學習到更高級且靈活的表徵,有望沖破目前卷積網路構架的瓶頸。
CNN總體來說是一種結構,其包含了多種網路模型結構,數目繁多的的網路模型結構決定了數據擬合能力和泛化能力的差異。其中的復雜性對用戶的技術能力有較高的要求。此外,CNN仍然沒有很好的解決過擬合問題和計算速度較慢的問題。
該部分的核心參考文獻:
《深度學習在圖像識別中的應用研究綜述》鄭遠攀,李廣陽,李曄.[J].計算機工程與應用,2019,55(12):20-36.
深度學習技術在計算機圖像識別方面的領域應用研究是目前以及可預見的未來的主流趨勢,在這里首先對深度學習的基本概念作一簡介,其次對深度學習常用的結構模型進行概述說明,主要簡述了深度信念網路(DBN)、卷積神經網路(CNN)、循環神經網路(RNN)、生成式對抗網路(GAN)、膠囊網路(CapsNet)以及對各個深度模型的改進模型做一對比分析。
深度學習按照學習架構可分為生成架構、判別架構及混合架構。
其生成架構模型主要包括:
受限波爾茲曼機、自編碼器、深層信念網路等。判別架構模型主要包括:深層前饋網路、卷積神經網路等。混合架構模型則是這兩種架構的集合。深度學習按數據是否具有標簽可分為非監督學習與監督學習。非監督學習方法主要包括:受限玻爾茲曼機、自動編碼器、深層信念網路、深層玻爾茲曼機等。
監督學習方法主要包括:深層感知器、深層前饋網路、卷積神經網路、深層堆疊網路、循環神經網路等。大量實驗研究表明,監督學習與非監督學習之間無明確的界限,如:深度信念網路在訓練過程中既用到監督學習方法又涉及非監督學習方法。
[1]周彬. 多視圖視覺檢測關鍵技術及其應用研究[D].浙江大學,2019.
[2]鄭遠攀,李廣陽,李曄.深度學習在圖像識別中的應用研究綜述[J].計算機工程與應用,2019,55(12):20-36.
[3]逄淑超. 深度學習在計算機視覺領域的若干關鍵技術研究[D].吉林大學,2017.
[4]段萌. 基於卷積神經網路的圖像識別方法研究[D].鄭州大學,2017.
[5]李彥冬. 基於卷積神經網路的計算機視覺關鍵技術研究[D].電子科技大學,2017.
[6]李衛. 深度學習在圖像識別中的研究及應用[D].武漢理工大學,2014.
[7]許可. 卷積神經網路在圖像識別上的應用的研究[D].浙江大學,2012.
[8]CSDN、知乎、機器之心、維基網路
⑤ 圖像分割:全卷積神經網路(FCN)詳解
作為計算機視覺三大任務(圖像分類、目標檢測、圖像分割)之一,圖像分割已經在近些年裡有了長足的發展。這項技術也被廣泛地應用於無人駕駛領域中,比如用來識別可通行區域、車道線等。
全卷積網路(Fully Convolutional Networks,FCN)是UC Berkeley的Jonathan Long等人於2015年在Fully Convolutional Networks for Semantic Segmentation一文中提出的用於圖像語義分割的一種框架。雖然已經有很多文章介紹這個框架,我還是希望在此整理一下自己的理解。
整體的網路結構分為兩個部分:全卷積部分和反卷積部分。其中全卷積部分借用了一些經典的CNN網路(如AlexNet,VGG,GoogLeNet等),並把最後的全連接層換成 卷積,用於提取特徵,形成熱點圖;反卷積部分則是將小尺寸的熱點圖上采樣得到原尺寸的語義分割圖像。
網路的輸入可以為任意尺寸的彩色圖像;輸出與輸入尺寸相同,通道數為:n(目標類別數)+1(背景)。
網路在CNN卷積部分不用全連接而是替換成 卷積的目的是允許輸入的圖片為超過某一尺寸的任意大小。
由於在卷積過程中,我們的heat map變得很小(比如長寬變為原圖像的 ),為了得到原圖像大小的稠密像素預測,我們需要進行上采樣。
一個直觀的想法是進行雙線性插值,而雙線性插值很容易用反向卷積(backwards convolution)通過固定的卷積核來實現。反向卷積又可以被稱為反卷積(deconvolution),在近期的文章中通常被稱為轉置卷積(transposed convolution)。
在實際應用中,作者並沒有固定卷積核,而是讓卷積核變成可學習的參數。
如果利用之前提到的上采樣技巧對最後一層的特徵圖進行上采樣的到原圖大小的分割,由於最後一層的特徵圖太小,我們會損失很多細節。因而作者提出增加Skips結構將最後一層的預測(有更富的全局信息)和更淺層(有更多的局部細節)的預測結合起來,這樣可以在遵守全局預測的同時進行局部預測。
FCN仍有一些缺點,比如:
得到的結果還不夠精細,對細節不夠敏感;
沒有考慮像素與像素之間的關系,缺乏空間一致性等。
參考: zomi,全卷積網路FCN詳解:知乎專欄文章
作者的其他相關文章:
PointNet:基於深度學習的3D點雲分類和分割模型 詳解
基於視覺的機器人室內定位
⑥ 神經網路:卷積神經網路(CNN)
神經網路 最早是由心理學家和神經學家提出的,旨在尋求開發和測試神經的計算模擬。
粗略地說, 神經網路 是一組連接的 輸入/輸出單元 ,其中每個連接都與一個 權 相關聯。在學習階段,通過調整權值,使得神經網路的預測准確性逐步提高。由於單元之間的連接,神經網路學習又稱 連接者學習。
神經網路是以模擬人腦神經元的數學模型為基礎而建立的,它由一系列神經元組成,單元之間彼此連接。從信息處理角度看,神經元可以看作是一個多輸入單輸出的信息處理單元,根據神經元的特性和功能,可以把神經元抽象成一個簡單的數學模型。
神經網路有三個要素: 拓撲結構、連接方式、學習規則
神經網路的拓撲結構 :神經網路的單元通常按照層次排列,根據網路的層次數,可以將神經網路分為單層神經網路、兩層神經網路、三層神經網路等。結構簡單的神經網路,在學習時收斂的速度快,但准確度低。
神經網路的層數和每層的單元數由問題的復雜程度而定。問題越復雜,神經網路的層數就越多。例如,兩層神經網路常用來解決線性問題,而多層網路就可以解決多元非線性問題
神經網路的連接 :包括層次之間的連接和每一層內部的連接,連接的強度用權來表示。
根據層次之間的連接方式,分為:
1)前饋式網路:連接是單向的,上層單元的輸出是下層單元的輸入,如反向傳播網路,Kohonen網路
2)反饋式網路:除了單項的連接外,還把最後一層單元的輸出作為第一層單元的輸入,如Hopfield網路
根據連接的范圍,分為:
1)全連接神經網路:每個單元和相鄰層上的所有單元相連
2)局部連接網路:每個單元只和相鄰層上的部分單元相連
神經網路的學習
根據學習方法分:
感知器:有監督的學習方法,訓練樣本的類別是已知的,並在學習的過程中指導模型的訓練
認知器:無監督的學習方法,訓練樣本類別未知,各單元通過競爭學習。
根據學習時間分:
離線網路:學習過程和使用過程是獨立的
在線網路:學習過程和使用過程是同時進行的
根據學習規則分:
相關學習網路:根據連接間的激活水平改變權系數
糾錯學習網路:根據輸出單元的外部反饋改變權系數
自組織學習網路:對輸入進行自適應地學習
摘自《數學之美》對人工神經網路的通俗理解:
神經網路種類很多,常用的有如下四種:
1)Hopfield網路,典型的反饋網路,結構單層,有相同的單元組成
2)反向傳播網路,前饋網路,結構多層,採用最小均方差的糾錯學習規則,常用於語言識別和分類等問題
3)Kohonen網路:典型的自組織網路,由輸入層和輸出層構成,全連接
4)ART網路:自組織網路
深度神經網路:
Convolutional Neural Networks(CNN)卷積神經網路
Recurrent neural Network(RNN)循環神經網路
Deep Belief Networks(DBN)深度信念網路
深度學習是指多層神經網路上運用各種機器學習演算法解決圖像,文本等各種問題的演算法集合。深度學習從大類上可以歸入神經網路,不過在具體實現上有許多變化。
深度學習的核心是特徵學習,旨在通過分層網路獲取分層次的特徵信息,從而解決以往需要人工設計特徵的重要難題。
Machine Learning vs. Deep Learning
神經網路(主要是感知器)經常用於 分類
神經網路的分類知識體現在網路連接上,被隱式地存儲在連接的權值中。
神經網路的學習就是通過迭代演算法,對權值逐步修改的優化過程,學習的目標就是通過改變權值使訓練集的樣本都能被正確分類。
神經網路特別適用於下列情況的分類問題:
1) 數據量比較小,缺少足夠的樣本建立模型
2) 數據的結構難以用傳統的統計方法來描述
3) 分類模型難以表示為傳統的統計模型
缺點:
1) 需要很長的訓練時間,因而對於有足夠長訓練時間的應用更合適。
2) 需要大量的參數,這些通常主要靠經驗確定,如網路拓撲或「結構」。
3) 可解釋性差 。該特點使得神經網路在數據挖掘的初期並不看好。
優點:
1) 分類的准確度高
2)並行分布處理能力強
3)分布存儲及學習能力高
4)對噪音數據有很強的魯棒性和容錯能力
最流行的基於神經網路的分類演算法是80年代提出的 後向傳播演算法 。後向傳播演算法在多路前饋神經網路上學習。
定義網路拓撲
在開始訓練之前,用戶必須說明輸入層的單元數、隱藏層數(如果多於一層)、每一隱藏層的單元數和輸出層的單元數,以確定網路拓撲。
對訓練樣本中每個屬性的值進行規格化將有助於加快學習過程。通常,對輸入值規格化,使得它們落入0.0和1.0之間。
離散值屬性可以重新編碼,使得每個域值一個輸入單元。例如,如果屬性A的定義域為(a0,a1,a2),則可以分配三個輸入單元表示A。即,我們可以用I0 ,I1 ,I2作為輸入單元。每個單元初始化為0。如果A = a0,則I0置為1;如果A = a1,I1置1;如此下去。
一個輸出單元可以用來表示兩個類(值1代表一個類,而值0代表另一個)。如果多於兩個類,則每個類使用一個輸出單元。
隱藏層單元數設多少個「最好」 ,沒有明確的規則。
網路設計是一個實驗過程,並可能影響准確性。權的初值也可能影響准確性。如果某個經過訓練的網路的准確率太低,則通常需要採用不同的網路拓撲或使用不同的初始權值,重復進行訓練。
後向傳播演算法學習過程:
迭代地處理一組訓練樣本,將每個樣本的網路預測與實際的類標號比較。
每次迭代後,修改權值,使得網路預測和實際類之間的均方差最小。
這種修改「後向」進行。即,由輸出層,經由每個隱藏層,到第一個隱藏層(因此稱作後向傳播)。盡管不能保證,一般地,權將最終收斂,學習過程停止。
演算法終止條件:訓練集中被正確分類的樣本達到一定的比例,或者權系數趨近穩定。
後向傳播演算法分為如下幾步:
1) 初始化權
網路的權通常被初始化為很小的隨機數(例如,范圍從-1.0到1.0,或從-0.5到0.5)。
每個單元都設有一個偏置(bias),偏置也被初始化為小隨機數。
2) 向前傳播輸入
對於每一個樣本X,重復下面兩步:
向前傳播輸入,向後傳播誤差
計算各層每個單元的輸入和輸出。輸入層:輸出=輸入=樣本X的屬性;即,對於單元j,Oj = Ij = Xj。隱藏層和輸出層:輸入=前一層的輸出的線性組合,即,對於單元j, Ij =wij Oi + θj,輸出=
3) 向後傳播誤差
計算各層每個單元的誤差。
輸出層單元j,誤差:
Oj是單元j的實際輸出,而Tj是j的真正輸出。
隱藏層單元j,誤差:
wjk是由j到下一層中單元k的連接的權,Errk是單元k的誤差
更新 權 和 偏差 ,以反映傳播的誤差。
權由下式更新:
其中,△wij是權wij的改變。l是學習率,通常取0和1之間的值。
偏置由下式更新:
其中,△θj是偏置θj的改變。
Example
人類視覺原理:
深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。1981 年的諾貝爾醫學獎,頒發給了 David Hubel(出生於加拿大的美國神經生物學家) 和Torsten Wiesel,以及Roger Sperry。前兩位的主要貢獻,是「發現了視覺系統的信息處理」, 可視皮層是分級的 。
人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定,眼前的物體的形狀,是圓形的),然後進一步抽象(大腦進一步判定該物體是只氣球)。
對於不同的物體,人類視覺也是通過這樣逐層分級,來進行認知的:
在最底層特徵基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特徵(輪子、眼睛、軀乾等),到最上層,不同的高級特徵最終組合成相應的圖像,從而能夠讓人類准確的區分不同的物體。
可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經網路,較低層的識別初級的圖像特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類呢?答案是肯定的,這也是許多深度學習演算法(包括CNN)的靈感來源。
卷積神經網路是一種多層神經網路,擅長處理圖像特別是大圖像的相關機器學習問題。卷積網路通過一系列方法,成功將數據量龐大的圖像識別問題不斷降維,最終使其能夠被訓練。
CNN最早由Yann LeCun提出並應用在手寫字體識別上。LeCun提出的網路稱為LeNet,其網路結構如下:
這是一個最典型的卷積網路,由 卷積層、池化層、全連接層 組成。其中卷積層與池化層配合,組成多個卷積組,逐層提取特徵,最終通過若干個全連接層完成分類。
CNN通過卷積來模擬特徵區分,並且通過卷積的權值共享及池化,來降低網路參數的數量級,最後通過傳統神經網路完成分類等任務。
降低參數量級:如果使用傳統神經網路方式,對一張圖片進行分類,那麼,把圖片的每個像素都連接到隱藏層節點上,對於一張1000x1000像素的圖片,如果有1M隱藏層單元,一共有10^12個參數,這顯然是不能接受的。
但是在CNN里,可以大大減少參數個數,基於以下兩個假設:
1)最底層特徵都是局部性的,也就是說,用10x10這樣大小的過濾器就能表示邊緣等底層特徵
2)圖像上不同小片段,以及不同圖像上的小片段的特徵是類似的,也就是說,能用同樣的一組分類器來描述各種各樣不同的圖像
基於以上兩個假設,就能把第一層網路結構簡化
用100個10x10的小過濾器,就能夠描述整幅圖片上的底層特徵。
卷積運算的定義如下圖所示:
如上圖所示,一個5x5的圖像,用一個3x3的 卷積核 :
101
010
101
來對圖像進行卷積操作(可以理解為有一個滑動窗口,把卷積核與對應的圖像像素做乘積然後求和),得到了3x3的卷積結果。
這個過程可以理解為使用一個過濾器(卷積核)來過濾圖像的各個小區域,從而得到這些小區域的特徵值。在實際訓練過程中, 卷積核的值是在學習過程中學到的。
在具體應用中,往往有多個卷積核,可以認為, 每個卷積核代表了一種圖像模式 ,如果某個圖像塊與此卷積核卷積出的值大,則認為此圖像塊十分接近於此卷積核。如果設計了6個卷積核,可以理解為這個圖像上有6種底層紋理模式,也就是用6種基礎模式就能描繪出一副圖像。以下就是24種不同的卷積核的示例:
池化 的過程如下圖所示:
可以看到,原始圖片是20x20的,對其進行采樣,采樣窗口為10x10,最終將其采樣成為一個2x2大小的特徵圖。
之所以這么做,是因為即使做完了卷積,圖像仍然很大(因為卷積核比較小),所以為了降低數據維度,就進行采樣。
即使減少了許多數據,特徵的統計屬性仍能夠描述圖像,而且由於降低了數據維度,有效地避免了過擬合。
在實際應用中,分為最大值采樣(Max-Pooling)與平均值采樣(Mean-Pooling)。
LeNet網路結構:
注意,上圖中S2與C3的連接方式並不是全連接,而是部分連接。最後,通過全連接層C5、F6得到10個輸出,對應10個數字的概率。
卷積神經網路的訓練過程與傳統神經網路類似,也是參照了反向傳播演算法
第一階段,向前傳播階段:
a)從樣本集中取一個樣本(X,Yp),將X輸入網路;
b)計算相應的實際輸出Op
第二階段,向後傳播階段
a)計算實際輸出Op與相應的理想輸出Yp的差;
b)按極小化誤差的方法反向傳播調整權矩陣。
⑦ PART 4 W1 卷積神經網路介紹
一個是圖像分類:如貓臉識別等;一個是目標檢測:如無人駕駛技術中的各種交通信號檢測技術
1. 卷積操作及過濾器/卷積核的概念
如上圖所示:最左側矩陣是一個灰度圖像,中間是一個3*3的小矩陣,稱為「卷積核」或「過濾器」。
卷積:先把卷積核放到灰度圖像左上角(綠色框),蓋住灰度圖像上一個3*3的矩陣區域,然後9對對應的元素相乘,然後求和(得到0),然後把卷積核逐漸移動一行一行的「掃描」,最終得到最右側矩陣。上述操作叫做「卷積」,最右側矩陣是卷積的輸出。
2. 垂直邊緣檢測
仍以上圖為例,可以看到3*3的卷積核具體的數值構成為「左邊一列1,中間一列0,右邊一列-1」,這種卷積核在「掃描」灰度圖像時,可以檢測到灰度圖像的垂直邊緣。分析如下:
1)假設正在掃描的灰度區域沒有垂直邊緣,意味著區域內的值在左右方向上分布差不多,與卷積核做完運算後,左邊的乘1,右邊的乘-1,相加正好有一定的抵消作用,其實計算出來的結果會接近0。即:卷積結果接近0代表沒有邊緣。
2)有垂直邊緣分為兩種情況:目標區域「左邊值較大,右邊值較小」 或「左邊值較小,右邊值較大」。前一種情況在卷積操作後會得到一個較大的正值,後一種情況卷積操作後會得到一個較大的負值。
可以看出,較大的正值代表著目標區域的變化趨勢與卷積核相同,即檢測到的是與卷積核相同的邊緣,而較大的負值代表目標區域的變化趨勢與卷積核相反,即檢測到的是與卷積核相反的邊緣。
3. 卷積應用在卷積神經網路中
卷積操作如何應用於神經網路中?簡言之,卷積核本身就是網路要學習的參數。如上圖所示,我們並不是事先設定好要檢測垂直邊緣或水平邊緣或其它什麼邊緣,而是要網路去學習要檢測什麼東西。
1. padding的原因
在上節展示的卷積操作中,可以看出,假設輸入圖像的大小為n*n,而卷積核的大小為f*f,那麼卷積核從輸入圖像的左上角掃描到右下角,最終得到的結果大小為(n-f+1)*(n-f+1),意味著如果一次次進行卷積,那麼結果的尺寸會越來越小
另外,顯然輸入圖像邊緣的像素被使用的較少(最邊緣的像素僅被使用一次),這顯然會造成信息的丟失。
2. 如何進行padding
非常簡單:把輸入圖像的四周補充p = (f-1)/2 圈的0,這樣輸入的圖像尺寸變成了(n+2p)*(n+2p),因此卷積後的大小變成了(n+2p -f + 1)*(n+2p -f + 1)=n*n,即與原始的圖像有了相同的大小,且原始圖像邊緣的像素也被較多的利用到。
3. 幾點補充
(1)卷積核的尺寸設置為 奇數 :因為① 這樣(f-1)/2就恰好是整數了,方便進行padding,② 有中心像素,便於表徵卷積核的位置,等。
(2)根據是否進行padding,分為 普通卷積(valid) 和 同尺寸卷積(same)
1. 步長概念
在上文中講到卷積,即使用一個卷積核對輸入圖像進行「掃描」並進行相應計算時,提到這個「掃描」是逐個像素逐個像素的邁進的。但是,並不一定非得這樣,也可以每次跨越兩個或更多個像素,這就是「步長」的概念,一般用s表示
2. 卷積結果尺寸與步長的關系
前文提到,若輸入圖像尺寸為n*n,卷積核尺寸為f*f,則卷積結果尺寸為(n+f-1)*(n+f-1),若算上padding操作,則結果為(n+2p -f + 1)*(n+2p -f + 1)。這是在步長s=1的前提下成立。若步長不為1,則結果為floor((n+2p-f)/s+1)**2
3. 其它:數學中的卷積和神經網路中的卷積
需要說明的是,神經網路中所說的卷積和數學中說的卷積不是一回事,但數學中的卷積是啥就不追究了。
神經網路中的卷積操作,在數學的描述上,更像是一種「交叉相關性」的計算,可以看出,若目標區域與卷積核有類似的分布,則會計算出較大的正值(正相關),若有相反的分布,則會計算出較大的負值(負相關),若沒什麼關系,則會計算出接近0的值(不相關)。卷積操作的確很像一種相關性的計算。
1. RGB圖像的數學構成
灰度圖像是一個n*n的二維矩陣,彩色圖像則是n*n*3 的三維矩陣,最外圍的三個維度分別代表了RGB三原色的值,其中數字「3」在卷積神經網路中被稱為通道數或信道數
2. 對RGB圖像進行卷積
在對灰度圖像進行卷積時,使用的是f*f的二維卷積核。在對RGB圖像進行卷積時,則卷積核的維度也+1,變成了f*f*3。一次卷積的結果仍然是把所有的值加起來輸出一個值。即: 一個三維的圖像,和一個三維的卷積核,在進行完卷積操作後,輸出的是一個二維的矩陣(如上圖) 。
3. 當使用多個卷積核時的輸出
如上圖所示,可以使用多個卷積核(一個亮黃色,一個屎黃色)。根據前文描述,一個立體的卷積核在一個立體的矩陣上掃描完,結果是一個二維的。但當使用多個卷積核時,則輸出了多個二維矩陣,這些二維矩陣沿著第三個維度排列到一起,使得結果重新變成了三維。此時,第三個維度的尺寸,反應的是卷積核數,也就是說 卷積核數就是信道數 。直觀理解,每一個卷積核代表著檢測了某一種特徵,多個卷積核就是同時檢測了多種特徵,傳遞了多種信息。
1. 一個卷積層的數據的基本流
如上圖所示,由於卷積核本身就是一堆待學參數w,所以卷積操作本質還是「加權求和」,之後會加入偏置值,然後進行非線性變換,然後輸出(到下一層),可見還是那一套。
需要提一下的是,卷積的輸入不一定是原始圖像構成的矩陣,還有可能是上一個卷積的結果。原始圖像是彩色的,有多個通道。卷積時可以用多個卷積核,最終產生的結果也是立體的。因此原始的輸入與中間卷積層的輸出,在數學形式上是統一的。因此可以「輸入->卷積層->卷積層->...」這樣操作。
2. 卷積層的參數規模
一個卷積層總的參數規模(包括w,不包括b)為: ,即:卷積核的大小的平方*上層輸出的通道數)*本層所用的卷積核數。與上層輸入的大小無關(但與通道數有關)
3. 一個卷積層涉及到的超參
卷積核的大小、是否padding、步長、卷積核數。
1. 一個示例
上圖為一個簡單的卷積神經網路示例: 一層一層的卷積,最後把所有的元素展開成一個一維向量,然後加一個全連接層。
2. 注意以下幾點:
1⃣️ 實際上CNN會有卷積層、池化層、全連接層,而非僅有卷積和全連接;
2⃣️ 從數據的構成形式上看,按照網路從前往後的順序,圖片尺寸不斷減小,信道數量不斷增加。一般遵從這個趨勢。
1. 池化
如上圖所示,假設輸入是一個4*4的矩陣,現在我們把它分割成2*2四個子矩陣(或者說使用一個2*2的核以2為步長掃描矩陣),對四個子區域分別求最大值,最終得到一個值為9、2、6、3的2*2的矩陣輸出。這種操作就叫池化,具體為最大值池化。
2. 池化的作用
1⃣️ 一般來說,較大的值往往代表學到了一個重要或典型的特徵,把原始輸入以某種方式濾除掉一些不重要的值,只保留一些較大的值,相當於 強化了一些重要信息的表達 。2⃣️ 降低圖片的尺寸,可以節省空間、加速運算等。
3. 池化的特點
並沒有需要學習的參數(w、b之類的),也因此「池化層」一般並不被稱為單獨的一層。在卷積神經網路中,通常把一個卷積層+一個池化層的組合叫一層。
4. 池化的超參數及經驗值
池化層沒有要學習的參數,只有核心的兩個超參:池化核的大小、池化步長。此外還有池化所用的rece操作:最大或者平均(沒有其它選項)。
一般把池化核的大小設置為3或2,步長為2。注意:步長為2意味著把圖片減小到原來的一半。
rece操作最常用最大池化,偶爾用平均池化,不會用其它操作。
上圖為一個典型的卷積神經網路示例,描述如下:
輸入層 :彩色的手寫數字圖片,數學構成為32*32*3的矩陣,其中3為通道數。
Layer 1-卷積層 :1)使用6個5*5*3的卷積核,以步長為1對輸入層進行卷積,輸出28*28*6的矩陣,2)然後使用2*2的最大池化,步長為2,最終輸出14*14*6的矩陣。其中14為圖片尺寸,6為信道數。
Layer2-卷積層 :1)使用16個5*5*3的卷積核以步長1對上層輸出進行卷積,輸出10*10*16的矩陣,2)然後使用2*2的最大池化,步長為2,最終輸出5*5*16的矩陣。
Layer3-全連接層: 把上層輸出的5*5*16矩陣展開成1*400的一維向量,以120*400的權重矩陣送入本層120個神經元,激活後輸出。
Layer4-全連接層: 120->84,激活後輸出
輸出層 :84 -> 10,然後softmax後輸出。
1. 參數少
假如原始圖片尺寸為100*100*3,假設使用全連接,即使第二層僅用100個神經元,那也已經產生了100*100*3*100 = 300w個參數,難以想像。
假設使用卷積層,使用10個10*10*3的卷積核,那就是只有3000個參數,而能輸出的矩陣規模是91*91*10=81000
2. 參數少的原因
1)稀疏連接:卷積核掃描矩陣產生輸出,這個過程就從「神經元連接」的角度看,輸入的左上角只連著輸出的左上角,右上角只連右上角,而非「全連接」,參數就會少很多。2)參數共享:這么稀疏的連接,還是使用了同一套參數,進一步減少了參數的量。
3. 參數共享的其它好處
如果圖片上有一隻貓,那麼不管這個貓在圖片的什麼位置,都不改變「這是一張貓的照片」。使用參數共享時,相當於用同樣的特徵提取作用到整個圖片的各個區域,適應平移不變性,增強魯棒性。
⑧ 深度學習之卷積神經網路經典模型
LeNet-5模型 在CNN的應用中,文字識別系統所用的LeNet-5模型是非常經典的模型。LeNet-5模型是1998年,Yann LeCun教授提出的,它是第一個成功大規模應用在手寫數字識別問題的卷積神經網路,在MNIST數據集中的正確率可以高達99.2%。
下面詳細介紹一下LeNet-5模型工作的原理。
LeNet-5模型一共有7層,每層包含眾多參數,也就是卷積神經網路中的參數。雖然層數只有7層,這在如今龐大的神經網路中可是說是非常少的了,但是包含了卷積層,池化層,全連接層,可謂麻雀雖小五臟俱全了。為了方便,我們把卷積層稱為C層,下采樣層叫做下采樣層。
首先,輸入層輸入原始圖像,原始圖像被處理成32×32個像素點的值。然後,後面的隱層計在卷積和子抽樣之間交替進行。C1層是卷積層,包含了六個特徵圖。每個映射也就是28x28個神經元。卷積核可以是5x5的十字形,這28×28個神經元共享卷積核權值參數,通過卷積運算,原始信號特徵增強,同時也降低了雜訊,當卷積核不同時,提取到圖像中的特徵不同;C2層是一個池化層,池化層的功能在上文已經介紹過了,它將局部像素值平均化來實現子抽樣。
池化層包含了六個特徵映射,每個映射的像素值為14x14,這樣的池化層非常重要,可以在一定程度上保證網路的特徵被提取,同時運算量也大大降低,減少了網路結構過擬合的風險。因為卷積層與池化層是交替出現的,所以隱藏層的第三層又是一個卷積層,第二個卷積層由16個特徵映射構成,每個特徵映射用於加權和計算的卷積核為10x10的。第四個隱藏層,也就是第二個池化層同樣包含16個特徵映射,每個特徵映射中所用的卷積核是5x5的。第五個隱藏層是用5x5的卷積核進行運算,包含了120個神經元,也是這個網路中卷積運算的最後一層。
之後的第六層便是全連接層,包含了84個特徵圖。全連接層中對輸入進行點積之後加入偏置,然後經過一個激活函數傳輸給輸出層的神經元。最後一層,也就是第七層,為了得到輸出向量,設置了十個神經元來進行分類,相當於輸出一個包含十個元素的一維數組,向量中的十個元素即0到9。
AlexNet模型
AlexNet簡介
2012年Imagenet圖像識別大賽中,Alext提出的alexnet網路模型一鳴驚人,引爆了神經網路的應用熱潮,並且贏得了2012屆圖像識別大賽的冠軍,這也使得卷積神經網路真正意義上成為圖像處理上的核心演算法。上文介紹的LeNet-5出現在上個世紀,雖然是經典,但是迫於種種復雜的現實場景限制,只能在一些領域應用。不過,隨著SVM等手工設計的特徵的飛速發展,LeNet-5並沒有形成很大的應用狀況。隨著ReLU與dropout的提出,以及GPU帶來算力突破和互聯網時代大數據的爆發,卷積神經網路帶來歷史的突破,AlexNet的提出讓深度學習走上人工智慧的最前端。
圖像預處理
AlexNet的訓練數據採用ImageNet的子集中的ILSVRC2010數據集,包含了1000類,共1.2百萬的訓練圖像,50000張驗證集,150000張測試集。在進行網路訓練之前我們要對數據集圖片進行預處理。首先我們要將不同解析度的圖片全部變成256x256規格的圖像,變換方法是將圖片的短邊縮放到 256像素值,然後截取長邊的中間位置的256個像素值,得到256x256大小的圖像。除了對圖片大小進行預處理,還需要對圖片減均值,一般圖像均是由RGB三原色構成,均值按RGB三分量分別求得,由此可以更加突出圖片的特徵,更方便後面的計算。
此外,對了保證訓練的效果,我們仍需對訓練數據進行更為嚴苛的處理。在256x256大小的圖像中,截取227x227大小的圖像,在此之後對圖片取鏡像,這樣就使得原始數據增加了(256-224)x(256-224)x2= 2048倍。最後對RGB空間做PCA,然後對主成分做(0,0.1)的高斯擾動,結果使錯誤率下降1%。對測試數據而言,抽取以圖像4個角落的大小為224224的圖像,中心的224224大小的圖像以及它們的鏡像翻轉圖像,這樣便可以獲得10張圖像,我們便可以利用softmax進行預測,對所有預測取平均作為最終的分類結果。
ReLU激活函數
之前我們提到常用的非線性的激活函數是sigmoid,它能夠把輸入的連續實值全部確定在0和1之間。但是這帶來一個問題,當一個負數的絕對值很大時,那麼輸出就是0;如果是絕對值非常大的正數,輸出就是1。這就會出現飽和的現象,飽和現象中神經元的梯度會變得特別小,這樣必然會使得網路的學習更加困難。此外,sigmoid的output的值並不是0為均值,因為這會導致上一層輸出的非0均值信號會直接輸入到後一層的神經元上。所以AlexNet模型提出了ReLU函數,公式:f(x)=max(0,x)f(x)=max(0,x)。
用ReLU代替了Sigmoid,發現使用 ReLU 得到的SGD的收斂速度會比 sigmoid快很多,這成了AlexNet模型的優勢之一。
Dropout
AlexNet模型提出了一個有效的模型組合方式,相比於單模型,只需要多花費一倍的時間,這種方式就做Dropout。在整個神經網路中,隨機選取一半的神經元將它們的輸出變成0。這種方式使得網路關閉了部分神經元,減少了過擬合現象。同時訓練的迭代次數也得以增加。當時一個GTX580 GPU只有3GB內存,這使得大規模的運算成為不可能。但是,隨著硬體水平的發展,當時的GPU已經可以實現並行計算了,並行計算之後兩塊GPU可以互相通信傳輸數據,這樣的方式充分利用了GPU資源,所以模型設計利用兩個GPU並行運算,大大提高了運算效率。
模型分析
AlexNet模型共有8層結構,其中前5層為卷積層,其中前兩個卷積層和第五個卷積層有池化層,其他卷積層沒有。後面3層為全連接層,神經元約有六十五萬個,所需要訓練的參數約六千萬個。
圖片預處理過後,進過第一個卷積層C1之後,原始的圖像也就變成了55x55的像素大小,此時一共有96個通道。模型分為上下兩塊是為了方便GPU運算,48作為通道數目更加適合GPU的並行運算。上圖的模型里把48層直接變成了一個面,這使得模型看上去更像一個立方體,大小為55x55x48。在後面的第二個卷積層C2中,卷積核的尺寸為5x5x48,由此再次進行卷積運算。在C1,C2卷積層的卷積運算之後,都會有一個池化層,使得提取特徵之後的特徵圖像素值大大減小,方便了運算,也使得特徵更加明顯。而第三層的卷積層C3又是更加特殊了。第三層卷積層做了通道的合並,將之前兩個通道的數據再次合並起來,這是一種串接操作。第三層後,由於串接,通道數變成256。全卷積的卷積核尺寸也就變成了13×13×25613×13×256。一個有4096個這樣尺寸的卷積核分別對輸入圖像做4096次的全卷積操作,最後的結果就是一個列向量,一共有4096個數。這也就是最後的輸出,但是AlexNet最終是要分1000個類,所以通過第八層,也就是全連接的第三層,由此得到1000個類輸出。
Alexnet網路中各個層發揮了不同的作用,ReLU,多個CPU是為了提高訓練速度,重疊pool池化是為了提高精度,且不容易產生過擬合,局部歸一化響應是為了提高精度,而數據增益與dropout是為了減少過擬合。
VGG net
在ILSVRC-2014中,牛津大學的視覺幾何組提出的VGGNet模型在定位任務第一名和分類任務第一名[[i]]。如今在計算機視覺領域,卷積神經網路的良好效果深得廣大開發者的喜歡,並且上文提到的AlexNet模型擁有更好的效果,所以廣大從業者學習者試圖將其改進以獲得更好地效果。而後來很多人經過驗證認為,AlexNet模型中所謂的局部歸一化響應浪費了計算資源,但是對性能卻沒有很大的提升。VGG的實質是AlexNet結構的增強版,它側重強調卷積神經網路設計中的深度。將卷積層的深度提升到了19層,並且在當年的ImageNet大賽中的定位問題中獲得了第一名的好成績。整個網路向人們證明了我們是可以用很小的卷積核取得很好地效果,前提是我們要把網路的層數加深,這也論證了我們要想提高整個神經網路的模型效果,一個較為有效的方法便是將它的深度加深,雖然計算量會大大提高,但是整個復雜度也上升了,更能解決復雜的問題。雖然VGG網路已經誕生好幾年了,但是很多其他網路上效果並不是很好地情況下,VGG有時候還能夠發揮它的優勢,讓人有意想不到的收獲。
與AlexNet網路非常類似,VGG共有五個卷積層,並且每個卷積層之後都有一個池化層。當時在ImageNet大賽中,作者分別嘗試了六種網路結構。這六種結構大致相同,只是層數不同,少則11層,多達19層。網路結構的輸入是大小為224*224的RGB圖像,最終將分類結果輸出。當然,在輸入網路時,圖片要進行預處理。
VGG網路相比AlexNet網路,在網路的深度以及寬度上做了一定的拓展,具體的卷積運算還是與AlexNet網路類似。我們主要說明一下VGG網路所做的改進。第一點,由於很多研究者發現歸一化層的效果並不是很好,而且佔用了大量的計算資源,所以在VGG網路中作者取消了歸一化層;第二點,VGG網路用了更小的3x3的卷積核,而兩個連續的3x3的卷積核相當於5x5的感受野,由此類推,三個3x3的連續的卷積核也就相當於7x7的感受野。這樣的變化使得參數量更小,節省了計算資源,將資源留給後面的更深層次的網路。第三點是VGG網路中的池化層特徵池化核改為了2x2,而在AlexNet網路中池化核為3x3。這三點改進無疑是使得整個參數運算量下降,這樣我們在有限的計算平台上能夠獲得更多的資源留給更深層的網路。由於層數較多,卷積核比較小,這樣使得整個網路的特徵提取效果很好。其實由於VGG的層數較多,所以計算量還是相當大的,卷積層比較多成了它最顯著的特點。另外,VGG網路的拓展性能比較突出,結構比較簡潔,所以它的遷移性能比較好,遷移到其他數據集的時候泛化性能好。到現在為止,VGG網路還經常被用來提出特徵。所以當現在很多較新的模型效果不好時,使用VGG可能會解決這些問題。
GoogleNet
谷歌於2014年Imagenet挑戰賽(ILSVRC14)憑借GoogleNet再次斬獲第一名。這個通過增加了神經網路的深度和寬度獲得了更好地效果,在此過程中保證了計算資源的不變。這個網路論證了加大深度,寬度以及訓練數據的增加是現有深度學習獲得更好效果的主要方式。但是增加尺寸可能會帶來過擬合的問題,因為深度與寬度的加深必然會帶來過量的參數。此外,增加網路尺寸也帶來了對計算資源侵佔過多的缺點。為了保證計算資源充分利用的前提下去提高整個模型的性能,作者使用了Inception模型,這個模型在下圖中有展示,可以看出這個有點像金字塔的模型在寬度上使用並聯的不同大小的卷積核,增加了卷積核的輸出寬度。因為使用了較大尺度的卷積核增加了參數。使用了1*1的卷積核就是為了使得參數的數量最少。
Inception模塊
上圖表格為網路分析圖,第一行為卷積層,輸入為224×224×3 ,卷積核為7x7,步長為2,padding為3,輸出的維度為112×112×64,這裡面的7x7卷積使用了 7×1 然後 1×7 的方式,這樣便有(7+7)×64×3=2,688個參數。第二行為池化層,卷積核為3×33×3,滑動步長為2,padding為 1 ,輸出維度:56×56×64,計算方式:1/2×(112+2×1?3+1)=56。第三行,第四行與第一行,第二行類似。第 5 行 Inception mole中分為4條支線,輸入均為上層產生的 28×28×192 結果:第 1 部分,1×1 卷積層,輸出大小為28×28×64;第 2 部分,先1×1卷積層,輸出大小為28×28×96,作為輸入進行3×3卷積層,輸出大小為28×28×128;第 3部分,先1×1卷積層,輸出大小為28×28×32,作為輸入進行3×3卷積層,輸出大小為28×28×32;而第3 部分3×3的池化層,輸出大小為輸出大小為28×28×32。第5行的Inception mole會對上面是個結果的輸出結果並聯,由此增加網路寬度。
ResNet
2015年ImageNet大賽中,MSRA何凱明團隊的ResialNetworks力壓群雄,在ImageNet的諸多領域的比賽中上均獲得了第一名的好成績,而且這篇關於ResNet的論文Deep Resial Learning for Image Recognition也獲得了CVPR2016的最佳論文,實至而名歸。
上文介紹了的VGG以及GoogleNet都是增加了卷積神經網路的深度來獲得更好效果,也讓人們明白了網路的深度與廣度決定了訓練的效果。但是,與此同時,寬度與深度加深的同時,效果實際會慢慢變差。也就是說模型的層次加深,錯誤率提高了。模型的深度加深,以一定的錯誤率來換取學習能力的增強。但是深層的神經網路模型犧牲了大量的計算資源,學習能力提高的同時不應當產生比淺層神經網路更高的錯誤率。這個現象的產生主要是因為隨著神經網路的層數增加,梯度消失的現象就越來越明顯。所以為了解決這個問題,作者提出了一個深度殘差網路的結構Resial:
上圖就是殘差網路的基本結構,可以看出其實是增加了一個恆等映射,將原本的變換函數H(x)轉換成了F(x)+x。示意圖中可以很明顯看出來整個網路的變化,這樣網路不再是簡單的堆疊結構,這樣的話便很好地解決了由於網路層數增加而帶來的梯度原來越不明顯的問題。所以這時候網路可以做得很深,到目前為止,網路的層數都可以上千層,而能夠保證很好地效果。並且,這樣的簡單疊加並沒有給網路增加額外的參數跟計算量,同時也提高了網路訓練的效果與效率。
在比賽中,為了證明自己觀點是正確的,作者控制變數地設計幾個實驗。首先作者構建了兩個plain網路,這兩個網路分別為18層跟34層,隨後作者又設計了兩個殘差網路,層數也是分別為18層和34層。然後對這四個模型進行控制變數的實驗觀察數據量的變化。下圖便是實驗結果。實驗中,在plain網路上觀測到明顯的退化現象。實驗結果也表明,在殘差網路上,34層的效果明顯要好於18層的效果,足以證明殘差網路隨著層數增加性能也是增加的。不僅如此,殘差網路的在更深層的結構上收斂性能也有明顯的提升,整個實驗大為成功。
除此之外,作者還做了關於shortcut方式的實驗,如果殘差網路模塊的輸入輸出維度不一致,我們如果要使維度統一,必須要對維數較少的進行増維。而增維的最好效果是用0來填充。不過實驗數據顯示三者差距很小,所以線性投影並不是特別需要。使用0來填充維度同時也保證了模型的復雜度控制在比較低的情況下。
隨著實驗的深入,作者又提出了更深的殘差模塊。這種模型減少了各個層的參數量,將資源留給更深層數的模型,在保證復雜度很低的情況下,模型也沒有出現梯度消失很明顯的情況,因此目前模型最高可達1202層,錯誤率仍然控製得很低。但是層數如此之多也帶來了過擬合的現象,不過諸多研究者仍在改進之中,畢竟此時的ResNet已經相對於其他模型在性能上遙遙領先了。
殘差網路的精髓便是shortcut。從一個角度來看,也可以解讀為多種路徑組合的一個網路。如下圖:
ResNet可以做到很深,但是從上圖中可以體會到,當網路很深,也就是層數很多時,數據傳輸的路徑其實相對比較固定。我們似乎也可以將其理解為一個多人投票系統,大多數梯度都分布在論文中所謂的effective path上。
DenseNet
在Resnet模型之後,有人試圖對ResNet模型進行改進,由此便誕生了ResNeXt模型。
這是對上面介紹的ResNet模型結合了GoogleNet中的inception模塊思想,相比於Resnet來說更加有效。隨後,誕生了DenseNet模型,它直接將所有的模塊連接起來,整個模型更加簡單粗暴。稠密相連成了它的主要特點。
我們將DenseNet與ResNet相比較:
從上圖中可以看出,相比於ResNet,DenseNet參數量明顯減少很多,效果也更加優越,只是DenseNet需要消耗更多的內存。
總結
上面介紹了卷積神經網路發展史上比較著名的一些模型,這些模型非常經典,也各有優勢。在算力不斷增強的現在,各種新的網路訓練的效率以及效果也在逐漸提高。從收斂速度上看,VGG>Inception>DenseNet>ResNet,從泛化能力來看,Inception>DenseNet=ResNet>VGG,從運算量看來,Inception<DenseNet< ResNet<VGG,從內存開銷來看,Inception<ResNet< DenseNet<VGG。在本次研究中,我們對各個模型均進行了分析,但從效果來看,ResNet效果是最好的,優於Inception,優於VGG,所以我們第四章實驗中主要採用谷歌的Inception模型,也就是GoogleNet。
⑨ 如何利用卷積神經網路提取圖像特徵
卷積神經網路有以下幾種應用可供研究: 1、基於卷積網路的形狀識別 物體的形狀是人的視覺系統分析和識別物體的基礎,幾何形狀是物體的本質特徵的表現,並具有平移、縮放和旋轉不變等特點,所以在模式識別領域,對於形狀的分析和識別具有十分重要的意義,而二維圖像作為三維圖像的特例以及組成部分,因此二維圖像的識別是三維圖像識別的基礎。 2、基於卷積網路的人臉檢測 卷積神經網路與傳統的人臉檢測方法不同,它是通過直接作用於輸入樣本,用樣本來訓練網路並最終實現檢測任務的。它是非參數型的人臉檢測方法,可以省去傳統方法中建模、參數估計以及參數檢驗、重建模型等的一系列復雜過程。本文針對圖像中任意大小、位置、姿勢、方向、膚色、面部表情和光照條件的人臉。 3、文字識別系統 在經典的模式識別中,一般是事先提取特徵。提取諸多特徵後,要對這些特徵進行相關性分析,找到最能代表字元的特徵,去掉對分類無關和自相關的特徵。然而,這些特徵的提取太過依賴人的經驗和主觀意識,提取到的特徵的不同對分類性能影響很大,甚至提取的特徵的順序也會影響最後的分類性能。同時,圖像預處理的好壞也會影響到提取的特徵。