通俗易懂DenseNet


博客:博客園 | CSDN | blog

寫在前面

在博客《ResNet詳解與分析》中,我們談到ResNet不同層之間的信息流通隱含在“和”中,所以從信息流通的角度看並不徹底,相比ResNet,DenseNet最大的不同之處在於,並不對feature map求element-wise addition,而是通過concatenation將feature map拼接在一起,所以DenseNet中的卷積層知道前面每一步卷積發生了什麼。

Crucially, in contrast to ResNets, we never combine features summation before they are passed into a layer; instead, we combine features by concatenating them.

同ResNet結構類似,DenseNet也是由多個Dense Block串聯而成,如下圖所示

在這裏插入圖片描述

Dense Block與Transition Layer

在每個Dense Block內部,每個卷積層可以知道前面所有卷積層輸出的feature map是什麼,因爲它的輸入爲前面所有卷積層輸出的feature map拼接而成,換個角度說,每個卷積層得到的feature map要輸出給它後面所有的卷積層。這裏說“每個卷積層”並不準確,更準確的說法應該是“每組卷積”,後面將看到,一組卷積是由1個1×11\times 1卷積層和 1個3×33\times 3卷積層堆疊而成,即bottleneck結構

to ensure maximum information flow between layers in the network, we connect all layers (with matching feature-map sizes) directly with each other. To preserve the feed-forward nature, each layer obtains additional inputs from all preceding layers and passes on its own feature-maps to all subsequent layers.

下面看一個Dense Block的示例,

在這裏插入圖片描述

圖中的xx爲feature map,特別地,x0x_0爲網絡輸入,HH爲一組卷積,同Identity Mappings in Deep Residual Networks採用了pre activation方式,即BN-ReLU-1×11\times 1Conv-BN-ReLU-3×33\times 3Conv的bottleneck結構。xix_iHiH_i輸出的feature map,HiH_i的輸入爲concatenation of [x0,x1,,xi1][x_0, x_1, \dots, x_{i-1}]。定義每個HH輸出的 channel數爲growth rate k=4k =4,則HiH_i的輸入feature map有 k0+k×(i1)k_0 + k\times (i-1)個channel,特別地,k0k_0x0x_0的channel數。所以,對於越靠後的HH,其輸入feature map的channel越多,爲了控制計算複雜度,將bottleneck中1×11\times 1卷積的輸出channel數固定爲4k4k。對於DenseNet的所有 Dense Block,growth rate均相同。

相鄰Dense Block 之間通過Transition Layer銜接,Transition Layer由1個1×11\times 1卷積和2×22\times 2的average pooling構成,前者將輸入feature map的channel數壓縮一半,後者將feature map的長寬尺寸縮小一半。

可見,bottleneck和Transition Layer的作用都是爲了提高計算效率以及壓縮參數量。

DenseNet網絡架構與性能

DenseNet用於ImageNet的網絡架構如下,通過上面的介紹,這裏的架構不難理解。

在這裏插入圖片描述

DenseNet的Parameter Efficiency很高,可以用少得多的參數和計算複雜度,取得與ResNet相當的性能,如下圖所示。

在這裏插入圖片描述

理解DenseNet

DenseNet最終的輸出爲前面各層輸出的拼接,在反向傳播時,這種連接方式可以將最終損失直接回傳到前面的各個隱藏層,相當於某種Implicit Deep Supervision強迫各個隱藏層學習到更有區分裏的特徵

DenseNet對feature map的使用方式可以看成是某種多尺度特徵融合,文中稱之爲feature reuse,也可以看成是某種“延遲決定”,綜合前面各環節得到的信息再決定當前層的行爲。文中可視化了同block內每層對前面層的依賴程度,

For each convolutional layer ‘ within a block, we compute the average (absolute) weight assigned to connections with layers. Figure 5 shows a heat-map for all three dense blocks. The average absolute
weight serves as a surrogate for the dependency of a convolutional layer on its preceding layers.

在這裏插入圖片描述

圖中可見每個Dense Block中每層對前面層的依賴程度,約接近紅色表示依賴程度越高,可以看到,

  • Dense Block內,每個層對其前面的feature map利用方式(依賴程度)是不一樣的,相當於某種“注意力
  • Transition Layer 以及最後的Classification Layer對其前面相對宏觀的特徵依賴較高,這種趨勢越深越明顯

Plain Net、ResNet與DenseNet

這裏做一個可能並不恰當的比喻,對比一下Plain Net、ResNet 與 DenseNet。

如果將網絡的行爲比喻成作畫,已知最終希望畫成的樣子,但要經過N個人之手,每個人繪畫能力有限,前面一個人畫完交給後面的人。

  • Plain Net:前面一個人畫完,後面一個人只能參照前一個人畫的自己重新繪製一張,儘管他能力有限,但他必須得畫。

  • ResNet:前面一個人畫完,後面一個人在其基礎上作畫,他更多地關注當前畫與最終畫的差異部分,同時他還有不畫的權利。

  • DenseNet:當前作畫的人可以看到前面所有人的畫,同時他還知道大家繪畫的順序以及誰的畫工相對更好更可靠,他參照前面所有的畫自己重新繪製一張,然後連同前面所有的畫一同交給後面的人。

不難看出,ResNet和DenseNet的側重點不太一樣,但大概率應該都比Plain Net畫的更好。

所以,要是綜合ResNet和DenseNet的能力是不是會畫得更好呢?

以上。

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章