【经典神经网络架构解析篇】【7】DenseNet网络详解:模型结构解析、创新点、代码实现

embedded/2025/1/21 5:54:58/

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统】
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统】38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统】
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统】40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统】
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统】42.【基于YOLOv8深度学习的无人机视角地面物体检测系统】
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统】44.【基于YOLOv8深度学习的野外火焰烟雾检测系统】
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统】46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统】48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】64.【基于深度学习的水下海生物检测识别系统】
65.【基于深度学习的道路交通事故检测识别系统】66.【基于深度学习的安检X光危险品检测与识别系统】
67.【基于深度学习的农作物类别检测与识别系统】68.【基于深度学习的危险驾驶行为检测识别系统】
69.【基于深度学习的维修工具检测识别系统】70.【基于深度学习的维修工具检测识别系统】
71.【基于深度学习的建筑墙面损伤检测系统】72.【基于深度学习的煤矿传送带异物检测系统】
73.【基于深度学习的老鼠智能检测系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

  • DenseNet的出现
  • 深度网络中的冗余问题
    • 在特征图中冗余是如何产生的
    • 特征冗余示例
  • DenseNet如何解决特征冗余
    • 密度连接:工作原理
  • DenseNet 与标准CNN对比(附示例)
    • 场景:
    • 在标准CNN中:
    • DenseNet中:
  • DenseNet解决的问题
  • DenseNet的架构
    • 致密块
  • 一个例子详细解释DenseNet
  • 1.输入图像
  • 2.卷积层
  • 3.致密块
  • 4.过渡层
  • 5.全局平均池化
  • 6.全连接层
  • 7. Softmax层
  • DenseNet的变体
  • DenseNet优点
  • DenseNet的缺点
  • 1.高内存使用
  • 2.计算开销
  • 3.缩放问题
  • 4.执行难
  • 5.参数冗余
  • 6.推理时间

DenseNet_60">DenseNet的出现

img

深度学习中,卷积神经网络(CNN)是许多基于视觉的任务的基石。然而,随着网络的深入,研究人员面临着两个重大挑战:

  1. 消失的梯度: 当梯度通过更深的层反向传播时,它们会减少,使网络难以训练。
  2. 特征映射中的冗余: 深度网络中的许多层学习重复的特征,导致计算和内存使用效率低下。

为了克服这些挑战,高晃等人在**《密集连接卷积网络》**(2017)论文中引入了DenseNet(密集卷积网络)。DenseNet提出了一种连接层的新方法,显著改善了梯度流,减少了冗余,增强了特征重用。

深度网络中的冗余问题

在传统的深度卷积神经网络(CNN)中,如VGG或ResNet,每一层都从前一层的输出中接收输入。每一层的输出是一组特征图-表示学习到的特征(例如,边缘、纹理或更抽象的图案)。

在特征图中冗余是如何产生的

跨层特征重叠:

  • 每一层都倾向于学习那些稍微修改过或重复过的早期层的特征。
  • 这是因为层被训练成顺序处理信息,而不直接知道其他层已经学习了什么。

缺乏功能重用:

  • 在标准CNN中,早期学习的特征(来自初始层)不会直接被更深层重用。相反,更深的层试图从头开始学习更高级别的模式。
  • 这种方法导致学习冗余或重叠的特征,特别是当较深层不能有效地从较浅层传播有用信息时。

对计算效率的影响:

  • 这种冗余增加了网络的内存和计算需求。执行许多不必要的操作来重复学习类似的信息。

特征冗余示例

想象一下,一个CNN在前几层学习边缘检测。虽然后面的层需要这些边来构造复杂的图案(如曲线或纹理),但它们通常会重新学习这些与边相关的图案,而不是重用现有的图案。

DenseNet_99">DenseNet如何解决特征冗余

DenseNet引入了密集连接,以解决冗余特征学习导致的效率低下问题。其核心思想是通过密集块中每对层之间的直接连接在所有层上重用功能

