論文標題:Densely Connected Convolutional Networksgit
論文做者:Gao Huang Zhuang Liu Laurens van der Maaten Kilian Q. Weinberger
github
論文地址:https://arxiv.org/pdf/1608.06993.pdf算法
DenseNet 的GitHub地址:https://github.com/liuzhuang13/DenseNet網絡
參考的 DenseNet 翻譯博客:https://zhuanlan.zhihu.com/p/31647627架構
聲明:小編翻譯論文僅爲學習,若有侵權請聯繫小編刪除博文,謝謝! app
小編是一個機器學習初學者,打算認真研究論文,可是英文水平有限,因此論文翻譯中用到了Google,並本身逐句檢查過,但仍是會有顯得晦澀的地方,若有語法/專業名詞翻譯錯誤,還請見諒,並歡迎及時指出。機器學習
傳送門:請點擊我ide
若是點擊有誤:https://github.com/LeBron-Jian/DeepLearningNote函數
在計算機視覺領域,卷積神經網絡(CNN)已經成爲最主流的方法,好比AlexNet, VGGNet, Inception,ResNet等模型。CNN史上一個里程碑事件是ResNet模型的出現,ResNet能夠訓練出更深的CNN模型,從而實現更高的準確度。ResNet模型的核心是經過創建前面層與後面層之間的「短路鏈接」(shortcuts , skip connection),這有助於訓練過程當中梯度的反向傳播,從而能訓練出更深的CNN網絡。今天咱們要介紹的是DenseNet模型,它的基本思路與ResNet一致,可是它創建的是前面全部層與後面層的密集鏈接(dense connection),它的名稱也是由此而來。性能
衆所周知,在DenseNet以前,卷積神經網絡提升效率的方向,要麼深(好比ResNet,解決了網絡深時候的梯度消失問題),要麼寬(好比GoogLeNet的 Inception),而做者從Feature入手,經過對feature 的極致利用達到更好的效果和更少的參數。因此DenseNet的另外一大特點是經過特徵在channel 上的鏈接來實現特徵複用(feature reuse)。這些特色讓DenseNet在參數和計算成本更少的情形下實現比 ResNet 更優的性能,DenseNet也所以斬獲CVPR 2017的最佳論文獎。本文學習其論文。
該文章提出的DenseNet核心思想在於創建了不一樣層之間的鏈接關係,充分利用了feature,進一步減輕了梯度消失問題,加深網絡不是問題,並且訓練效果很是好。另外,利用bottleneck layer,Translation layer以及較小的growth rate使得網絡變窄,參數減小,有效抑制了過擬合,同時計算量也減小了。DenseNet優勢不少,並且在和ResNet的對比中優點仍是很是明顯的。
最近的研究代表,若是神經網絡各層到輸入和輸出層採用更短的鏈接(shorter connections),那麼網絡能夠設計的更深,更準確且訓練起來更有效率。在這篇文章中,咱們基於這個觀點,介紹了稠密卷積網絡(DenseNet),該網絡在前饋時將每一層與其餘的任一層都進行了鏈接。傳統的 L 層卷積網絡有 L 個鏈接——每一層與它的前一層和後一層相連——咱們的網絡有 L(L+1)/2 個鏈接。每一層都將以前的全部層的特徵圖做爲輸入,而它本身的特徵圖是以後全部層的輸入。DenseNets 有一些很不錯的優勢:有助於解決梯度消失(vanishing-gradient)問題,加強特徵 (feature)傳播,促進特徵的重複利用,大大減小了參數的數量。咱們在四個目標檢測任務(CIFAR-10, CIFAR-100, SVHN和 ImageNet)中驗證了咱們提出的結構。DenseNets 在這些數據集上大都有較大的提升,並且使用更少的計算量就能夠得到更好的性能。代碼和預訓練模型以下:https://github.com/liuzhuang13/DenseNet。
在視覺檢測任務中,卷積神經網絡(CNNs)已經成爲佔有絕對優點的機器學習方法。儘管它們在20年前就已經被提出了,可是計算機硬件和網絡結構的改善才使訓練深層的卷積網絡在最近成爲現實。起初的LeNet5有5層,VGG有19層,只有去年的Highway網絡和ResNets網絡才克服了100層網絡的障礙。
隨着CNNs變得愈來愈深,一個新的問題出現了:當輸入或梯度信息在通過不少層的傳遞以後,在到達網絡的最後(或開始)可能會消失或者「被沖刷掉」(wash out)。不少最新的研究都說明了這個或者與這個相關的問題。ResNet網絡和Highway網絡將旁路信息(bypass Signal)進行鏈接。隨機深度(stochastic depth)在訓練過程當中隨機丟掉了一些層,進而縮短了ResNets網絡,得到了更好的信息和梯度流。FractalNets 使用不一樣數量的卷積 block 來重複的鏈接一些平行層,得到更深的網絡同時還保留了網絡中的 short paths。儘管這些方法在網絡結構和訓練方法等方面有所不一樣,但他們都有一個關鍵點:他們都在前幾層和後幾層之間產生了短路徑(short paths)。
上圖爲一個dense block的結構圖,在傳統的卷積神經網絡中,若是你有 L 層,那麼就會有 L 個鏈接,可是在DenseNet中,會有 L(L+1)/2 個鏈接。簡單說,就是每一層的輸入來自前面全部層的輸出。就是說 x0 是 input,H1 的輸入是 x0(input),H2的輸入是 x0 和 x1 (x1 是 H1 的輸出)。
在這篇文章中,咱們提出了一個結構,該結構是提煉上述觀點而造成的一種簡單的鏈接模式:爲了保證可以得到網絡層之間的最大信息,咱們將全部層(使用合適的特徵圖尺寸)都進行互相鏈接。爲了可以保證前饋的特性,每一層將以前全部層的輸入進行拼接,以後將輸出的特徵圖傳遞給以後的全部層。結構如圖1所示。重要的一點是,與ResNets不一樣的是,咱們不是在特徵傳遞給某一層以前將其進行相加(combine),而是將其進行拼接(concatenate)。所以,第 l 層 有 l 個輸入,這些輸入是該層以前的全部卷積塊(block)的特徵圖,而它本身的特徵圖則傳遞給以後的全部 L-l 層。這就表示,一個 L 層的網絡就有 L(L+1)/2 個鏈接,而不是像傳統的結構僅僅有 L 個鏈接,因爲它的稠密鏈接模塊,因此咱們更喜歡將這個方法稱爲稠密卷積網絡(DenseNet)。
該稠密鏈接模塊的一個優勢是它比傳統的卷積網絡有更少的參數,由於它不須要再從新學習多餘的特徵圖。傳統的前饋結構能夠被當作一種層與層之間狀態傳遞的算法。每一層接收前一層的狀態,而後將新的狀態傳遞給下一層。它改變了狀態,但也傳遞了須要保留的信息。ResNets將這種信息保留的更明顯,由於它加入了自己的變換(identity transformations)。最近不少關於ResNets的研究都代表ResNets的不少層是幾乎沒有起做用的,能夠在訓練時隨機的丟掉。這篇論文【21】闡述了ResNets很像(展開的)循環神經網絡,可是比起循環神經網絡有更多的參數,由於它每一層都有本身的權重。咱們提出的DenseNet結構,增長到網絡中的信息與保留的信息有明顯的不一樣。DenseNet層很窄(例如每一層有12個濾波器),僅僅增長小數量的特徵圖到網絡的「集體知識」(collective knowledge),而且保持這些特徵圖不變——最後的分類器基於網絡中的全部特徵圖進行預測。
除了更好的參數利用率,DenseNet 還有一個優勢是它改善了網絡中信息和梯度的傳遞,這就讓網絡更容易訓練。每一層均可以直接利用損失函數的梯度以及最開始的輸入信息,至關因而一種隱形的深度監督(implicit deep supervision)。這有助於訓練更深的網絡。此外,咱們還發現稠密鏈接有正則化的做用,在更少訓練集的任務中能夠下降過擬合。
咱們在四個目標檢測任務(CIFAR-10, CIFAR-100,SVHN和ImageNet)中驗證了DenseNet。在和現有模型有類似準確率的前提下,咱們 的模型有更少的參數。此外,咱們的網絡還超過了目前在大部分的檢測任務都有最好結果的算法。
自從神經網絡被提出以後,網絡結構的探索就成爲神經網絡研究的一部分。最近神經網絡的普遍關注也給這個研究領域注入了新的生機。網絡層數的增長也讓更多的人進行結構的改善,不一樣鏈接模式的探索,早期研究觀點的復現等方面的研究。
在 1980s 神經網論文中提出的級聯結構很像咱們提出的稠密網絡。他們以前的工做主要關注在全鏈接的多層感知機上。最近,使用批梯度降低訓練的全鏈接的級聯網絡也被提出來了。儘管在小數據上有效,但該方法的網絡卻有幾百個參數。【9, 23, 31, 41】提出在CNNs 中利用跨層連接得到的多種特徵,這已經被證實在不少視覺任務上有效。和咱們的工做相似,【1】使用和咱們類似的跨層連接方式提出了一種純理論的網絡架構。
Highway是這些網絡中第一個提出使用 100 多層的結構訓練一個端到端的網絡。使用旁路(bypassing paths)和門控單元(gating units),Highway 網絡能夠很輕鬆地優化上百層的網絡。旁路被認爲是使深層網絡容易訓練關鍵因素。該觀點在ResNets中被進一步證明,ResNets使用自己的特徵圖做爲旁路。ResNets在不少圖像識別,定位和檢測任務(如ImageNet 和 COCO 目標檢測)中都得到了不錯的效果,而且還打破了以前的記錄。最近,一種能夠成功訓練 1202層ResNets的隨機深度(stochastic depth)被提出。隨機深度經過訓練過程當中隨機丟掉一些層來優化深度殘差網絡的訓練過程。這代表深度(殘差)網絡中並非全部的層都是必要的,有不少層是冗餘的。咱們論文的一部分就受到了該論文的啓發。預激活(pre-activation)的ResNets也有助於訓練超過 1000 層的網絡。
一種讓網絡更深(如跨層鏈接)的正交法(orthogonal approach)是增長網絡的寬度。GooLeNet使用了「inception」模塊,將不一樣尺度的濾波器產生的特徵進行組合鏈接。在【38】中,提出了一種具備普遍寬度的殘差模塊,它是ResNets的一種變形。事實上,只簡單的增長ResNets每一層的濾波器個數就能夠提高網絡的性能。FractalNets 使用一個寬的網絡結構在一些數據集上也得到了不錯的效果。
DenseNets 不是經過很深或者很寬的網絡來得到表徵能力,而是經過特徵的重複使用來利用網絡的隱含信息,得到更容易訓練,參數效率更高的稠密模型。將不一樣層學到的特徵圖進行組合鏈接,增長了以後層輸入的多樣性,提高了性能。這同時也指出了 DenseNets和 ResNets 之間的主要差別。儘管 Inception 網絡也組合鏈接了不一樣層的特徵,但DenseNets 更簡單,也更高效。
也有不少著名的網絡結構得到了不錯的結果。NIN 結構將多層感知機與卷積層的濾波器相鏈接來提取更復雜的特徵。在DSN中,經過輔助分類器來監督內部層,增強了前幾層的梯度。Ladder網絡將橫向鏈接(lateral connection)引入到自編碼器中,在半監督學習任務中得到不錯的效果。在【39】中,DFNs經過鏈接不一樣基礎網絡的中間層來改善信息的傳遞。帶有能夠最小化重建損失路徑(pathways that minimize reconstruction losses)的網絡也能夠改善圖像分類模型的性能。
圖1表示的是 Dense block,而圖2 表示的則是一個 DenseNet的結構圖,在這個結構圖中包含了3個 dense block。做者將DenseNet 分爲多個 dense block,緣由是但願各個 dense block 內的 feature map 的 size 統一,這樣在作 concatenation 就不會有 size的問題。
假設一張圖片 x0 在卷積網絡中傳播。網絡共有 L 層,每一層都有一個非線性轉換 Ht(*),其中 l 表示層的維度(即第幾層)。 Ht(*) 是一個組合函數,有BN,ReLU,池化或者卷積。咱們用 xt 表示 lth 層的輸出。
ResNets。傳統的前饋網絡是將 lth 層的輸出做爲 (l + 1)th 層的輸入,可用該方程來表示:xl = Hl(xt - 1)。ResNets增長了一個跨層鏈接,將自身與非線性轉換的結果相加:
因此對ResNet而言,l 層的輸出是 l-1 層的輸出加上對 l-1 層輸出的非線性變換。
ResNets 的一個優勢是能夠直接將梯度從後層傳向前層。然而,自身與通過 Hl 獲得的輸出是經過求和的形式來鏈接的。這可能使網絡中信息的傳播受到影響。
稠密鏈接(Dense connectivity)。爲了更好的改善層與層之間信息的傳遞,咱們提出了一種不一樣的鏈接模式:將該層與以後的全部層進行鏈接,如圖1所示,所以,lth 層將與以前全部層的特徵圖 x0,...xl-1做爲輸入:
其中 [x0, ...xl-1] 表示第 0, ... l-1層輸出的特徵圖的進行拼接。因爲他的稠密鏈接模式,咱們稱該網絡結構爲稠密卷積網絡(DenseNet)。爲了便於表達,咱們將方程(2)中 Hl(*) 的多個輸入表示爲一個向量。
組合函數(composite function)。受【12】的啓發,咱們將 Hl(*) 定義爲三種操做的組合函數,分別是BN,ReLU和3*3的卷積。
池化層(pooling layers)。當特徵圖的尺寸發生改變時,方程(2)中鏈接操做就會出現問題。然而,卷積網絡有一個基礎的部分——下采樣層,它能夠改變特徵圖的尺寸。爲了便於下采樣的實現,咱們將網絡劃分爲多個稠密鏈接的 dense block。如圖2所示。咱們將每一個 block 之間的層稱爲過渡層,完成卷積核池化的操做。在咱們的實驗中,過渡層由 BN層,1*1卷積層和2*2平均池化層組成。
增加速率(growth rate)。若是每一個函數 Hl 都產生 k個特徵圖,以後的 lth 層就有 k0+k(l+1) 個特徵圖做爲輸入,其中 k0 表示該層的通道數。DenseNet和現存網絡結構的一個很重要的不一樣是,DenseNet的網絡很窄,如 k=12.咱們將超參數 k 稱爲網絡的增加速率。咱們會在文章的第4部分進行說明,一個很小的增加速率在咱們測試的數據集上就能夠得到不錯的效果。這種狀況的一種解釋就是,每一層均可以和它所在的 block 中以前的全部特徵圖進行鏈接,使得網絡具備了「集體知識」(collective knowledge)。能夠將特徵圖看作是網絡的全局狀態。每一層至關因而對當前狀態 增長 k 個特徵圖。增加速率控制着每一層有多少信息對全局狀態有效。全局狀態一旦被寫定,就能夠在網絡中的任何地方被調用,而不用像傳統的網絡結構那樣層與層之間的不斷重複。
Bottleneck層。儘管每一層只產生 k 個輸出特徵圖,但它卻有更多的輸入,在【37, 11】中已經說明能夠在 bottleneck 層中3*3的卷積以前加入 1*1 的卷積實現降維,能夠減小計算量。咱們發現這種設計對 DenseNet 極其有效,咱們將具備 bottleneck 層,即 BN-ReLU-Conv (1*1)——BN-ReLU-Conv(3*3) 的結構稱爲 DenseNet-B。在咱們的實驗中,咱們令 1*1 的卷積生成 4k 個特徵圖。
Compression(壓縮)。爲了簡化模型,咱們在過渡層中減小了特徵圖的數量。若是一個Dense block 有 m 個特徵圖,咱們讓以後的過渡層生成 θm 個輸出特徵圖,其中 0 < θ <=1 表示Compression係數,當 θ=1 時,通過過渡層的特徵圖數量沒有改變。咱們定義 θ<1 的DenseNet爲DenseNet-C,而且在咱們的實驗中 θ = 0.5。若是 bottleneck 和過渡層都有 θ < 1,咱們稱該模型爲 DenseNet-BC。
實現細節。在除了ImageNet外的全部數據集上,咱們實驗中使用的 DenseNet都有3個dense block,每一個 block 都要向他的層數。在進入第一個 dense block 以前,輸入圖像先通過 16個(DenseNet-BC中是兩倍的增加速率)卷積。對於 3*3 的卷積層,使用一個像素的零填充來保證特徵圖尺寸不變。在兩個 dense block 之間的過渡層中,咱們在 2*2 的平均池化層以後增長了 1*1 的卷積。在最後一個 dense block 以後,使用全局平均池化和softmax分類器。三個 dense block 的特徵圖的尺寸分別是 32*32, 16*16, 8*8 。咱們改變一些參數 {L=40, k=12},{L=100, k=12},{L=100,k=24},在基本的 DenseNet上作了一些實驗。對於 DenseNet-BC,分別設置{L=100, k=12},{L=250, k=24},{L=190,k=40}。
對於在ImageNet數據集上的實驗,咱們使用4個dense block的 DenseNet-BC結構,圖片的輸入是 224*224。最開始的卷積層有 2k(64)個卷積,卷積核是 7*7,步長是2;其他全部層的特徵圖都設爲 k。在ImageNet數據集上的網絡如表1所示。
table1 就是整個網絡的結構圖。這個表中的 k=32,k=48中的 k 是 growth rate,表示每一個 dense block 中每層輸出的 feature map個數。爲了不網絡變得很窄,做者都是採用較小的 K,好比32這樣的,做者的實驗也代表小的 k 能夠有更好的效果。根據 dense block 的設計,後面幾層能夠獲得前面全部層的輸入,所以 concat後的輸入 channel 仍是比較大的。另外這裏每一個 dense block的 3*3 卷積前面都包含了一個 1*1 的卷積操做,就是所謂的 bottleneck layer,目的是減小輸入的 feature map 數量,既能降維減小計算量,又能融合各個通道的特徵。另外做者爲了進一步壓縮參數,在每兩個 dense block 之間又增長了 1*1 的卷積操做。所以在後面的實驗對比中,若是看到DenseNet-C這個網絡,表示增長了這個 Translation layer,該層的 1*1 卷積的輸出 channel 默認是輸入 channel 到一半。若是你看到 DenseNet-BC這個網絡,表示既有 bottleneck layer,又有 Translation layer。
咱們在一些檢測任務的數據集上證實 DenseNet的有效性,而且和現有的一些網絡進行了對比,特別是ResNet和它的變形。
CIFAR。兩種CIFAR數據集都是 32*32 的彩色圖,CIFAR-10(C10)是10類,CIFAR-100(C100)是100類。訓練集和測試集分別有 50000 和 10000 張圖片,咱們從訓練集中選 5000 張做爲驗證集。咱們採用這兩個數據集上普遍使用的數據加強方式(鏡像/平移)。用在數據集後的「+」來標色使用了這種數據加強方式(如C10+)。至於預處理,我麼使用每一個顏色通道的均值和標準差來歸一化。最後,咱們使用所有的 50000 張訓練圖片,在訓練結束時記錄測試偏差。
SVHN。SVHN數據集是 32*32的彩色數字圖。訓練集有 73257張圖片,測試集有 26032張,有 531131 張做爲額外的訓練。在接下來實驗中,咱們沒有使用任何的數據加強,從訓練集中選取 60000 張圖片做爲驗證集。咱們用驗證集偏差最小的模型來進行測試。咱們對像素值執行除 255 操做,歸一化到 【0, 1】。
ImageNet。ILSVRC 2012 分類數據集有 1.2百萬張訓練集,50000張驗證集,共 1000類。咱們採用和論文【8, 11, 12】一樣的數據加強方式,在測試時使用 Single-crop 或 10-crop 將圖片尺寸變爲 224*224。根據【11, 12, 13】,咱們記錄了在驗證集上的分類偏差。
table 2 在三個數據集(C10, C100,SVHN)上和其餘算法的對比結果。ResNet【11】就是Kaiming He的論文,對比結果一目瞭然。DenseNet-BC的網絡參數和相同深度的 DenseNet相比確實減小了不少!參數減小除了能夠節省內存,還能減小過擬合。這裏對於SVHN 數據集,DenseNet-BC的結果並無 DenseNet(k=24)的效果好,做者認爲緣由主要是 SVHN 這個數據集相對簡單,更深的模型容易過擬合。在表格的倒數第二個區域的三個不一樣深度 L 和 k 的 DenseNet的對比能夠看出隨着 L 和 K 的增長,模型的效果是更好的。
做者在不一樣數據集上採樣的 DenseNet 網絡會有一點不同,好比在 Imagenet 數據集上,DenseNet-BC 有 4個 dense block,可是在別的數據集上只用3個 dense block。
全部的網絡均使用隨機梯度降低法(SGD)進行訓練。在CIFAR和SVHN 數據上,咱們令 batchsize = 64,分別訓練了 300輪和40輪。最初的學習率都爲 0.1,分別在訓練總輪數的 50%和75%時,將學習率變爲原來的 0.1倍。在ImageNet上,咱們將模型訓練了90輪,batchsize=256。初始學習率設爲 0.1,在第30輪和第 40 輪分別將學習率縮小 10倍。受 GPU內存的限制,咱們設最大的模型(DenseNet-161) batchsize=128。爲了彌補小 batch size 的不足,咱們將模型訓練了 100 輪,而且在 90輪時將學習率除以 10。
根據【8】,咱們設置梯度衰減值爲 10e-4,Nesterov 動量設爲 0.9。咱們採用論文【10】中介紹的權重初始化方式。對於三種沒有使用數據加強的數據,如 C10, C100,SVHN,咱們在每一個卷積層(除了第一層)以後增長了一層 dropout層,而且設置失活率爲 0.2。對於每一個任務和每一個模型都只進行一次測試。
咱們使用不一樣的深度(L),不一樣的增加速率(k),來分別訓練 DenseNets。在CIFAR 和 SVHN 上的結果如表2所示。爲了突出結果,咱們對其作了標記,將性能優於現存模型的結果加粗,將該數據集上的最好結果用藍色標記。
準確率(Accuracy)。可能最惹人注目的是表2最後一行的結果,其是 L=190, k=40 的 DenseNet-BC 網絡在CIFAR 上的結果,性能已超過現存的全部模型。在C10+上錯誤率爲 3.45%,在C100+上的錯誤率 爲 17.18% 。在C100+上的偏差率遠遠低於寬ResNet(wide ResNet)網絡。咱們在C100和C100(無數據加強)上的偏差很喜人:比 FractalNets和使用dropout正則項的結果低了接近 30%。在SVHN上,L=100,k=24 的 DenseNet(使用dropout)也遠超寬ResNet 的最好結果。然而,250層的DenseNet-BC 的性能卻沒有提高太多。這多是由於 SVHN的任務很簡單,複雜的模型每每會致使過擬合。
容量(Capacity)。不考慮 compression或bottleneck層, L和k越大,模型性能越好。咱們把這歸功於模型容量的增長。這在C10+和C100+這兩列中獲得了很好的證實。在C10+這列,偏差率從 5.24%降到了 4.10%,最後到了 3.74%。由於模型的參數量從1M增長到7M,最後到了 27.2M。在C100+這列,咱們能夠看到類似的結果。這代表DenseNet可使用更大更深的模型來增長表徵能力,也代表他們沒有出現過擬合或者殘差網絡的優化困難等問題。
參數效率。表2 的結果代表DenseNet比常見的網絡(特別是ResNet)的參數效率更高。使用 bottleneck結構而且在過渡層使用降維操做的 DenseNet-BC的參數利用率極其高。例如,咱們的 250層模型只有 15.3 M的參數量,可是它的性能卻遠超其餘參數量超過 30M的模型,像 FractalNets和 寬 ResNet。咱們也將L=100,k=12的 DenseNet-BC性能與 1001層 pre-activation的 ResNet進行了比較(如,在C10+的偏差 4.51%VS4.62%, 在C100+的偏差:22.27%VS22.71%)。這兩個網絡在C10+數據上的訓練loss和測試偏差如圖4(右圖)。1001層的深度ResNet收斂到一個更低的loss,但卻有類似的測試偏差。咱們會在接下來對這個內容進行更深刻的探討。
過擬合(Overfitting)。更高效的利用參數的一個做用是DenseNets不容易發生過擬合。在不使用數據加強的數據集上,咱們發現到 DenseNet結構和以前的工做相比較,其改進仍是很明顯的。在C10上,偏差降了 29%,從 7.33%降到了 5.19%。在C100上,降了大約 30%,從 28.2%降到了 19.64%。經過實驗,咱們發現一個潛在的過擬合現象:在C10上,經過將 k 從 12 增長到 24,模型的參數量增長了 4倍,而偏差卻從 5.77% 增長到 5.83%,DenseNet-BC 的 bottleneck 和 compression層彷佛是應對這種現象的一種有效措施。
咱們在ImageNet分類任務上測試了不一樣深度和增加速率的 DenseNet-BC 的偏差,而且和ResNet結構的性能進行了比較。爲了對這兩種結構有一個公平的比較,咱們排除了其餘全部的因素,如數據預處理方式,優化器設置。咱們僅僅將 DenseNet-BC 網絡替代ResNet模型,而保留ResNet的其餘實驗參數不變。
咱們記錄了DenseNets在ImageNet上 single-crop 和 10-crop的驗證偏差,如表3所示。
DenseNets 和 ResNets Single-crop的top-1 驗證偏差如圖3所示,其中左圖以參數量爲變量,右圖以 FLOPs爲變量。
如圖3所示,與ResNets相比,在相同性能的前提下 DenseNets參數量和計算量更小。例如,擁有 20M 參數的 DenseNet-201 的偏差率和擁有超過 40M 參數的 101-ResNet 偏差率相近。從圖3的右圖也能夠看到相似的結果:和ResNet-50 計算量接近的 DenseNet 大約是 ResNet-101 計算量的兩倍。
圖3是DenseNet-BC 和 ResNet在ImageNet數據集上的對比,左邊的那個圖是參數複雜度和錯誤率的對比,你能夠在相同錯誤率下看參數複雜度,也能夠在相同參數複雜度下看錯誤率,提高仍是很明顯的,右邊是flops(能夠理解爲計算複雜度)和錯誤率率的對比,一樣有效果。
值得注意的是,咱們是修改和ResNets對應的超參數而不是DenseNets的。咱們相信還能夠經過修改更多的超參數來優化DenseNet在ImageNet上的性能。
圖4也很重要,左邊的圖表示不一樣類型DenseNet的參數和 error 對比。中間的圖表示 DenseNet-BC和ResNet在參數和error的對比,相同 error 下,DenseNet-BC的參數複雜度要小不少。右邊的圖也是表達 DenseNet-BC-100 只須要不多的參數就能達到和 ResNet-1001相同的結果。
從表面來看,DenseNets和ResNets很像:方程(2)和方程(1)的不一樣主要在輸入 Hl(*) (進行拼接而不是求和)。然而,這個小的改變倒是給這兩種網絡結構的性能帶來了很大的差別。
模型簡化性(Model Compactness)。將輸入進行鏈接的直接結果是,DenseNets 每一層學到的特徵圖均可以被之後的任一層利用。該方式有助於網絡特徵的重複利用,也所以獲得了更簡化的模型。
圖4左邊的兩張圖展現了實驗的結果,左圖比較了全部 DenseNets的參數效率,中圖對DenseNets 和 ResNets 的參數效率進行了比較。咱們在 C10+ 數據上訓練了不一樣深度的多個小模型,並繪製出準確率。和一些流行的網絡(如AlexNet, VGG)相比,pre-activation 的 ResNets 的準確率明顯高於其餘網絡。以後,咱們將 DenseNets (k=12)與這網絡進行了比較。DenseNet的訓練集同上節。
如圖4,DenseNet-BC 是參數效率最高的一個 DenseNet 版本。此外,DenseNet-BC 僅僅用了大概 ResNets 1/3 的參數量就得到了相近的準確率(中圖)。該結果與圖3的結果相一致。如圖4右圖,僅有 0.8M 參數量的 DenseNet-BC 和有 10.2M參數的 101-ResNets 準確率相近。
隱含的深度監督(implicit deep supervision)。稠密卷積網絡能夠提高準確率的一個解釋是,因爲更短的鏈接,每一層均可以從損失函數中得到監督信息。能夠將 DenseNets 理解爲一種「深度監督」(Deep supervision)。深度監督的好處已經在以前的深度監督網絡(DSN)中說明,該網絡在每一隱含層都加了分類器,迫使中間層也學習判斷特徵(discriminative features)。
DenseNet和深度監督網絡類似:網絡最後的分類器經過最多兩個或三個過分層爲全部層提供監督信息。然而,DenseNets的損失含數字和梯度不是很複雜,這是由於全部層之間共享了損失函數。
隨機 VS 肯定鏈接。稠密卷積網絡與殘差網絡的隨機深度正則化(stochastic depth regularzaion)之間有着有趣的關係。在隨機深度中,殘差網絡隨機丟掉一些層,直接將周圍的層進行鏈接。由於池化層沒有丟掉,因此該網絡和DenseNet有着類似的鏈接模式:以必定的小几率對相同池化層之間的任意兩層進行直接鏈接——若是中間層隨機丟掉的話。儘管這兩個方法在根本上是徹底不同的,可是 DenseNet 關於隨機深度的解釋會給該正則化的成功提供依據。
總結一下:DenseNet和stochastic depth的關係,在 stochastic depth中,residual中的layers在訓練過程當中會被隨機drop掉,其實這就會使得相鄰層之間直接鏈接,這和DenseNet是很像的。
特徵重複利用。根據設計來看,DenseNets 容許每一層得到以前全部層(儘管一些是經過過渡層)的特徵圖。咱們作了一個實驗來判斷是否訓練的網絡能夠重複利用這個機會。咱們首先在 C10+ 數據上訓練了 L=40, k=12 的 DenseNet。對於每一個 block的每一個卷積層 l,咱們計算其與 s 層鏈接的平均權重。三個 dense block 的熱度圖如圖 5 所示。平均權重表示卷積層與它以前層的依賴關係。位置(l, s)處的一個紅點表示層 l 充分利用了前 s 層產生的特徵圖。由圖中能夠獲得如下結論:
咱們提出了一個新的卷積網絡結構,稱之爲稠密卷積網絡(DenseNet)。它將兩個相同特徵圖尺寸的任意層進行鏈接。這樣咱們就能夠很天然的設計上百層的網絡,還不會出現優化困難的問題。在咱們的實驗中,隨着參數量的增長,DenseNets的準確率也隨之提升,並且也沒有出現交叉表現或過擬合的現象。經過超參數的調整,該結構在不少比賽的數據上都得到了不錯的結果。此外,DenseNets有更少的參數和計算量。由於咱們只是在實驗中調整了對於殘差網絡的超參數,因此咱們相信經過調整更多的超參數和學習率,DenseNets的準確率還會有更大的提高。
遵循這個簡單的鏈接規則,DenseNet能夠很天然地將自身映射(identity mappings),深度監督(deep supervision)和深度多樣化(diversified depth) 結合在一塊兒。根據咱們的實驗來看,該結構經過對網絡特徵的重複利用,能夠學習到更簡單,準確率更高的模型。因爲簡化了內部表徵和下降了特徵冗餘,DenseNets多是目前計算機視覺領域中在卷積網絡方面很是不錯的特徵提取器。在之後的工做中咱們計劃研究 DenseNets下的特徵遷移工做。