当前位置: 首页 > news >正文

DenseNet:密集连接

源码、配套笔记&讲解视频,点击文末名片获取

1、研究背景和动机
(1)深度学习的发展瓶颈
在 ResNet 之前,研究者普遍认为:网络越深,性能越好。

  • 但实际情况是:随着层数增加,训练会变得越来越困难,出现 梯度消失/梯度爆炸。
    什么是梯度消失?
    在深度网络里,训练是靠 梯度反向传播 来更新参数的。
  • 如果网络很深,梯度在一层一层往回传时,会越来越小,最后前面层几乎收不到有效信号。
  • 这就叫 梯度消失,结果就是:前面层“学不会”,训练停滞。

ResNet 的做法:残差连接
ResNet 给每个模块加了一条“捷径”,让梯度不用走那么多层,可以直接往前传。

  • 好处:缓解了梯度消失,能训练更深的网络。
  • 局限:每个残差单元只有一条“直连”,信息流还是有限的。

(2)DenseNet 的核心思想
[图片]

DenseNet 更激进:每一层都和之前所有层直接相连。

  • 与其让每一层都“重新学习”特征,不如直接把前面所有层的特征都传递给后续层。
  • 这样可以:
    1. 缓解梯度消失 → 因为梯度可以通过“短路径”直接传到前面层。
    2. 鼓励特征复用 → 每一层都能访问到之前所有层的特征,不会浪费计算力去重复学习。
    3. 大幅减少参数量 → 因为不需要在每一层都学习新的特征表示。

(3)直观比喻
DenseNet 就像一个“微信群”:

  • 在 ResNet 中,每个人只转发消息给下一个人(有时候附带一条快捷通道)。
  • 而在 DenseNet 中,群里所有人都能看到之前所有人的消息。
    • 这样一来,信息不会丢失,每个人都能在已有消息的基础上贡献新的信息。

📌 小结
DenseNet 的研究动机在于:

  1. 解决 深度网络训练困难(梯度消失、退化问题)。
  2. 提高 特征复用率,避免重复学习。
  3. 降低 参数冗余和计算成本。

2、DenseNet 的创新点
(1)密集连接(Dense Connectivity)

  • 核心思想:每一层都会接收 之前所有层的输出 作为输入,并把自己的输出传递给之后所有层。
  • 对比 ResNet:ResNet 只是在“输入 + 输出”之间做“残差相加”;而 DenseNet 是“特征拼接”,保留了所有前面层的完整信息。
  • 直观比喻:ResNet 是“帮你加点捷径”;DenseNet 是“把所有前人笔记都放到桌上,你直接翻看”。

(2)高效的特征复用

  • 由于所有层的特征都会被传递和复用,网络不需要在不同层反复学习相同的特征。
  • 这大大减少了 参数冗余。
  • 实验结果:DenseNet 在相同或更少参数的情况下,性能优于 ResNet。

(3)缓解梯度消失,训练更容易

  • DenseNet 的“短路径”让梯度可以直接传递给任意前一层 → 比 ResNet 还要高效。
  • 这使得网络可以 更深更稳定 地训练。

(4)更小的参数量和更高的计算效率

  • 虽然连接很多,但因为每层的 输出通道数(growth rate)较小,整体参数量反而比 ResNet 更低。
  • 效果:DenseNet 在准确率更高的同时,模型规模比 ResNet 小得多。

(5)更强的特征传播与正则化效果

  1. 特征传播更强
  • 在普通 CNN 里,每一层只看到“上一层”的输出,所以特征更新比较单一。
  • 在 DenseNet 中,每一层都能直接访问所有之前层的特征:
    • 既能用到低层的 局部特征(边缘、纹理);
    • 也能用到高层的 抽象特征(形状、语义)。
  • 这种特征的充分融合,让表示能力更强。
    👉 比喻:普通 CNN 好像“盲人摸象”,每层只能摸到前一部分;DenseNet 是“信息共享”,大家把摸到的都汇报出来,拼起来就是完整的大象。
    2.内置的正则化效果
  • 由于每层都会接收很多不同来源的特征输入,这种多样化输入减少了模型“过拟合某种特征”的风险。
  • 同时,拼接操作让不同路径的特征强制组合,起到类似 Dropout/正则化 的效果。
  • 这样网络在训练时不会太依赖某个单一特征,更容易学到“普适规律”。
    👉 比喻:普通 CNN 像一个学生只看一本参考书,容易偏科;DenseNet 像学生有几十本参考书,综合学习,不容易走偏。
    3.泛化能力更强
  • 正则化的结果就是 泛化能力提升:DenseNet 在测试集、迁移学习任务上表现更好。
  • 论文里也强调:DenseNet 在参数更少的情况下,依然能取得比 ResNet 更优的准确率,这部分得益于它“内置的正则化机制”。

