吳恩達Deep Learning學習筆記——第四課 卷積神經網絡

目錄鏈接:吳恩達Deep Learning學習筆記目錄

?1.卷積神經網絡
?2.CNN實例探究
?3.目標檢測
?4.人臉識別和神經風格轉換

1. 卷積神經網絡

? 1.1 邊緣檢測

??在計算機視覺中,圖片的識別過程是先檢測到圖片中的邊緣,再檢測到圖片中的一部分,最后檢測到整個圖像。如下圖,對于邊緣檢測,計算機檢測一張圖片時,可能首先第一步要做的就是檢測圖片中的垂直邊緣(如欄桿、人的輪廓線)。可能第二步要做的是檢測水平邊緣。

??那么如何進行邊緣檢測呢?例如下圖中垂直邊緣的檢測,一張單通道的6x6的圖片矩陣表示,經過3x3的卷積核卷積后,輸出4x4的矩陣。
??卷積計算過程(圖片來源):

??為什么通過卷積計算后,計算機能夠檢測到圖像的邊緣呢?下圖是比較直觀的描述,可以看出,原圖片為左邊亮、右邊暗,卷積核也是左邊亮、右邊暗(反過來呢?),卷積后的結果就是中間亮、兩邊暗(卷積核或原圖反過來就中間暗)。
??下圖中,第一種情況,即由亮到暗的過渡,邊緣檢測為亮;第二種情況,由暗到亮過渡,邊緣檢測為暗。如果不在意這個過渡變化,那么可以在卷積后取絕對值。
??水平邊緣檢測和垂直邊緣檢測:

? 1.2 Padding

??如下圖中的卷積操作,(n,n)的圖片經過(f,f)的卷積核后,得到(n-f+1,n-f+1)的輸出。這樣進行卷積存在兩個問題,①每經過一次卷積,圖片都在縮小;②在邊緣上的像素點卷積時只被利用一次或幾次,而在中間的像素點被重復利用很多次,這就導致邊緣的很多信息被丟失。Padding即用來解決這個問題,即在圖片矩陣外圍再補一層亮度值0(RGB圖中為0-255),Padding后再卷積得到的輸出為(n+2p-f+1,n+2p-f+1),如此便可以避免圖片縮小問題,弱化邊緣信息丟失問題。

??一般,是否進行Padding,Padding多少,取決于你希望圖片大小不變還是縮小。在計算機視覺中很少有f為偶數的卷積核,因為①偶數卷積核會導致輸出大小不變圖片時,Padding會不對稱填充;②奇數卷積核會有一個中心點便于定位卷積核的位置。

? 1.3 卷積步長

??假設輸入圖片為(n,n),卷積核(f,f),步長為s,Padding為p,那么輸出圖片大小為((n+2p-f)/ s +1,(n+2p-f)/ s +1)。如果(n+2p-f)/ s不是整數,則向下取整。

? 1.4 三維卷積

??RGB圖片有三個通道,分別為紅綠藍,描述一張圖片的矩陣為(n,n,3),所以卷積核大小為(f,f,3),但輸出還是一個二維矩陣。

??多個卷積核同時卷積,如同時提取垂直邊緣和水平邊緣,用兩個不同三維的卷積核卷積后再堆疊:
??多核卷積后,輸出結果的通道數等于卷積核的數量。

? 1.5 單層卷積網絡

??單層卷積網絡計算過程:

? 1.6 簡單卷積網絡示例

??簡單的卷積網絡如下,一般而言,卷積核的數量會隨著網絡深入而增加,圖片縮小(無Padding時),實際上,典型的卷積網絡應該包括卷積層、池化層和全連接層。

? 1.7 池化層

??池化的直觀理解,相當于卷積核,但不是執行權重求和,而是執行核選取區域最大值(最大池化)或平均值(平均池化)。其意義是,如果核提取到某個特征,則保留其最大值,如果這個區域沒有這個特征,那么它的最大值也很小。池化操作會對每一通道數據進行池化,池化后通道數不變。池化層只有一組超參數,沒有可學習參數。

? 1.8 典型卷積神經網絡

? 1.9 為什么采用卷積網絡

