【CVPR2017 Best Paper】Densely Connected Convolutional Networks

【CVPR2017 Best Paper】Densely Connected Convolutional Networks

  • 作者

  • 摘要

近年研究表明,如果卷積網絡中,輸入周圍的層與輸出周圍的層有更短的連接,那麼網絡可以更深、更準確、訓練更高效。本文根據這個觀察,提出Dense Convolutional Network(DenseNet),在前饋中每一層都與其他層相連。傳統卷積網絡,L層有L個連接,本文有L(L+1)/2個直接連接。對每一層,所有之前層的特徵圖都作爲輸入,本層輸出特徵圖作爲所有之後層的輸入。DenseNets有很多優點:減輕梯度消失現象、加強特徵傳播、增強特徵重複利用、本質上降低了參數。我們再四個有競爭力的目標識別benchmark任務(CIFAR-10、CIFAR-100、SVHN、ImageNet)上測試,DenseNet比state-of-the-art獲得了明顯提升,並利用更少的計算資源獲得更高的性能。

 

  • 開源

代碼和預訓練模型在:https://github.com/liuzhuang13/DenseNet.

 

  • 介紹

雖然20年前就提出了CNN,但近些年的硬件升級和網絡結構優化使得深度CNN的訓練成爲可能。從LeNet到ResNet,CNN網絡越來越深,容易出現梯度消失。很多網絡通過創造早期層和後期層的更短連接路徑來解決此問題。本文連接特徵圖尺寸匹配的所有層。如下圖:對比ResNets,我們沒有進行特徵相加,而是concatenate。因此第l層有l個輸入,由之前所有卷積block的特徵圖構成。

一種可能是本文方法需要更少的參數,因爲沒必要重複學習多餘的特徵圖。傳統的前饋網絡可看做帶有狀態的算法,層層傳遞。每層從前層讀取狀態,並寫入下一層。狀態會被修改,也會保存需要的信息。近年的ResNets變體顯示很多層貢獻很小,可以在訓練時drop。所以ResNets的狀態類似於RNN,但是ResNets的參數量很大,因爲每層都有自己的權重。DenseNet明確區分加入網絡的信息和被保留的信息。DenseNet的層非常窄,每層只有12個過濾器,只增加小的特徵圖集到網絡的“集體知識庫”,並保留剩下的特徵圖不變,最終分類器基於所有特徵圖進行預測。

除了參數效率更高,一個很大的優點是DenseNets優化了信息和梯度的流通,更好訓練。進一步,我們發現緊密連接具有正則化效果,在小規模訓練集上可降低過擬合。

 

  • 相關工作

把網絡加深或者拓寬都可以改善性能。而DenseNets通過特徵重複利用來開發網絡潛能,緊密模型更容易訓練,參數更高效。將不同層學習到的特徵圖串聯,可以增加之後層的輸入變化。這是DenseNets與ResNets的最大不同。而相比於Inception networks,DenseNets更簡單高效。

 

  • DenseNets詳解

X0是輸入圖像,網絡有L層,每層實現非線性變換 由BN、ReLU、Pooling、Conv等構成,定義第l層輸出爲

ResNets傳統卷積前饋網絡爲 ,ResNets增加一個跨層連接,跳過非線性變換,變爲 。一大好處是梯度可從後面層直接流動到前面層。然而這等式中二者是相加關係,可能會影響信息流通。

Dense connectivity第l層接受所有之前層的特徵圖作爲輸入 ,表示從0到l-1層學習的特徵圖的串聯。

Composite function本文定義非線性變換 由BN、ReLU、3*3卷積構成。

Pooling layers特徵圖尺寸變化後無法進行串聯操作,但是卷積網絡的部分本質就是降採樣層去改變特徵圖尺寸。爲了促進降採樣,我們將網絡分爲多個緊密連接的dense blocks。我們將block之間的層稱爲transition layers(過渡層),負責卷積或者池化。在實驗中,過渡層由一個BN層、一個1*1卷積層、一個2*2平均值池化層組成。

Growth rate如果每個 生成k個特徵圖,由此可見第l層有 個輸入特徵圖,k0是輸入層的通道數。DenseNet有一個重要的不同之處是有非常窄的層,例如k爲12。我們稱超參數k爲網絡增長率(growth rate)。下面的實驗顯示足夠小的k也能獲得state-of-the-art結果。因爲在block中,每層都連接到所有之前的特徵圖,因此也連接到網絡的“集體知識”。我們可將特徵圖集看做網絡總體狀態,每個層添加k個特徵圖到總狀態,增長率調節每層對總狀態的貢獻量。上面提到不像傳統網絡架構,本文網絡的總狀態可在各處被使用,因此沒必要進行層與層間總狀態的複製。

Bottlenect layers雖然每層只輸出k個特徵圖,但有非常多的輸入。使用1*1卷積層作爲bottlenect層,在每個3*3卷積層之前降低輸入特徵圖的數量,使計算更高效。我們發現這個設計對DenseNet特別高效。我們將網絡帶有bottleneck層BN-ReLU-Conv(1*1)-BN-ReLU-Conv(3*3)的版本稱爲DenseNet-B。在實驗中,每個1*1卷積層生成4k個特徵圖。

