1. 程式人生 > >吳恩達卷積神經網路——卷積神經網路

吳恩達卷積神經網路——卷積神經網路

計算機視覺

相關問題:
1)影象分類:
在這裡插入圖片描述
2)目標檢測:
在這裡插入圖片描述
3)影象風格遷移:
在這裡插入圖片描述
挑戰:資料輸入可能會非常大
輸入10001000的彩色影象,則需要輸入的資料量為100010003 =3M,這意味著特徵向量X的維度高達3M ,如果在第一隱藏層有1000個神經元,使用標準全連線,那麼權值矩陣中將會有10003M=3B的引數。引數量過於龐大,難以獲得足夠的資料用來防止過擬合,並且需要儲存3B資料的記憶體巨大,讓人無法接受。
卷積神經網可以處理大影象

邊緣檢測示例

卷積運算是卷積神經網路最基本的組成部分。
神經網路前幾層檢測邊緣,後面幾層檢測到物體的部分,更後面檢測到完整的物體。
在這裡插入圖片描述
計算機檢測目標時,最開始應是邊緣檢測,例如垂直邊緣或水平邊緣。
在這裡插入圖片描述


如何檢測邊緣?
在這裡插入圖片描述

tensorflow
		tf.nn.conv2d

邊緣檢測

在這裡插入圖片描述
在輸出影象中間區域的亮出,表示在影象中間有一個特別明顯的垂直邊緣。
在這裡插入圖片描述
垂直邊緣檢測器:

水平邊緣檢測器:
在這裡插入圖片描述
sobel:
在這裡插入圖片描述
增加中間一行的權重使得結果的魯棒性更高

Padding

一個基本的卷積操作——padding
一個ff的卷積核取卷積一個66的影象。可能會得到一個(n-f+1)(n-f+1)的輸出。
缺點:
1.每次卷積操作,影象會縮小
2.角落的畫素點只被一個輸出所使用,丟失掉許多邊緣資訊。
為了解決這個問題,需要填充這幅影象(習慣上,用0填充)
在這裡插入圖片描述
將6
6的影象填充為88輸出則為6

6
“Vaild” convolution:No padding:
nXn * fXf = n-f+1 X n-f+1
“Same” convolution:No padding:
nXn * fXf = n+2p-f+1 X n+2p-f+1

n+2p-f+1 =n
p = (f-1)/2(f一般為奇數)

卷積步長

卷積步長是卷積神經網路的基本操作
在這裡插入圖片描述

卷積為何有效

假設想檢測一個彩色影象的特徵,大小為66,三個通道,為了檢測影象的邊緣或一些其他特徵,不是把它和原來33的卷積核做卷積,而是和一個三維的卷積核做卷積。
在這裡插入圖片描述
如果想檢測不同的特徵,用不同的卷積核:
在這裡插入圖片描述

單層卷積網路

在這裡插入圖片描述
例如:10給我卷積核,大小為333,
引數=(333+1)*10=280
不論輸入影象有多大,引數只有280個,這就是卷積神經網路的一個特徵——“避免過擬合”

f^[l]:卷積核尺寸
p^[l]:padding
s^[l]:步長
nc^[l]:卷積核個數

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

簡單卷積網路示例

要做影象分類或影象識別,輸入一張39393的影象,讓計算機識別影象中是否有貓
在這裡插入圖片描述
輸入39393
卷積核3310,stride=1 ,padding = 0
第一隱藏層:37373(39-3+1=37)
卷積核5520,stride=2 ,padding = 0
第二隱藏層:171720((37-5)/2+1=17)
卷積核5540,stride=2 ,padding = 0
第二隱藏層:7740((17-5)/2+1=7)
7740=1960
將全部1960個數字展開形成一個很長的向量,為了預測的結果將這個長向量填充到softmax迴歸函式中
隨著神經網路計算深度的不斷增加,影象不斷縮小,39->37->17->7,但通道數目不斷增加3->10->20->40
一個典型的CNN有:卷積層、池化層、全連線層

池化層

除了卷積層,CNN經常使用池化層縮減模型的大小,提高計算速度,同時提高所提取特徵的魯棒性。
在這裡插入圖片描述
最大池化:
在這裡插入圖片描述
均值池化:
在這裡插入圖片描述
目前,用的最多的是最大池化
在這裡插入圖片描述
最大池化是計算神經網路某一層的靜態屬性

卷積神經網路示例(lenet-5)

在這裡插入圖片描述
儘量不要自己設定超引數,檢視文獻中別人用了哪些超引數,選一個在別人任務中效果很好的架構,它有可能也適用於你自己的應用程式。
在這裡插入圖片描述
池化層沒有引數
卷積層引數少
隨著NN的加深,啟用值會減小,如果啟用值下降太快,也會影響網路效能

為什麼使用卷積?

引數少
原因:
1.引數共享
2.稀疏連線