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
<h2>1. DenseNet 简介</h2>
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] - 抗过拟合, 具有非常好的抗过拟合性能,尤其适合于训练数据相对匮乏的应用.
<h2>2. 基于 DenseNet 的相关项目</h2>
[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
<h2>3. DenseNet-memory-efficient-Caffe</h2>
早期版本 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.
<h3>3.1 使用方法</h3>
新增了 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 环境安装.
<h2>Reference</h2>