??相比于只用全連接層相比,卷積層的兩個主要優勢是參數共享和稀疏連接,這兩個原因可以減少參數,防止過擬合。

??①參數共享:相比全連接層,卷積層中可訓練參數數量極少,如下圖,假設輸入32x32x3的圖片,輸出到28x28x6的數據,那么全連接層權重參數w數量將達3072 x 4704,近1400萬個,如果輸入圖片為1000x1000x3,那么參數數量量級會更大;而采用卷積層,參數數量只與卷積核大小和數量相關,如下圖中,w僅5 x 5 x 6 =150個參數,參數數量急劇減少。
??為什么可以參數共享?如果一個卷積核用于提取某類特征,如垂直邊緣,那么這個卷積核可能適用于其他區域。這不僅適用于低層提取邊緣,也適用于提取高階特征,如臉上的眼睛。

??②稀疏連接:例如,輸出結果中一個像素點上的數值僅由卷積核對應的那塊區域決定,其他區域都不會對其造成影響,而全連接層則是將輸入圖片所有數據用于計算。
??卷積神經網絡還能夠提取平移不變的特征,因為對于卷積網絡,即使畫像平移幾個像素,這張圖片依然具有非常相似的特征。

2. CNN實例探究

? 2.1 經典網絡

??(1)LeNet - 5
??LeNet - 5可以識別圖片中的手寫數字(適用于灰階圖像,32 * 32 * 1),LeNet - 5沒有Padding,池化采用的是平均池化。隨網絡深度增加,圖像縮小,通道數增加。論文中使用的激活函數為sigmoid和tanh。一共約6萬個參數。

??(2)AlexNet **
??實際上,AlexNet (一共約6000萬個參數)與LeNet - 5有很多相似之處,但AlexNet采用了含有很多隱藏單元的基礎模塊,并在規模很大的數據集上訓練,這使得其表現極為出色;另一個讓其表現出色的原因是采用了relu激活函數。
??①這篇論文中采用了非常復雜的方法在兩個GPU上進行訓練(因為那時候GPU還不行),方法大致是將一個卷積層中的卷積核分成兩部分在兩個GPU上分別運行,同時還專門有一個方法用于兩個GPU交流。
??②“局部響應歸一化層”:將一個像素位置上所有通道上的值進行歸一化,即LRN層,這么做的原因是我們可能不需要那么高的激活值,但后來研究者發現LRN層起到的作用不大。
??
(2)VGG-16 **

? 2.2 殘差網絡(Residual Networks)

??非常深的網絡是很難訓練的,因為存在梯度消失和梯度爆炸問題。殘差網絡,通過“遠跳連接”將前面的信息直接傳給后面的layer,而不經過中間的layer。

????理論上隨著網絡層數的增加,訓練誤差應該是單調遞減的,但實際上當網絡層數到了一定深度,訓練誤差開始增加,這可能是由于梯度消失和梯度爆炸問題帶來的。但通過殘差網絡,訓練誤差可以一直單調遞減。

(1)殘差網絡為什么有效?
??當一個網絡越深時,它在訓練集上的效率會有所降低,但在殘差網絡上并不完全如此。在殘差塊中,a[l]通過遠跳連接直接與l+2層Z加和后輸入到激活函數,若網絡中添加了正則項,Z[l+2]的計算中,權重W可能被壓縮得很小,如果出現梯度消失問題,那么Z[l+2]項被忽略;又激活函數為ReLu,故該過程相當于計算了a[l]=a[l+2]得恒等式。a[l]和a[l+2]維度不同問題,添加一個權重矩陣來將a[l]維度轉化與a[l+2]一致,但實際上ReNet采用了一系列維度相同的卷積。
詳細解釋參見詳解殘差網絡
(2)網絡中的網絡和1x1卷積
??對于一張單通道的圖片來說,用一個1x1的卷積核去卷積,其意義不大,但對于網絡中,通道數量很多的數據,1x1卷積核可以實現降維或升維的作用(通道坐標上的維度)。

? 2.3 Inception network motivation

