博客: 博客园 | 优快云 | blog
写在前面
在博客《ResNet详解与分析》中,我们谈到ResNet不同层之间的信息流通隐含在“和”中,所以从信息流通的角度看并不彻底,相比ResNet,DenseNet最大的不同之处在于,并不对feature map求element-wise addition,而是通过concatenation将feature map拼接在一起,所以DenseNet中的卷积层知道前面每一步卷积发生了什么。
Crucially, in contrast to ResNets, we never combine features summation before they are passed into a layer; instead, we combine features by concatenating them.
同ResNet结构类似,DenseNet也是由多个Dense Block串联而成,如下图所示
Dense Block与Transition Layer
在每个Dense Block内部,每个卷积层可以知道前面所有卷积层输出的feature map是什么,因为它的输入为前面所有卷积层输出的feature map拼接而成,换个角度说,每个卷积层得到的feature map要输出给它后面所有的卷积层。这里说“每个卷积层”并不准确,更准确的说法应该是“每组卷积”,后面将看到,一组卷积是由1个 1 × 1 1\times 1 1×1卷积层和 1个 3 × 3 3\times 3 3×3卷积层堆叠而成,即bottleneck结构。
to ensure maximum information flow between layers in the network, we connect all layers (with matching feature-map sizes) directly with each other. To preserve the feed-forward nature, each layer obtains additional inputs from all preceding layers and passes on its own feature-maps to all subsequent layers.
下面看一个Dense Block的示例,
图中的 x x x为feature map,特别地, x 0 x_0 x0为网络输入, H H H为一组卷积,同Identity Mappings in Deep Residual Networks采用了pre activa