DenseNet 论文学习笔记
论文笔记
DenseNet
今日研读了作者Zhuang Liu的论文DenseNet,下面是学习的一些笔记
如有错误可在评论区中提出~
论文地址:https://arxiv.org/pdf/1608.06993.pdf
Introduction
密集连接网络,对于每一层,输入来自前面网络的所有特征。
随着网络层数的不断加深,对网络的训练方式也在不断改善,LeNet5,VGG,HighwayNet,ResNet
ResNet
ResNet(residual neural Network)改进了传统卷积神经网络的前馈传播方式,使得神经网络不再是直接连接上一层的输出到下一层的输入。通过skip-connection的连接方式将每一层的输出与输入使用identity function求和,一同传入下一层。
这个做法使得梯度可直接从后层流入前层。但是也存在着缺陷,identity function求和的做法可能存在信息的丢失,阻碍信息在整个网络中的传播。
Dense connectivity
DenseNet引入了Dense conncetivity的概念,将前面所有层的输出在网络宽度维度上直接拼接,作为特征输入到后层中,这有利于信息的重用,并且不会导致信息丢失,增强了特征信息在网络中的流动。(可看上图理解连接方式)
Composite function
论文中定义H()函数为Composite function,且有三个连续的操作组成:
- BN
- ReLU
- Conv3x3
Transition layers
通过降采改变特征的大小,连接Dense Block的层叫做Transition layers(转接层),由三部分组成:
- BN
- conv 1x1
- average pool 2x2
Growth rate K
增长率K是网络的超参数,控制网络宽度。
通过K可计算出第l层的输入特征个数:K0 + K(l -1),其中K为输入的深度
这是个经验值,需要通过大量的实验去调整来适应不同的数据集
Bottleneck layers(DenseNet-B)
瓶颈层,即使DenseNet每层只产生K个特征,但是这仍然存在大量的输入,有论文中提到在Conv3x3卷积层前加入Conv1x1卷积层能减少特征的数量,从而加快计算的效率。
- BN
- ReLU
- Conv1x1 : 4k
- BN
- ReLU
- Conv3x3
Compression
为了减少特征,可对特征进行压缩。如果密集层输出m个特征,则使转阶层输出θ*m个特征。(0 < θ <= 1)
- θ = 1,特征不改变
- θ < 1,DenseNet-C
- 当使用了Bottleneck + Compression,此时的网络为 DenseNet-BC
Implementation Details
Pytorch 实现
Github:等有时间再来更新代码~