密度连接:工作原理

  1. 层连接:
  • 每个层接收来自同一块中所有前面层的输入。
  • 该层不是独立地生成新的特征图,而是沿着通道维度连接所有先前层的输出。

2.功能重用:

  • 先前层的输出(特征)由所有后续层重用。
  • 这确保了每一层都建立在已经学习的特征之上,而不是重新学习冗余的模式。

3.高效的信息流:

  • 密集连接确保梯度在反向传播过程中平滑流动,缓解梯度消失问题并提高训练稳定性。

4.减少参数计数:

  • 由于特征被重用,网络可以用更少的参数实现高精度。不需要增加冗余过滤器的数量来学习重叠的特征。

DenseNet_CNN_123">DenseNet 与标准CNN对比(附示例)

让我们用一个例子来比较传统的CNN和DenseNet

场景:

  • 输入:28×28×3大小的图像
  • 4层致密块体,增长速率k=32

在标准CNN中:

  1. 每一层都根据前一层的输出独立地学习新的特征。
  2. 每一层的输出有k=32个通道,因此经过4层后,总通道数= 32+ 32 + 32+32=128。
  3. 这些信道中的许多信道可能包含重叠的信息,从而导致冗余。

DenseNet_138">在DenseNet中:

  1. 层1学习特征并输出k=32个通道。
  2. 第2层接收第1层的原始输入和输出。它只学习新的功能,并输出32个以上的通道。
  3. 到了第4层,特征图的总数= 32×4=128,但这些图是由所有层中学习到的独特特征组成的。
  4. 功能的重用避免了更深层重新学习模式的需要,确保了有效的学习。

DenseNet_145">DenseNet解决的问题

DenseNet解决了ResNet等早期架构中存在的关键问题:

梯度消失问题: 在传统的卷积神经网络(如VGG或ResNet)中,随着网络层数的增加,梯度消失或梯度爆炸问题变得更为严重。DenseNet通过其独特的连接方式有效地缓解了这一问题。
参数效率: 在传统的网络结构中,每一层都只能访问到前面层的输出,这可能导致信息的浪费和重复计算。DenseNet通过让每一层都直接连接到前面所有层,提高了参数的利用效率。
特征重用: 在传统的网络中,每一层产生的特征可能只被后面的一层使用。DenseNet通过将所有层的特征都连接起来,使得后面的层可以重用前面所有层的特征,这有助于提取更丰富的信息。

DenseNet_153">DenseNet的架构

img

致密块

img

DenseNet架构基于一系列密集块,每个块包含多个卷积层。每个密集块将前一个块的输出作为输入,以及所有前一个块的输出。这在网络的所有层之间创建了密集的连接模式,允许信息更有效地通过网络流动。

DenseNet架构背后的核心思想是,每一层产生的特征图可以连接起来,形成下一层的输入。这意味着每一层的输出是所有后续层的输入。DenseNet还在每个密集块之间使用过渡层减少空间维度特征映射的数量

DenseNet_165">一个例子详细解释DenseNet

让我们用简单的术语一步一步步地分解**DenseNet,**并使用一个详细的例子来进行说明,使其易于理解。

1.输入图像

网络的输入是一个尺寸为(H,W,C)的图像。这里,H是高度,W是宽度,C是通道数。

  • 示例
    假设我们有一个28x28的RGB图像。尺寸为**(28,28,3)**,其中3代表红色、绿色和蓝色通道。

2.卷积层

第一层应用具有小滤波器的标准卷积(例如,3x3)来检测边缘或角落等简单特征。

  • 示例如下:
    我们使用3x3卷积和16个滤波器。输出将具有尺寸**(28,28,16)**。
  • 输入尺寸:28x28x3
  • 卷积16个特征图(通道)
  • 输出尺寸:28x28x16。

3.致密块