??構建卷積層是,我們要決定卷積核的大小(1x3、3x3或5x5?)、要不要添加池化層,Inception網絡可以自己學習決定,雖然模型會變得比較復雜,但其表現卻非常好。如下圖,①1x1 filter用于通道降維(或升維);②3x3 filter用于卷積;③5x5 filter也用于卷積;④MAX-POOL用于最大池化。這些filter過程都需要維持輸出圖片大小一致(通過Padding和stride控制)。


(1)如何計算loss
??如下圖,在計算loss的過程中,存在一個問題,28x28x192的輸入,那么卷積核的大小為5x5x192,一共32個卷積核,那么需要執行的乘法操作將達到1.2億次,就算是現在的計算機也比較花費時間,而這僅僅是一層卷積。
??另一種架構如下圖所示,輸入輸出大小與上圖相同,但中間采用了1x1x192的filter將輸入維度降低到28x28x16大小,再經過5x5x16卷積核卷積。其乘法計算量減少至1240萬。

(2)Inception network
??Inception模塊,兩個綠色層中間各個連接,在訓練時,模型會選擇啟用哪一個連接結果更優。
??完整Inception網絡如下,它在隱藏層也伸出了一些分支,通過隱藏層特征直接連接到全連接層用于預測。這確保了即使隱藏層參與了特征計算,但同時也能做預測,在一定程度上能防止過擬合的發生。

? 2.4 遷移學習

image.png

??如上圖所示,①當你的數據集較小時,可以采用其他人的網絡核權重參數,替換輸出層,訓練時僅訓練輸出層參數;②當數據集較大時,則選擇訓練后幾層網絡參數;③當你的數據集足夠大時,可以將所有參數都訓練。

3. 目標檢測

? 3.1 目標定位

??在目標檢測中,一張圖片的分類,輸出不僅僅是一個標簽(歸屬于什么),而是多個標簽,如同時輸入這張圖片含有行人、汽車、摩托、背景等;此外對于檢測到的目標如行人,不僅包含行人標簽,還包含這個行人的位置、大小。如下圖,圖片左上角坐標為(0,0),右下角坐標為(1,1),檢測到的目標坐標為其中心點(bx,by),大小為(bh,bw)。故目標檢測中,輸出的結果為多個標簽,每個標簽含目標所屬類別、坐標、大小。

??標簽定義和loss函數如下,假設目標檢測僅含下圖中4類,那么,定義標簽為長度為8的向量,y1=Pc代表圖片中是否含目標(除背景之外),接著四個值為目標大小和坐標,c1、c2、c3分別代表目標所屬歸類。一張圖片的loss,當檢測到目標時(y1=Pc=1)由向量中各對應值來求,否則只采用y1=Pc來求loss,其他值忽略(只有背景的圖片,標簽向量中只含Pc,其他值為?,這并不影響模型訓練和預測)。在輸出層,可以不是都采用均方誤差來輸出,Pc可采用邏輯回歸輸出,目標大小和坐標采用平方誤差,類別采用softmax。

? 3.2 特征點檢測

??通過目標定位方法可以輸出目標大小、坐標。更概括的說法是,神經網絡可以通過輸出圖片上的特征點(x,y)坐標,來實現對目標特征的識別。例如,需要通過特征點來識別一張人臉,在訓練集中,X為圖片數據,標簽數據Y包含[分類,人臉各個部分輪廓的特征點],如下圖中人臉檢測,輸出64對坐標點、一個分類。需要注意的是,所有圖片的坐標點順序一致,如左眼角都是(x1,y1)。.

? 3.3 目標檢測

(1)滑動窗口法
??要實現圖片中汽車目標檢測,①首先要構建一個標簽訓練集,X表示適當剪切的汽車圖片樣本(含有汽車則圖片基本被汽車占滿),Y=[1 = 汽車,0 != 汽車];②將這個訓練集用于訓練卷積網絡;③通過滑動窗口的方法,采用已訓練好的網絡,可以實現目標檢測。

??滑動窗口法:①設置滑動窗口大小,將窗口內的圖片數據輸入到卷積網絡用于預測,然后滑動窗口,再預測,重復,窗口自左向右,自上向下滑動,直到掃描完整張圖片;②改變窗口大小,重復①過程,因此,無論汽車在圖片哪一個位置,總會有一個窗口檢測到。顯然,滑動窗口法會增加計算量,因為每滑動一次窗口,都要進行預測,如果增加滑動的步長,那么,會減少出入卷積網絡的窗口個數,這能夠減少計算量,但會影響性能。滑動步長和窗口大小要足夠小,否則無法準確定位圖中的目標。

