转自 :https://blog.csdn.net/weixin_33895475/article/details/87586912
python进阶教程
机器学习
深度学习
长按二维码关注
与 ResNet 和 Pre-Activation ResNet 相比,DenseNet 具有较少的参数和较高的精度。
在Standard ConvNet中,输入图像经过多次卷积,得到高层次特征。
ResNet Concept
在ResNet中,提出了恒等映射(identity mapping)来促进梯度传播,同时使用使用 element 级的加法。它可以看作是将状态从一个ResNet 模块传递到另一个ResNet 模块的算法。
One Dense Block in DenseNet
在 DenseNet 中,每个层从前面的所有层获得额外的输入,并将自己的特征映射传递到后续的所有层,使用级联方式,每一层都在接受来自前几层的“集体知识(collective knowledge)”。
1. 基础 DenseNet 组成层
对于每个组成层使用 Pre-Activation Batch Norm (BN) 和 ReLU,然后用k通道的输出特征映射进行 3×3 卷积,例如,将x0、x1、x2、x3转换为x4。这是 Pre-Activation ResNet 的想法。
2.DenseNet-B (Bottleneck 层)
DenseNet-B
由于后面层的输入会非常大,DenseBlock内部可以采用bottleneck层来减少计算量,主要是原有的结构中增加1x1 Conv,即BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv,称为DenseNet-B结构。其中1x1 Conv得到4k个特征图它起到的作用是降低特征数量,从而提升计算效率。
3. 具有转换层(transition layer)的多Dense块
Multiple Dense Blocks
采用1×1 Conv和2×2平均池化作为相邻 dense block 之间的转换层。
特征映射大小在 dense block 中是相同的,因此它们可以很容易地连接在一起。
在最后一个 dense block 的末尾,执行一个全局平均池化,然后附加一个Softmax分类器。
4. DenseNet-BC (进一步压缩)
如果 Dense Block 包含m个特征映射,则转换层(transition layer)生成 输出特征映射,其中 称为压缩因子。
当时,跨转换层的特征映射数保持不变。在实验中,的 DenseNet 称为 DenseNet-C,默认。
当同时使用 bottleneck 和 时的转换层时,该模型称为 DenseNet-BC 模型。
最后,训练 with/without B/C 和不同L层和k生长速率的 DenseNet。
DenseNet的优势
1. 强梯度流
误差信号可以更直接地传播到早期的层中。这是一种隐含的深度监督,因为早期的层可以从最终的分类层直接获得监督。
2. 参数和计算效率
RestNet 和 DenseNet 的参数数量
对于每个层,RetNet 中的参数与成正比,而 DenseNet 中的参数与成正比。由于, 所以 DenseNet 比 ResNet 的size更小。
3. 更加多样化的特征
DenseNet中更加多样化的特征
由于 DenseNet 中的每一层都接收前面的所有层作为输入,因此特征更加多样化,并且倾向于有更丰富的模式。
4. 保持低复杂度特征
标准ConvNet
在标准ConvNet中,分类器使用最复杂的特征。
DenseNet
在 DenseNet 中,分类器使用所有复杂级别的特征。它倾向于给出更平滑的决策边界。它还解释了为什么 DenseNet 在训练数据不足时表现良好。
特征复用的进一步分析
Heat map on the average absolute weights of how Target layer (l) reuses the source layer (s)
从非常早期的层中提取的特征被同一 Dense Block 中的较深层直接使用。
转换层的权重也分布在前面的所有层中。
第二和第三dense block内的各层一贯地将最小权重分配给转换层的输出。(第一行)
在最终分类层,权重似乎集中在最终feature map上。一些更高级的特性在网络中产生得很晚。
论文链接https://arxiv.org/pdf/1608.06993.pdf
参考链接https://towardsdatascience.com/review-densenet-image-classification-b6631a8ef803
Github链接https://github.com/liuzhuang13/DenseNet