在一个密集块中,每一层都从前面的所有层获取输入。这意味着每一层的输出都被连接(堆叠)并传递到下一层。这有助于重用特征并学习更好的表示。

  • 示例
    假设我们在一个密集块中有3层,每层增加4个新的特征图(称为增长率= 4)。它的工作原理如下:
  • 第1层:输入→ 28x28x16 →添加4个新特征图→输出= 28x28x20
  • 第2层:输入(连接所有以前的输出:16 + 4 = 20通道)→添加4个新的特征图→输出= 28x28x24
  • 第3层:输入(20 + 4 = 24通道)→添加4个新特征图→输出= 28x28x28
  • 密集块的最终输出:28x28x28。

4.过渡层

在每个密集块之后,过渡层减小特征图的大小以节省计算。它包括:

  • 批次标准化:标准化稳定性激活。
  • 1x1卷积:减少特征映射的数量。
  • 2x2平均池:减少特征图的空间大小(高度和宽度)。
  • 示例如下:
    来自密集块的输入:28x28x28
  • 1x1卷积将通道减少到16→输出= 28x28x16。
  • 2x2平均池大小减半→输出=14x14x16

5.全局平均池化

全局平均池化不是将特征图扁平化,而是计算整个空间维度上每个特征图的平均值。这导致每个通道只有一个数字。

  • 示例如下:
    输入:14x14x16→对于16个通道中的每个通道,取所有14x14值的平均值。
  • 输出:大小为16的向量

6.全连接层

来自全局平均池化层的输出向量通过全连接层。该层学习用于分类的特征的组合。

  • 示例如下:
    输入:大小为16的向量→全连接层通过ReLU激活将其大小减少到256
  • 输出:256维特征向量

7. Softmax层

最后一层应用softmax函数,输出每个类别的概率。具有最高概率的类是预测输出。

  • 示例如下:
    假设我们正在对手写数字进行分类(10类)。
    输入:256维特征向量→ Softmax层产生10个概率(每个数字一个)。
  • 输出示例:[0.01,0.05,0.02,0.80,0.02,0.05,0.03,0.01,0.00,0.01]
  • 该模型预测类别3(概率为0.80)。

DenseNet_222">DenseNet的变体

DenseNet有几种针对不同任务的变体:

  1. **DenseNet-121、DenseNet-169、DenseNet-201、DenseNet-264:**这些是不同层数的变体,以网络中的总层数命名。
  2. DenseNet-BC: DenseNet的紧凑版本,包括瓶颈层和压缩,以进一步降低计算成本。

DenseNet_229">DenseNet优点

改进的信息流: 由于每一层都与前面所有层连接,网络中的信息流更加直接和丰富,有助于提高训练效率。
减少参数数量: DenseNet通过特征重用减少了网络的参数数量,这不仅可以减少模型的内存需求,还可以减少过拟合的风险。
增强特征的传递: 由于每一层都能直接获得前面所有层的特征,这有助于网络更有效地学习到复杂的特征表示。
易于训练: DenseNet的结构有助于梯度的反向传播,使得网络更加容易训练。
减少计算量: 尽管每一层都与前面所有层连接,但由于使用了较小的卷积核和较少的滤波器数量,DenseNet实际上减少了总的计算量。

DenseNet的结构通过其“稠密连接”(dense connectivity)的特性,即每一层都与前面所有层在输入上相连,输出则直接作为后面所有层的输入,实现了上述优点。这种设计使得DenseNet在许多图像识别任务中表现出色,同时保持了模型的简洁性和高效性。

DenseNet_239">DenseNet的缺点

1.高内存使用

  • 原因DenseNet连接所有先前层的输出。随着网络的深入,特征图的数量会迅速增加,从而导致高内存消耗
  • 影响:这使得DenseNet在GPU内存有限的系统上训练更具挑战性。
  • 范例
    在密集块中,如果每层输出32个声道,则4层之后的声道总数将为32+ 32+32+32 = 128。随着网络的深化,增长变得显著。

