DenseNet

DenseNet是一种创新的深度学习网络结构,它通过密集连接的模块解决了深层网络的梯度消失问题,增强了特征传播并减少了参数数量。DenseNet-B和DenseNet-BC通过加入瓶颈层和压缩率进一步优化了模型,实验证明其在ImageNet数据集上优于ResNet。

转载自:https://blog.youkuaiyun.com/qq_14845119/article/details/79272082

DenseNet优势:
(1)解决了深层网络的梯度消失问题
(2)加强了特征的传播
(3)鼓励特征重用
(4)减少了模型参数

DenseNet的网络基本结构如上图所示,主要包含DenseBlock和transition layer两个组成模块。其中Dense Block为稠密连接的highway的模块,transition layer为相邻2个Dense Block中的那部分。


上图是一个详细的Dense Block模块,其中层数为5,即具有5个BN+Relu+Conv(3*3)这样的layer,网络增长率为4,简单的说就是每一个layer输出的feature map的维度为4。
这里,由于DenseNet的每一个Dense Block模块都利用到了该模块中前面所有层的信息,即每一个layer都和前面的layer有highway的稠密连接。假设一个具有L层的网络,那么highway稠密连接数目为L*(L+1)/2。
和Resnet不同的是,这里的连接方式得到的feature map做的是concat操作,而resnet中做的是elementwise操作。
其中ResNet的非线性变换方程如下:

DensNet的非线性变换方程如下:

highway的稠密连接方式具有诸多的优势,增加了梯度的传递,特征得到了重用,甚至减少了在小样本数据上的过拟合。但是随之产生2个缺点。

(1)   这里假设第L层输出K个feature map,即网络增长率为K,那么第L层的输入为K0+K*(L-1),其中K0为输入层的维度。也就是说,对于Dense Block模块中每一层layer的输入feature map时随着层数递增的,每次递增为K,即网络增长率。那么这样随着Dense Block模块深度的加深,后面的输入feature map的维度是很大的。为了解决这个问题,在Dense Block模块中加入了Bottleneck 单元,即1*1卷积进行降维,输出维度都被降到4K维(K为增长率)。

(2)   每一个DenseBlock模块的输出维度是很大的,假设一个L层的Dense Block模块,假设其中已经加入了Bottleneck 单元,那么输出的维度为,第1层的维度+第2层的维度+第3层的维度+******第L层的维度,加了Bottleneck单元后每层的输出维度为4K,那么最终Dense Block模块的输出维度为4K*L。随着层数L的增加,最终输出的feature map的维度也是一个很大的数。为了解决这个问题,在transition layer模块中加入了1*1卷积做降维。

 

 

文章同时提出了DenseNet,DenseNet-B,DenseNet-BC,三种结构,具体区别如下:

原始DenseNet:

Dense Block模块:BN+Relu+Conv(3*3)+dropout

transition layer模块:BN+Relu+Conv(1*1)(filternum:m)+dropout+Pooling(2*2)

DenseNet-B:

Dense Block模块:BN+Relu+Conv(1*1)(filternum:4K)+dropout+BN+Relu+Conv(3*3)+dropout

transition layer模块:BN+Relu+Conv(1*1)(filternum:m)+dropout+Pooling(2*2)

DenseNet-BC:

Dense Block模块:BN+Relu+Conv(1*1)(filternum:4K)+dropout+BN+Relu+Conv(3*3)+dropout

transition layer模块:BN+Relu+Conv(1*1)(filternum:θm,其中0<θ<1,文章取θ=0.5)+dropout+Pooling(2*2)

其中,DenseNet-B在原始DenseNet的基础上,在Dense Block模块中加入了1*1卷积,使得将每一个layer输入的feature map都降为到4k的维度,大大的减少了计算量。

DenseNet-BC在DenseNet-B的基础上,在transitionlayer模块中加入了压缩率θ参数,论文中将θ设置为0.5,这样通过1*1卷积,将上一个Dense Block模块的输出feature map维度减少一半。

 

DenseNet-BC的网络结构参数如下,其中网络增长率K=32,conv 代表BN-ReLU-Conv


在ImageNet上DenseNet-BC和ResNet对比如下

可以看出,DenseNet-BC比ResNet参数量要少,运算量也少,准确性高。

 

 

References:

https://github.com/liuzhuang13/DenseNet

https://github.com/liuzhuang13/DenseNetCaffe
--------------------- 
作者:watersink 
来源:优快云 
原文:https://blog.youkuaiyun.com/qq_14845119/article/details/79272082 
版权声明:本文为博主原创文章,转载请附上博文链接!

DenseNetDense Convolutional Network,密集连接卷积网络)是深度学习领域的重要模型,为解决卷积神经网络(CNN)随着网络深度增加带来的梯度消失、特征传播受阻等问题提供了新方法 [^3]。 ### DenseNet介绍 DenseNet由Gao Huang等人提出,是基于“密集连接”的神经网络架构。其基本思路与ResNet一致,但建立了前面所有层与后面层的密集连接,名称也由此而来。该模型另一大特色是通过特征在channel上的连接实现特征重用,这让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能 [^2][^4]。 DenseNet系列有多个版本,以DenseNet - 121为例,它是较为轻量化的版本,网络中有121层(不包括输入层和输出层),计算上更为高效,适合快速实验和部署。其网络分为4个密集块,每个块的层数分别为 [6, 12, 24, 16]。每个密集块之后有一个过渡层,通常包含一个1x1卷积层和一个池化层,用于降低特征图的空间尺寸。DenseNet的设计目标是减少参数数量,同时保持高效的特征重用,通过密集连接实现,每个层只需要少量的参数 [^4]。 ### DenseNet原理 DenseNet的核心原理是密集连接,即每个层都直接与所有前面的层相连接,每一层的输入是前面所有层的输出在通道维度上的拼接。这样的连接方式使得网络可以更有效地传递梯度,减少梯度消失的风险。同时,特征重用机制让网络能够充分利用前面层学习到的特征,避免了重复学习,从而在减少参数数量的情况下提升性能 [^2][^4]。 ### DenseNet应用 虽然未给出具体应用案例,但在实际中,DenseNet凭借其优势在图像分类、目标检测、语义分割等计算机视觉任务中得到广泛应用。例如在图像分类任务中,它能以较少的参数和计算成本达到较好的分类效果;在目标检测和语义分割任务中,其特征重用和高效的特征传播能力有助于更准确地识别和分割目标。 ```python # 以下是使用PyTorch调用DenseNet-121的简单示例 import torch import torchvision.models as models # 加载预训练的DenseNet-121模型 model = models.densenet121(pretrained=True) # 定义输入数据(示例) input_tensor = torch.randn(1, 3, 224, 224) # 前向传播 output = model(input_tensor) print(output.shape) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值