Deep Learning.ai學習筆記_第四門課_卷積神經網絡

目錄

第一週 卷積神經網絡基礎

第二週 深度卷積網絡:實例探究

第三週 目標檢測

第四周 特殊應用:人臉識別和神經風格轉換

 

第一週 卷積神經網絡基礎

垂直邊緣檢測器,通過卷積計算,可以把多維矩陣進行降維。如下圖:

 

卷積運算提供了一個方便的方法來發現圖像中的垂直邊緣。例如下圖:

 

對於3x3的過濾器,使用下面的數字組合魯棒性比較高,這樣的過濾器也稱爲Sobel過濾器

 

還有一種稱爲Scharr的過濾器,如下:

隨着深度學習的發展,我們學習的其中一件事就是當你真正想去檢測出複雜圖像的邊緣,你不一定要去使用那些研究者們所選擇的這九個數字(3x3的過濾器),但你可以從中獲益匪淺。把這矩陣中的9個數字當成9個參數,並且在之後你可以學習使用反向傳播算法,其目標就是去理解這9個參數。

 

將矩陣的所有數字都設置爲參數,通過數據反饋,讓神經網絡自動去學習它們,我們會發現神經網絡可以學習一些低級的特徵,例如這些邊緣的特徵。

 

padding卷積,爲了指定卷積操作中的padding,你可以指定的值。也可以使用Valid卷積,也就是p = 0。也可使用Same卷積填充像素,使你的輸出和輸入大小相同。(same卷積填充的核心要點,是使得原給出的矩陣中像素點都能夠均勻被調用計算,否則邊緣點調用少,從而被忽略)

 

一個典型的卷積神經網絡通常有三層,一個是卷積層,我們常常用Conv來標註。還有兩種常見類型的層,一個是池化層,我們稱之爲POOL。最後一個是全連接層,用FC表示。如下圖:

 

卷積網絡中使用池化層,也能夠縮減模型的大小,提高計算速度,同時提高所提取特徵的魯棒性。一下是一個池化層的例子, 把4×4的輸入拆分成不同的區域,我把這個區域用不同顏色來標記。對於2×2的輸出,輸出的每個元素都是其對應顏色區域中的最大元素值。

 

最大化操作的功能就是只要在任何一個象限內提取到某個特徵,它都會保留在最大化的池化輸出裏。所以最大化運算的實際作用就是,如果在過濾器中提取到某個特徵,那麼保留其最大值。如果沒有提取到這個特徵,可能在右上象限中不存在這個特徵,那麼其中的最大值也還是很小,這就是最大池化的直觀理解。

 

池化的超級參數包括過濾器大小f和步幅s,常用的參數值爲f = 2,s = 2,應用頻率非常高,其效果相當於高度和寬度縮減一半。

 

最大池化只是計算神經網絡某一層的靜態屬性,它只是一個靜態屬性。

 

如何選定這些參數,常規做法是,儘量不要自己設置超參數,而是查看文獻中別人採用了哪些超參數,選一個在別人任務中效果很好的架構,那麼它也有可能適用於你自己的應用程序。

 

下面看一個卷積神經網絡的例子,步驟一般爲卷積->池化->卷積->池化... ... ->全連接,全連接等。如下圖:

 

第二週 深度卷積網絡:實例探究

當用於訓練圖像和數據集時,AlexNet能夠處理非常相似的基本構造模塊,這些模塊往往包含着大量的隱藏單元或數據,這一點AlexNet表現出色。AlexNetLeNet表現更爲出色的另一個原因是它使用了ReLu激活函數。如下圖:

 

非常非常深的神經網絡是很難訓練的,因爲存在梯度消失和梯度爆炸問題。 跳躍連接(Skip connection),它可以從某一層網絡層獲取激活,然後迅速反饋給另外一層,甚至是神經網絡的更深層。我們可以利用跳躍連接構建能夠訓練深度網絡的ResNets,有時深度能夠超過100層。

如圖所示,5個殘差塊連接在一起構成一個殘差網絡。

 