2.计算开销

  • 原因:特征映射的串联增加了每个层的输入大小。这会导致更高的计算成本,特别是对于更深的网络。
  • 影响:与ResNet等使用求和而不是级联的架构相比,DenseNet的训练速度可能会更慢。

3.缩放问题

  • 原因:虽然DenseNet适用于中小型数据集,但对于非常大的数据集或非常深的架构,它的可扩展性很差。不断增加的特征图可能会使模型变得不切实际。
  • 影响:在大规模数据集(如ImageNet)上训练DenseNet需要仔细的内存管理和调优。

4.执行难

  • 原因:跨层的特征映射的连接增加了模型实现的复杂性。
  • 影响:与VGG或ResNet等更简单的架构相比,实施DenseNet对开发人员来说更具挑战性。它需要仔细跟踪输入/输出维度和有效的连接。

5.参数冗余

  • 原因:尽管DenseNet减少了学习特征中的冗余,但密集的连接仍然会导致许多参数。连接的数量与深度成二次方增长。
  • 影响:这可能导致效率低下,特别是当更简单的模型可以实现相当的性能时。

6.推理时间

  • 原因:在推理过程中,串联操作可能会减慢向前传递的速度,增加预测的延迟。
  • 影响DenseNet可能不适合实时应用,例如边缘设备或低延迟任务。

在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!


http://www.ppmy.cn/embedded/155688.html

相关文章

3.3 OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南

OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南 OpenAI 的 GPT 系列语言模型,包括 GPT-4、GPT-3.5 和 GPT-3,已经成为自然语言处理领域的标杆。无论是文本生成、对话系统,还是自动化任务,开发者都可以通过 API 调用这些强大的模型来增强他们的应用。本文将为您详细介…

Models如何使用Gorm与数据库进行交互?

Gorm是Models与MySQL数据库连接的中间体(Models是通过Gorm与数据库连接起来的) Golang的代码解析成SQL语句,把查到的数据解析成GOlang的数据结构 GORM 是什么? GORM 是一个 Go 语言的 ORM(对象关系映射)库…

零基础入门uniapp Vue3组合式API版本

前言:小程序学习笔记,课程来源up主咸虾米_。仅记录笔记,大家想学习可以去关注他。 1.已安装HBuider X(目前是4.36版本),微信开发者工具(但还没注册小程序码),相关配置OK…

应用“懒加载“模式,优化@Transactional事务性能(LazyConnectionDataSourceProxy 原理解析)

背景 在项目开发中,使用 Transactional 注解来管理事务非常方便,且优雅。但是也存在一个问题:长事务问题 很多被 Transactional 标记的方法,实际上并不需要进行数据库操作,或者说,它们在执行的很长一段时间…

WPS数据分析000004

目录 一、表格阅读技巧 冻结窗格 拆分窗口 新建窗口 阅读模式 护眼模式 二、表格打印技巧 打印预览 打印缩放 打印区域 打印标题 分页打印 打印位置 页眉页脚 逐份打印 三、表格保护技巧 锁定单元格 隐藏公式 文档权限 文件加密 一、表格阅读技巧 冻结窗…

C 语言的void*到底是什么?

一、void* 的类型任意性 void* 是一种通用指针类型。它可以指向任意类型的数据。例如,它可以指向一个整数(int)、一个浮点数(float)、一个字符(char)或者一个结构体等。在C语言中,当…

Qt 5.14.2 学习记录 —— 십삼 QComboBox、QSpinBox、QDateTimeEdit、QDial、QSlider

文章目录 1、QComboBox2、QSpinBox3、QDateTimeEdit4、QDial5、QSlider 1、QComboBox 下拉框 信号 写程序来查看各个功能 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->comboBox->addItem("麦辣鸡腿堡")…

Golang笔记——常用库reflect和unsafe

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Go的常用库reflect和unsafe。 文章目录 reflect1. 反射的基本概念2. 主要类型reflect.Type 类型reflect.Value 类型 3. 获取类型和操作值获取类型…