(2)滑動窗口的卷積應用實現
??如果采用上述的方法來實現窗口滑動,那么效率很低,如果在卷積層上應用這個算法,那么效率將大大提升。
??(2.1)全連接層轉化為卷積層
??如下圖第一個全連接層,一個樣本輸出的是一個長度為400的向量。將其轉化為卷積層,則采用5x5x400的卷積核,卷積后得到1x1x400的輸出,最終輸出不再是一個softmax向量,而是1x1x4的輸出。

??(2.2)卷積層實現滑動窗口
??實際上將滑動窗口中數據傳入卷積網絡,很多像素點對應的卷積計算都是重復在進行,所以沒必要一個一個窗口的輸入,而是將整張圖片輸入,最后輸出各個窗口組成的卷積層數據。如下圖中,綠色對應綠色部分。
??所以,在卷積網絡中應用窗口滑動法,將一次獲得所有窗口預測值。

? 3.4 YOLO算法

(1)Bounding box
??在卷積網絡中實現窗口滑動,能夠提升效率,但還存在一個問題:不能輸出最精準的邊界框。在YOLO算法中,將圖片劃分為nxn份,如下圖中3x3,更精細一點還可以是19x19等等。為每一部分都設置標簽向量(含類別、坐標、大小等),最后輸出結果大小為3x3x8(8即每個標簽向量的長度)。這個算法將會使得兩個目標的中心在同一個格子的概率降低。同時,能輸出邊界邊框,可以具有任意高寬比和更精確的坐標。

??坐標、大小參數(注意:中心坐標一定會坐落在劃分的格子內,但長寬可能會比格子大)

(2)交并比函數
??交并比函數用于評價預測邊框是否定位準確。

(3)非極大值抑制
??前述的算法可能會對同一個目標做出多次檢測,非極大值抑制可以保證算法對每個目標只檢測一次。如下圖中,每一個目標對象都會有很多個邊框,每個邊框會給出對應的Pc概率值,非最大值抑制算法會去掉除了概率最大的其他邊框。
??如下圖,首先后拋棄所有概率低于0.6的邊框;②對于剩下的邊框,進行循環篩選:i、篩選出概率最大的框,然后計算其他框與這框的IoU值,將IoU大于0.5的框都去除;ii、篩選剩余框中第二大,重復第i步。通過這樣篩選,如果是同一個目標,那么這些框的IoU值都會很大,而不同目標,如果距離足夠遠,那么IoU為0,該框會被保留,以此來定位圖片中多個目標。

(4)Anchor box
??如前所述算法都只是一個框檢測一個目標,如果需要一個框檢測多個目標,可以使用Anchor box。如下圖,人和車的中心坐標都坐落在同一個格子里,那么對于那個格子的輸出Y將無法檢測出兩個結果,必須輸出人或車的其中一個。而Anchor box的思路是預先定義兩個形狀不同的anchor box,然后定義的輸出向量包含兩個概率、坐標、類別信息,并將其與anchor box分別關聯起來。
??當只有一個目標時,標簽定義如下:

(5)YOLO算法
??①訓練集:檢測類別(行人、車、摩托),anchor box(竹竿和胖墩),那么標簽向量為3x3x2x8。不同各自y定義如下:
??②預測:對于含目標和不含目標的格子,卷積網絡的輸出如下:
??③非極大值抑制:i、如下圖,由于會檢測到兩個目標,所以將會獲得兩個bounding boxes;ii、拋棄概率極低的邊框;iii、對于每個類別,執行非極大值抑制算法,留下概率最大的邊框。

4. 人臉識別和神經風格轉換

? 4.1 one shot學習

??人臉識別最大的挑戰是解決一次學習問題,也就是需要僅僅通過一張照片或一個樣本就能去識別這個人,而在傳統的deep learning的認知中,只有一個樣本時,表現并不好。假設用下圖的方法去做人臉識別,①如果僅有4個員工,用4個員工去訓練一個卷積網絡,顯然樣本數太小,是不合理;②如果又來一個新員工,那么又將要重新訓練這個網絡。

