DenseNet, Densely Connected Convolutional Networks, CVPR 2017 (Best Paper Award)

DenseNet-Torch - Github
DenseNet-Caffe - Github
DenseNet-memory-efficient-Caffe - Github
DenseNet-memory-efficient-Pytorch - Github

1. DenseNet 简介

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

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

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

DenseNet 特点:

[1] - 省参数, 在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半. 对于工业界而言,小模型可以显著地节省带宽,降低存储开销.
[2] - 省计算, 达到与 ResNet 相当的精度,DenseNet 所需的计算量也只有 ResNet 的一半左右.
[3] - 抗过拟合, 具有非常好的抗过拟合性能,尤其适合于训练数据相对匮乏的应用.

2. 基于 DenseNet 的相关项目

[1] - Multi-Scale Dense Convolutional Networks for Efficient Prediction
[2] - DSOD: Learning Deeply Supervised Object Detectors from Scratch
[3] - CondenseNet: An Efficient DenseNet using Learned Group Convolutions
[4] - Fully Convolutional DenseNets for Semantic Segmentation
[5] - Pelee: A Real-Time Object Detection System on Mobile Devices

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 编译出错. 确保版本正确.

DN_CaffeScript-master/caffe/include/caffe/util/cudnn.hpp(112): error: too few arguments in function call
git clone --recursive https://github.com/Tongcheng/caffe.git

下载对应版本的 Caffe 后, 需要 将该 caffe 文件路径内所有文件的 Caffe_solverOriginal/caffe 路径替换为自己的caffe路径.
可以采用命令行操作, 也可以采用 Visual Studio Code 等编辑器全部替换对应的路径.

完成后, 运行 shell 脚本:

./removeCmakeDep.sh

然后编译:

cmake .
make all 

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

完成 caffe 环境安装.

Reference

[1] - CVPR 2017最佳论文作者解读:DenseNet 的“what”、“why”和“how”

Last modification:October 9th, 2018 at 09:31 am