4.1)深度卷积网络:卷积神经网络基础
目錄
1)Computer vision
2)Edge detection example(理解)
3)More edge detection
4)Padding(重點)
5)Strided convolutions(重點)
6)Convolutions over volumes
7)One layer of a convolutional network(重點)
8)A simple convolution network example
9)Pooling layers(理解)
10)Convolutional neural network example
11)Why concolutions?
以下筆記是吳恩達老師深度學習課程第四門課第一周的的學習筆記:Foundations of Convolutional Neural Networks。筆記參考了黃海廣博士的內容,在此表示感謝。
1)Computer vision
計算機視覺(Computer Vision)的高速發(fā)展標志著新型應用產生的可能,例如自動駕駛、人臉識別、創(chuàng)造新的藝術風格。人們對于計算機視覺的研究也催生了很多機算機視覺與其他領域的交叉成果。一般的計算機視覺問題包括以下幾類:
- 圖片分類(Image Classification)
- 目標檢測(Object detection)
- 神經(jīng)風格轉換(Neural Style Transfer)
應用計算機視覺時要面臨的一個挑戰(zhàn)是數(shù)據(jù)的維度可能會非常大。例如一張 1000x1000x3 的圖片,神經(jīng)網(wǎng)絡輸入層的維度將高達三百萬,使得網(wǎng)絡權重 W 非常龐大。這樣會造成兩個后果:
因此,一般的神經(jīng)網(wǎng)絡很難處理蘊含著大量數(shù)據(jù)的圖像。解決這一問題的方法就是使用卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network, CNN)。
2)Edge detection example(理解)
最常見的邊緣檢測有兩類:垂直邊緣(Vertical Edges)檢測和水平邊緣(Horizontal Edges)檢測。
圖片的邊緣檢測可以通過與相應濾波器進行卷積來實現(xiàn)。以垂直邊緣檢測為例,原始圖片尺寸為 6x6,中間的矩陣被稱作濾波器(filter),尺寸為 3x3,卷積后得到的圖片尺寸為 4x4,得到結果如下(數(shù)值表示灰度,以左上角和右下角的值為例):
可以看到,卷積運算的求解過程是從左到右,由上到下,每次在原始圖片矩陣中取與濾波器同等大小的一部分,每一部分中的值與濾波器中的值對應相乘后求和,將結果組成一個矩陣。
下圖對應一個垂直邊緣檢測的例子:
如果將最右邊的矩陣當作圖像,那么中間一段亮一些的區(qū)域對應最左邊的圖像中間的垂直邊緣。
這里有另一個卷積運算的動態(tài)的例子,方便理解:
圖中的*表示卷積運算符號。在計算機中這個符號表示一般的乘法,而在不同的深度學習框架中,卷積操作的 API 定義可能不同:
-
在 Python 中,卷積用conv_forward()表示
-
在 Tensorflow 中,卷積用tf.nn.conv2d()表示
-
在 keras 中,卷積用Conv2D()表示。
3)More edge detection
如果將灰度圖左右的顏色進行翻轉,再與之前的濾波器進行卷積,得到的結果也有區(qū)別。實際應用中,這反映了由明變暗和由暗變明的兩種漸變方式。可以對輸出圖片取絕對值操作,以得到同樣的結果。
垂直邊緣檢測和水平邊緣檢測的濾波器如下所示:
其他常用的濾波器還有 Sobel 濾波器和 Scharr 濾波器。它們增加了中間行的權重,以提高結果的穩(wěn)健性。
濾波器中的值還可以設置為參數(shù),通過模型訓練來得到。這樣,神經(jīng)網(wǎng)絡使用反向傳播算法可以學習到一些低級特征,從而實現(xiàn)對圖片所有邊緣特征的檢測,而不僅限于垂直邊緣和水平邊緣。
4)Padding(重點)
假設輸入圖片的大小為 ,而濾波器的大小為 ,則卷積后的輸出圖片大小為 。
這樣就有兩個問題:
-
每次卷積運算后,輸出圖片的尺寸縮小;
-
原始圖片的角落、邊緣區(qū)像素點在輸出中采用較少,輸出圖片丟失邊緣位置的很多信息。
為了解決這些問題,可以在進行卷積操作前,對原始圖片在邊界上進行填充(Padding),以增加矩陣的大小。通常將 0 作為填充值。
設每個方向擴展像素點數(shù)量為,則填充后原始圖片的大小為 ,濾波器大小保持 不變,則輸出圖片大小為 。
因此,在進行卷積運算時,我們有兩種選擇:
-
Valid 卷積:不填充,直接卷積。結果大小為 ;
-
Same 卷積:進行填充,并使得卷積后結果大小與輸入一致,這樣 。
在計算機視覺領域,通常為奇數(shù)。原因包括 Same 卷積中 能得到自然數(shù)結果,并且濾波器有一個便于表示其所在位置的中心點。
5)Strided convolutions(重點)
卷積過程中,有時需要通過填充來避免信息損失,有時也需要通過設置步長(Stride)來壓縮一部分信息。
步長表示濾波器在原始圖片的水平方向和垂直方向上每次移動的距離。之前,步長被默認為 1。而如果我們設置步長為 2,則卷積過程如下圖所示:
設步長為,填充長度為,輸入圖片大小為 ,濾波器大小為 ,則卷積后圖片的尺寸為:
注意公式中有一個向下取整的符號,用于處理商不為整數(shù)的情況。向下取整反映著當取原始矩陣的圖示藍框完全包括在圖像內部時,才對它進行運算。
目前為止我們學習的“卷積”實際上被稱為互相關(cross-correlation),而非數(shù)學意義上的卷積。真正的卷積操作在做元素乘積求和之前,要將濾波器沿水平和垂直軸翻轉(相當于旋轉 180 度)。因為這種翻轉對一般為水平或垂直對稱的濾波器影響不大,按照機器學習的慣例,我們通常不進行翻轉操作,在簡化代碼的同時使神經(jīng)網(wǎng)絡能夠正常工作。
6)Convolutions over volumes
如果我們想要對三通道的 RGB 圖片進行卷積運算,那么其對應的濾波器組也同樣是三通道的。過程是將每個單通道(R,G,B)與對應的濾波器進行卷積運算求和,然后再將三個通道的和相加,將 27 個乘積的和作為輸出圖片的一個像素值。
不同通道的濾波器可以不相同。例如只檢測 R 通道的垂直邊緣,G 通道和 B 通道不進行邊緣檢測,則 G 通道和 B 通道的濾波器全部置零。當輸入有特定的高、寬和通道數(shù)時,濾波器可以有不同的高和寬,但通道數(shù)必須和輸入一致。
如果想同時檢測垂直和水平邊緣,或者更多的邊緣檢測,可以增加更多的濾波器組。例如設置第一個濾波器組實現(xiàn)垂直邊緣檢測,第二個濾波器組實現(xiàn)水平邊緣檢測。設輸入圖片的尺寸為 (為通道數(shù)),濾波器尺寸為,則卷積后的輸出圖片尺寸為,為濾波器組的個數(shù)。
7)One layer of a convolutional network(重點)
卷積神經(jīng)網(wǎng)絡的單層結構如下所示:
與之前的卷積過程相比較,卷積神經(jīng)網(wǎng)絡的單層結構多了激活函數(shù)和偏移量,計算過程如下:
對于一個 3x3x3 的濾波器,包括偏移量 在內共有 28 個參數(shù)。不論輸入的圖片有多大,用這一個濾波器來提取特征時,參數(shù)始終都是 28 個,固定不變。即選定濾波器組后,參數(shù)的數(shù)目與輸入圖片的尺寸無關。因此,卷積神經(jīng)網(wǎng)絡的參數(shù)相較于標準神經(jīng)網(wǎng)絡來說要少得多。這是 CNN 的優(yōu)點之一。
符號總結
設 層為卷積層:
-
:濾波器的高(或寬)
-
:填充長度
-
:步長
-
:濾波器組的數(shù)量
-
輸入維度: 。其中表示輸入圖片的高,表示輸入圖片的寬。之前的示例中輸入圖片的高和寬都相同,但是實際中也可能不同,因此加上下標予以區(qū)分。
-
輸出維度:。其中
-
每個濾波器組的維度:。其中 為輸入圖片通道數(shù)(也稱深度)。
-
權重維度:
-
偏置維度:
由于深度學習的相關文獻并未對卷積標示法達成一致,因此不同的資料關于高度、寬度和通道數(shù)的順序可能不同。有些作者會將通道數(shù)放在首位,需要根據(jù)標示自行分辨。
8)A simple convolution network example
一個簡單的 CNN 模型如下圖所示:
其中,的維度為 7x7x40,將 1960 個特征平滑展開成 1960 個單元的一列,然后連接最后一級的輸出層。輸出層可以是一個神經(jīng)元,即二元分類(logistic);也可以是多個神經(jīng)元,即多元分類(softmax)。最后得到預測輸出 。
隨著神經(jīng)網(wǎng)絡計算深度不斷加深,圖片的高度和寬度一般逐漸減小,而 在增加。
一個典型的卷積神經(jīng)網(wǎng)絡通常包含有三種層:卷積層(Convolution layer)、池化層(Pooling layer)、全連接層(Fully Connected layer)。僅用卷積層也有可能構建出很好的神經(jīng)網(wǎng)絡,但大部分神經(jīng)網(wǎng)絡還是會添加池化層和全連接層,它們更容易設計。
9)Pooling layers(理解)
池化層的作用是縮減模型的大小,提高計算速度,同時減小噪聲提高所提取特征的穩(wěn)健性。
采用較多的一種池化過程叫做最大池化(Max Pooling)。將輸入拆分成不同的區(qū)域,輸出的每個元素都是對應區(qū)域中元素的最大值,如下圖所示:
池化過程類似于卷積過程,上圖所示的池化過程中相當于使用了一個大小 的濾波器,且池化步長 。卷積過程中的幾個計算大小的公式也都適用于池化過程。如果有多個通道,那么就對每個通道分別執(zhí)行計算過程。
對最大池化的一種直觀解釋是,元素值較大可能意味著池化過程之前的卷積過程提取到了某些特定的特征,池化過程中的最大化操作使得只要在一個區(qū)域內提取到某個特征,它都會保留在最大池化的輸出中。但是,沒有足夠的證據(jù)證明這種直觀解釋的正確性,而最大池化被使用的主要原因是它在很多實驗中的效果都很好。
另一種池化過程是平均池化(Average Pooling),就是從取某個區(qū)域的最大值改為求這個區(qū)域的平均值:
池化過程的特點之一是,它有一組超參數(shù),但是并沒有參數(shù)需要學習。池化過程的超參數(shù)包括濾波器的大小、步長 ,以及選用最大池化還是平均池化。而填充 則很少用到。
池化過程的輸入維度為:
輸出維度為:
10)Convolutional neural network example
在計算神經(jīng)網(wǎng)絡的層數(shù)時,通常只統(tǒng)計具有權重和參數(shù)的層,因此池化層通常和之前的卷積層共同計為一層。
圖中的 FC3 和 FC4 為全連接層,與標準的神經(jīng)網(wǎng)絡結構一致。整個神經(jīng)網(wǎng)絡各層的尺寸與參數(shù)如下表所示:
推薦一個直觀感受卷積神經(jīng)網(wǎng)絡的網(wǎng)站。
11)Why concolutions?
相比標準神經(jīng)網(wǎng)絡,對于大量的輸入數(shù)據(jù),卷積過程有效地減少了 CNN 的參數(shù)數(shù)量,原因有以下兩點:
-
參數(shù)共享(Parameter sharing):特征檢測如果適用于圖片的某個區(qū)域,那么它也可能適用于圖片的其他區(qū)域。即在卷積過程中,不管輸入有多大,一個特征探測器(濾波器)就能對整個輸入的某一特征進行探測。
-
稀疏連接(Sparsity of connections):在每一層中,由于濾波器的尺寸限制,輸入和輸出之間的連接是稀疏的,每個輸出值只取決于輸入在局部的一小部分值。
池化過程則在卷積后很好地聚合了特征,通過降維來減少運算量。
由于 CNN 參數(shù)數(shù)量較小,所需的訓練樣本就相對較少,因此在一定程度上不容易發(fā)生過擬合現(xiàn)象。并且 CNN 比較擅長捕捉區(qū)域位置偏移。即進行物體檢測時,不太受物體在圖片中位置的影響,增加檢測的準確性和系統(tǒng)的健壯性。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結
以上是生活随笔為你收集整理的4.1)深度卷积网络:卷积神经网络基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球首搭大疆车载系统!五菱新款KiWi
- 下一篇: “马踏飞燕”玩偶凭丑萌火出圈 刷爆社交媒