文章目錄
前言
一、卷積核大小(Kernel Size)
1. 卷積核大小的作用
2. 常見的卷積核大小
3. 選擇卷積核大小的原則
二、步長(Stride)
1. Stride的作用
三、填充(Padding)
1. 填充的作用
四、通道數(Channels)
五、池化(Pooling)
1. 池化層的作用
六、卷積層的作用
1. 局部特征的層次化提取過程
前言
卷積神經網絡(Convolutional Neural Network,CNN)是深度學習神經網絡經典形式之一,由于其計算過程中包含卷積運算,因此得名。卷積神經網絡(CNN)通過使用卷積層來提取圖像數據的局部特征,再通過池化層(Pooling Layer)來降低特征的空間維度,最后通過全連接層(Fully Connected Layer)進行分類或回歸任務。CNN已經在圖像識別、目標檢測、圖像生成和許多其他領域取得了顯著的進展,成為了計算機視覺和深度學習研究的重要組成部分。
卷積神經網絡最為關鍵的兩個步驟是執行卷積(Convolution)操作和進行池化(Pooling)處理。卷積用于特征提取,通過卷積核在輸入數據上滑動計算加權和;池化用于特征降維,通過聚合統計池化窗口內的元素來減少數據空間大小。
圖像在計算機中是一堆按順序排列的數字,數值為0到255.0表示最暗,255表示最亮,如下圖的手寫數字圖像。
卷積操作是指將一個可移動的小窗口(稱為數據窗口,如下圖綠色矩形)與圖像進行逐元素相乘然后相加的操作。這個小窗口其實是一組固定的權重,它可以被看作是一個特定的濾波器(filter)或卷積核。這個操作的名稱“卷積”,源自于這種元素級相乘和求和的過程。這一操作是卷積神經網絡名字的來源。
卷積有哪些重要參數?卷積的重要參數主要包括卷積核大小(Kernel Size)、步長(Stride)以及填充(Padding),它們共同決定了卷積層的輸出特征圖的尺寸和特性。另外圖像及輸出特征圖通道數也決定卷積神經網絡的模型訓練效果。
- 卷積核大小(Kernel Size):決定了感受野的大小,即每次卷積操作能夠覆蓋的輸入區域大小。
- 步長(Stride):決定了卷積核在輸入圖像或特征圖上滑動的距離。步長為1表示每次滑動一個像素,步長大于1則表示每次滑動多個像素。
- 填充(padding):在輸入圖像或特征圖的邊緣添加額外的零值,以控制輸出特征圖的尺寸。常見的填充方式有“valid”(無填充)和“same”(填充后輸出尺寸與輸入相同)。
- 通道數(Channels):對于輸入圖像,通道數指的是顏色通道數(如RGB圖像的通道數為3)。對于卷積層,輸出特征圖的通道數由卷積核的數量決定。
一、卷積核大小(Kernel Size)
卷積核的大小是決定卷積層功能的重要參數之一。卷積核的大小通常指的是卷積核的維度,如3x3、5x5等,表示卷積核在輸入數據上滑動的局部區域大小。
如下圖,是一個大小為3x3的卷積核,對輸入矩陣進行卷積操作。
1. 卷積核大小的作用
卷積核的大小決定了網絡能夠獲取的空間維度信息。較大的卷積核可以捕捉更多的輸入信息,從而可能獲得更好的性能,但同時也會增加計算量,并可能使網絡容易過擬合,較小的卷積核雖然計算效率較高,但可能會丟失一些全局信息。
2. 常見的卷積核大小
3x3:這是一個平衡的選擇,可以捕捉一定的空間信息,同時不會使計算量過大。
5x5:更大的卷積核可以捕獲更多的上下文信息,但計算成本也更高。
7x7:這些較大的卷積核可以提供更多的信息,但除非特定任務需要,否則通常較少使用,因為性能提升可能與計算成本不成比例。
3. 選擇卷積核大小的原則
選擇卷積核大小應根據具體任務、輸入數據的尺寸以及計算資源來決定。通常情況下,可以從經驗規則開始,如使用3x3卷積核,然后根據需要調整。較大的任務或復雜的數據集可能需要更大的卷積核來捕獲更多細節。
在使用卷積層時,除了卷積核大小,還需要考慮步長(stride)、填充(padding)等其他參數,這些因素一起決定了卷積層輸出的特征圖的空間維度。合理配置這些參數對于優化網絡性能至關重要。
二、步長(Stride)
滑動卷積核時,我們會先從輸入的左上角開始,每次往左滑動一列或者往下滑動一行逐一計算輸出,我們將每次滑動的行數和列數稱為Stride,即步長,在之前的圖片中,Stride=1;在下圖中,Stride=2。
1. Stride的作用
是成倍縮小尺寸,而這個參數的值就是縮小的具體倍數,比如步幅為2,輸出就是輸入的1/2;步幅為3,輸出就是輸入的1/3,以此類推。
三、填充(Padding)
填充(padding)是指在輸入高和寬的兩側填充元素(通常是0元素)。下圖中我們在原輸入高和寬的兩側分別添加了值為0的元素,使得輸入高和寬從3變成了5,并導致輸出高和寬由2增加到4。
下面的動態圖,很好的展示了填充后,卷積的計算操作過程:
1. 填充的作用
(1)保留邊緣信息
- 在卷積核滑動過程中,輸入圖像邊緣的像素通常參與計算的次數較少,導致邊緣特征容易被忽略。通過填充(如補零),邊緣像素可以更充分地參與卷積運算,減少邊緣信息丟失;
- 例如,3x3的卷積核在未填充時,邊緣像素僅參與一次計算,而填充后能多次參與,提升特征提取的完整性。
(2)控制輸出特征圖尺寸
- 填充允許調整輸出特征圖的空間維度。例如,當希望輸出尺寸與輸入相同時,需通過填充補足因卷積核滑動減少的尺寸。
(3)增強網絡靈活性
- 填充使網絡設計更靈活:若未填充,隨著網絡加深,特征圖尺寸迅速縮減,限制網絡深度;填充后可通過調整步長和填充數平衡計算與特征保留需求。例如,使用“same填充”可保持各層特征圖尺寸穩定,便于堆疊更多卷積層。
(4)引入平移不變性
- 填充(尤其是零填充)通過模糊邊緣位置差異,使網絡對目標在圖像中的位置變化更魯棒,從而增強平移不變性。
該動態圖形象地展示了卷積層計算的過程,卷積核大小為3x3,然后對輸入數據進行了填充,其次步長為Stride=2,卷積計算的結果為輸入圖像矩陣乘以對應神經元的權重值w,再加上偏置值b。
四、通道數(Channels)
上面只是針對單通道的圖像,也就是灰度圖,而更普遍的圖像表示方式是RGB顏色模型,即紅、綠、藍三原色的色光以不同的比例相加,以產生多種多樣的色光。RGB顏色模型中,單個矩陣就擴展成了有序排列的三個矩陣,也可以用三維張量去理解。
其中的每個矩陣又叫這個圖片的一個channel(通道),寬、高、深來描述。
那么對一個彩色圖像做卷積,到底做了什么呢?下面這張動圖,很好地展示了圖像卷積計算的過程,原始圖像有RGB三個通道channel1-3,對應有3個卷積核Kernel1-3,每一個通道的圖片與對應的卷積核做乘加運算,每個通道得到的數值再相加,加上總體的偏置Bias得到特征圖(feature map)里面的一個值。
五、池化(Pooling)
講完卷積,就必須要講一下池化,因為通常卷積層和池化層都是配合使用的。池化操作有多種方式,其中最常見的是最大值池化(Max Pooling)和平均池化(Average Pooling)。它們分別通過選取局部區域內的最大值和平均值來減少特征圖的尺寸。
最大值池化(Max Pooling):在定義的池化窗口內,選取所有元素中的最大值,并將該最大值作為池化結果輸出到下一層特征圖的對應位置。
平均池化(Average Pooling):在定義的池化窗口(如2x2、3x3等)內,計算所有元素的平均值,并將該平均值作為池化結果輸出到下一層特征圖的對應位置。
下面是以動態圖的形式,展示兩種池化操作的異同。
1. 池化層的作用
(1)降維:池化層通過池化操作降低特征圖的空間維度,減少計算復雜度,同時保留重要的特征信息。
(2)防止過擬合:池化層的降維操作減少了模型參數的數量,有助于防止模型過擬合,提高模型的泛化能力。
(3)位置不變性:池化層通過取局部區域的最大值或平均值,使得模型對特征的位置變化具有一定的不變性。
六、卷積層的作用
卷積層通過可學習的濾波器(卷積核)對輸入數據進行局部感知,捕捉空間關聯性強的特征。例如,低層卷積核可提取邊緣、角點、紋理等基礎特征,而高層通過組合這些基礎特征逐步形成更復雜的抽象特征(如物體形狀、部件等)。這種層次化特征組合能力使CNN無需人工設計特征,而是通過反向傳播自動優化濾波器參數。
手動設計卷積核,提取圖像特征(如,邊緣特征)
下圖是ResNet卷積神經網絡中的卷積層提取的特征圖:
在圖像目標檢測、識別、分類任務中,卷積神經網絡(CNN)通過多層次的局部感知、參數共享和反向傳播機制,逐步從原始像素中學習目標的抽象特征。
1. 局部特征的層次化提取過程
(1)低層基礎特征學習
輸入圖像通過卷積核(如3x3或5x5的濾波器)進行局部掃描,計算像素點與卷積核的加權和,生成特征圖。這些初始卷積核通過反向傳播自動學習,捕捉邊緣、角點、顏色梯度等基礎特征。
(2)中層抽象特征組合
隨著網絡加深,低層特征被組合為更復雜的模式。例如,邊緣組合成紋理,紋理組合成物體部件(如車輪、眼睛)。這些組合通過多層卷積實現,如VGGNet通過堆疊多個3×3卷積層擴大感受野,模擬生物視覺系統的層次化處理。
(3)高層語義特征表達
深層網絡通過非線性激活函數(如ReLU)和跨通道信息融合,提取目標整體的語義特征(如“汽車”“人臉”)。例如,ResNet的殘差塊允許梯度直接傳遞,促進深層網絡學習高階特征。
參考資料:E等于mc平方