卷積神經網絡技巧總結


變形卷積核、可分離卷積?卷積神經網絡中十大拍案叫絕的操作。中梳理提取補充.

前提名詞

  • feature map: 特征圖, 卷積核的輸入和輸出都被稱為feature map

卷積核技巧

0x01 多個小卷積核代替大卷積核

之前的觀念是越大的卷積核感受野(receptive field)越大, 看到的信息越多, 提取的特征越好, 但存在問題:

  • 參數劇增, 計算性能降低
  • 不利於模型深度的增加

使用多個小卷積核代替單個大卷積核, 如在vggInception網絡中, 使用兩個\(3\times{3}\)卷積核組合代替一個\(5\times{5}\)卷積核(原來的一層變為兩層). 好處:

  • 參數減少: \(5\times{5}\times{1}\)減少為\(3\times{3}\times{2}\), 參數減少, 效率提高.

這種做法有效的原因:

VGG網絡的論文中, 除開網絡本身, 最大的貢獻來自於對卷積疊加的觀察:

  • \(5\times{5}\)卷積核的正則等效於兩個\(3\times{3}\)卷積核, \(7\times{7}\)卷積核的正則等效於三個\(3\times{3}\)卷積核, 如下圖所示

因此, 使用這種小卷積核疊加代替大卷積核有兩個好處:

  • 大幅減少參數數量
  • 本身帶有正則性質, 更能學習一個具有魯棒性的模型

0x02 多尺寸卷積核代替單尺寸卷積核

傳統的CNN網絡都是層疊式網絡, 每層都只使用一個卷積核. VGG網絡使用了大量的\(3\times{3}\)卷積核. 在Inception網絡中, 對於同一層的feature map, 使用多個不同尺寸的卷積核, 提取出不同的特征, 再將這些特征合並起來(在通道維度上). 不同角度的特征的表現一般比單一卷積核要好.

存在的問題:

  • 參數量比單核多很多, 模型訓練效率低下

0x03 Bottleneck, \(1\times{1}\)卷積核

作用: 控制通道數量, 大幅減少神經網絡的參數數量, 加快網絡的訓練.

Inception網絡中, 由於引入了多種尺寸的卷積核, 參數數量的爆炸, 需要使用\(1\times{1}\)卷積核來減少參數的數量.

以其中一個\(3\times{3}\)卷積核為例, 說明如何減少:

在卷積核之前加入一個\(1\times{1}\)卷積核, 將通道數量由原來的256壓縮到64. 經過\(3\times{3}\)卷積核計算后, 再使用另一個\(1\times{1}\)卷積核將通道數量恢復.

  • 原來的\(3\times{3}\)卷積核參數的數量為: \(256\times{3}\times{3}\times{256} = 589824\)
  • 使用\(1\times{1}\)卷積核處理后的參數數量為: \(256\times{1}\times{1}\times{64} + 64\times{3}\times{3}\times{64} + 64\times{1}\times{1}\times{256} = 69632\)

參數量降到原來的將近九分之一.

0x04 空洞卷積(Dilated convolution)

