當前位置:首頁 » 安全設置 » 圖卷積網路參數設置
擴展閱讀
家中裝無線網路 2025-02-04 03:37:46

圖卷積網路參數設置

發布時間: 2023-09-13 23:27:01

㈠ 卷積神經網路用全連接層的參數是怎麼確定的

卷積神經網路用全連接層的參數確定:卷積神經網路與傳統的人臉檢測方法不同,它是通過直接作用於輸入樣本,用樣本來訓練網路並最終實現檢測任務的。

它是非參數型的人臉檢測方法,可以省去傳統方法中建模、參數估計以及參數檢驗、重建模型等的一系列復雜過程。本文針對圖像中任意大小、位置、姿勢、方向、膚色、面部表情和光照條件的人臉。

輸入層

卷積神經網路的輸入層可以處理多維數據,常見地,一維卷積神經網路的輸入層接收一維或二維數組,其中一維數組通常為時間或頻譜采樣;二維數組可能包含多個通道;二維卷積神經網路的輸入層接收二維或三維數組;三維卷積神經網路的輸入層接收四維數組。

由於卷積神經網路在計算機視覺領域應用較廣,因此許多研究在介紹其結構時預先假設了三維輸入數據,即平面上的二維像素點和RGB通道。

㈡ 卷積神經網路CNN(Convolutional Neural Network)

上圖計算過程為,首先我們可以將右邊進行卷積的可以稱為過濾器也可以叫做核,覆蓋到左邊第一個區域,然後分別按照對應位置相乘再相加,3*1+1*1+2*1+0*0+0*0+0*0+1*(-1)+8*(-1)+2*(-1)=-5;
按照上述的計算方法逐步按右移一個步長(步長可以設定為1,2,...等),然後按往下移,逐漸計算相應的值,得出最終的值。

如上圖顯示,對於第一個圖像矩陣對應的圖,一邊是白色,一邊是黑色,那麼中間就會存在一個垂直的邊緣,我們可以選擇一個垂直邊緣檢測過濾器,如乘法右邊的矩陣,那麼兩者做卷積後得出的圖會顯示如等號右邊的結果矩陣對應的灰度圖中間會有一個白色的中間帶,也就是檢測出來的邊緣,那為什麼感覺中間邊緣帶會比較寬呢?而不是很細的一個局域呢?原因是我們輸入的圖像只有6*6,過於小了,如果我們選擇輸出更大的尺寸的圖,那麼結果來說就是相對的一個細的邊緣檢測帶,也就將我們的垂直邊緣特徵提取出來了。
上述都是人工選擇過濾器的參數,隨著神經網路的發展我們可以利用反向傳播演算法來學習過濾器的參數

我們可以將卷積的顧慮器的數值變成一個參數,通過反向傳播演算法去學習,這樣學到的過濾器或者說卷積核就能夠識別到很多的特徵,而不是依靠手工選擇過濾器。

- padding 操作,卷積經常會出現兩個問題:
1.每經過一次卷積圖像都會縮小,如果卷積層很多的話,後面的圖像就縮的很小了;
2.邊緣像素利用次數只有一次,很明顯少於位於中間的像素,因此會損失邊緣圖像信息。
為了解決上述的問題,我們可以在圖像邊緣填充像素,也就是 padding 操作了。

如果我們設置在圖像邊緣填充的像素數為p,那麼經過卷積後的圖像是:(n+2p-f+1)x(n+2p-f+1).
如何去選擇p呢
通常有兩種選擇:
-Valid:也就是說不填充操作(no padding),因此如果我們有nxn的圖像,fxf的過濾器,那麼我們進行卷積nxn fxf=(n-f+1)x(n-f+1)的輸出圖像;
-Same:也就是填充後是輸出圖像的大小的與輸入相同,同樣就有(n+2p)x(n+2p)
fxf=nxn,那麼可以算,n+2p-f+1=n,得到p=(f-1)/2。
通常對於過濾器的選擇有一個默認的准則就是選擇過濾器的尺寸是奇數的過濾器。
- 卷積步長設置(Strided COnvolution)
卷積步長也就是我們進行卷積操作時,過濾器每次移動的步長,上面我們介紹的卷積操作步長默認都是1,也就是說每次移動過濾器時我們是向右移動一格,或者向下移動一格。
但是我們可以對卷積進行步長的設置,也就是我們能夠對卷積移動的格數進行設置。同樣假如我們的圖像是nxn,過濾器是fxf,padding設置是p,步長strided設置為s,那麼我們進行卷積操作後輸出的圖像為((n+2p-f)/s+1)x((n+2p-f)/s+1),那麼這樣就會出現一個問題,如果計算結果不是整數怎麼辦?

