python進階教程
機器學習
深度學習
長按二維碼關注
與 ResNet 和 Pre-Activation ResNet 相比,DenseNet 具有較少的參數和較高的精度。
在Standard ConvNet中,輸入圖像經過多次卷積,得到高層次特征。
ResNet Concept
在ResNet中,提出了恒等映射(identity mapping)來促進梯度傳播,同時使用使用 element 級的加法。它可以看作是将狀态從一個ResNet 子產品傳遞到另一個ResNet 子產品的算法。
One Dense Block in DenseNet
在 DenseNet 中,每個層從前面的所有層獲得額外的輸入,并将自己的特征映射傳遞到後續的所有層,使用級聯方式,每一層都在接受來自前幾層的“集體知識(collective knowledge)”。
1. 基礎 DenseNet 組成層
對于每個組成層使用 Pre-Activation Batch Norm (BN) 和 ReLU,然後用k通道的輸出特征映射進行 3×3 卷積,例如,将x0、x1、x2、x3轉換為x4。這是 Pre-Activation ResNet 的想法。
2.DenseNet-B (Bottleneck 層)
DenseNet-B
由于後面層的輸入會非常大,DenseBlock内部可以采用bottleneck層來減少計算量,主要是原有的結構中增加1x1 Conv,即BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv,稱為DenseNet-B結構。其中1x1 Conv得到4k個特征圖它起到的作用是降低特征數量,進而提升計算效率。
3. 具有轉換層(transition layer)的多Dense塊
Multiple Dense Blocks
采用1×1 Conv和2×2平均池化作為相鄰 dense block 之間的轉換層。
特征映射大小在 dense block 中是相同的,是以它們可以很容易地連接配接在一起。
在最後一個 dense block 的末尾,執行一個全局平均池化,然後附加一個Softmax分類器。
4. DenseNet-BC (進一步壓縮)
如果 Dense Block 包含m個特征映射,則轉換層(transition layer)生成 輸出特征映射,其中 稱為壓縮因子。
當時,跨轉換層的特征映射數保持不變。在實驗中,的 DenseNet 稱為 DenseNet-C,預設。
當同時使用 bottleneck 和 時的轉換層時,該模型稱為 DenseNet-BC 模型。
最後,訓練 with/without B/C 和不同L層和k生長速率的 DenseNet。
DenseNet的優勢
1. 強梯度流
誤差信号可以更直接地傳播到早期的層中。這是一種隐含的深度監督,因為早期的層可以從最終的分類層直接獲得監督。
2. 參數和計算效率
RestNet 和 DenseNet 的參數數量
對于每個層,RetNet 中的參數與成正比,而 DenseNet 中的參數與成正比。由于, 是以 DenseNet 比 ResNet 的size更小。
3. 更加多樣化的特征
DenseNet中更加多樣化的特征
由于 DenseNet 中的每一層都接收前面的所有層作為輸入,是以特征更加多樣化,并且傾向于有更豐富的模式。
4. 保持低複雜度特征
标準ConvNet
在标準ConvNet中,分類器使用最複雜的特征。
DenseNet
在 DenseNet 中,分類器使用所有複雜級别的特征。它傾向于給出更平滑的決策邊界。它還解釋了為什麼 DenseNet 在訓練資料不足時表現良好。
特征複用的進一步分析
Heat map on the average absolute weights of how Target layer (l) reuses the source layer (s)
- 從非常早期的層中提取的特征被同一 Dense Block 中的較深層直接使用。
- 轉換層的權重也分布在前面的所有層中。
- 第二和第三dense block内的各層一貫地将最小權重配置設定給轉換層的輸出。(第一行)
- 在最終分類層,權重似乎集中在最終feature map上。一些更進階的特性在網絡中産生得很晚。
論文連結https://arxiv.org/pdf/1608.06993.pdf
參考連結https://towardsdatascience.com/review-densenet-image-classification-b6631a8ef803
Github連結https://github.com/liuzhuang13/DenseNet