標准的\(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:

  1. 疊加卷積的dilation rate不能有大於1的公約數, 如[2, 4, 6]不是可行的三層卷積, 會出現gridding effect.

  2. 將dilation rate設計成鋸齒結構, 如 [1, 2, 5, 1, 2, 5] 循環結構.

  3. 滿足式子\(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:

0x05 可變形卷積核(Deformable convolution)

傳統的卷積核都是正方形, 因此只能提取固定范圍, 固定形狀的特征. 可變性卷積核則認為卷積核的形狀是可以變化的, 即卷積核應當聚集於它真正感興趣的圖像區域.

實現這種操作, 需要添加一個新的卷積核, 將這個卷積核作用於輸入的feature map, 目的是學習卷積采樣的位置偏移量(offset). 這個偏移參數如同正常的卷積核參數一樣, 直接通過訓練一起得到, 不需要額外的監督標簽.

假設作用在2D的feature map上, 需要設定的這個偏移量卷積核的通道數應當是feature map通道數的兩倍, 因為每個通道中的每個pixel都需要計算x方向和y方向兩個方向上的偏移量.

總結下, deformable convolution由兩步組成:

  • 使用偏移量卷積核在輸入的feature map上采樣
  • 將采樣值與標准卷積核卷積求和, 輸出新的feature map

由於單純的使用偏移量采樣, 將會產生對不連續位置求導的問題, 使用雙差值方法, 將任何一個位置的輸出轉換為對於輸入的feature map插值計算的結果.

關於可變形卷積核的詳解, 包含差值方法參見Deformable Convolution Networks[譯], 使用keras實現的可變卷積核Layerkingofoz / deform-conv.

通道技巧

0x01 DepthWise

標准卷積核對輸入的feature map的所有通道都會進行計算. 而DepthWise方法則將圖像區域通道分開考慮:

  • 首先, 對輸入的feature map中的每個通道, 各自進行卷積操作, 有多少個通道就有多少個filter
  • 對經過filters處理得到的新的feature map, 使用標准的\(1\times{1}\)卷積核跨通道操作, 得到最后的輸出結果. 輸出通道有多少, 就有多少個\(1\times{1}\)卷積核.

這種操作被稱為DepthWise convolution, 最大的好處就是降低了參數的數量. 因為使用了\(1\times{1}\)卷積核, 所以一般參數量會降為直接使用標准卷積核的九分之一. 而且這種方法在降低參數的同時, 不會拉低模型的表現, 甚至會取得更好的表現.

0x02 ShuffleNet

ShuffleNet其實是兩種技術的結合:

  1. DepthWise: 上面的方法, ShuffleNet沒有使用傳統的卷積方法.
  2. Group Convolution: channel分組進行卷積. 即卷積核不是對輸入的feature map中的所有通道進行計算, 而是只選取一部分. 然后把所有分組的結果合並在一起作為卷積最后輸出的結果. 在AlexNet中, 最先被提出.

ShuffleNet在每次對feature map進行分組卷積(Group conv)操作前, 對所有通道進行洗牌隨機分組, 然后每組使用DepthWise的方式進行卷積.

上圖中的(b)就是標准的Group Convolution方法, channels被平均分配到不同組里面, 然后通過全連接層來融合所有組的特征. (c)就是shuffle group conv的方法.

0x03 SEnet(通道加權計算)

標准卷積方法中, 每個卷積核都是對所有的通道進行卷積, 然后直接加和在一起, 即相當於所有通道的權重是平等的. SEnet認為不同的通道, 對模型的貢獻是不同的, 因此有必要引入通道的權重參數.

網絡的整體結構如上圖:

  • 對於輸入的feature map即\(X\), 其特征通道數為\(c_1\). 通過正常的卷積變換, 得到的輸出的feature map的通道數量為\(c_2\). 這一步與標准卷積沒有區別.
  • 然后就要對當前的輸出結果進行調整. 通過三個操作來實現:
    • 首先是Squeeze操作, 對輸出的feature map進行壓縮, 通過Global Average Pooling, 將每個通道壓縮成一個實數, 這樣就得到了長度為\(c_2\)的通道向量. 這個向量某種程度上具有全局的感受野, 表征着在特征通道上響應的全局分布.
    • 然后是Excitation操作, 通過參數來為每個特征通道生成權重, 這里的參數是可被學習的, 被學習用來顯式地建模特征通道間的相關性. 論文中把這一列特征通道向量輸入兩個全連接層和sigmoid轉換得到.
    • 最后是Reweight操作, 將上一步的輸出的權重, 看作是進過特征選擇后的每個特征通道的重要性, 然后通過乘法逐通道加權到先前的特征上, 完成在通道維度上的對原始特征的重標定.

連接技巧

0x01 ResNet(skip connection)

神經網絡的層數加深時, 網絡表現難以提高, 甚至會降低, 原因即熟悉的梯度消散, 使得反向傳播很難訓練到考前的層中. 殘差網絡(ResNet)通過skip connection技巧, 可以解決這個問題, 使得梯度更容易地流動到淺層的網絡當中去.

至於能夠起作用的原因, 可以參見這篇文章: 對ResNet的理解. 簡單概括如下:

這種skip connection的方式, 可以被分解. 如圖中右側的三層串聯的Residual module, 可以被分解成左側的多種路徑組合的網絡. 因此, 殘差網絡其實是很多並行子網絡的組合, 整個殘差網絡其實相當於一個多人投票系統Ensembling.

0x02 DenseNet

skip connection只連接了上一層的輸出作為本層輸出的一部分, DenseNet中的每一層輸出結果都是前面所有層輸出結果的疊加.

關於DenseNet的細節請閱讀論文Densely Connected Convolutional Networks.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM