以下部分文字資料整合于網(wǎng)絡(luò),本文僅供自己學(xué)習(xí)用!
一、計算機視覺概述
如果輸入層和隱藏層和之前一樣都是采用全連接網(wǎng)絡(luò),參數(shù)過多會導(dǎo)致過擬合問題,其次這么多的參數(shù)存儲下來對計算機的內(nèi)存要求也是很高的
解決這一問題,就需要用到——卷積神經(jīng)網(wǎng)絡(luò)
這是一種理解卷積的角度(至少在吳恩達老師這個教學(xué)視頻中是),也是我之前沒有想到的。其實在該剛開始接受卷積神經(jīng)網(wǎng)絡(luò)時,我一直很想弄清卷積的真正含義,為此也學(xué)習(xí)了一些,和有自己的一些理解,詳見后文2.6小節(jié)!
二、卷積神經(jīng)網(wǎng)絡(luò)
2.1:卷積運算
卷積運算是卷積神經(jīng)網(wǎng)絡(luò)的基本組成單元之一
這里將從邊緣檢測(edge detection)入手,舉例來介紹卷積神經(jīng)網(wǎng)絡(luò)
通過這種卷積運算,我們可以檢測到圖像的邊緣:(我們把中間的3x3的矩陣稱為:過濾器、邊緣檢測器、卷積核
下面來講,如何將這種卷積運算作為基本單元,運用到卷積神經(jīng)網(wǎng)絡(luò)中。
-
正邊緣(positive edges)和負邊緣(negative edges):由亮變暗和由暗變亮
-
其他的邊緣檢測器(卷積核)
-
如何讓算法自己學(xué)習(xí)得到邊緣檢測器,而不是像上面那樣手動設(shè)計(傳統(tǒng)的計算機視覺)——卷積神經(jīng)網(wǎng)絡(luò)
??原理就是把卷積核中的數(shù)看作參數(shù),利用反向傳播(back propagation)去學(xué)習(xí)
這種學(xué)習(xí)得到的卷積核,會比計算機視覺研究人員所精心選擇的更加穩(wěn)定
在具體講如何利用反向傳播來學(xué)習(xí)得到卷積核的這9個參數(shù)之前,讓我們學(xué)習(xí)一下卷積神經(jīng)網(wǎng)絡(luò)——卷積計算的底層架構(gòu)的非常重要的組成部分
2.1.1:填充(padding)
首先看不對圖像做填充的情況:
即:nxn
的圖像和fxf
的卷積核進行卷積,得到結(jié)果大小為:(n-f+1)x(n-f+q)
??這樣卷積的缺點有:
- shrinky output:這樣得到的卷積結(jié)果會比原圖像小,而沒通過一層這樣的卷積,圖像就會縮小,在深層卷積神經(jīng)網(wǎng)絡(luò)中,最后得到的圖像就會非常的小
-
throw away info from the edge:丟失邊緣像素的信息。即對比于圖像中其他像素提供的信息,邊緣像素在卷積過程中只被利用一次或少次,這樣我們會丟失掉一些邊緣信息。
所以為了解決這兩個問題,使用填充,對原圖像進行像素填充
總結(jié)一下,上面其實涉及到兩種常用卷積:
- valid convolutions:即不對原圖像進行任何填充
-
same convolutions:對原圖像進行填充并且保證卷積結(jié)果圖像和原圖像大小相同
由上圖可知,對于Same convolutions,我們通常需要保證卷積核fxf
的f
為奇數(shù)時,才可保證p = (f-1)/2
,使得卷積結(jié)果大小與原圖像大小相同。這也解釋了為什么通常我們所使用的卷積核大小都是3x3
和5x5
。另外一個原因是,當卷積核是奇數(shù)時,會有一個中心像素點,事實上對圖像進行卷積時,這個特殊的中心像素點是不可或缺的(你可以試想一下如果卷積核是偶數(shù),你該如何卷積),中心像素可以很好的描述卷積核的位置,使用奇數(shù)的卷積核這也是計算機視覺所約定俗成的一種傳統(tǒng)。
2.1.2:步長(stride)
上文所講到的,也是默認卷積運算中步長為1,事實上,步長也是可以設(shè)定的。和padding一樣,步長不同,也會影響卷積結(jié)果。下圖是設(shè)置步長為2
時的卷積示例
總結(jié)一下:(注意,這里的向下取整的實際含義是,保證卷積核始終在原圖像填充后的那個圖像中,而不能超出)
2.1.3:交叉相關(guān)(cross-correlation)
這一小節(jié)其實是一個概念補充。事實上學(xué)過數(shù)字信號處理的話,對于圖像卷積(圖像其實就是一個2維的數(shù)字信號),會將卷積核進行翻轉(zhuǎn)后,再進行元素相乘、相加。事實上在計算機視覺領(lǐng)域,省略了翻轉(zhuǎn)這一步驟,而是直接進行相乘、相加,所以在數(shù)學(xué)領(lǐng)域會將其稱為交叉相關(guān)(corss-correlation),但是在深度學(xué)習(xí)和計算機視覺及其相關(guān)文獻中,通常還是會將其稱為卷積(convolutions).
2.1.4:3維卷積
事實上,上面所講到的卷積都是對于2維圖像而言(也就是灰度圖),也成為二維卷積。而對于包含RGB這種三維圖像,則屬于三維卷積
但是你可能和我一樣有相同的疑問:這有什么用呢?得到的結(jié)果還是二維
像下圖展示這樣,通過設(shè)置3D卷積核不同通道的參數(shù)值,你可以選擇只檢測紅色通道的邊緣,同時把其他通道的卷積核的參數(shù)值設(shè)置為0.或者只是把三個通道的卷積核參數(shù)設(shè)置為一樣,這樣的意義在于即使輸入進來的是RGB圖像也可以不用將其轉(zhuǎn)為灰度圖像而直接進行卷積計算(效果也是一樣的)。
還有一個問題,就是:上文中,我們只是單單檢測一種邊緣——垂直。如果想同時檢測多種邊緣呢?比如同時檢測水平和豎直邊緣。那么我們需要多個檢測器,或者說多個3D卷積核、過濾器,就像下圖這樣。但是注意到,得到的卷積結(jié)果的第三維度的大小就是使用的3D卷積核的個數(shù)。
2.2:卷積網(wǎng)絡(luò)的一層
對卷積結(jié)果進行每個元素相加偏差b
,并對其進行非線性變化,再對各個3D卷積核得到的結(jié)果進行整合于是得到4x4x2
的一層卷積網(wǎng)絡(luò)的輸出結(jié)果。
2.2.1:和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的對比
其實過程還是一致的
- 首先進行線性運算,將輸入a[0]和參數(shù)W(對應(yīng)的就是卷積核)進行相乘再相加
- 再加上偏差
b
- 最后通過激活函數(shù)(即進行非線性變換)
在上面例子中,我們有2個3D卷積核,也就是說有2個特征(features)——卷積核的個數(shù)代表特征,是必須get到的,特別是在之后理解為什么卷積神經(jīng)網(wǎng)絡(luò)的底層原理上(不是卷積神經(jīng)網(wǎng)絡(luò)是什么,而是卷積神經(jīng)網(wǎng)絡(luò)為什么能行)。
我們再來解釋一下本文最開始提到的,傳統(tǒng)的全連接神經(jīng)網(wǎng)絡(luò)容易過擬合的問題(圖像增大,則參數(shù)增多),而為什么卷積網(wǎng)絡(luò)不會。
如下圖,不管輸入圖像多大,卷積網(wǎng)絡(luò)這一層需要通過訓(xùn)練從而學(xué)習(xí)得到的參數(shù)個數(shù)總是固定的:(27+1)x10
.由此可知,卷積神經(jīng)網(wǎng)絡(luò)不易產(chǎn)生過擬合(overfitting)的問題。
2.2.2:Summary of notations
注意:在一些文獻中,會把通道數(shù)放在前面,寬、高放在后面
2.3:卷積神經(jīng)網(wǎng)絡(luò)的簡單實例
如下圖,經(jīng)過幾層卷積后,最后被一步會把得到的卷積結(jié)果進行flatten
展平,輸入進全連接神經(jīng)網(wǎng)絡(luò),通過邏輯回歸或softmax進行分類。
這里我們可以觀察到的是,輸入圖像(通常比較大),但隨著卷積神經(jīng)網(wǎng)絡(luò)的深入,與開始圖像會保持大小幾乎不變,但隨著輸入圖像會逐漸變小,而通道數(shù)逐漸增加。
2.3.1:超參數(shù)(hyperparameter)
如上圖,我們把箭頭下方的那些參數(shù)(filter的個數(shù)、步長、padding…)稱為超參數(shù),選擇這些超參數(shù)是卷積神經(jīng)網(wǎng)絡(luò)設(shè)計過程中的主要工作。
2.3.2:組成
在一個典型的卷積神經(jīng)網(wǎng)絡(luò)中,完整應(yīng)該由以下3部分組成
- 卷積層
- 池化層
- 全連接層
2.3.3:卷積層的多層疊加
我們前面提到過隨著卷積層的深入,通道數(shù)增大而圖像減小。這樣得到的好處是,每層使用較小的卷積核如3x3
也能獲得更大的感受野,只要疊加更多的卷積層,就能讓感受野覆蓋到整個圖片。這也是為什么我們需要使用多個卷積層進行疊加。
打個比方,假設(shè)我們正在訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò)來進行面部識別。在網(wǎng)絡(luò)的第一層,卷積可能只識別出一些基本的特性,如邊緣和顏色。到了第二層,卷積可能會學(xué)習(xí)如何將這些邊緣和顏色組合成更簡單的形狀(比如眼睛、鼻子)。到了第三層,模型可能再將簡單的形狀組合成面部特征。因此,更深的層亦即卷積層疊加起來,能夠把低級特征逐漸組合成高級和更有意義的特征。
具體背后的原理是什么呢?我暫時也沒有找到一個讓我可以理解的回答和解釋,因為行所以行吧大概
那什么又是感受野呢?
2.3.4:感受野(Receptive Field)
感受野是一個非常重要的概念,receptive field往往是描述兩個feature maps A/B上神經(jīng)元的關(guān)系,假設(shè)從A經(jīng)過若干個操作得到B,這時候B上的一個區(qū)域areaB只會跟a上的一個區(qū)域areaA相關(guān),這時候areaA成為areaB的感受野。用圖片來表示:
在上圖里面,map3里1x1的區(qū)域?qū)?yīng)map2的receptive field是那個紅色的7x7的區(qū)域,而map2里7x7的區(qū)域?qū)?yīng)于map1的receptive field是藍色的11x11的區(qū)域,所以map3里1x1的區(qū)域?qū)?yīng)map 1的receptive field是藍色的11x11的區(qū)域。
2.4:池化層
我們先來看兩種池化類型的示例:
2.4.1:原理
池化操作的作用有兩個
- 減輕計算負擔(dān)
- 增加感受野
- 防止過擬合
吳恩達老師在視頻中也說到過,池化操作背后深刻的原理其實也不見得有人能說得透徹清除,本質(zhì)上就是因為實驗效果好,可以加。
其實非要去理解的話,也是可以的,因為圖像本身就是存在冗余信息的,用4個像素所表示特征信息可以用1個像素代替。從原圖像中進行最大值或均值采樣后(也就是所謂的池化),可以更好的把圖像中的特征得到、識別,既然這樣,能加為什么不加呢?
這個操作的直觀理解就像是,你看了某個特殊景色,過段時間你可能記不清那里的每個細節(jié),但是你肯定記得那里是美的。這個“美”的概念,就相當于經(jīng)過池化操作之后保留下來的特征。
還需要補充一點是,在alphaGo的算法背后,利用的也是卷積神經(jīng)網(wǎng)絡(luò),不同的是只有卷積層而沒有池化層,因為在棋盤上每一個像素點都至關(guān)重要,不能因為減輕計算負擔(dān)而隨意舍去。這也是理解池化的一個例子。
2.4.2:總結(jié)
需要注意兩點
- 池化層的超參數(shù)是人工設(shè)定的,不需要通過訓(xùn)練從而學(xué)習(xí)得到
- 池化層的最大值和平均值采樣是單獨作用于輸入的每一個通道的。池化結(jié)果的通道數(shù)和輸入的通道數(shù)相同。
2.5:完整的卷積神經(jīng)網(wǎng)絡(luò)示例
注意:由于池化層沒有需要學(xué)習(xí)的參數(shù),只有超參數(shù),所以通常會把卷積層和池化層兩層統(tǒng)稱為一層——1 layer
當然,關(guān)于卷積層和池化層的安排,上圖只是一種示例,實際上,還有可能是多個卷積層后面跟著一個池化層,或者一些特殊場景(如上文提到過的alphaGo的棋盤例子中)根本沒有池化層。
你需要清除以下幾點
- 池化層沒有任何需要學(xué)習(xí)的參數(shù)
- 卷積層趨向于擁有越來越少的參數(shù)
- 多數(shù)參數(shù)存在于全連接神經(jīng)網(wǎng)絡(luò)上
2.6:卷積神經(jīng)網(wǎng)絡(luò)的原理
其實上文一直在談的是——卷積神經(jīng)網(wǎng)絡(luò)是什么,由什么組成等等。但是我覺得最重要的還是理解:為什么,為什么卷積神經(jīng)網(wǎng)絡(luò)可以。(雖然在本文最開始也把傳統(tǒng)的全連接神經(jīng)網(wǎng)絡(luò)和帶卷積的神經(jīng)網(wǎng)絡(luò)進行的簡單的對比,說明為什么需要采用卷積而不是全連接,但我覺得那只是一方面)
首先我們需要理解,卷積神經(jīng)網(wǎng)絡(luò),其實是計算機視覺+深度學(xué)習(xí)。在之前的機器學(xué)習(xí)中我們知道,通過輸入數(shù)據(jù),可以很好的進行分類、回歸。將計算機視覺和深度學(xué)習(xí)結(jié)合起來,其實本質(zhì)還是一樣的,不同的在于:輸入的數(shù)據(jù),這也是為什么需要加入卷積層,而不能直接運用全連接層處理數(shù)據(jù)的原因。
比如之前講的預(yù)測房價,輸入就是房子大小、年齡這些基本的單特征。而對于計算機而言,你給它一張圖片,只是一個三維或者二維矩陣,沒有任何特征信息,換句話來說,直接把圖片輸入到全連接神經(jīng)網(wǎng)絡(luò),即將像素點作為特征,這樣的特征難以利用和復(fù)用以及進行比較。而卷積層的作用呢?提取特征,而且是有用的可復(fù)用的局部特征。通過卷積層提取到特征,并輸入到全連接層進行相應(yīng)的和之前機器學(xué)習(xí)中學(xué)到的傳統(tǒng)的全連接神經(jīng)網(wǎng)絡(luò)進行特征信息處理并進行預(yù)測一模一樣。一言蔽之:卷積神經(jīng)網(wǎng)絡(luò)識別圖像的第一步:利用卷積層提取圖像的局部特征。
??總結(jié):
而所謂的"卷積操作",可以簡單理解為一個濾鏡的過程,在圖片上不斷滑動,把圖片局部的像素值經(jīng)過一定的運算(這里的運算參數(shù)就是網(wǎng)絡(luò)需要學(xué)習(xí)的部分),得到一個新的值,這個新的值就代表了這部分區(qū)域的某種特征。
OK,現(xiàn)在我們理解了卷積的作用——提取圖像中的特征信息。我們現(xiàn)在的問題就縮小到了——卷積為什么能提取特征?提取的特征又是如何形式的?為什么這種方式提取的特征有效?
2.6.1:特征提取
從上文所講的卷積操作,以及下面卷積操作結(jié)果的直觀感受:卷積操作確實能提取特征。例如下圖就利用垂直卷積核和水平卷積核,將圖像中的垂直邊緣信息和水平邊緣信息提取出來。
到這里我們知道兩點
- 卷積操作確實可以提取局部特征
- 不同的特征需要設(shè)計不同的卷積核(而在神經(jīng)網(wǎng)絡(luò)中,卷積核中的參數(shù)無需手動設(shè)計,網(wǎng)絡(luò)會自己學(xué)習(xí)
關(guān)于卷積操作為什么能提取特征背后的本質(zhì),和卷積核到底充當一個什么角色,深入理解的話,那就需要了解下面所講的:傅里葉變換和加窗傅里葉變換
2.6.2:加窗傅里葉變換
卷積的本質(zhì)是:二維的加窗傅里葉變換。學(xué)過信號與系統(tǒng)的話,大致對傅里葉變換有一個理解,我之前也專門寫了一篇理解傅里葉變換的博客:傅里葉變換和其圖像處理中的應(yīng)用。這里的卷積核其實就是類比于傅里葉基,通過利用卷積核對二維圖像數(shù)據(jù)進行卷積操作(加窗傅里葉變換),其實是將圖像中和卷積核相似的特征信息提取出來(說白了,如果卷積核套在這塊像素和卷積核想表達的特征相似,那么這次卷積得到的中心像素值就大,也就是這塊存在這種卷積特征)。
這也是為什么上文講卷積操作時,吳恩達老師會說,有幾個卷積核,也就是有幾個特征的含義。
不過需要注意的是,不像上圖中那些規(guī)則的卷積核,神經(jīng)網(wǎng)絡(luò)中卷積核的樣子(也就是卷積核的參數(shù))是由反向傳播學(xué)習(xí)得到的,具體卷積核的樣子也是等到訓(xùn)練結(jié)束后才得知。
比如下面舉例識別字母X
的例子。我們假設(shè)一開始卷積核模板已經(jīng)學(xué)習(xí)得到或者設(shè)計好,即以下三個特征(模式/卷積核/過濾器)。
當利用相應(yīng)的模板(卷積核)對其進行卷積操作時,與模板特征匹配越高,在中心像素點位置的值也就越高(響應(yīng)越高)——本質(zhì)上就是,在這個位置捕捉到了這個卷積核對應(yīng)的特征!
然后向之前一樣,用過濾器將原圖像分別卷積一遍,得到3個feature map
feature map 是特征圖的意思,是指每個卷積核和輸入卷積后形成的特征圖,特征圖的個數(shù)和卷積核的個數(shù)相同
思考:我們可以看到,這樣得到的特征信息,包含兩個方面:
- 這個位置存在什么特征
- 這個特征存在的位置
??結(jié)合位置
+特征
這兩個信息,將其展平(并不會丟失信息),輸入全連接神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)開始干活,對特征信息進行像傳統(tǒng)神經(jīng)網(wǎng)絡(luò)該做的事情,進行預(yù)測。
當然,上面這個例子過于簡單,只有一層,多層神經(jīng)網(wǎng)絡(luò)和池化我們也講到,其實還是為了獲得更大的感受野和減輕計算負擔(dān),本質(zhì)上還是一樣的!
所以為什么經(jīng)常會看到說對比于傳統(tǒng)的計算機視覺,卷積神經(jīng)網(wǎng)絡(luò)可以自己學(xué)習(xí)特征,說到底就是通過反向傳播學(xué)習(xí)這些卷積核里的參數(shù)。
2.6.3:卷積神經(jīng)網(wǎng)絡(luò)特征圖可視化
接下來我們對特征圖feature map
進行可視化,來深入了解:
定義了一個4層的卷積,每個卷積層分別包含9個卷積、Relu激活函數(shù)和尺度不等的池化操作,系數(shù)全部是隨機初始化
輸入原圖:
第一層卷積后可視化的特征圖:
第二層卷積后可視化的特征圖:
第三層卷積后可視化的特征圖:
第四層卷積后可視化的特征圖:
從不同層可視化出來的特征圖大概可以總結(jié)出一點規(guī)律:文章來源:http://www.zghlxwxcb.cn/news/detail-826516.html
- 淺層網(wǎng)絡(luò)提取的是紋理、細節(jié)特征
- 深層網(wǎng)絡(luò)提取的是輪廓、形狀、最強特征(如貓的眼睛區(qū)域)——或者說是前面特征(卷積核)疊加效果的通用、最強特征(個人直覺上),但看一層的特征當然看起來似乎不可解釋,但是實際上最后得到的特征圖是建立在前面那么多卷積核作用之后的。
- 淺層網(wǎng)絡(luò)包含更多的特征,也具備提取關(guān)鍵特征(如第一組特征圖里的第4張?zhí)卣鲌D,提取出的是貓眼睛特征)的能力
- 相對而言,層數(shù)越深,提取的特征越具有代表性
- 圖像的分辨率是越來越小的
以上是個人結(jié)合一些視頻和文章資料學(xué)習(xí)、整合和加入自己理解所寫,能力有限,若有欠妥地方,歡迎評論區(qū)討論和指正!??文章來源地址http://www.zghlxwxcb.cn/news/detail-826516.html
到了這里,關(guān)于【計算機視覺】萬字長文詳解:卷積神經(jīng)網(wǎng)絡(luò)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!