DenseNet的结构示意图:
DenseNet的连接方式更加粗暴:相互连接所有的层,每个层都会连接前面所有层作为额外的输入。
DenseNet网络的优点包括:
- 减轻了梯度消失
- 加强了feature的传递
- 更有效地利用了feature
- 一定程度上较少了参数数量
- 一定程度上减轻了过拟合
下图是ResNet的连接方式:每个层与前面的某层shortcut元素级相加
下图是Dense的连接方式:每一层都与前面所有层concat在一起(各个层的特征图大小是一致的)。对于L层的网络,DenseNet共包含L(L+1)/2个连接,相比ResNet,这是非常密集的连接。使用concat可以起到特征重用的效果,提升效率,这是DenseNet和ResNet的主要区别
DenseNet的前向传播过程如下图所示:
特征图保持大小一致的问题
使用DenseBlock + Transition的结构;
- DenseBlock是包含很多层的模块,每个特征图的大小相同;
- Transition模块是连接两个相邻的DenseBlock,并通过Pooling降低特征图大小
该层包含一个1*1conv和2*2的avgpooling,结构为BN+ReLU+1x1 Conv+2x2 AvgPooling
网络实现细节问题
上图中的Convolution采用BN+Relu+3*3Conv的结构,注意:各个层卷积之后均输出k个特征图,k称为growth rate,是一个超参数;一般情况下使用较小的k(如12),既能得到很好的性能。所有的3*3卷积都采用padding=1的方式保证特征图大小不变
例如:假设输入层的channel数为k0,则L层输入channel数为k0+k(l-1)
对于层数较多,则后面层的输入会非常大的问题
- DenseBlock内部可以采用bottleneck层来减少计算量,主要通过添加1*1conv,同时也就得再添加BN和Relu,这称为DenseNet-B结构
- Transition中也可以压缩通道数, Transition层可以产生?? 个特征,其中θ?(0,1]称为压缩系数,对于使用bottleneck层的Denseblock结构和压缩系数小于1的Transition组合结构称为DenseNet-BC
结果
imageNet结构配置
图片来自:https://blog.youkuaiyun.com/xiaohu2022/article/details/85560788