從變形卷積核、可分離卷積?卷積神經網絡中十大拍案叫絕的操做。中梳理提取補充.html
以前的觀念是越大的卷積核感覺野(receptive field)越大, 看到的信息越多, 提取的特徵越好, 但存在問題:git
使用多個小卷積核代替單個大卷積核, 如在vgg和Inception網絡中, 使用兩個\(3\times{3}\)卷積核組合代替一個\(5\times{5}\)卷積核(原來的一層變爲兩層). 好處:github
這種作法有效的緣由:網絡
在VGG網絡的論文中, 除開網絡自己, 最大的貢獻來自於對卷積疊加的觀察:iphone
所以, 使用這種小卷積核疊加代替大卷積核有兩個好處:性能
傳統的CNN網絡都是層疊式網絡, 每層都只使用一個卷積核. VGG網絡使用了大量的\(3\times{3}\)卷積核. 在Inception網絡中, 對於同一層的feature map, 使用多個不一樣尺寸的卷積核, 提取出不一樣的特徵, 再將這些特徵合併起來(在通道維度上). 不一樣角度的特徵的表現通常比單一卷積核要好.學習
存在的問題:spa
做用: 控制通道數量, 大幅減小神經網絡的參數數量, 加快網絡的訓練..net
在Inception網絡中, 因爲引入了多種尺寸的卷積核, 參數數量的爆炸, 須要使用\(1\times{1}\)卷積核來減小參數的數量.設計
以其中一個\(3\times{3}\)卷積核爲例, 說明如何減小:
在卷積核以前加入一個\(1\times{1}\)卷積核, 將通道數量由原來的256壓縮到64. 通過\(3\times{3}\)卷積覈計算後, 再使用另外一個\(1\times{1}\)卷積核將通道數量恢復.
參數量降到原來的將近九分之一.
標準的\(3\times{3}\)卷積核只能看到\(3\times{3}\)矩形區域的大小, 爲了增大卷積核的感覺野, 能夠在標準的卷積核裏注入空洞, 使卷積核擁有更大的範圍, 但卷積點仍然爲9個.
上面就是標準卷積核與空洞卷積核的工做方法. 對於空洞卷積核引入了新的超參數: dilation rate. 指的是核中點的間隔數量, 標準卷積核的dilation rate爲1.
對於空洞卷積, 這篇文章如何理解空洞卷積中的回答很全面, 下面的內容也是大部分來自於這篇文章, 加以組織.
相關論文:
MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS
Understanding Convolution for Semantic Segmentation
Rethinking Atrous Convolution for Semantic Image Segmentation
首先討論空洞卷積核的問題:
The Gridding Effect
使用dilation rate爲2的\(3\times{3}\)卷積核屢次疊加, 這裏的疊加指的是多層相同的空洞卷積疊加做用, 則會出現下圖的狀況:
上圖是多層\(3\times{3}\)空洞卷積核的疊加, 紅色爲中心, 最左側紅色中心由中心和周圍的藍色點卷積獲得, 而藍色的每一個點, 又由他們自己與周圍的8個點卷積獲得, 也就是發散到了中間的圖. 如此繼續疊加, 最終紅色中心的值由周圍若干個點卷積獲得, 如右圖. 藍色越深表示卷積權重越大.
能夠觀察獲得的是, 空洞卷積疊加以後, 等效的卷積核並不連續, 計算每一個點的時候, 並非周圍全部的pixel點都用來計算了, 所以會損失信息的連續性. 這對於某些問題來講是致命的.
如何同時處理不一樣大小的物體關係
空洞卷積核設計的自己是爲了獲取大範圍的信息, 可是若是採用大的dilation rate獲取的信息只對大的物體具備分割效果, 對於小的物體可能就採集不到了. 所以, 如何均衡二者, 是空洞卷積設計的關鍵爲題.
而後就是空洞卷積核的設計方法, Hybrid Dilated Convolution:
疊加捲積的dilation rate不能有大於1的公約數, 如[2, 4, 6]不是可行的三層卷積, 會出現gridding effect.
將dilation rate設計成鋸齒結構, 如 [1, 2, 5, 1, 2, 5] 循環結構.
知足式子\(M_i=\max[M_{i+1}-2r_i, M_{i+1}-2(M_{i+1}-r_i), r_i]\)
其中\(r_i\)是\(i\)層的dilation rate, \(M_i\)是到\(i\)層最大的dilation rate, 對於最後一層\(n\), 就有\(M_n=r_n\), [1, 2, 5]就是一個可行的方案.
鋸齒狀自己的性質就比較好的來同時知足小物體大物體的分割要求, 小的dilation rate關心近距離信息, 大的dilation rate關心遠距離信息.
一個良好設計的空洞卷積網絡可以有效的避免gridding effect:
傳統的卷積核都是正方形, 所以只能提取固定範圍, 固定形狀的特徵. 可變性卷積核則認爲卷積核的形狀是能夠變化的, 即卷積核應當彙集於它真正感興趣的圖像區域.
實現這種操做, 須要添加一個新的卷積核, 將這個卷積核做用於輸入的feature map, 目的是學習卷積採樣的位置偏移量(offset). 這個偏移參數如同正常的卷積核參數同樣, 直接經過訓練一塊兒獲得, 不須要額外的監督標籤.
假設做用在2D的feature map上, 須要設定的這個偏移量卷積核的通道數應當是feature map通道數的兩倍, 由於每一個通道中的每一個pixel都須要計算x
方向和y
方向兩個方向上的偏移量.
總結下, deformable convolution由兩步組成:
因爲單純的使用偏移量採樣, 將會產生對不連續位置求導的問題, 使用雙差值方法, 將任何一個位置的輸出轉換爲對於輸入的feature map插值計算的結果.
關於可變形卷積核的詳解, 包含差值方法參見Deformable Convolution Networks[譯], 使用keras實現的可變卷積核Layer見kingofoz / deform-conv.
標準卷積覈對輸入的feature map的全部通道都會進行計算. 而DepthWise方法則將圖像區域和通道分開考慮:
這種操做被稱爲DepthWise convolution, 最大的好處就是下降了參數的數量. 由於使用了\(1\times{1}\)卷積核, 因此通常參數量會降爲直接使用標準卷積核的九分之一. 並且這種方法在下降參數的同時, 不會拉低模型的表現, 甚至會取得更好的表現.
ShuffleNet實際上是兩種技術的結合:
ShuffleNet在每次對feature map進行分組卷積(Group conv)操做前, 對全部通道進行洗牌隨機分組, 而後每組使用DepthWise的方式進行卷積.
上圖中的(b)就是標準的Group Convolution方法, channels被平均分配到不一樣組裏面, 而後經過全鏈接層來融合全部組的特徵. (c)就是shuffle group conv的方法.
標準卷積方法中, 每一個卷積核都是對全部的通道進行卷積, 而後直接加和在一塊兒, 即至關於全部通道的權重是平等的. SEnet認爲不一樣的通道, 對模型的貢獻是不一樣的, 所以有必要引入通道的權重參數.
網絡的總體結構如上圖:
神經網絡的層數加深時, 網絡表現難以提升, 甚至會下降, 緣由即熟悉的梯度消散, 使得反向傳播很難訓練到考前的層中. 殘差網絡(ResNet)經過skip connection技巧, 能夠解決這個問題, 使得梯度更容易地流動到淺層的網絡當中去.
至於可以起做用的緣由, 能夠參見這篇文章: 對ResNet的理解. 簡單歸納以下:
這種skip connection的方式, 能夠被分解. 如圖中右側的三層串聯的Residual module, 能夠被分解成左側的多種路徑組合的網絡. 所以, 殘差網絡實際上是不少並行子網絡的組合, 整個殘差網絡其實至關於一個多人投票系統Ensembling.
skip connection只鏈接了上一層的輸出做爲本層輸出的一部分, DenseNet中的每一層輸出結果都是前面全部層輸出結果的疊加.
關於DenseNet的細節請閱讀論文Densely Connected Convolutional Networks.