3、DenseNet 的网络结构
DenseNet 的核心结构主要由 Dense Block(密集块) 和 Transition Layer(过渡层) 两部分交替堆叠而成,最终接分类层。
[图片]

(1)整体架构

  1. 输入层
  • 一般先用一个 7×7 卷积 + 池化层 进行降采样,得到初步的特征图。
  1. Dense Block + Transition Layer 的堆叠
  • 整个网络由若干个 Dense Block 组成。
  • 在两个 Dense Block 之间插入 Transition Layer,用于 降维和降采样。
  1. 分类层
  • 最后接一个 全局平均池化(Global Average Pooling),再接全连接层输出分类结果。

(2)Dense Block(密集块)

  1. 结构单元(Bottleneck Layer)
    Dense Block 里的每一层都是一个 Bottleneck Layer,结构是:
  • BN → ReLU → 1×1 卷积 → BN → ReLU → 3×3 卷积
    • 1×1 卷积:先做降维,把拼接后的“大量特征通道”压缩,减少计算量。
    • 3×3 卷积:再在压缩后的特征上提取新信息。
  • 这样每层都只产生相对少量的 新特征,而不是重新学习一整套特征。
    👉 比喻:1×1 卷积像“过滤器”,把冗余信息压缩掉;3×3 卷积再从中“提炼精华”。

  1. Growth Rate (k) 的作用
  • 在 DenseNet 里,每一层并不是输出完整通道数,而是只增加 k 个新的通道。
  • 所以随着网络加深,总通道数 = 初始通道数 + k × 层数。
  • 常见的 k 值有 12、24、32。
    • 比如 k=32,意味着每一层只增加 32 个新的 feature map。
    • 即使 DenseNet 很深,计算量也不会指数级增长。
      👉 比喻:开会时,每个人只补充几句话(k 条新信息),而不是每次都重新写一本书。最终会议记录很全面,但不臃肿。

(3)Transition Layer(过渡层)

  1. 为什么需要 Transition Layer?
  • 在 Dense Block 里,每一层都会输出新的 k 个特征图,并与之前的特征拼接。
  • 结果就是:层数越多 → 通道数(特征图数量)越大 → 计算量和内存急剧膨胀。
  • 如果不加控制,网络会变得又大又慢,训练和推理都难以进行。
    👉 所以需要 Transition Layer 来“消化一下 Dense Block 吐出的庞大信息”,把特征压缩到合理规模。

  1. Transition Layer 的结构
    Transition Layer 一般由三步组成:
  2. BN(Batch Normalization)
  • 对特征做归一化,保持分布稳定,利于训练收敛。
  • 类似于“数据整理”,避免信息太乱。
  1. 1×1 卷积(通道压缩)
  • 把高维的通道数压缩到更小。
  • 压缩比例由 Compression Rate (θ) 控制。
    • θ=1:不压缩
    • θ=0.5:通道数减半
  • 例如,前一个 Dense Block 输出了 512 个通道,θ=0.5 时,1×1 卷积会把它压缩成 256 个。
    👉 比喻:像是会议记录太厚了,1×1 卷积就像编辑,把重复或冗余的内容删掉,变成一本更精简的摘要。
  1. 2×2 平均池化(空间下采样)
  • 在空间维度上缩小特征图(比如 32×32 → 16×16)。
  • 好处:
    1. 降低计算量(图片变小,卷积更快)
    2. 扩大感受野(能看到更大范围的上下文信息)

(4)分类层

  • Dense Block 堆叠完成后,接 全局平均池化层(把空间特征压缩为 1×1),再接一个全连接层做分类。
  • 不再用传统的全连接层堆叠,减少过拟合。

