Densely CNN
《Densely Connected Convolutional Networks》閱讀筆記
代碼地址:https://github.com/liuzhuang13/DenseNet
首先看一張圖:
稠密連接:每層以之前層的輸出為輸入,對于有L層的傳統網絡,一共有L個連接,對于DenseNet,則有L(L+1)2。
這篇論文主要參考了Highway Networks,Residual Networks (ResNets)以及GoogLeNet,通過加深網絡結構,提升分類結果。加深網絡結構首先需要解決的是梯度消失問題,解決方案是:盡量縮短前層和后層之間的連接。比如上圖中,H4層可以直接用到原始輸入信息X0,同時還用到了之前層對X0處理后的信息,這樣能夠最大化信息的流動。反向傳播過程中,X0的梯度信息包含了損失函數直接對X0的導數,有利于梯度傳播。
DenseNet有如下優點:
1.有效解決梯度消失問題
2.強化特征傳播
3.支持特征重用
4.大幅度減少參數數量
接著說下論文中一直提到的Identity function:
很簡單 就是輸出等于輸入f(x)=x
傳統的前饋網絡結構可以看成處理網絡狀態(特征圖?)的算法,狀態從層之間傳遞,每個層從之前層讀入狀態,然后寫入之后層,可能會改變狀態,也會保持傳遞不變的信息。ResNet是通過Identity transformations來明確傳遞這種不變信息。
網絡結構:
每層實現了一組非線性變換Hl(.),可以是Batch Normalization (BN) ,rectified linear units (ReLU) , Pooling , or Convolution (Conv). 第l層的輸出為xl。
對于ResNet:
xl=Hl(xl?1)+xl?1
這樣做的好處是the gradient flows directly through the identity function from later layers to the earlier layers.
同時呢,由于identity function 和 H的輸出通過相加的方式結合,會妨礙信息在整個網絡的傳播。
受GooLeNet的啟發,DenseNet通過串聯的方式結合:
xl=Hl([x0,x1,...,xl?1])
這里Hl(.)是一個Composite function,是三個操作的組合:BN?>ReLU?>Conv(3×3)
由于串聯操作要求特征圖x0,x1,...,xl?1大小一致,而Pooling操作會改變特征圖的大小,又不可或缺,于是就有了上圖中的分塊想法,其實這個想法類似于VGG模型中的“卷積棧”的做法。論文中稱每個塊為DenseBlock。每個DenseBlock的之間層稱為transition layers,由BN?>Conv(1×1)?>averagePooling(2×2)組成。
Growth rate:由于每個層的輸入是所有之前層輸出的連接,因此每個層的輸出不需要像傳統網絡一樣多。這里Hl(.)的輸出的特征圖的數量都為k,k即為Growth Rate,用來控制網絡的“寬度”(特征圖的通道數).比如說第l層有k(l?1)+k0的輸入特征圖,k0是輸入圖片的通道數。
雖然說每個層只產生k個輸出,但是后面層的輸入依然會很多,因此引入了Bottleneck layers 。本質上是引入1x1的卷積層來減少輸入的數量,Hl的具體表示如下
BN?>ReLU?>Conv(1×1)?>BN?>ReLU?>Conv(3×3)
文中將帶有Bottleneck layers的網絡結構稱為DenseNet-B。
除了在DenseBlock內部減少特征圖的數量,還可以在transition layers中來進一步Compression。如果一個DenseNet有m個特征圖的輸出,則transition layer產生 ?θm?個輸出,其中0<θ≤1。對于含有該操作的網絡結構稱為DenseNet-C。
同時包含Bottleneck layer和Compression的網絡結構為DenseNet-BC。
具體的網絡結構:
實驗以及一些結論
在CIFAR和SVHN上的分類結果(錯誤率):
L表示網絡深度,k為增長率。藍色字體表示最優結果,+表示對原數據庫進行data augmentation??梢园l現DenseNet相比ResNet可以取得更低的錯誤率,并且使用了更少的參數。
接著看一組對比圖:
前兩組描述分類錯誤率與參數量的對比,從第二幅可以看出,在取得相同分類精度的情況下,DenseNet-BC比ResNet少了23的參數。第三幅圖描述含有10M參數的1001層的ResNet與只有0.8M的100層的DenseNet的訓練曲線圖。可以發現ResNet可以收斂到更小的loss值,但是最終的test error與DenseNet相差無幾。再次說明了DenseNet參數效率(Parameter Efficiency)很高!
同樣的在ImageNet上的分類結果:
右圖使用FLOPS來說明計算量。通過比較ResNet-50,DenseNet-201,ResNet-101,說明計算量方面,DenseNet結果更好。
總結
以上是生活随笔為你收集整理的Densely CNN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8工具来优化你的图像
- 下一篇: 总结一些生物成像的 开源图像与插件网站