Paper : Densely Connected Convolutional Networks
Code : official
摘要
DenseNet将ResNet的shortcut进行进一步的扩展,原版shortcut只跨越1-3个Conv层,而DenseNet允许随意跨越,形成全连接,一图以蔽之
网络结构
Dense Block 结构如下
假设第 l l l层的feature map使用 x l x_l xl来表示,那么递推式如下
x l = H l ( [ x 0 , x 1 . . . x l − 1 ] ) x_l = H_{l}([x_0,x_1...x_{l-1}]) xl=Hl([x0,x1...xl−1])
其中 H l H_l Hl是表示 BN - ReLU - Conv_3*3的叠加。
相比于ResNet,Dense Net并没有使用相加的方式进行shortcut操作,而是使用concatenate操作在通道层将之前各层的feature map的结果连接起来,这也表明对于Dense Net来说每个Conv层的卷积核并不多,网络可以做到非常窄。
如果引入Bottleneck技术,可以进一步提高DenseNet性能,也就是说令 H l H_l Hl表示BN-ReLU-Conv_1*1-BN-ReLU-Conv_3*3,这种DenseNet称为DenseNet-B
为了进一步优化模型的简洁性,可以在过渡层中降低feature map的数量。若一个Dense Block中包含m个feature maps,那么我们使其输出连接的过渡层生成⌊θm⌋个输出feature map。其中θ为压缩比。当θ=1时,过渡层将保留原feature维度不变。作者将使用压缩且θ=0.5的DenseNet命名为DenseNet-C,将使用Bottleneck和压缩且θ=0.5的DenseNet命名为DenseNet-BC。
DenseNet-BC的整体网络结构如下
核心观点
- 提出了Dense Block模块, 缓解了消失梯度问题,加强了特征传播,鼓励特征重用,并大大减少了参数的数量
- 隐性深度监督,可以很明显的看出随机深度对Dense Net的影响,大大加深了可训练网络的最大深度