(5)网络规模举例(DenseNet-121)
[图片]

  • DenseNet 有不同深度的版本,例如 DenseNet-121、169、201、264。
  • 以 DenseNet-121 为例:
    • 初始卷积 + 池化
    • Dense Block (6 层) → Transition
    • Dense Block (12 层) → Transition
    • Dense Block (24 层) → Transition
    • Dense Block (16 层)
    • 全局平均池化 + 全连接分类

4、基于 DenseNet 的后续改进模型
DenseNet 的核心思想是 特征重用(feature reuse)+ 高效梯度传播。虽然它在参数效率和准确率上表现优异,但也存在一些问题:

  • 通道数不断累积,导致特征图存储开销大(内存占用高)。
  • 拼接(concat)方式虽然高效,但在极深网络中依然可能冗余。
  • 在更大规模任务(如检测、分割)中需要更灵活的设计。
    因此,很多后续工作在 DenseNet 基础上提出了改进或变种模型。

  1. CondenseNet(ICCV 2017)
  • 核心改进:提出 learned group convolution(学习型分组卷积),通过稀疏化 + 结构化剪枝来减少通道之间的冗余连接。
  • 动机:DenseNet 的拼接虽然高效,但依然引入了很多冗余特征,CondenseNet 自动学习“哪些连接是必要的”。
  • 效果:在保持精度的情况下,显著减少参数和计算量,更适合移动端/嵌入式设备。

  1. PeleeNet(NeurIPS Workshop 2018)
  • 核心改进:结合 DenseNet 的 Dense Block 和 轻量化设计(类似 MobileNet 的深度可分离卷积)。
  • 动机:将 DenseNet 的高效特征利用和轻量网络结合,用于实时计算机视觉任务。
  • 效果:在移动设备上实现高效推理,广泛用于检测与识别。

  1. DPN (Dual Path Network)(NeurIPS 2017)
  • 核心改进:结合 ResNet 的残差连接 和 DenseNet 的特征拼接。
    • 一部分通道走“相加路径”(残差),实现特征重用。
    • 一部分通道走“拼接路径”(DenseNet),实现特征累积。
  • 动机:ResNet 强调“特征重用”,DenseNet 强调“特征扩展”,DPN 融合两者。
  • 效果:在图像分类和检测上均优于单纯的 ResNet 或 DenseNet。
http://www.dtcms.com/a/409987.html

相关文章:

  • 第一次学习Hardhat
  • 腾讯wordpress 建站自适应网站建设哪家便宜
  • 第八章 MyBatis及MyBatis-Plus
  • 5mins了解redis底层数据结源码
  • 华为云学习笔记(四):运维类服务与企业网站上云实践
  • 面向大模型输出的“耐脏” JSON 处理:从清洗到严格化的完整方案
  • 抢先注册网站域名卖掉英文网站建设服务合同
  • Apache、Nginx 和 Tomcat 的区别
  • 解决avue-input-tree组件重置数据不回显/重置失败
  • 苏州网站建设致宇网页设计制作手机网站
  • Kimi-VL:月之暗面开源的视觉语言模型
  • Buck电路项目实战:从原理到实战全解析
  • 如何读懂Mach-O:构建macOS和iOS应用安全的第一道认知防线
  • 远程录制新体验:Bililive-go与cpolar的无缝协作
  • 购物网站制作样例糖果网站建设策划书模板
  • 百度新闻源网站故乡网站开发的意义
  • PortSwigger靶场之Exploiting server-side parameter pollution in a query string通关秘籍
  • OpenLayers地图交互 -- 章节十三:拖拽旋转交互详解
  • 前端常见安全问题都有哪些以及解决方案
  • 算法专题(三)01背包问题理论
  • pycharm 运行不报错,但是调试报错,
  • 原型模式了解
  • 基于hive和mapreduce的地铁数据分析及可视化_hive作为数据库
  • 使用虚幻引擎(UE5)制作开箱爆金币功能
  • 网站在线考试答题系统怎么做泰兴网页定制
  • 展示型商城订单网站建设网页设计网站方案
  • 【MySQL数据库】InnoDB实现MVCC(多版本并发控制)底层原理
  • 自己做网站推广关键词网站开发和合同
  • 【Qt开发】输入类控件(二)-> QTextEdit
  • 攻克音频顽疾:基于QCC3095/QCC5181/QCC3040实现全域无冲击声的实战分享