1. DenseNet 简介

DenseNet 网络结构中, 每一网络层均直接与每个其它网络层相连, 以 feed-forward 方式(在每个 dense block 内).

对于每一层, 其前面所有网络层输出的 feature maps 均独立作为该网络层的输入, 并将该网络层输出的 feature maps 作为其后面所有网络层的输入.

在 ILSVRC2012 ImageNet 数据集上, DenseNet 与 ResNet 能够得到相似的 accuracy, 但是, 参数量不到后者的一半, FLOPS 也只是近似于后者的一半.

b2253101b47eda8144b1677b62739446.png

DenseNet 特点:

[1] - 省参数, 在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半. 对于工业界而言,小模型可以显著地节省带宽,降低存储开销.

[2] - 省计算, 达到与 ResNet 相当的精度,DenseNet 所需的计算量也只有 ResNet 的一半左右.

[3] - 抗过拟合, 具有非常好的抗过拟合性能,尤其适合于训练数据相对匮乏的应用.

2. 基于 DenseNet 的相关项目

3. DenseNet-memory-efficient-Caffe

早期版本 DenseNet 训练时内存占用比较大, 密集连接的实现算法不优导致的.

特点:

采用 O(T) 的数据空间, 其中 T 为 DenseBlock 中的变换数量.

对于 totalLayer L=40, growthRate k=12 的简单模型, 每个 DenseBlock 的变换数量 T = 12.

对比而言, 原来的实现需要的数据空间为 O(T^2).

对于 L=40,k=12 的简单模型, 该内存优化Caffe实现, 能够达到 6 iters/second(without dropout), GPU 显存占用不到 2 GB.

3.1 使用方法

新增了 DenseBlock 层. 代替了原来的 Concat 层.caffe 下载与编译

cuDNN 版本高于6.0 编译出错. 确保版本正确.

下载对应版本的 Caffe 后, 需要 将该 caffe 文件路径内所有文件的 Caffe_solverOriginal/caffe 路径替换为自己的caffe路径.

可以采用命令行操作, 也可以采用 Visual Studio Code 等编辑器全部替换对应的路径.

完成后, 运行 shell 脚本:

然后编译:

编译无误后, 所有的工具直接都在当前版本 caffe 的 tools 路径内 - caffe/tools.

完成 caffe 环境安装.

Reference

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