zoukankan      html  css  js  c++  java
  • DenseNet模型解读

    导言:

        传统的卷积网络在一个前向过程中每层只有一个连接,ResNet增加了残差连接从而增加了信息从一层到下一层的流动。FractalNets重复组合几个有不同卷积块数量的并行层序列,增加名义上的深度,却保持着网络前向传播短的路径。相类似的操作还有Stochastic depth和Highway Networks等。

        这些模型都显示一个共有的特征,缩短前面层与后面层的路径,其主要的目的都是为了增加不同层之间的信息流动。DenseNet基于此提出了一种新的连接模式--Dense connections。

        传统L层的网络仅有L个连接,在DenseNet中使用了L(L+1)/2个连接。这样做有几个明显的优点:避免了梯度消失问题,加强了特征传播,实现特征复用(feature reuse),以及实质上减少了参数量。

    DenseNet在CIFAR-10, CIFAR-100, SVHN, 和ImageNet上超过了大部分的SOTA模型,使用更少的计算实现了更好的效果。

    DenseNet网络结构

        DenseNet使用Dense connections构成三个Dense Block,再通过几层卷积和池化。其中Dense Block中的Dense connections是通过concat实现的。

        在ResNet中,残差连接的识别函数为Xi = Hi (Xi-1) +Xi-1,这里i指层数。而DenseNet中的识别函数为 Xi = Hi( [X0, X1, X2... Xi-1] )。(注:一个输入经过卷积,BN,激活函数,得到输出,这个过程可认为是一个识别函数Hi)

        考虑到是使用Concat连接,若每个Block层数和通道数太多,将导致Block巨大,这里Block中每层的通道数都比较小(在本文中通道数用K表示,k取12,24,40)。这里K也表示growth rate。如每个识别函数产生k个通道,则第i层将有k0 + k x( i-1)个输入通道。

        在DenseNet中,Block的结构是BN + ReLU +3x3Conv。而在DenseNet-B中使用了Bottleneck, Block的结构是BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv,在1x1处降维以减少参数。在DenseNet-C中为了使得模型更小,使用了一个超参数θ,对于通道数为k的block,其通道数在DenseNet-C中变为θk, θ取0.5。(注:DenseNet中是没有使用Bottleneck和超参数θ的,对于同时使用Bottleneck和θ的模型成为DenseNet-BC)。

        DenseNet在ImageNet上的结构如上所示,这里的Block都是BN+ReLU+3x3Conv结构。

    实现细节

        除了用于ImageNet数据集的模型有四个Dense Block,其他都只有三个,在第一个dense block前有16通道输出、3x3卷积核大小的卷积层用于处理输入图片,(DenseNet-BC是32通道),每层卷积都使用了1个像素的padding以保持输出大小不变,在两个Dense blocks之间使用1x1卷积和2x2平均池化作为Transition Layer,在最后一个Dense blocks后使用全局平均池化,以及softmax分类器。

        三个Dense blocks的feature map大小分别是32x32, 16x16, 8x8。对于一般的DenseNet,有三种结构配置:{L=40, k=12},{L=100, k=12},{L=100, k=24}。而对于DenseNet-BC结构,使用如下三种网络配置:{L=100, k=12},{L=250, k=24},{L=190, k=40}。这里L指的是模型的总层数,不是dense block的层数。(注:BN,pooling,ReLU都是不计入层数中的)。

        图像输入大小为:224x224。

    DenseNet理论依据

        Dense connections使得前几层的信息在后面层中可以直接获得,信息得到很好的保留,增加了不同层之间的信息流动以及梯度传播,这使得模型更加容易训练。这种在每一层都使用前面所有层的信息的方式,称之为特征复用(feature reuse),其他论文里出现这个feature reuse。

        每一层都可以直接获得来源于Loss function的梯度和输入信号(这里指的直接来源于Loss function的梯度其实指的是dense block,而不是DenseNet),从而实现了隐式的深监督(Implicit Deep Supervision),这也有利于训练更深的网络。

        此外,它还有正则化效果,这使得它可以使用更小的模型尺寸,而不会出现过拟合。

    结论

        这里C10表示CIFAR-10数据集。

    DenseNet与ResNet在ImageNet上的实验对比,明显可知DenseNet效果更好。

    若有错误或疑问,欢迎留言指出。


    本文来源于微信公众号“ CV技术指南 ” 。更多内容与最新技术动态尽在公众号发布。

    欢迎扫描下方二维码关注公众号“CV技术指南”,主要进行计算机视觉方向的论文解读,最新技术跟踪,以及CV技术的总结。

    原创文章第一时间在公众号中更新,博客只在有空时间才更新少量公众号文章

  • 相关阅读:
    关于冥想
    Read Later
    你追求的跟我相反
    UML for Java Programmers之dx实战
    20140525
    面试基础-语言基础篇
    面试基础-linux操作系统篇
    面试基础-数据库篇
    面试基础-计算机网络篇
    Eclipse同时编译多个cpp文件
  • 原文地址:https://www.cnblogs.com/wxkang/p/14128430.html
Copyright © 2011-2022 走看看