一般是選擇向下取整,也就是說明,只有當我們的過濾器完全在圖像上能夠覆蓋時才對它進行計算,這是一個慣例。
實際上上述所述的操作在嚴格數學角度來說不是卷積的定義,卷積的定義上我們計算的時候在移動步長之前也就是對應元素相乘之前是需要對卷積核或者說我們的過濾器進行鏡像操作的,經過鏡像操作後再把對應元素進行相乘這才是嚴格意義上的卷積操作,在數學角度上來說這個操作不算嚴格的卷積操作應該是屬於互相關操作,但是在深度學習領域中,大家按照慣例都省略了反轉操作,也把這個操作叫做卷積操作

我們知道彩色圖像有RGB三個通道,因此對於輸入來說是一個三維的輸入,那麼對三維輸入的圖像如何進行卷積操作呢?

例子,如上圖我們輸入圖像假設為6×6×3,3代表有RGB三個通道channel,或者可以叫depth深度,過濾器的選擇為3×3×3,其中需要規定的是,顧慮器的channel必須與輸入圖像的channel相同,長寬沒有限制,那麼計算過程是,我們將過濾器的立體覆蓋在輸入,這樣對應的27個數對應相乘後相加得到一個數,對應到我們的輸出,因此這樣的方式進行卷積後我們得出的輸出層為4×4×1。如果我們有多個過濾器,比如我們分別用兩個過濾器一個提取垂直特徵,一個提取水平特徵,那麼輸出圖4×4×2 。也就是代表我們輸出的深度或者說通道與過濾器的個數是相等的。

第l層的卷積標記如下:

加入我們的過濾器是3×3×3規格的,如果我們設定10個過濾器,那麼需要學習的參數總數為每個過濾器為27個參數然後加上一個偏差bias那麼每個過濾器的參數為28個,所以十個過濾器的參數為280個。從這里也就可以看出,不管我們輸入的圖片大小是多大,我們都只需要計算這些參數,因此參數共享也就很容易理解了。

為了縮減模型的大小,提高計算速度,同時提高所提取特徵的魯棒性,我們經常會使用池化層。池化層的計算方式與卷積類似,只是我們需要對每一個通道都進行池化操作。
池化的方式一般有兩種:Max Pooling和Average Pooling。

上面為Max Pooling,那麼計算方法與卷積類似,首先設定超參數比如過濾器的大小與步長,然後覆蓋到對應格子上面,用最大值取代其值作為輸出的結果,例如上圖為過濾器選擇2×2,步長選擇為2,因此輸出就是2×2的維度,每個輸出格子都是過濾器對應維度上輸入的最大值。如果為平均池化,那麼就是選擇其間的平均值作為輸出的值。
因此從上面的過程我們看到,通過池化操作能夠縮小模型,同時能讓特徵值更加明顯,也就提高了提取特徵的魯棒性。

㈢ 卷積神經網路(Convolutional Neural Networks, CNN)——更有效率地提取特徵

卷積神經網路(Convolutional Neural Networks, CNN)——更有效率地提取特徵

圖像識別問題本質上就是分類問題,比如我們要區分貓和狗,那麼我們就需要構建一個模型,將照片丟進去後,模型能輸出貓或者狗的概率有多大。在做圖像識別時首要的就是要提取圖片的特徵,那麼如何提取圖片的特徵呢?前面講到了前向全連接網路,我們可以嘗試用前向全連接網路提取。假設圖片的像素是100*100,如果如片是彩色的,每個像素都有RGB三種顏色的數值。因此,一張圖片是有一個三維向量構成的,一維是長100,一維是寬100,還有一維是R、G、B 3個通道(channels)。把這個三維向量拉直作為一個一維向量,長度就是100*100*3。

