# DenseNet ###### tags: `paper` `已公開` [toc] ![](https://i.imgur.com/q8liBy6.png) DenseNet 有別於以往的神經網絡,不從網路深度與寬度著手,而是由特徵的角度去考慮,通過特徵重用的方式,加強了特徵的利用、減輕梯度消失的問題、大幅地減少了參數計算量,並達到更好的準確率,因而獲得了 CVPR 2017 最佳論文 ## Introduction 卷積神經網絡已成為視覺對象識別的主要機器學習方法。隨著 CNN 變得越來越深,一個新的研究問題出現了:輸入或梯度的信息經過許多層時,它可能會在到達網絡末端時消失和“沖刷”。 很多研究解決這問題 - 通過idenetity shortcut 從一層到下一層的 ResNet 和 Highway by-pass(旁邊) siganl - [Stochastic depth](https://arxiv.org/abs/1603.09382) 通過在訓練期間隨機丟棄層來縮短 ResNets,以提供更好的信息和梯度流。 - [FractalNets](https://arxiv.org/pdf/1605.07648.pdf) 將多個並行層序列與不同數量的捲積塊重複組合以獲得較大的的名義上的深度,同時在網絡中保持許多短路徑。 ![](https://i.imgur.com/oe1klZ7.png) **這些網路拓樸都有一個共同特色,它們創建了從淺層到深層的短路徑**。 在本文中,我們提出了一種架構,將這種見解蒸餾提煉為一種簡單的連接模式:為了確保網絡中各層之間的信息流最大化,我們將所有層直接相互連接。 為了保持feed-forward 的性質,每一層從所有前面的層獲得額外的輸入,**跟ResNet不同,我們不會透過加法來結合特徵而是concatenating。** we evaluate DenseNet on four benchmark datasets(CIFAR-10, CIFAR-100, SVHN, and ImageNet) ## Related Work 自最初發現以來,網絡架構的探索一直是神經網絡研究的一部分。現代網絡中**層數的增加放大了架構之間的差異,並激發了對不同連接模式的探索和對舊研究思想的重新審視** - 在 1980 年代的神經網絡文獻中已經研究了類似於我們提出的密集網絡佈局的cascade結構--The cascade-correlation learning architecture - 也有不少研究 utilizing multi-level features in CNNs through skip-connnections has been found to be effective for various vision tasks. ![](https://i.imgur.com/3izMnxY.png) - [AdaNet](https://arxiv.org/abs/1607.01097) 跟我們很像,為具有與我們類似的跨層連接的網絡導出了一個純理論框架, - Highway是第一個提供有效訓練超過 100 層的端到端網絡的方法的架構。The bypassing paths被認為是簡化這些非常深網絡的訓練的關鍵因素。並在ResNets 得到進一步的支持。 - “Deep Networks with Stochastic Depth”通過在訓練過程中隨機丟棄層來改進深度殘差網絡的訓練 ![](https://i.imgur.com/TI3gkrp.png) "Identity Mappings in Deep Residual Networks"有助於訓練具有> 1000 層的最先進網絡 ![](https://i.imgur.com/I9qPYHe.png) - DenseNets 通過特徵重用(feature reuse)開發了網絡的潛力,產生易於訓練且參數效率高的壓縮模型。 將不同層學習的特徵圖連接(concatenate)起來,增加了後續層輸入的變化,提高了效率。將不同層學習的特徵圖連接起來,增加了後續層輸入的變化,提高了效率。這構成了 DenseNets 和 ResNets 之間的主要區別。 - 與連接來自不同層的特徵的 Inception 網絡相比,DenseNets 更簡單、更高效。 - Ladder Networks將橫向連接引入自動編碼器,在半監督學習任務中產生令人印象深刻的準確性。 ![](https://i.imgur.com/ihVHGsR.png) - 在 [Deeply-Fused Nets](https://arxiv.org/pdf/1605.07716.pdf) 中,提出了通過組合不同基礎網絡的中間層來改善信息流 - [具有最小化重建損失的路徑的網絡增強也被證明可以改進圖像分類模型](https://arxiv.org/pdf/1606.06582.pdf) ## DenseNets 考慮單張圖片$x_{0}$,經過CNN 網路包含L層。$H_{l}(\cdot)$,可以是BN, ReLU, Pooling, Conv。以下一步步規範網路。 ### 1. ResNets $x_{l} = H_{l}(x_{l-1}) + x_{l+1} \tag1$ ResNets 的一個優點是梯度可以直接通過恆等函數從後面的層流到前面的層。 然而,恆等函數和$H_{l}$的輸出是通過求和組合的,這可能會阻礙網絡中的信息流動。 ### 2. Dense connectivity 為了進一步改善層之間的訊息流,我們提出了一種不同的連接模式:我們引入了從任何層到所有後續層的直接連接。如圖一 $x_{l} = H_{l}([x_{0},x_{1},...,x_{l-1}]) \tag2$ 為了簡單實現,我們concatenate多個輸入成一個tensor。 ![](https://i.imgur.com/V9sdQ4V.png) ### 3. composite function 受到這篇[Identity Mappings in Deep Residual Networks](https://arxiv.org/pdf/1603.05027.pdf)啟發,我們將$H_{l}(\cdot)$ 當作**BN-ReLU-Conv(3x3)**. ### 4. pooling layers 當feature map 的size改變,concatenation 運算在等式2是不可行的。然而,卷積網絡的一個重要部分是改變特徵圖大小的下採樣層。 為了促進我們架構中的下採樣,我們將網絡劃分為多個密集連接的 Dense blocks。我們將塊之間的層稱為**過渡層(transition layers),它進行卷積和池化。我們實驗中使用的過渡層由一個批量歸一化層和一個 1×1 卷積層和一個 2×2 平均池化層組成**。[表一] ### 5. Growth rate 如果$H_{l}$ 產生$k$ 個特徵圖,那麼$l$ 層有$k_{0} + k*(l-1)$ 個輸入特徵圖,$k_{0}$層輸入通道數量。我們將k稱之網路的growth rate。 對此的一種解釋是,**每一層都可以訪問其block中的所有先前的特徵圖,因此可以訪問網絡的“collective knowledge”。 可以將特徵圖視為網絡的全局狀態**。 每個層都將自己$k$ 個特徵圖映射到此狀態。 **增長率$k$ 調節每層對全局狀態貢獻多少新信息。 全局狀態一旦寫入,就可以從網絡內的任何地方訪問,並且與傳統網絡架構不同,不需要從層到層複製它**。 ### 6. Bottleneck Layers ![](https://i.imgur.com/jDe6GD0.png) 雖然每一層只產生k個輸出特徵圖,但它通常有更多的輸入。需要注意的是,可以在每個 3×3 卷積之前引入 1×1 卷積作為瓶頸層,以減少輸入特徵圖的數量,從而提高計算效率。 我們發現這種設計對 DenseNet 尤其有效,我們將具有這種瓶頸層的網絡稱為 $H_{l}$ 的 **BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3) 版本,稱為 DenseNet-B**。在我們的實驗中,我們讓每個 1×1 卷積產生 4k 個特徵圖。 > 一個Dense Block 是好幾個 Bottleneck Block ### 7. Compression 為了進一步提高模型的簡潔,我們可以減少transition layers的特徵圖的數量。如果dense block包含了m個feature maps,我們讓接下來的transition layer生成$\theta_{m}$ output feature maps,$0<\theta \leq 1$,代表壓縮係數(compression factor)。當$\theta=1$,跨過渡層的特徵圖數量保持不變。 - We refer the DenseNet with $θ<1$ as **DenseNet-C**, and we set $θ= 0.5$ in our experiment - When both the bottleneck and transition layers with $θ <1$ are used, we refer to our model as **DenseNet-BC**. ### 8. Implementation details * 我們實驗了三個Dense block,有相同的層數 * 在進入第一個Dense block之前,對輸入圖像進行 16 個輸出通道的捲積(or twice the growth rate for DenseNet-BC) * Dense block: 對於內核大小為 3×3 的捲積層,輸入的每一側都填充了一個0像素(zero-padding)以保持特徵圖大小固定。 * Transition layer: 我們使用 1×1 卷積,然後是 2×2 平均池化作為兩個連續dense block之間的過渡層。 * 在最後一個dense block的末尾,進行全局平均池化,然後附加一個 softmax 分類器。 * 三個dense block中的特徵圖大小分別為 32×32、16×16 和 8×8。 - Basic DenseNet structure 採用{L= 40,k= 12},{L=100,k= 12}and{L= 100,k= 24} 配置進行實驗 - DenseNet-BC, the networks with configurations{L= 100,k= 12}, {L=250,k=24} and {L=190,k=40} ## Experiments ![](https://i.imgur.com/pV4Ih8Z.png) ![](https://i.imgur.com/ebII62k.png) ![](https://i.imgur.com/YctyjTd.png) ## 參考資料 - [Densely Connected Convolutional Networks](https://arxiv.org/abs/1608.06993) - [pytorch code](https://github.com/pytorch/vision/blob/master/torchvision/models/densenet.py)