CVPR2017最佳論文 Densely Connected Convolutional Networks (DenseNets)閱讀筆記
原文:Densely Connected Convolutional Networks
作者:Gao Huang, Zhuang Liu, Kilian Q. Weinberger, Laurens van der Maaten
下載地址:https://arxiv.org/abs/1608.06993
1 簡介
- 近幾年的深度學習模型中,CNN一直是絕對主導地位。Resnet、GoogLeNet、VGG等優秀的網絡都是基於CNN搭建的。然而,深層的CNN一直以來都存在一個問題:數據在多層傳播後很可能會逐漸消失。Resnet通過“skip connection”結構一定程度上在促進了數據在層間的流通,但接近輸出的網絡層還是沒有充分獲得網絡前面的特徵圖。
- 作者提出的DenseNets,在前向傳播基礎上,網絡每一層都能接受到它前面所有層的特徵圖,並且數據聚合採用的是拼接而非Resnet中的相加。網絡模型如下圖所示:
- 這種連接方式有一個很大的優點。前向傳播時,深層網絡能獲得淺層的信息,而反向傳播時,淺層網絡能獲得深層的梯度信息。這樣最大程度地促進了數據在網絡間的流動。
- 另外,這種結構存在着大量的特徵複用。因此只需要很少的參數,就可以達到state-of-the-art的效果。主要是體現在特徵圖的通道數上,相比VGG、ResNet的幾百個通道,DenseNet可能只需要12、24個左右。
2 模型搭建
- 關鍵詞:
- Dense Block:作者將許多個卷積網絡分成3~4個部分,這些部分叫做dense block,概念有些像殘差網絡的殘差塊。每個block中,都執行密集連接,block的輸出再通過池化降低特徵圖尺寸。
- Growth rate:由於網絡採用拼接(Concatenate)的操作,通道數會逐層增加。作者在設計網絡時固定了每個卷積層的輸出通道數,因此每層增加的通道數一樣的,Growth rate指的就是網絡每層增加的通道數。用k表示。
- Bottleneck:該網絡是爲了解決輸入特徵圖層數太多的問題。它先進行BN、ReLU,再用一個1*1的卷積把輸入通道變成相對小的一個固定值(作者設置爲4k),之後再通過BN-ReLU-Conv3*3輸出。也就是說,上圖block每個黑點都是BN-ReLU-Conv1*1-BN-ReLU-Conv3*3的結構,其中Conv1*1的輸出通道爲4k,Conv3*3的輸出通道爲k。有該結構的網絡叫做DenseNet-B。
- Compreession:在兩個Dense block中出現,爲了壓縮通道數。假設一個Dense block的輸出是m,設置一個壓縮值θ ,用conv1*1將dense block的輸出壓縮成θm 個通道。一般來說θ 設置成0.5。Compresion在上圖中被表示爲block之間的那個“convolution”(前面一樣還有BN-RELU)。如果使用了bottleneck和compression,網絡就稱作DenseNet-BC。
用於CIFAR、SVHN
- CIFAR10,CIFAR100、SVHN這三個數據集中,圖像的大小隻有32*32。作者只用3個Dense block,輸出尺寸分別爲32*32,16*16,8*8,另外沒有bottleneck。作者設置了兩種網絡,分別爲40層和100層,對應的growth rate分別爲12和24。另外作者還是用了bottleneck來嘗試,配置爲:{L=100,k=12},{L=250,k=24},{L=190,k=40}
用於Imagenet
- 大致和上面相同,作者使用4個dense block,讓圖像最終尺寸變成經典的7*7。最開始的卷積尺寸爲7*7,步長爲2,將3通道的圖像轉換成2k通道的特徵圖。具體配置如下圖。
3 實驗
- 比較值得注意的就是下面的實驗結果了。這是一個錯誤率-計算量的函數圖。可以發現,在達成相同準確率的情況下,DenseNet所需的參數和浮點操作數遠小於ResNet。這也是DenseNet的強大之處。