2017年CVPR最佳论文,改进了ResNet,降低了模型的复杂度,进一步减少了梯度消散的问题。
- ResNet存在的问题:
a. 文中提到在ResNet中,由于shortcut操作时与卷积的结果使用的是相加方式,并且只与未通过卷积层的数据相连,导致在许多贡献不多的层中,实际上一个又一个的模块就是在重复的,这些层在训练中都是可以被丢弃的,但由于每一层都有他自己的参数,导致模型非常的大。 - DenseNet做出的改进:
a. 使用了Concat方式,连接了更多的层,使得参数更少,效率更高。
b. 这样的连接方式提高了特征的复用性,提高了整个网络中信息和梯度的流量,使得整个网络的训练更加简单。
c. 增加了正则效果,减轻了过拟合。
d. 文中的两个公式就能很清楚的表现两个结构的差别,第一个公式是ResNet的结构,第二个公式是DenseNet的结构: - DenseNet的核心模块
a. Dense connectivity:每一层就是上文提到的那个公式,,其中每层的连接使用的方法为拼接而非相加,用图来表示如下: - b. Composite function:每个H()包含了三个操作,BN,ReLU,Conv
c. Growth rate:指的是在设计网络是,特征图数量的递增速度,和ResNet不同,DenseNet网络相对比较窄,其实这个k值就是每个卷积层的通道数。
d. Bottleneck layers:虽然每层的通道数不多,但是我们每次会将前面的所有结果进行拼接,所以每一个block里较后的层数的通道数仍然会非常大,所以在每次做33卷积之前,对拼接后的结果进行一次11的卷积,使它的通道数变为固定的4k
e. Compression:在每一个block后,我们实际使用的是所有层拼接的结果,而不是简单的最后一层卷积结果,所以我们在添加一层1*1卷积,降低通道数。
f. 文中给出的用于ImageNet数据集的结构,k=32: - 网络性能比较
- 可以看到在相近的参数数量下,DenseNet的准确率明显优于ResNet