###前言 在論文筆記:CNN經典結構1中主要講了2012-2015年的一些經典CNN結構。本文主要講解2016-2017年的一些經典CNN結構。 CIFAR和SVHN上,DenseNet-BC優於ResNeXt優於DenseNet優於WRN優於FractalNet優於ResNetv2優於ResNet,具體數據見CIFAR和SVHN在各CNN論文中的結果。ImageNet上,SENet優於DPN優於ResNeXt優於WRN優於ResNet和DenseNet。html
###WideResNet( WRN )git
- motivation:ResNet的跳鏈接,致使了只有少許的殘差塊學到了有用信息,或者大部分殘差塊只能提供少許的信息。因而做者探索一種新的網絡WideResNet(在ResNet的基礎上減少深度,增長寬度)。
- 網絡結構:在ResNetv2的基礎上改進,增大每一個殘差塊中的卷積核數量。以下兩個圖所示。其中B(3,3)表示一個兩個3x3卷積,k表示一個寬度因子,當k爲1時卷積核個數和ResNetv2相等,k越大網絡越寬。另外WRN在卷積層之間加入dropout(下一個卷積層以前的bn和relu以後),以下第一個圖的圖(d)所示(在ResNetv2中把dropout放在恆等映射中實驗發現效果很差因而放棄了dropout)。用WRN-n-k來表示一個網絡,n表示卷積層的總數,k表示寬度因子。
- 訓練配置:SGD,momentum爲0.9,學習率爲0.1,權重衰減爲0.0005,batch size爲128。
- 實驗:在CIFAR,SVHN,COCO數據集上取得了state-of-the-art的結果,同時在ImageNet上也表現優秀(比某些ResNet表現好,並無超越ResNet的最優結果)。做者根據實驗結果認爲ResNet的主要能力來自於殘差塊,而深度的效果只是一個補充。
###FractalNetgithub
- motivation:WideResNet經過加寬ResNet獲得state-of-the-art的表現,推測ResNet的主要能力來自於殘差塊,深度不是必要的。相比之下,分形網絡則是直接認爲ResNet中的殘差結構也不是必要的,網絡的路徑長度(有效的梯度傳播路徑)纔是訓練深度網絡的基本組建。
- 網絡結構:如下圖所示,分形網絡是經過不一樣長度的子路經組合,讓網絡自身選擇合適的子路經集合,另外分形網絡還提出了drop paht的方法。其中local drop就是join模塊以必定機率drop每一個輸入,但至少留下一個。global drop就是對整個網絡只留下一列。
- 實驗:在CIFAR和SVHN數據集上分形網絡取得了優秀的結果(CIFAR上能夠超越殘差網絡的表現,可是比WRN的表現差)。在ImageNet上能夠達到和ResNet差很少的結果(好那麼一丟丟,可是隻對比了一種ResNet結構)。
- 更多細節:具體內容我在另外一篇論文筆記:分形網絡中有所說起。
###DenseNet網絡
- motivation之stochastic depth:這是做者黃高以前的一篇論文,由於ResNet中大部分殘差塊只提供少許信息,因此在ResNet基礎上隨機丟棄一些層,發現能夠提升ResNet的泛化能力。隨機丟棄一些層網絡依然奏效,帶來了兩點啓發,一是網絡中的某一層能夠不只僅依賴於前層特徵而依賴於更前層的特徵。二是ResNet具備比較明顯的冗餘,網絡的每一層只提取了不多的有用特徵。基於以上兩點DenseNet提出讓網絡的每一層和前面的全部層相連,同時把每一層設計地特別窄,學習不多的特徵圖以此下降冗餘性。聽起來密集鏈接彷佛會大大增長參數量,但實際上不是,由於網絡變窄了。
- motivation之設計捷徑:深層網絡中,輸入的信息或者梯度經過不少層以後會逐漸丟失,以前的ResNet和FractalNet的一個共同特徵在於,建立一個前層和後層捷徑。沿着這個思路DenseNet讓網絡的全部層之間作一個全鏈接,保證全部層之間都兩兩鏈接,這麼作能夠增強feature的傳遞,更有效地利用feature(每一層能夠依賴更前層的特徵,每一層的特徵都直接鏈接到輸出層),減少梯度消失的問題。另外爲了保留信息在鏈接多個輸入時並無像ResNet同樣使用addition,而是使用concat。
- DenseNet結構:每一層都和全部前層相鏈接,第一層連輸入層有1個前鏈接,第二層就有2個前鏈接,那麼對於L層就有1+2+...+L也就是L(1+L)/2個鏈接。由於feature map大小不一樣的時候concat並不可行,DenseNet把網絡分紅了幾個Dense塊,中間用transition layer(用來改變feature map大小)鏈接起來。以下第一個圖所示。Dense塊中爲多個「BN-ReLU-Conv3x3"(這一連串操做稱爲一個$H_l$的單元操做)。DenseNet的具體結構見論文闡述。
- DenseNet-BC結構:其中B表示bottleneck結構,把3x3替換成(1x1, 3x3),$H_l$單元操做爲「BN-ReLU-Conv1x1-Conv3x3"。C表示壓縮,在transition層設一個參數$\theta$來減少feature map個數(通道數),論文中取值爲0.5,每次transition時通道數減半。結構以下第二個圖所示,其中k表示Dense塊中$H_l$產生的feature map個數,k越小,Dense塊越窄,因爲k越大會致使後層concat後通道越大,論文中也稱之爲growth rate。進入Dense塊以前使用了2k個7x7卷積。實驗中1x1的卷積產生4k個feature map。
- 實驗:在CIFAR和SVHN上超越了前人的表現(超越WRN和FractalNet),在ImageNet上和ResNet達到差很少的表現但參數量不到一半,計算量爲ResNet的一半。
- 訓練配置:SGD,權重衰減爲0.0001,momentum爲0.9。CIFAT和SVHN的batch size爲64,學習率爲0.1,50%和75%的epoch時除以10。在CIFAR上300個epoch,在SVHN上40個epoch。ImageNet上epoch爲90,batch size爲256,學習率爲0.1,在30輪和60輪降爲原來的1/10。原生的DenseNet實現對內存的利用效率不高(大量的concat會給顯存帶來高負荷),做者另外寫了一個技術報告來介紹如何提高DenseNet的內存使用效率,同時提供torch,pytorch,mxnet以及caffe的實現。
###ResNeXt(2016年ImageNet分類任務的亞軍)mvc
- motivation:視覺識別的研究已經從「人工設計的特徵工程」轉移到「網絡結構設計的網絡工程」上。因而做者同時借鑑了VGG和ResNet的「堆疊相同shape子結構」思想和Inception的"split-transform-merge"思想,提出了ResNeXt的結構,把ResNet中殘差塊的結構改爲以下第一個圖的圖右那種結構,相似Inception塊,可是裏面的每一個小塊又是相同的結構,並且最後是addition而不是concat,經過堆疊這樣的ResNeXt塊來構建ResNeXt網絡。
- 網絡結構:以下第二個圖所示,三個子圖的結構是等價的,最後一個子圖用了組卷積技術使得結構更加緊湊簡潔,模型實現使用的是最後一個子圖的結構。BN-Relu的使用遵循的是原始的ResNetv1,在每一個卷積後加BN-Relu,到block的輸出時(最後一個BN-Relu)把relu放在addition的後面。shortcut都用恆等映射,除了要用映射(projection)增維的時候。
- ImageNet預處理和預測:預處理遵循VGG的作法來裁剪圖像,全部消融學習(ablation study)中使用single-crop-224進行預測。
- ImageNet訓練配置:SGD,batch size爲256,權重衰減爲0.0001,momentum爲0.9,學習率爲0.1,遵循ResNet的實現作三次除以10的衰減,何凱明初始化。
- 實驗:實驗表示,保持一樣的複雜度,增長「cardinality」(這個詞下圖中有解釋,相同於一個ResNeXt塊的分支數)能夠提升準確率,另外,增長模型容量時,增長「cardinality」比增長深度或寬度更加有效。101-layer ResNeXt準確率比ResNet-200更高,同時花費一半的複雜度(Flops)。
###DPN(2017年ImageNet定位任務的冠軍)ide
- motivation:結合ResNet的優勢(重用特徵)和DenseNet的優勢(在重用特徵上存在冗餘,可是利於探索新特徵),提出一種新的網絡結構,稱爲對偶路徑網絡(Dual Path Network)。
- 網絡結構:如下圖所示,d和e等價,網絡分爲residual path和densely connected path在卷積塊最後的1x1將輸出切爲兩路,一路連到residual path上加起來,一路練到densely connected path上concat起來。
- 實驗:ImageNet(分類)上表現超過ResNeXt,並且模型更小,計算複雜度更低。另外在VOC 2007的目標檢測結果和VOC 2012的語義分割結果也超越了DenseNet,ResNet和ResNeXt。
###SENet(2017年ImageNet分類任務的冠軍)性能
- motivation:已經不少工做在空間維度上提高網絡性能,好比Inception嵌入多尺度信息,聚合多種不一樣感覺野上的特徵來得到性能增益。那麼網絡是否能夠從其它層面去提高性能,好比考慮特徵通道之間的關係,基於這一點做者提出了SENet(Squeeze-and-Excitation Network),經過學習的方式獲取每一個通道的重要程度,從而進行特徵重標定。
- 網絡結構:以下第一個圖所示,$F_{tr}$表示transformation(好比一系列的卷積操做),$F_{sq}$表示squeeze操做,產生一個通道描述符,表徵特徵通道上響應的全局分佈。$F_{ex}$表示excitation操做,經過參數w來爲每一個特徵通道生成權重,建模特徵通道間的重要性。$F_{scale}$表示一個reweight操做,將excitation輸出的權重(特徵通道的重要性)逐個乘到先前的特徵,完成特徵重標定。
- SE-ResNet模塊:以下第二個圖是SE嵌入到ResNet中的一個例子,這裏使用全局均值池化做爲squeeze操做,使用兩個FC組成的bottleneck結構做爲excitation操做。SE能夠嵌入到任意網絡中獲得不一樣種類的SENet,好比SE-ReNeXt,SE-BN-Inception,SE-Inception-ResNet-v2等等。
- 訓練配置:跟隨VGG的標準設定進行數據加強。輸入圖像使用通道均值相減。使用了數據平衡策略用於mini-batch採樣(這個策略引用於另外一篇論文Relay bp for effective learning of deep cnn)。SGD,momentum爲0.9,mini-batch爲1024,學習率0.6,每30輪除以10,訓練100輪,何凱明初始化。預測時使用center crop。
- 實驗:ImageNet分類中,在ResNet,ResNeXt,VGG,BN-Inception,Inception-ResNet-v2,mobileNet,shuffleNet上都作了實驗,發現加入SE後表現提高。此外還在場景分類和目標檢測中作了實驗,加入SE後表現提高。
###參考文獻學習
- WRN(2016 BMVC):Wide Residual Networks(模型源碼-torch實現)
- FractalNet:(2017 ICLR):FractalNet: Ultra-Deep Neural Networks without Residuals(模型源碼-caffe實現)
- DenseNet(2017 CVPR):Densely Connected Convolutional Networks(模型源碼-torch實現)
- ResNeXt(2017 CVPR):Aggregated Residual Transformations for Deep Neural Networks(模型源碼-torch實現)
- DPN(2017 NIPS):Dual Path Networks(模型源碼-mxnet實現)
- SENet(2018 CVPR):Squeeze-and-Excitation Networks(模型源碼-caffe實現)