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模型,使用更少的计算实现了更好的效果。


b70cdbbc41f64905f15e08a70b8d6731.png

DenseNet网络结构


58aeb4c73d265889e7c08b766d33b036.png

   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)。


8b75d26cc6197f7b916ee76afa62fa98.png


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),这也有利于训练更深的网络。


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


结论


e2720080bbfd4a8c03accd9b2bc98d7c.png

相关文章
|
5月前
|
机器学习/深度学习 计算机视觉
Inception模型及其实现
【7月更文挑战第26天】Inception模型及其实现。
66 7
|
7月前
|
算法框架/工具
使用MobileNetV3的PSPNet网络结构
使用MobileNetV3的PSPNet网络结构
42 1
|
机器学习/深度学习 数据挖掘 PyTorch
图像分类经典神经网络大总结(AlexNet、VGG 、GoogLeNet 、ResNet、 DenseNet、SENet、ResNeXt )
图像分类经典神经网络大总结(AlexNet、VGG 、GoogLeNet 、ResNet、 DenseNet、SENet、ResNeXt )
6933 1
图像分类经典神经网络大总结(AlexNet、VGG 、GoogLeNet 、ResNet、 DenseNet、SENet、ResNeXt )
|
机器学习/深度学习 PyTorch 测试技术
【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet
【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet
【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet
|
机器学习/深度学习 编解码 PyTorch
DenseNet、MobileNet、DPN…你都掌握了吗?一文总结图像分类必备经典模型(二)
DenseNet、MobileNet、DPN…你都掌握了吗?一文总结图像分类必备经典模型(二)
205 0
|
编解码 数据可视化 计算机视觉
全新池化方法AdaPool | 让ResNet、DenseNet、ResNeXt等在所有下游任务轻松涨点(二)
全新池化方法AdaPool | 让ResNet、DenseNet、ResNeXt等在所有下游任务轻松涨点(二)
285 0
|
机器学习/深度学习 编解码 算法
全新池化方法AdaPool | 让ResNet、DenseNet、ResNeXt等在所有下游任务轻松涨点(一)
全新池化方法AdaPool | 让ResNet、DenseNet、ResNeXt等在所有下游任务轻松涨点(一)
260 0
|
机器学习/深度学习 PyTorch TensorFlow
DenseNet、MobileNet、DPN…你都掌握了吗?一文总结图像分类必备经典模型(三)
DenseNet、MobileNet、DPN…你都掌握了吗?一文总结图像分类必备经典模型
228 0
|
机器学习/深度学习 人工智能 搜索推荐
DenseNet、MobileNet、DPN…你都掌握了吗?一文总结图像分类必备经典模型(四)
DenseNet、MobileNet、DPN…你都掌握了吗?一文总结图像分类必备经典模型
237 0
|
机器学习/深度学习 人工智能 算法
【Pytorch神经网络理论篇】 31 图片分类模型:ResNet模型+DenseNet模型+EffcientNet模型
在深度学习领域中,模型越深意味着拟合能力越强,出现过拟合问题是正常的,训练误差越来越大却是不正常的。
376 0

相关实验场景

更多