卷積神經網絡學習路線(二)| 卷積層有哪些參數及常用卷積核類型盤點?
- 2019 年 12 月 10 日
- 筆記
前言
上一篇推文介紹了卷積神經網絡的組成層以及卷積層是如何在圖像中起作用的,推文地址為:https://mp.weixin.qq.com/s/MxYjW02rWfRKPMwez02wFA 。今天我們就繼續講講卷積核的基本參數以及卷積核有哪些基本類型。
卷積核的基本參數
卷積神經網絡的核心操作就是卷積層,我們這裡以caffe框架為例子來介紹一下卷積核都有哪些基本的參數。下面先上一段代碼,是caffe的卷積層的配置文件:
layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 20 kernel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } } }
從上面我們可以看到卷積層的參數有:
lr_mult
:學習率的係數,最終的學習率是這個參數乘以caffe的solver.prototxt配置文件中的基礎學習率base_lr
。如果有2個lr_mult
,則第一個表示權值的學習率,第二個表示偏置項的學習率。一般偏置項的學習率是權值項的學習率的2倍。num_output
:卷積核的輸出通道數。若設置為與輸入通道數一樣的大小,可以保持輸入輸出維度的一致性;若採用比輸入通道數更小的值,則可以減少整體網絡的參數量kernel_size
:卷積核的大小。如果卷積核的長和寬不等,需要用kernel_h
和kernel_w
分別設定其它參數。stride
:卷積核的步長,默認為1。當然也可以用stride_h
和stride_w
來設置。pad
:擴充邊緣,默認為0,不擴充。擴充的時候是左右、上下對稱的,比如卷積核的大小為,那麼pad
設置為2,則四個邊緣都擴充2個像素,即寬度和高度都擴充了4個像素,這樣卷積運算之後的特徵圖就不會變小。也可以通過pad_h
和pad_w
來分別設定。weight_filler
:權重初始化方式。有xavier
,gaussian
,及constant
等方式。bias_filler
: 偏置項的初始化。一般設置為constant
,值全為0。bias_term
:是否開啟偏置項,默認為true,開啟。group
:分組,默認為1組。如果大於1,我們限制卷積的連接操作在一個子集內。如果我們根據圖像的通道來分組,那麼第i
個輸出分組只能與第i
個輸入分組進行連接。num_input
:輸入通道數,這個包含在bottom中,所以實際上沒有這個參數哦,只是可以這樣理解。
現在設輸入通道數為c0
,輸出通道數為c1
,那麼輸入可以表示為,輸出可以表示為:。其中表示輸入特徵圖的長寬,那麼輸出特徵圖的長寬可以用下面的公式計算: 如果將stride
設為1,前後兩次卷積部分存在重疊,如果設置pad=(kernel_size-1)/2
,那麼輸出特徵圖的高寬都不變。
常用卷積核類型盤點?
卷積核的類型有很多,從我在工業上做的一些任務來看,最常用的卷積核類型大概有4種,分別是標準卷積,擴張卷積,轉置卷積和深度可分離卷積。所以本節我就 介紹一下這4種卷積希望可以拋磚引玉,引起大家對卷積核探索的興趣。這裡要先說一個感受野的概念,所謂感受野就是是卷積神經網絡每一層輸出的特徵圖(feature map)上的像素點在輸入圖片上映射的區域大小。再通俗點的解釋是,特徵圖上的一個點對應輸入圖上的區域。
標準卷積
這是我們最常用的卷積,連續緊密的矩陣形式可以提取圖像區域中相鄰像素之間的關聯性,例如一個的卷積核可以獲得的感受野。如下圖所示:
轉置卷積
轉置卷積是先對原始特徵矩陣進行填充使其維度擴大到目標輸出維度,然後進行普通的卷積操作的過程,其輸入到輸出的維度變換關係恰好和普通的卷積變換關係相反,但這個變換並不是卷積真正的逆變換操作,我們通常將其稱為轉置卷積(Transpose Convolution)而不是反卷積(Deconvolution)。轉置卷積常見於目標檢測領域中對小目標的檢測以及圖像分割領域還原輸入圖像尺度如FCN中。如下圖所示,其中下圖數輸入,上圖是輸出:
擴張卷積(帶孔卷積或空洞卷積)
這是一種特殊的卷積,引入了一個稱為擴展率(Dilation Rate)的參數,使得同樣尺寸的卷積核可以獲得更大的感受野,相應的在相同感受視野的前提下比普通卷積採用更少的參數。舉個例子,同樣是卷積核,擴張卷積可以獲得範圍的區域特徵,在圖像分割領域被廣泛應用。如下圖所示:
深度可分離卷積
這是在輕量級模型算法優化中經常會使用到的一種卷積方式,標準的卷積操作是對原始圖像三個方向的卷積運算,假設現在有個相同尺寸卷積核,這樣的操作計算量為個。若將長寬與深度方向的卷積操作分離出變為與的兩個卷積操作,則同樣的卷積核數量,現在的計算量變成了個,也可以得到相同維度的輸出。深度可分離卷積在模型壓縮和一些