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

目錄算法

第一週 卷積神經網絡基礎數據庫

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

第三週 目標檢測多線程

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

 

第一週 卷積神經網絡基礎

垂直邊緣檢測器,經過卷積計算,能夠把多維矩陣進行降維。以下圖:函數

 

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

 

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

 

還有一種稱爲Scharr的過濾器,以下:編碼

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

 

將矩陣的全部數字都設置爲參數,經過數據反饋,讓神經網絡自動去學習它們,咱們會發現神經網絡能夠學習一些低級的特徵,例如這些邊緣的特徵。

 

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

相關文章
相關標籤/搜索