1. 程式人生 > >《2017-Dual Path Networks》論文解讀

《2017-Dual Path Networks》論文解讀

動機

  • 以前方法的不足
    • ResNet: 側重於特徵的再利用,但不善於發掘新的特徵;
    • DenseNet: 側重於新特徵的發掘,但又會產生很多冗餘;

優點

  • 關於模型複雜度,作者的原文是這麼說的:The DPN-92 costs about 15% fewer parameters than ResNeXt-101 (32 4d), while the DPN-98 costs about 26% fewer parameters than ResNeXt-101 (64 4d).

  • 關於計算複雜度,作者的原文是這麼說的:DPN-92 consumes about 19% less FLOPs than ResNeXt-101(32 4d), and the DPN-98 consumes about 25% less FLOPs than ResNeXt-101(64 4d).

方法

  • ResNet和DenseNet是近幾年兩種比較熱門的網路結構,ResNet把輸入直接加到(element-wise adding)卷積的輸出上,DenseNet則把每一層的輸出都拼接(concatenate)到了其後每一層的輸入上。在這篇論文中作者用High Order RNN結構(HORNN)把DenseNet和ResNet聯絡到了一起,證明了DenseNet能從靠前的層級中提取到新的特徵,而ResNet本質上是對之前層級中已提取特徵的複用。

  • 為了綜合二者的優點,作者設計了DPN網路,其數學形式如下

    img

顯然,式(5)表示DenseNet的形式,側重於發掘新特徵;式(6)表示ResNet的形式,側重於特徵的再利用;式(7)表示二者結合。

網路結構

這裡寫圖片描述

  • 因為DPN演算法簡單講就是將ResNeXt和DenseNet融合成一個網路,因此在介紹DPN的每個stage裡面的結構之前,先簡單過一下ResNet(ResNeXt和ResNet的子結構在巨集觀上是一樣的)和DenseNet的核心內容。下圖中的(a)是ResNet的某個stage中的一部分。(a)的左邊豎著的大矩形框表示輸入輸出內容,對一個輸入x,分兩條線走,一條線還是x本身,另一條線是x經過1x1卷積,3x3卷積,1x1卷積(這三個卷積層的組合又稱作bottleneck),然後把這兩條線的輸出做一個element-wise addition,也就是對應值相加,就是(a)中的加號,得到的結果又變成下一個同樣模組的輸入,幾個這樣的模組組合在一起就成了一個stage(比如Table1中的conv3)。(b)表示DenseNet的核心內容。(b)的左邊豎著的多邊形框表示輸入輸出內容,對輸入x,只走一條線,那就是經過幾層卷積後和x做一個通道的合併(cancat),得到的結果又成了下一個小模組的輸入,這樣每一個小模組的輸入都在不斷累加,舉個例子:第二個小模組的輸入包含第一個小模組的輸出和第一個小模組的輸入,以此類推。

這裡寫圖片描述

  • DPN是怎麼做呢?簡單講就是將Residual Network 和 Densely Connected Network融合在一起。下圖中的(d)和(e)是一個意思,所以就按(e)來講吧。(e)中豎著的矩形框和多邊形框的含義和前面一樣。具體在程式碼中,對於一個輸入x(分兩種情況:一種是如果x是整個網路第一個卷積層的輸出或者某個stage的輸出,會對x做一個卷積,然後做slice,也就是將輸出按照channel分成兩部分:data_o1和data_o2,可以理解為(e)中豎著的矩形框和多邊形框;另一種是在stage內部的某個sub-stage的輸出,輸出本身就包含兩部分:data_o1和data_o2),走兩條線,一條線是保持data_o1和data_o2本身,和ResNet類似;另一條線是對x做1x1卷積,3x3卷積,1x1卷積,然後再做slice得到兩部分c1和c2,最後c1和data_o1做相加(element-wise addition)得到sum,類似ResNet中的操作;c2和data_o2做通道合併(concat)得到dense(這樣下一層就可以得到這一層的輸出和這一層的輸入),也就是最後返回兩個值:sum和dense。以上這個過程就是DPN中 一個stage中的一個sub-stage。有兩個細節,一個是3*3的卷積採用的是group操作,類似ResNeXt,另一個是在每個sub-stage的首尾都會對dense部分做一個通道的加寬操作。

這裡寫圖片描述

實驗結果:

  • Table2是在ImageNet-1k資料集上和目前最好的幾個演算法的對比:ResNet,ResNeXt,DenseNet。可以看出在模型大小,GFLOP和準確率方面DPN網路都更勝一籌。不過在這個對比中好像DenseNet的表現不如DenseNet那篇論文介紹的那麼喜人,可能是因為DenseNet的需要更多的訓練技巧。

這裡寫圖片描述

  • Figure3是關於訓練速度和儲存空間的對比。現在對於模型的改進,可能準確率方面的提升已經很難作為明顯的創新點,因為幅度都不大,因此大部分還是在模型大小和計算複雜度上優化,同時只要準確率還能提高一點就算進步了。

這裡寫圖片描述

  • 作者的最後提到一個如果在測試階段,在網路結構後面加上mean-max pooling 層可以提高準確率,如下圖

這裡寫圖片描述

總結

  • 作者提出的DPN網路可以理解為在ResNeXt的基礎上引入了DenseNet的核心內容,使得模型對特徵的利用更加充分。原理方面並不難理解,而且在跑程式碼過程中也比較容易訓練,同時文章中的實驗也表明模型在分類和檢測的資料集上都有不錯的效果。