我們在區分一張圖片時,我們觀察的往往是圖片的局部的、最重要的特徵。 比如圖片上是一隻鳥,我們可能通過嘴巴、眼睛、爪子等就可以判斷出是一隻鳥了。因此,輸入層的每一個神經元沒有必要看圖片的全局,只需要看一個局部就行了。

在兩張不同的圖片上,同一個特徵區域可能處於不同位置。 比如鳥嘴的局部特徵區域在下面這兩張圖上就處在不同的位置上。那麼如何才能讓兩個不同的神經元在看到這兩個不同的感受野時,能產生一致的特徵值呢?

對上面的內容進行一個總結:
(1)我們設置一個局部感受野,假設感受野的大小為W*H*C,其中W表示感受野的寬度,H表示感受野的高度,C表示感受野的通道數。那麼對應的神經元的參數的個數就為:W*H*C個權值加1個偏置。在卷積神經網路中,我們稱這樣一個神經元為一個 濾波器(filter)
(3)我們通過滑動的方式讓感受野鋪滿整個圖片,假設圖片的尺寸是W1*H1*C,滑動步長為S,零填充的數量為P。假設感受野的個數是W2*H2,其中,
(4)我們讓所有感受野的觀測濾波器參數進行共享,即相當於一個濾波器通過滑動掃描的方式掃描了所有感受野。
(5)我們設置多個濾波器,假設濾波器的個數為K,這K個濾波器都通過滑動掃描的方式掃過整個圖片。此時參數的個數為:(W*H*C+1)*K。
(6)由於每個濾波器每經過一個感受野都會進行一次計算輸出一個值,所以輸出的維度為:W2*H2*K。我們將這個輸出稱為特徵圖,所以特徵圖寬度為W2,高度為H2,通道數C2=K。
舉個例子: 假設某個圖片的大小是100*100*3,設置濾波器的大小為3*3*3,濾波器的個數為64,設置步長S=1,設置零填充的數量為P=0。那麼卷積神經網路的參數為, 相比前向全連接 個參數,參數的個數縮小了幾個數量級。
輸出特徵圖的寬度和高度均為, 輸出特徵圖的通道數為, 所以輸出特徵圖的維度為98*98*64。
如果在上面輸出的基礎上再疊加一層卷積神經網路,濾波器的設置寬和高可以不變,但是通道數不再是3了,而是變成64了,因為輸入特徵圖的通道數已經變64了。假設濾波器的大小為3*3*64,濾波器的個數為32,設置步長S=1,設置零填充的數量為P=0。可以計算出來,新的輸出特徵圖的維度是96*96*32。

以上就是卷積神經網路(CNN)的解析。但是CNN一般不是單獨用的,因為一般提取圖片的特徵是為了分類,還需要進一步處理,常見的形式如下圖所示。

㈣ 初識卷積神經網路

按照上文中介紹的神經網路,如果處理一張圖片的話,參數有多大呢?假設圖像的大小為1200 * 1200,下一層的神經元個數為10^5,不難得出參數量為 1200 * 1200 * 10^5 = 1.44 * 10^12。可以看出一層的參數量就是很大了,如果再多加幾層,那參數量大的應該是超出了內存的承受范圍,這從研究和工程的角度都是不允許的。而且參數太多,很容易造成過擬合。

怎麼解決這個問題呢?經過研究,從稀疏連接、參數共享和平移不變性三個方面來進行改進。

可能有些人不懂這種稀疏連接是怎麼實現的?先來說說卷積操作,以一個二維矩陣為輸入(可以看作是一個單通道圖片的像素值),卷積產生的稀疏連接根本原因就是這塊的核函數,一般的核函數的大小遠小於輸入的大小。

以下圖例:卷積操作可以看做是一種滑窗法,首先,輸入維度是4×4,輸入中紅色部分,先和核函數中的元素對應相乘,就是輸出中左上角的元素值s1,即 s1 = a×k1+b×k2+e×k3+f×k4。

參數共享是指在一個模型的多個函數中使用相同的參數,它是卷積運算帶來的固有屬性。

在全連接中,計算每層的輸出時,權重矩陣中的元素只作用於某一個輸入元素一次;

而在卷積神經網路中,卷積核中的每一個元素將作用於每一個局部輸入的特定位置上。根據參數共享的思想,我們只需要學習一組參數集合,而不需要針對每一個位置的每一個參數來進行優化學習,從而大大降低了模型的存儲需求。