一般情況,隨着網絡深度加深,訓練錯誤會越來越多。但是ResNets不一樣, 即使網絡再深,訓練的表現卻不錯,比如說訓練誤差減少,就算是訓練深達100層的網絡也不例外。這種方法,可以有助於 解決梯度消失和梯度爆炸問題,讓我們在訓練更深網絡的同時,又能保證良好的性能。也許從另外一個角度來看,隨着網絡越來深,網絡連接會變得臃腫,但是ResNet確實在訓練深度網絡方面非常有效。

 

普通網絡和ResNets網絡常用的結構是:卷積層-卷積層-卷積層-池化層-卷積層-卷積層-卷積層-池化層……依此重複。直到最後,有一個通過softmax進行預測的全連接層。

 

1×1卷積層 給神經網絡添加了一個非線性函數,從而減少或保持輸入層中的通道數量不變,當然如果你願意,也可以增加通道數量。後面你會發現這對構建Inception網絡很有幫助。如下圖:

 

如果你看到一篇研究論文想應用它的成果,你應該考慮做一件事,我經常做的就是在網絡上尋找一個開源的實現。因爲你如果能得到作者的實現,通常要比你從頭開始實現要快得多,雖然從零開始實現肯定可以是一個很好的鍛鍊。

 

在自己遇到的問題,訓練的數據集內容比較少時,可以從網上下載一些以已訓練且數據集比較大的模型,然後修改其最後的softmax輸出值,然後再在此模型上進行訓練學習,這就是卷積網絡訓練中的遷移學習,一般能夠達到很好的效果。

 

常用的實現數據擴充的方法是使用一個線程或者是多線程,這些可以用來加載數據,實現變形失真,然後傳給其他的線程或者其他進程。

 

當你沒有太多標籤數據時,你只需要更多地考慮手工工程。 另一套技術,當你有相對較少的數據時就可以用很多相似的數據。

 

第三週 目標檢測

目標定位

 

滑動窗口目標檢測,通過不斷改變初始窗口的大小,以一定的步幅移動該窗口,對意向目標進行檢測。具體如下圖:

 

滑動窗口目標檢測算法也有很明顯的缺點,就是計算成本,因爲你在圖片中剪切出太多小方塊,卷積網絡要一個個地處理。如果你選用的步幅很大,顯然會減少輸入卷積網絡的窗口個數,但是粗糙間隔尺寸可能會影響性能。反之,如果採用小粒度或小步幅,傳遞給卷積網絡的小窗口會特別多,這意味着超高的計算成本。

 

YOLO對象檢測算法是最有效的對象檢測算法之一,包含了整個計算機視覺對象檢測領域文獻中很多最精妙的思路。

 

第四周 特殊應用:人臉識別和神經風格轉換

人臉識別,需要解決一次學習的問題。 要讓人臉識別能夠做到一次學習,爲了能有更好的效果,要做的應該是學習Similarity函數。 解決一次學習問題的,只要你能學習函數d,通過輸入一對圖片,它將會告訴你這兩張圖片是否是同一個人。如果之後有新人加入了你的團隊(編號5),你只需將他的照片加入你的數據庫,系統依然能照常工作。

 

函數的作用就是輸入兩張人臉,然後告訴你它們的相似度。實現這個功能的一個方式就是用Siamese網絡,如下圖:

 

對於兩個不同的輸入,運行相同的卷積神經網絡,然後比較它們,這一般叫做Siamese網絡架構。

 

要想通過學習神經網絡的參數來得到優質的人臉圖片編碼,方法之一就是定義三元組損失函數然後應用梯度下降。學習收集定義好的三元組數據集, 用梯度下降最小化我們之前定義的代價函數,這樣做的效果就是反向傳播到網絡中的所有參數來學習到一種編碼,使得如果兩個圖片是同一個人,那麼它們的d就會很小,如果兩個圖片不是同一個人,它們的d就會很大。如下圖:

 

人臉識別的另一種方法是可以把識別過程當成一個二分類問題。對比兩種圖片的差異,輸出相似度,如下圖:

 

什麼是神經風格遷移?

例如,可以把一張圖片的元素整合到另一張圖片中,如下圖:

 

 

 

 

參考資料:

1.http://www.ai-start.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章