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

一、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的出现

img

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

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

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

深度网络中的冗余问题

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

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

跨层特征重叠:

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

缺乏功能重用:

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

对计算效率的影响:

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

特征冗余示例

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

DenseNet如何解决特征冗余

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

密度连接:工作原理

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

2.功能重用:

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

3.高效的信息流:

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

4.减少参数计数:

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

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

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

场景:

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

在标准CNN中:

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

在DenseNet中:

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

DenseNet解决的问题

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

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

DenseNet的架构

img

致密块

img

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

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

一个例子详细解释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的变体

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

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

DenseNet优点

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

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

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可能不适合实时应用,例如边缘设备或低延迟任务。

在这里插入图片描述

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

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