1. 程式人生 > 其它 >CNN卷積神經網路中的stride、padding、channel以及特徵圖尺寸的計算

CNN卷積神經網路中的stride、padding、channel以及特徵圖尺寸的計算

技術標籤:深度學習

CNN卷積神經網路中的stride、padding、channel以及特徵圖尺寸的計算


1. stride步幅

stride:卷積時的取樣間隔

設定步幅的目的是希望減小輸入引數的數目,減少計算量。stride引數的值就是縮小的倍數,比如步幅為2,就對輸入的特徵圖做2倍下采樣,注意步幅並不代表輸出是輸入的 1 s t r i d e \frac{1}{stride} stride1

2. padding填充

padding:在輸入特徵圖的每一邊新增一定數目的行列,使得輸出和輸入的特徵圖的尺寸相同。

為什麼要設定padding:

  1. 如果沒有padding,每次進行卷積後,原始影象的尺寸就會越來越小,所以沒有辦法設計層數足夠多的深度神經網路。
  2. 希望每個輸入特徵圖的每一塊都能作為卷積視窗的中心,防止丟失影象邊緣資訊。

在tensorflow中:
padding = 'same'表示進行填充,填充的值由演算法內部根據卷積核大小計算,目的是讓輸出尺寸和輸入相等。
padding = 'valid'表示不進行填充,即是 padding=0,只使用有效的視窗位置,這是預設的選項。

p a d d i n g = s i z e _ f i l t e r − 1 2 padding = \frac{size\_filter - 1}{2}

padding=2size_filter1

這就是為什麼卷積核尺寸通常選擇奇數的原因

還要注意padding='same'目的是讓輸出尺寸和輸入尺寸相等,但前提是步幅=1,步幅若不是1,那麼輸出尺寸跟輸入尺寸肯定是不一樣

3. channel通道

在只有一個通道的情況下,“卷積核”就相當於“filter”,這兩個概念是可以互換的。但在一般情況下,它們是兩個完全不同的概念。每個“filter”實際上恰好是“卷積核”的一個集合,在當前層,每個通道都對應一個卷積核,且這個卷積核是獨一無二的。

卷積過程中,輸入層有多少個通道,filter就有多少個通道。

即:某一層filter的通道數 = 上一層特徵圖的通道數。

一般的影象都是三通道的,所以卷積核也應該為三個通道。比如對於32x32x3的影象,使用一個5x5x3的卷積核,最終會得到一個28x28x1的特徵圖。

但是filter的數量任意的,filter的數量決定了卷積後特徵圖的數量。

即:某一層輸出特徵圖的通道數 = 當前層filter的個數

4. 計算及例子

例:一個尺寸 a*a 的特徵圖,經過 b*b 的卷積層,步幅(stride)=c,填充(padding)=d,請計算出輸出的特徵圖尺寸?

輸出特徵圖尺寸 = a − b + 2 d c + 1 =\frac{a - b + 2d}{c} + 1 =cab+2d+1

只要記住這個公式,就可以計算所有輸出特徵圖的尺寸了。

例:輸入4*4,卷積核3*3,stride = 1,padding = 0
              
              輸出尺寸 = (4-3+0)/1 + 1 = 2

在這裡插入圖片描述

例:輸入5*5,卷積核3*3,stride = 1,padding = 1
              
              輸出尺寸 = (5-3+2)/1 + 1 = 5

在這裡插入圖片描述

例:輸入5*5,卷積核3*3,stride = 2,padding = 0
              
              輸出尺寸 = (5-3+0)/2 + 1 = 2

在這裡插入圖片描述

例:輸入6*6,卷積核3*3,stride = 2,padding = 1
              
              輸出尺寸 = int(6-3+2)/2 + 1 = 3
注意:這裡的padding有一列是沒有參與卷積的,因為stride為2沒有辦法取樣到這一列

在這裡插入圖片描述

總結:
卷積過程中,有時需要通過padding來避免資訊損失,有時也要通過設定stride來壓縮一部分資訊,或者使輸出的尺寸小於輸入的尺寸。

本文參考以下文章整理而來:
CNN中stride(步幅)和padding(填充)的詳細理解
卷積神經網路中的stride、padding和channel概念
CNN基礎知識——卷積(Convolution)、填充(Padding)、步長(Stride)