一、概述
作為CVPR2017年的Best Paper, DenseNet 脫離了加深網(wǎng)絡(luò)層數(shù)(ResNet)和加寬網(wǎng)絡(luò)結(jié)構(gòu)(Inception)來提升網(wǎng)絡(luò)性能的定式思維,從特征的角度考慮,通過特征重用和旁路(Bypass)設(shè)置,既大幅度減少了網(wǎng)絡(luò)的參數(shù)量,又在一定程度上緩解了gradient vanishing問題的產(chǎn)生.結(jié)合信息流和特征復(fù)用的假設(shè),DenseNet當(dāng)之無愧成為2017年計(jì)算機(jī)視覺頂會(huì)的年度最佳論文.
卷積神經(jīng)網(wǎng)絡(luò)在沉睡了近20年后,如今成為了深度學(xué)習(xí)方向最主要的網(wǎng)絡(luò)結(jié)構(gòu)之一.從一開始的只有五層結(jié)構(gòu)的LeNet, 到后來擁有19層結(jié)構(gòu)的VGG, 再到首次跨越100層網(wǎng)絡(luò)的Highway Networks與ResNet, 網(wǎng)絡(luò)層數(shù)的加深成為CNN發(fā)展的主要方向之一.
隨著CNN網(wǎng)絡(luò)層數(shù)的不斷增加,gradient vanishing和model degradation問題出現(xiàn)在了人們面前,BatchNormalization的廣泛使用在一定程度上緩解了gradient vanishing的問題,而ResNet和Highway Networks通過構(gòu)造恒等映射設(shè)置旁路,進(jìn)一步減少了gradient vanishing和model degradation的產(chǎn)生.Fractal Nets通過將不同深度的網(wǎng)絡(luò)并行化,在獲得了深度的同時(shí)保證了梯度的傳播,隨機(jī)深度網(wǎng)絡(luò)通過對網(wǎng)絡(luò)中一些層進(jìn)行失活,既證明了ResNet深度的冗余性,又緩解了上述問題的產(chǎn)生. 雖然這些不同的網(wǎng)絡(luò)框架通過不同的實(shí)現(xiàn)加深的網(wǎng)絡(luò)層數(shù),但是他們都包含了相同的核心思想,既將feature map進(jìn)行跨網(wǎng)絡(luò)層的連接.
DenseNet作為另一種擁有較深層數(shù)的卷積神經(jīng)網(wǎng)絡(luò),具有如下優(yōu)點(diǎn):
(1) 相比ResNet擁有更少的參數(shù)數(shù)量.
(2) 旁路加強(qiáng)了特征的重用.
(3) 網(wǎng)絡(luò)更易于訓(xùn)練,并具有一定的正則效果.
(4) 緩解了gradient vanishing和model degradation的問題.
何愷明在提出ResNet時(shí)做出了這樣的假設(shè):若某一較深的網(wǎng)絡(luò)多出另一較淺網(wǎng)絡(luò)的若干層有能力學(xué)習(xí)到恒等映射,那么這一較深網(wǎng)絡(luò)訓(xùn)練得到的模型性能一定不會(huì)弱于該淺層網(wǎng)絡(luò).通俗的說就是如果對某一網(wǎng)絡(luò)中增添一些可以學(xué)到恒等映射的層組成新的網(wǎng)路,那么最差的結(jié)果也是新網(wǎng)絡(luò)中的這些層在訓(xùn)練后成為恒等映射而不會(huì)影響原網(wǎng)絡(luò)的性能.同樣DenseNet在提出時(shí)也做過假設(shè):與其多次學(xué)習(xí)冗余的特征,特征復(fù)用是一種更好的特征提取方式.
二誊稚、DenseNet
ResNet的一個(gè)最主要的優(yōu)勢便是梯度可以流經(jīng)恒等函數(shù)來到達(dá)靠前的層.但恒等映射和非線性變換輸出的疊加方式是相加, 這在一定程度上破壞了網(wǎng)絡(luò)中的信息流.
Dense Connectivity
為了進(jìn)一步優(yōu)化信息流的傳播,DenseNet提出了圖示的網(wǎng)絡(luò)結(jié)構(gòu)
如圖所示,第i層的輸入不僅與i-1層的輸出相關(guān),還有所有之前層的輸出有關(guān).記作:
到
Pooling Layers
由于在DenseNet中需要對不同層的feature map進(jìn)行cat操作,所以需要不同層的feature map保持相同的feature size,這就限制了網(wǎng)絡(luò)中Down sampling的實(shí)現(xiàn).為了使用Down sampling,作者將DenseNet分為多個(gè)Denseblock,如下圖所示:
在同一個(gè)Denseblock中要求feature size保持相同大小,在不同Denseblock之間設(shè)置transition layers實(shí)現(xiàn)Down sampling, 在作者的實(shí)驗(yàn)中transition layer由BN + Conv(1×1) +2×2 average-pooling組成.
Growth rate
在Denseblock中,假設(shè)每一個(gè)非線性變換H的輸出為K個(gè)feature map, 那么第i層網(wǎng)絡(luò)的輸入便為K0+(i-1)×K, 這里我們可以看到DenseNet和現(xiàn)有網(wǎng)絡(luò)的一個(gè)主要的不同點(diǎn):DenseNet可以接受較少的特征圖數(shù)量作為網(wǎng)絡(luò)層的輸出,如下圖所示
原因就是在同一個(gè)Denseblock中的每一層都與之前所有層相關(guān)聯(lián),如果我們把feature看作是一個(gè)Denseblock的全局狀態(tài),那么每一層的訓(xùn)練目標(biāo)便是通過現(xiàn)有的全局狀態(tài),判斷需要添加給全局狀態(tài)的更新值.因而每個(gè)網(wǎng)絡(luò)層輸出的特征圖數(shù)量K又稱為Growth rate,同樣決定著每一層需要給全局狀態(tài)更新的信息的多少.我們之后會(huì)看到,在作者的實(shí)驗(yàn)中只需要較小的K便足以實(shí)現(xiàn)state-of-art的性能.
Bottleneck Layers
雖然DenseNet接受較少的k,也就是feature map的數(shù)量作為輸出,但由于不同層feature map之間由cat操作組合在一起,最終仍然會(huì)是feature map的channel較大而成為網(wǎng)絡(luò)的負(fù)擔(dān).作者在這里使用1×1 Conv(Bottleneck)作為特征降維的方法來降低channel數(shù)量,以提高計(jì)算效率.經(jīng)過改善后的非線性變換變?yōu)锽N-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3),使用Bottleneck layers的DenseNet被作者稱為DenseNet-B.在實(shí)驗(yàn)中,作者使用1×1卷積生成channel數(shù)量為4k的feature map.
Compression
為了進(jìn)一步優(yōu)化模型的簡潔性,我們同樣可以在transition layer中降低feature map的數(shù)量.若一個(gè)Denseblock中包含m個(gè)feature maps,那么我們使其輸出連接的transition layer層生成?θm?個(gè)輸出feature map.其中θ為Compression factor, 當(dāng)θ=1時(shí),transition layer將保留原feature維度不變.
作者將使用compression且θ=0.5的DenseNet命名為DenseNet-C, 將使用Bottleneck和compression且θ=0.5的DenseNet命名為DenseNet-BC
三蒜哀、 算法分析
(1) Model compactness
由于DenseNet對輸入進(jìn)行cat操作,一個(gè)直觀的影響就是每一層學(xué)到的feature map都能被之后所有層直接使用,這使得特征可以在整個(gè)網(wǎng)絡(luò)中重用,也使得模型更加簡潔.
從上圖中我們可以看出DenseNet的參數(shù)效率:左圖包含了對多種DenseNet結(jié)構(gòu)參數(shù)和最終性能的統(tǒng)計(jì),我們可以看出當(dāng)模型實(shí)現(xiàn)相同的test error時(shí),原始的DenseNet往往要比DenseNet-BC擁有2-3倍的參數(shù)量.中間圖為DenseNet-BC與ResNet的對比,在相同的模型精度下,DenseNet-BC只需要ResNet約三分之一的參數(shù)數(shù)量.右圖為1001層超過10M參數(shù)量的ResNet與100層只有0.8M參數(shù)量的DenseNet-BC在訓(xùn)練時(shí)的對比,雖然他們在約相同的訓(xùn)練epoch時(shí)收斂,但DenseNet-BC卻只需要ResNet不足十分之一的參數(shù)量.
(2) Implicit Deep Supervision
解釋DenseNet為何擁有如此高性能的另一個(gè)原因是網(wǎng)絡(luò)中的每一層不僅接受了原始網(wǎng)絡(luò)中來自loss的監(jiān)督,同時(shí)由于存在多個(gè)bypass與shortcut,網(wǎng)絡(luò)的監(jiān)督是多樣的.Deep supervision的優(yōu)勢同樣在deeply-supervised nets (DSN)中也被證實(shí).(DSN中每一個(gè)Hidden layer都有一個(gè)分類器,強(qiáng)迫其學(xué)習(xí)一些有區(qū)分度的特征).與DSN不同的是,DenseNet擁有單一的loss function, 模型構(gòu)造和梯度計(jì)算更加簡易.
(3) Feature Reuse
在設(shè)計(jì)初,DenseNet便被設(shè)計(jì)成讓一層網(wǎng)絡(luò)可以使用所有之前層網(wǎng)絡(luò)feature map的網(wǎng)絡(luò)結(jié)構(gòu),為了探索feature的復(fù)用情況,作者進(jìn)行了相關(guān)實(shí)驗(yàn).作者訓(xùn)練的L=40,K=12的DenseNet,對于任意Denseblock中的所有卷積層,計(jì)算之前某層feature map在該層權(quán)重的絕對值平均數(shù).這一平均數(shù)表明了這一層對于之前某一層feature的利用率,下圖為由該平均數(shù)繪制出的熱力圖:
從圖中我們可以得出以下結(jié)論:
a) 一些較早層提取出的特征仍可能被較深層直接使用
b) 即使是Transition layer也會(huì)使用到之前Denseblock中所有層的特征
c) 第2-3個(gè)Denseblock中的層對之前Transition layer利用率很低,說明transition layer輸出大量冗余特征.這也為DenseNet-BC提供了證據(jù)支持,既Compression的必要性.
d) 最后的分類層雖然使用了之前Denseblock中的多層信息,但更偏向于使用最后幾個(gè)feature map的特征,說明在網(wǎng)絡(luò)的最后幾層,某些high-level的特征可能被產(chǎn)生.
四、實(shí)驗(yàn)結(jié)果
作者在多個(gè)benchmark數(shù)據(jù)集上訓(xùn)練了多種DenseNet模型,并與state-of-art的模型(主要是ResNet和其變種)進(jìn)行對比:
由上表我們可以看出,DenseNet只需要較小的Growth rate(12,24)便可以實(shí)現(xiàn)state-of-art的性能,結(jié)合了Bottleneck和Compression的DenseNet-BC具有遠(yuǎn)小于ResNet及其變種的參數(shù)數(shù)量,且無論DenseNet或者DenseNet-BC,都在原始數(shù)據(jù)集和增廣數(shù)據(jù)集上實(shí)現(xiàn)了超越ResNet的性能.