DenseNet,全称为Densely Connected Convolutional Networks(密集连接的卷积网络),是CVPR 2017的最佳论文之一,由Gao Huang、Zhuang Liu等人提出。DenseNet通过特征重用和旁路(Bypass)设置,既大幅度减少了网络的参数量,又在一定程度上缓解了梯度消失问题。
论文网址:Densely Connected Convolutional Networks
一、设计理念
DenseNet的设计初衷是为了解决深层网络中的梯度消失和模型退化问题。与ResNet(通过短路连接)和GoogleNet(通过增加网络宽度)不同,ResNet是每个层与前面的某层(一般是2~3层)短路连接在一起,连接方式是通过元素级相加。而DenseNet从特征的角度出发,通过密集连接机制来极致利用训练过程中的所有特征,进而达到更好的效果和减少参数。
密集链接机制(Dense Connection Mechanism)是DenseNet(密集连接的卷积网络)的核心设计思想。这一机制通过在网络中引入密集块(Dense Block),使得每个层都与前面所有层直接连接,从而增强了特征重用和梯度流动,提高了模型的性能和泛化能力。
二、网络结构
DenseNet的网络结构主要由Dense Block和Transition Layer两个部分组成:
Dense Block:
Dense Block是DenseNet的核心模块,包含多个层(也称为Bottleneck Layer),每个层的特征图大小相同,层与层之间采用密集连接方式。即每一层的输入都来自于它前面所有层的特征图,每一层的输出均会直接连接到它后面所有层的输入。
这种密集连接机制使得DenseNet能够更有效地利用特征信息,提升网络性能。同时,由于特征图大小保持一致,可以在通道维度上进行拼接。
Dense Block中通常使用BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv的结构,其中1x1卷积用于降低输入特征图的数量,减少计算量。在某些情况下,还会使用Bottleneck Layer来进一步减少计算量。
Transition Layer:
Transition Layer位于两个Dense Block之间,主要用于整合上一个Dense Block获得的特征,并降低特征图的大小。它通常包括一个1x1卷积(用于调整通道数)和一个2x2平均池化(用于降低特征图大小)。
Transition Layer可以起到压缩模型的作用,防止模型参数过多导致过拟合。
不同Layers(层)的DenseNet
三、优势
- 更少的参数和计算量:由于DenseNet采用了密集连接机制,使得每一层的输入都包含了前面所有层的特征,因此可以在保证性能的同时减少参数数量和计算量。
从图中可以看出,两种网络在同等误差率时,DenseNet-BC比Resnet有更低的参数和计算量
2. 更强的特征传递:密集连接使得特征图和梯度的传递更加有效,有助于解决梯度消失问题,同时使得网络更易于训练。
3. 隐式的深度监督:由于DenseNet的每一层都可以直达最后的误差信号,因此实现了隐式的深度监督,有助于提升网络性能。
4. 特征重用:DenseNet通过密集连接机制实现了特征重用,提高了特征的利用率。