??可以通過學習"similarity"函數來解決一次學習問題。這個函數用于判斷兩張照片的差異性,并設置一個閾值來判斷兩張照片是否是同一個人,如下數據庫中有4個人的照片,當輸入一張照片后,會與這四張照片都計算出相似度函數值。期望同一個人輸出的d值小,而不是同一個人的d值很大。如果有新員工,只需要將照片添加至數據庫就可以,而不用再次訓練。

? 4.2 Siamese network

??前述的卷積網絡,最后將提取到的特征輸入到softmax等函數來輸出結果。在Siamese network中,將最后提取特征這一層(encoding of sample)將不會輸入給softmax層,再將另一張照片輸入到同一網絡中(結構和參數都相同)提取特征,將兩張照片的特征輸入到“similarity”函數來求兩張照片的相似度。

??而我們需要做的是要學習這個網絡的參數,使得網絡在提取特征時,如果是同一個人的照片,那么提取到的特征相似度高,不是同一個人的照片提取到的特征相似度低。

? 4.3 三元損失函數(Triplet loss)

??如下圖,一共三張照片,A和P為同一個人,A和N為不同人,學習的目標是,我們希望,A和P之間的距離盡量小,而A和N之間的距離盡量大,那么就有:

??
??為避免兩項距離同時出現0的情況,需要加一項α作為兩項間的margin,得到公式:

loss 函數
??如果在數據集中隨機選擇圖片來進行訓練,那么很大程度上,d(A,N)都會大于d(A,P),那么模型將學習不到什么東西,所以,用于訓練的數據,應該是d(A,N)和d(A,P)比較接近的數據。

? 4.4 人臉驗證和二分類問題

? 4.5 神經風格轉換

??例子:采用Style的風格來繪制Content:


(1)深度卷積網絡到底在學習什么?
??論文Visualizing and Understanding Convolutional Networks告訴我們CNN每一層到底學習到了什么。論文通過將每一層的輸出反池化、反卷積的到與原圖片大小的圖片,以此來觀察每一層所學習到的東西。池化是不可逆的過程,論文中采用記錄最大值的位置,再將池化后的數值放回原來位置,其余位置填充0來實現反池化過程。例如第一層,我們選取9個卷積核的輸出,將每個卷積核的輸出反卷積后,選取激活值top9(我的理解:n個樣本通過這個卷積核輸出后,選擇激活值最大的9個)的繪制成圖。可以看出,隨著layer的增加,所學習到的特征更為復雜。

(2)代價函數
??為了實現神經風格遷移,我們需要定義一個對于生成圖片G的代價函數,并來優化它。公式含兩項,分別代表新生成的圖片和原圖片、風格圖片的相似度。對于新圖片會先隨機生成,然后經過優化代價函數來生成圖片。

??(2.1)Content代價函數
??①我們需要通過hidden layer來計算content cost,如果層數太淺,那么它可能會使得像素上非常接近content圖片,如果太深,則會判斷圖片中有什么(狗)來生成圖片,并確保生成圖片里有這個東西(狗),所以一般這個hidden layer既不會太淺也不會太深。②使用一個已經預訓練的卷積網絡(如VGG)。③將al和al作為圖片在l層的激活值。④如果al和al相似,那么圖片內容相似。

??(2.2)Style代價函數
??什么是一張圖片的“style”?如果采用某一層的激活值來衡量“style”,那么這個style的定義就是各個通道之間對應位置上的點的相關系數。這個相關系數描述了,如果通道i中的內容出現在該位置,那么通道j中的內容出現在該位置的概率。例如下圖,①通道對應①部分垂直線特征,②對應②部分橘色圖案,相關系數描述了在對應位置①②同時出現的概率。

??①k和k`表示同一層不同通道,i,j代表一個通道中不同位置坐標。計算兩個通道的相關系數如下,將會得到一個相關系數矩陣,大小為通道數 x 通道數:
??②代價函數:求和符合內為兩個矩陣的Frobenius范數。此外,在每一層上都使用風格代價函數,將會使得效果更好。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容