ResNet系列及其变体(五)—DenseNet
ResNet系列及其变体(一)—ResNetv1
Resnet系列及其变体(二)—Wider ResNet
Resnet系列及其变体(三)—ResNetv2
ResNet系列及其变体(四)—ResNeXt
ResNet系列及其变体(五)—DenseNet
DenseNet
Residual networks behave like ensembles of relatively shallow networks
指出在ResNet训练过程中,梯度的主要来源是shortcut分支。 DenseNet针对ResNet中的shorcut进行改进。既然shortcut有效,多加点!
DenseNet 的核心思想:对每一层都加一个单独的 shortcut,使得任意两层之间都可以直接相连。
- DenseBlock是包含很多层的模块,每个层的特征图大小相同,层与层之间采用密集连接方式。
- Transition模块是连接两个相邻的DenseBlock,并且通过Pooling使特征图大小降低。BN+ReLU+1x1 Conv+2x2 AvgPooling
DenseNet的优势:
- 由于密集连接方式,DenseNet提升了梯度的反向传播,使得网络更容易训练,减轻了vanishing-gradient。
- 参数更小且计算更高效,由于DenseNet是通过concat特征来实现短路连接,实现了特征重用,更有效地利用了feature。
- 采用较小的growth rate,每个层所独有的特征图是比较小的,一定程度上较少了参数数量。
BN-ReLU-Conv.
k是growth rate,表示每个dense block中每层输出的feature map个数
Result
DenseNet可能耗费很多GPU显存,一种高效的实现如图10所示,更多细节可以见这篇论文Memory-Efficient Implementation of DenseNets。使用Pytorch框架可以自动实现这种优化。