ResNet可以训练出更深的CNN模型,从而实现更高的准确度。 ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”,这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。 然而当CNN的层数变深时,输出到输入的路径就会变得更长,这就会出现一个问题: 梯度经过这么长的路径反向传播回输入的时候很可能就会消失,那有没有一种方法可以让网络又深梯度又不会消失? 答案就是稠密连接网络(DenseNet) 它的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接,它的名称也是由此而来。 DenseNet的另一大特色是通过特征在channel上的连接来实现特征重用,在保证网络中层与层之间最大程度的信息传输的前提下,直接将所有层连接起来。 如上图所示,ResNet和DenseNet的关键区别在于,DenseNet输出是连接(用图中的[,]表示)而不是如ResNet的简单相加。 因此,在应用越来越复杂的函数序列后,我们执行从x到其展开式的映射: x→[x,f1(x),f2([x,f1(x)]),f3([x,f1(x),f2([x,f 1(x)])]),…]. 最后,将这些展开式结合到多层感知机中,再次减少特征的数量。 所有的层的输入都来源于前面所有层在channel维度的concat
稠密网络主要由2部分构成:稠密块(dense block)和过渡层(transition layer)。 前者定义如何连接输入和输出,而后者则控制通道数量,使其不会太复杂。 每个Dense Block内部的feature map的大小相同。 而每个Dense Block之间使用一个Transition模块来进行下采样过渡连接。
DenseNet可以说是一种隐式的强监督模式,因为每一层都建立起了与前面层的连接,误差信号可以很容易地传播到较早的层,所以较早的层可以从最终分类层获得直接监管,同时,DenseNet保存了低维度的特征,在DenseNet中,它使用了不同层次的特征,它倾向于给出更平滑的决策边界。这也解释了为什么训练数据不足时DenseNet表现依旧良好。
【DenseNet模型】
DenseNet首先使用同ResNet一样的单卷积层和最大汇聚层。 接下来,类似于ResNet使用的4个残差块,DenseNet使用的是4个稠密块。 与ResNet类似,我们可以设置每个稠密块使用多少个卷积层。 在每个模块之间,ResNet通过步幅为2的残差块减小高和宽,DenseNet则使用过渡层来减半高和宽,并减半通道数。 与ResNet类似,最后接上全局汇聚层和全连接层来输出结果。
小结
- 在跨层连接上,不同于ResNet中将输入与输出相加,稠密连接网络(DenseNet)在通道维上连结输入与输出。
- DenseNet的主要构建模块是稠密块和过渡层。
- 在构建DenseNet时,我们需要通过添加过渡层来控制网络的维数,从而再次减少通道的数量。
|