Compression爲了進一步改善網絡緊緻度,我們可以降低transition層的特徵圖數量。如果一個dense block包含m個特徵圖,接下來的transition層生成θm個特徵圖,0<θ<=1,作爲壓縮係數。我們將θ<1作爲DenseNet-C,實驗中設置θ = 0.5。

Implementation Details在除了ImageNet的數據集上,網絡有3個dense blocks,每個有相同層數。在第一個dense blocks之前,輸入圖像接16通道卷積層(或者growth rate的2倍for DenseNet-BC)。爲了保持特徵圖尺寸不變,對核尺寸3*3的卷積層,輸入的每條邊填充1個像素值爲0。使用1*1卷積,2*2average pooling作爲dense blocks之間的過渡層。在最後一個dense block,接一個全局平均持化層和softmax分類器。三個dense blocks的特徵圖尺寸分別是32*32,16*16,8*8。我們實驗了這些結構配置:L = 40,k = 12; L =100,k = 12;L = 100,k = 24。對於DenseNet-BC,L = 100,k = 12; L =250,k = 24;L = 190,k =40。

在ImageNet,使用DenseNet-BC結構,4個dense blocks,在224*224輸入。初始卷積層使用7*7*2k,stride2,其它層的特徵圖數量根據k設置。如下圖:

 

  • 實驗結果
  1. 數據集

CIFAR兩個數據集,32*32的彩色場景圖像。訓練接5w,測試集1w。我們將5000訓練集圖像作爲驗證集。使用鏡像/移動做圖像增廣。使用通道平均值和方差進行了圖像的歸一化。

SVHNThe Street View House Numbers數據集,包含32*32彩色數字圖像。73257訓練接,26032測試集,531131額外訓練集。不增廣。從訓練集分出6000當驗證集。選擇在驗證集中錯誤率最低的模型。像素值除以255,歸一化到[0,1]。

ImageNetILSVRC2012分類數據集包含120萬訓練集,5萬驗證集,共1000類。訓練集使用其他論文常用的增廣方法,在測試時使用224*224的single-crop或10-crop。使用驗證集的分類錯誤率。

  1. 訓練

使用SGD。在CIFAR和SVHN,使用batch-size爲64,分別訓練300和40的epoch。爲了降低GPU的顯存,請參考《Memory-efficient implementation of densenets》。Weight decay爲10的-4,Nesterov momentum爲0.9。權重初始化使用《Delving deep into rectifiers: Surpassing human-level performance on imagenet classification》。對前三個數據集,我們在每個卷積層(除了第一個)使用dropout layer,dropout rate爲0.2

  1. CIFAR和SVHN的分類結果

我們訓練時使用不同的深度L和增長率k。下表顯示CIFAR和SVHN結果。

準確率:在SVHN中,DenseNet-BC比DenseNet結果差,可能是因爲SVHN是相對簡單的任務,極端深模型會導致訓練集的過擬合。

容量:DenseNet性能隨着L和k的提升而提升。

         參數高效:同等性能下,參數比ResNet減少90%。

過擬合:高效使用參數帶來一個好處,即不容易過擬合。DenseNet-BC會更高效。

  1. ImageNet的分類結果

爲了更公平的比較,我們將其他條件保持一致,只把ResNet公佈的Troch實現中改成DenseNet網絡。Table3記錄single-crop和10-crop驗證集的分類錯誤。Figure3顯示DenseNet和ResNet在single-crop和10-crop驗證集的分類錯誤在不同參數量和FLOPS量的變換。

    數據說明DenseNets與ResNets在性能上平分秋色,但只需要更少的參數和計算量,起碼少一半。而且很多超參數都是利於ResNet,相信根據DenseNet的需要進行超參數優化後,性能還會提升。

 

  • 探討

表面上看,DenseNet與ResNet的不同,只在於以下兩個公式的區別,一個相加,一個串聯。但是小的改進帶來重大性能優化。

模型緊密度:作爲輸入串聯的直接影響,DenseNet任何層學習的特徵圖都可以被隨後層直接訪問。這鼓勵了特徵被重複使用,導致模型更加緊密。下圖比較了DenseNet和ResNet的模型高效程度。

         下圖顯示DenseNet-BC是非常參數高效的變體。只需1/3的ResNet的參數可獲得同樣性能。

隱式深度監督:猜測準確度的提升,是因爲通過更短的連接,個別層獲得額外的loss方程的監督信息。

隨機vs確定的連接:

特徵重複利用:對一個block的每個卷積層,我們計算權重平均絕對值分佈。下圖顯示三個dense blocks的heat-map。卷重顯示層對之前層的依賴性。

  1. 在同一個block中,所有層都傳播權重。
  2. Transition層也在所有層傳播權重。
  3. Transition層輸出很多多餘特徵,說明需要DenseNet-BC。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章