如果一個函數的輸入做了一些改變,那麼輸出也跟著做出同樣的改變,這就時平移不變性。

平移不變性是由參數共享的物理意義所得。在計算機視覺中,假如要識別一個圖片中是否有一隻貓,那麼無論這只貓在圖片的什麼位置,我們都應該識別出來,即就是神經網路的輸出對於平移不變性來說是等變的。

根據稀疏連接、參數共享和平移不變性三個思想,卷積核就應運而生了。看下圖,有個直觀的感受。

上圖就是在一個通道上做的卷積,但現實中,圖片一般是由3個通道構成(R\G\B),卷積核也由二維的平面生成了三維立體。具體的樣子如下圖:

如上圖所示,Filter W0 即為卷積核,其大小為(3 * 3 * 3),每個3*3的二維平面會和圖片的相應的通道進行卷積,3個通道的結果相加後加上統一的偏置b0,結果即為Output Volume 第一個通道的第一個位置的數。

從上圖還可以看出 Input Volume 四周加了0,這個0叫做padding,一般是為了卷積劃動的過程中包含原有的所有數;而多通道卷積核計算過程和卷積核計算過程,不太一樣的是多通道卷積核計算過程每次滑2下,這個滑動的距離叫做步長-stride。

所以通過輸入大小和卷積核大小,我們可以推斷出最終的結果的大小。比如上圖卷積核計算過程,輸入大小為5 * 5,卷積核為3 * 3,那麼卷積核在原圖上每次滑動一格,橫向滑3次,縱向也是3次,最終結果為 3 * 3。在多通道卷積核計算過程中,每次滑動為2格,橫向滑3次,縱向也是3次,最終結果也為 3*3。可以推斷出,最終大小的公式為:(輸入大小 - 卷積核大小)/ 滑動步長。

在卷積核計算過程,可以看出經過卷積後的大小變小了,那能不能經過卷積計算且大小不變呢?這里,引出了 padding 的另一個作用,保證輸入和輸出的大小一致。比方輸出的 5*5 加 padding,那麼四周就被0圍繞了,這時的輸入大小就變為7 * 7, 再經過 3 * 3的卷積後,按照上邊推斷出的公式,可以得出 最終的大小為 5 * 5,這時與輸入大小保持了一致。

池化層夾在連續的卷積層中間, 用於壓縮數據和參數的量,減小過擬合。
簡而言之,如果輸入是圖像的話,那麼池化層的最主要作用就是壓縮圖像。

池化層用的方法有Max pooling 和 average pooling,而實際用的較多的是Max pooling。下圖演示一下Max pooling。

對於每個2 * 2的窗口選出最大的數作為輸出矩陣的相應元素的值,比如輸入矩陣第一個2 * 2窗口中最大的數是1,那麼輸出矩陣的第一個元素就是1,如此類推。

全連接層的部分就是將之前的結果展平之後接到最基本的神經網路了。

根據上邊的介紹,可以得出,卷積核的通道數目和輸入的圖像的通道數目是保持一致的,而輸出的通道數目是和卷積核數目是一致的。這樣參數量可以得出,假設輸入的通道為5,卷積核大小為 3 * 3 ,輸出的通道數目為10,那麼參數量為:3 * 3 * 5 * 10,其中3 * 3 * 5是1個卷積核的參數個數,3 * 3 * 5 * 10 是 10個卷積核的參數個數,也就總共的參數個數。

在卷積中,滑動一次會經過多次的點乘,只經過一次的加法,所以加法的計算量可以忽略不計。其中,滑動一次會的點乘次數和卷積核的大小有關系,比方 3 * 3的卷積,則是經過了 3 * 3 = 9次點積。一共滑動多少次和輸出大小有關系,比方 輸出的結果也為 3 * 3,那麼就是滑動了9次。這樣就可以得出輸入和輸出單通道時計算量 3 * 3 * 3 * 3 = 81。那麼對於輸入多通道時,卷積核也需要增加相應的通道數目,此時應該在剛才的計算量上乘以通道的數目,得出輸入多通道的一個卷積核的計算量。這樣,對於輸出多通道,總的計算量則是乘以多個卷積核即可。