DenseNet

DenseNet作为2017年CVPR最佳论文,提出了一种新的网络连接方式DenseConnection,该方式通过concatenation实现了特征重用,提高了模型效率并减少了参数数量。DenseNet在ResNet的基础上进行了改进,通过在每个Layer之间加入shorterconnection,增强了图像信息及梯度在网络中的传递,从而简化了训练过程。实验表明,DenseNet在多个数据集上表现优秀,参数数量较少,具有较强的抗过拟合能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:https://arxiv.org/abs/1608.06993

DenseNet原版代码:https://github.com/liuzhuang13/DenseNet

创新点:DenseNet作为2017CVPR最佳论文,其在ResNet基础上,提出了更优秀的shortcut方式,Dense Connection 不仅能使得feature更加强健,还能带来更快的收敛速度。并且DenseNet具有比ResNet更少的参数,在测试时具有更快的速度

1、简介

在传统的ResNet中,layer与layer之间具有L个connection,DenseNet在ResNet的shorter connection的基础上,在每个Layer之间均加入shorter connection,共包含 L(L+1)2 L ( L + 1 ) 2 个连接。如下图1所示。
不同于ResNet,DenseNet采用concatenation的方式进行特征图的叠加,而ResNet采用相加的方式进行叠加。
DenseNet 特征重用,使得denseNet更容易去训练,具有更高的效率。
这里写图片描述

图1,5layers dense block

DenseNet需要更少的参数,
作者指出,最近对ResNet的研究表明,ResNet的很多层在训练的过程中贡献较小,甚至可以随机的丢弃一些层,并且ResNet的参数量较大,说明ResNet其实寻找一定的冗余性,基于此,作者提出设计DenseNet,DenseNet网络中的每一层都直接与其前面层相连,实现特征的重复利用;同时把网络的每一层设计得特别窄,即只学习非常少的特征图,达到降低冗余性的目的。

  • DenseNet改善了图像信息以及梯度在网络中的传递,使得训练更加容易。
  • Dense Connection具有正则化效果,可以降低小训练集上的过拟合。

2、DenseNet

Dense Connectivity

Resnet: xl=Hl(xl1)+xl1 x l = H l ( x l − 1 ) + x l − 1
DenseNet: xl=Hl([x0,x1,...,xl1]) x l = H l ( [ x 0 , x 1 , . . . , x l − 1 ] )

composite function

BN-ReLU-Conv(3*3)

pooling layers

当特征图大小发生变化时候,便无法进行特征图的concatenation操作,因此DenseNet采用block结构,block结构之间设计为BN-Conv(1*1)-Average Pooling(2*2),可利用Conv(1*1)进行模型压缩。
结构如下图所示:

这里写图片描述

Growth rate
由于DenseNet采用的是concatenation的连接方式,如果每层产生k个feature maps,则将会产生 k(l1)+k0 k ∗ ( l − 1 ) + k 0 个特征图,为了防止网络变得很宽,k需要被限制为一个较小的数,作者将k称作growth rate。

bottleneck layers
同样为了降低网络的宽度,DenseNet同样利用1*1卷积进行降维,Dense Block被设计为:
DenseNet-B结构:BN-ReLU-Conv(1*1)-BN-ReLU-Conv(3*3)

Compression
在block之间,可以利用卷积进行模型维度压缩,在本文实验中,作者设置压缩比例为0.5。

模型详细描述如下:
这里写图片描述

4.实验

作者首先在CIFAR SVHN ImageNet进行分类实验。

CIFAR 与 SVHN
实验结果如下图所示:

  • 实验表明,在Accuracy中,DenseNet表现非常好,DenseNet-BC(L=190 and k=40)在多个数据集中均具有最好的表现,并且通过实验可以发现,随着DenseNet模型容量的增加,模型的精度有提升。
  • 通过实验可以看出,DenseNet的参数数量较少,说明DenseNet模型参数具有更高的有效性。
  • DenseNet不容易过拟合

这里写图片描述

ImageNet

如下图为ResNet与DenseNet在ImageNet上的实验对比图,作者采用近乎相同的参数配置进行实验,从实验结果如下,左图是在不同的parameters下的实验结果,右图为不同flops下实验的结果。对比可见,DenseNet的优越性。

这里写图片描述

还有一个自然而然的问题就是,这么多的密集连接,是不是全部都是必要的,有没有可能去掉一些也不会影响网络的性能?论文里面有一个热力图(heatmap),直观上刻画了各个连接的强度。从图中可以观察到网络中比较靠后的层确实也会用到非常浅层的特征。

这里写图片描述

### DenseNet 深度学习 神经网络 架构 特点 DenseNet 是一种新型的卷积神经网络架构,在任意两层之间(只要它们有相同的特征图尺寸),存在直接连接。这种设计允许信息在整个网络中更有效地流动,从而解决了传统深层网络中的梯度消失问题并提高了训练效率[^1]。 #### 密集连接特性 在网络内部,每一层不仅接收来自前一层的数据作为输入,还接受之前所有层输出的拼接(concatenation)形式数据作为附加输入。这一机制极大地促进了特征传播和再利用,减少了冗余特征的学习过程,进而提升了整体性能表现[^2]。 #### 防止过拟合的能力 尽管增加了大量的参数量以及加深了网络层数,由于其独特的连通方式,DenseNet 并未表现出明显的过拟合倾向。相反,增加更多的层次反而有助于提高预测准确性,这表明该模型具备良好的泛化能力。 ### 实现方法 为了构建一个基于 PyTorch 的 DenseNet 模型实例: ```python import torch.nn as nn from torchvision import models class CustomDenseNet(nn.Module): def __init__(self, num_classes=1000): super(CustomDenseNet, self).__init__() self.densenet = models.densenet121(pretrained=True) # 修改全连接层以适应特定任务所需的类别数量 in_features = self.densenet.classifier.in_features self.densenet.classifier = nn.Linear(in_features, num_classes) def forward(self, x): return self.densenet(x) ``` 此代码片段展示了如何通过继承 `nn.Module` 类创建自定义的 DenseNet 模型,并修改预训练好的 DenseNet121 中的最后一层线性变换来匹配目标任务所涉及的不同类别的数目[^3]。 ### 优化策略 对于想要进一步改善 DenseNet 表现的研究者来说,可以考虑以下几个方面来进行调优工作: - **调整超参数**:尝试不同的批量大小(batch size),迭代次数(epochs),初始权重初始化方案等。 - **改变学习率调度器设置**:采用动态调整学习速率的方法如 CosineAnnealingLR 或 ReduceLROnPlateau 来帮助收敛更快更好。 - **探索其他正则化技术**:除了现有的 dropout 和 L2 正则项外,还可以实验诸如标签平滑(label smoothing)之类的高级技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值