继往开来:DenseNet

DenseNet

ResNet通过前层与后层的“短路连接”(Shortcuts),加强了前后层之间的信息流通,在一定程度上缓解了梯度消失的现象,从而可以将神经网络搭建得很深。DenseNet最大化了这种前后层信息交流,通过建立前面所有层与后面层的密集连接,实现了特征在通道维度上的复用,使其可以再参数计算量最少的情况下实现比ResNet更优的性能
DenseNet的网络架构如下图所示,网络由多个Dense Block与中间的卷积池化组成,核心就在Dense Block中。Dense Block中的黑点代表一个卷积层,其中的多条黑色线代表数据的流动,每一层的输入由前面的所有卷积层输出组成。注意这里使用了通道的拼接(Concatnate)操作,而非ResNet的逐元素相加操作
继往开来:DenseNet
DenseNet的结构有如下两个特效:

  • 神经网络一般需要使用池化等操作缩小特征图尺寸来提取语义特征,而Dense Block需要保持每一个Block内的特征图尺寸一致来进行Concatnate 操作,因此DenseNet被分成了多个Block。Block的数量一般为4
  • 两个相邻的Dense Block之间的部分被称为Transition层,具体包括BN、ReLU、1×1卷积、2×2平均池化操作。1×1卷积的作用是降维,起到压缩模型的作用,而平均池化则是降低特征图的尺寸

Block实现细节如下图所示,每个Block由若干个Bottleneck的卷积层组成,对应上图中的黑点。Bottleneck由BN、ReLU、1×1卷积、BN、ReLU、3×3卷积的顺序构成
继往开来:DenseNet

关于Block,有以下4个细节需要注意:

  • 每一个Bottleneck输出的特征通道数是相同的,例如这里的32。同时可以看到,经过Concatnate操作后的通道数是按32的增长量增加的,因此这个32也被称为GrowthRate
  • 这里1×1卷积的作用是固定输出通道,达到降维的作用。当几十个Bottleneck相连接时,Concatnate后的通道数会增加到上千,如果不增加1×1的卷积来降维,后续3×3卷积所需的参数量会急剧增加。1×1卷积的通道数通常是GrowthRate的4倍
  • 上图中的特征传递方式是直接将前面所有层的特征Concatnate后传到下一层,这种方式与具体代码实现的方式是一致的,而不想第一张图中,前面层都要一个剪头指向后面的所有层
  • Block采用了激活函数在前、卷积层在后的顺序,这与一般的网络是不同的
上一篇:为什么目前感觉大多数论文还是以resnet为主干网络而不是densenet?


下一篇:ORC发电的那点事