神经网络-DenseNet
DenseNet(密集连接卷积神经网络,Densely Connected Convolutional Networks)是一种深度卷积神经网络结构,由 Gao Huang 等人于 2017 年提出。它的基本思路与 ResNet(残差网络)一致,但 DenseNet 通过建立前面所有层与后面层的密集连接来实现更高效的特征传递和重用。
-
DenseNet 的主要创新点如下:
密集连接:在 DenseNet 中,每一层都从前面的所有层获取输入,形成了大量的连接。与传统卷积神经网络相比,DenseNet 中的连接数量要多很多。这种密集连接有助于加强特征传递和重用,提高网络的性能。
减轻梯度消失:由于密集连接的存在,梯度在反向传播过程中能够更好地传递,从而缓解了梯度消失问题。这有助于提高模型的训练效果和收敛速度。
特征重用:DenseNet 通过级联(Concatenation)方式将各层的特征映射传递给后续层,使得后续层可以利用前面层的特征。这有助于提高网络的泛化能力,同时减少了参数数量。
结构紧凑:DenseNet 网络由多个密集块(Dense Block)组成,每个密集块内部包含多个层。这种结构使得网络在保持较高性能的同时,具有较少的参数和计算量。
-
DenseNet 的基本组成单元包括:
批量归一化(Batch Normalization,BN):将每个特征映射除以一个 batch 内的均值,再乘以一个归一化参数,有助于加速网络的训练过程。
激活函数(ReLU):使用 Rectified Linear Unit(ReLU)作为激活函数,可以提高梯度传播的效率,加快网络的收敛速度。
3x3 卷积核:DenseNet 中的卷积层采用 3x3 的卷积核,能够在一定程度上降低特征图的维度,减少计算量。
过渡层(Transition Layer):在相邻的密集块之间,DenseNet 采用了 1x1 卷积和 2x2 平均池化操作,以降低特征图的维度和尺寸。这有助于网络在训练过程中更高效地利用计算资源。
瓶颈层(Bottleneck Layers):在 DenseNet-B(Bottleneck)版本中,网络在 BN-ReLu-33 卷积之前增加了 BN-ReLu-11 卷积操作,以减少特征图的尺寸。这有助于提高网络的性能和稳定性。
总之,DenseNet 通过密集连接、梯度消失的缓解、特征重用和紧凑的结构等创新点,实现了在较少参数的情况下获得良好性能的目标。在许多计算机视觉任务中,DenseNet 都取得了显著的成果,成为深度学习领域的经典网络之一。
Introduction
卷积神经网络(CNN)是一种机器学习算法,广泛应用于图像和视觉物体识别领域。在过去的20多年中,CNN发展迅速,网络的深度不断增加,从最初的5层到现在已经超过100层。然而,随着网络层数的增加,信息在多个层之间传递时可能会消失,导致识别效果下降。为此,近几年研究者提出了一些解决方案。
其中,ResNets (残差网络)和Highway Networks通过跨越层之间的“跳跃连接”来解决信息消失问题。Stochastic depth则通过在训练过程中随机忽略部分层来缩短网络深度,以获得更好的信息和梯度流动。FractalNets则通过组合多个具有不同卷积块数量的并行层序列来构建更深的网络,同时保持许多短路径。
总之,这些方法都旨在创建从早期层到后续层的短路径,以保持信息和梯度的良好流动,并提高网络的性能。这些算法的发展对于深度学习模型的训练和优化具有重要意义,也在一定程度上推动了人工智能领域的发展。
在这篇论文中,作者提出了一种名为DenseNet的新型卷积神经网络结构,以解决传统网络中信息流动不畅的问题。DenseNet的核心思想是在网络的每一层之间建立直接连接,从而保证最大化层与层之间的信息传递。
具体而言,DenseNet中的每一层与所有前面的层直接相连,并从它们那里获得额外的输入。为了保持正向传递的性质,每层还将自己的特征图传递给所有后续的层。这种密集的连接模式可以有效地促进信息和梯度的流动,避免信息在深层网络中丢失。相比之下,传统的网络结构通常只有局部连接或者通过汇总操作将特征图进行合并。具体如下如所示:
根据上图,每一层都直接连接到前面所有的层,并从它们那里获得额外的输入。每层还将自己的特征图传递给所有后续的层,从而实现信息和梯度的全面传递,避免信息在深层网络中丢失。相比传统的局部连接或者汇总操作,这种密集连接模式可以更有效地提取特征信息。
在ResNet这样的卷积神经网络中,许多层对最终的结果贡献较小,甚至可以在训练过程中随机丢弃一些层而不会对性能产生显著影响。这使得ResNet的状态更类似于循环神经网络(RNN),其中每一层都依赖于前一层的输出。
相比之下,DenseNet的架构将网络中的信息和需要保留的信息明确地区分开来。DenseNet的每一层都比较窄,例如每层只有12个滤波器,仅向网络中的“共同知识”中添加一小组特征图,并保持其他特征图不变。这意味着每一层都对网络的整体特征有所贡献,并且最终的分类器是基于网络中所有特征图的综合决策。
换句话说,ResNet中的每一层都有自己的权重,导致参数数量很大,而DenseNet通过共享特征图和限制每层的宽度,减少了参数数量。这种设计使得DenseNet能够更有效地利用计算资源,并且更好地保留和传递特征信息。
DenseNets
ResNets:传统前馈神经网络中,利用L-1的输出作为L层的输入,其中Hl表示Batch Normalization、ReLU、Conv等操作,公式如下:
在ResNets中添加了一个跳跃连接,使用恒等函数绕过非线性变换,如下所示:
在ResNet中,跳过连接使用求和操作将恒等函数的输出与H`的输出相加。尽管这种结构允许梯度直接通过恒等函数传播,但求和操作可能会引入额外的噪声或冲突,影响网络中信息的流动。
这种求和操作可能会导致梯度传播时出现较大的变化,从而影响网络的训练和收敛性能。为了解决这个问题,后续的研究提出了一些改进方法,如使用加权求和或引入注意力机制来平衡恒等函数和H`的输出。
尽管存在一些信息流动上的限制,但ResNet的优势仍然在于它解决了深度网络中的梯度消失和表示能力有限的问题,并取得了显著的性能改进。这种结构已经被广泛应用于计算机视觉任务,取得了在图像识别和目标检测等基准任务上的最先进表现。
Dense connectivity.为了进一步改善层之间的信息流动,提出了一种不同的连接模式:引入了从任何层到所有后续层的直接连接,图1示意图形式说明了DenseNet的布局。在L层会将从0~L-1的输出作为L层的输入,如下所示:
Composite function。将三个符合函数合并形成一个H()函数,包括了bath normalization(BN)、ReLU、和3*3的Conv。
Pooling layers。特征映射的大小变化时,DenseNet中所使用的串联操作是不可行的。为了解决这个问题,DenseNet中使用了过渡层(Transition layer),将网络分成多个密集连接的块(Dense Block)来进行处理。这些过渡层包括一个批量归一化层和一个1×1卷积层,以及一个2×2的平均池化层,来改变特征映射的大小。如下图所示:
Growth rate。当我们训练神经网络时,每一层都负责学习和提取输入数据的特征。传统的神经网络架构中,每一层只能访问前一层的输出,并且每一层产生的特征图数量是固定的。然而,在DenseNet中,每一层都与之前所有层连接在一起,这意味着每一层可以直接访问并利用之前所有层的输出。
具体来说,如果我们用H'表示每一层产生的功能函数,它会生成k个特征图。那么第t层将有k0 + k × (t-1)个输入特征图,其中k0是输入层的通道数。这种设计使得DenseNet可以具有非常窄的层,即每一层产生的特征图数量相对较少,例如只有k=12个。相比于传统的网络架构,DenseNet的层可以更加窄,因为它们可以从之前的层中获取更多的信息。
DenseNet中的增长率(growth rate)被定义为每一层所添加的新特征图的数量,即参数k。增长率控制了每一层向全局状态中贡献了多少新信息。全局状态可以被看作是整个网络的“集体知识”,它由之前所有层的特征图组成。每一层都向全局状态中添加自己产生的k个特征图,从而更新全局状态,并向后续层提供更多信息。这种方式使得每一层都能够访问并利用整个网络的知识,有助于提高网络的表达能力和准确性。
与传统的网络架构相比,DenseNet的特殊连接方式还带来了效率上的优势。由于每一层都可以直接访问之前所有层的输出,不需要在每一层之间复制数据。这样一来,DenseNet可以更加高效地利用内存和计算资源。
总之,DenseNet通过密集连接的方式,使每一层可以直接访问之前所有层的输出,从而有效地利用全局知识和特征。增长率控制了每一层对全局状态的贡献,使得网络可以具有非常窄的层,同时仍然能够获得优秀的性能。这种设计不仅提高了网络的准确性,还提高了网络的效率和计算资源的利用率。
Bottleneck layers. 为了进一步提高计算效率,DenseNet还引入了一个名为“瓶颈层”的设计。在每个3×3卷积层之前,DenseNet添加了一个1×1卷积层,并使用BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3)的结构来处理输入。这种设计的目的是在减少网络参数和计算量的同时,最大限度地保留特征信息。在DenseNet中,每个1×1卷积层会产生4k个特征图。总之,DenseNet通过密集连接的方式并结合瓶颈层设计,使得神经网络既具有高准确性,同时又能够更加高效地利用计算资源。
Compression。DenseNet-C通过引入转换层(transition layer)来进一步减小模型的规模和计算复杂度。转换层位于两个密集块之间,其作用是将前一个密集块的输出特征图的数量降低为一个较小的值。具体来说,转换层会根据一个称为压缩因子(compression factor)的参数θ来控制输出特征图的数量。当θ小于1时,输出特征图的数量会减少,从而降低模型的规模和计算复杂度。
例如,如果一个密集块包含m个特征图,而压缩因子θ设置为0.5,那么转换层将会生成0.5m个输出特征图。这样一来,整个网络中的特征图数量就会显著减少,使得模型更加紧凑,计算效率更高。
我们将θ<1的DenseNet称为DenseNet-C,并在我们的实验中将θ设置为0.5。当同时使用θ<1的瓶颈和转换层时,我们将模型称为DenseNet-BC。
Implementation Details。在我们的实验中,除了ImageNet数据集外,我们使用的DenseNet结构包含三个密集块,每个密集块中的层数相等。在输入图像进入第一个密集块之前,我们对其进行了一个输出通道为16(或者对于DenseNet-BC来说是增长率的两倍)的卷积操作。对于卷积层的核大小为3×3,我们在输入的每一侧都进行了一个像素的零填充,以保持特征图的大小不变。我们使用1×1的卷积层后接2×2的平均池化作为两个连续密集块之间的过渡层。在最后一个密集块结束时,我们执行了全局平均池化操作,然后连接一个softmax分类器。三个密集块中的特征图大小分别为32×32、16×16和8×8。我们对基本的DenseNet结构进行了实验,并尝试了配置参数为{L = 40, k = 12},{L = 100, k = 12}和{L = 100, k = 24}的情况。对于DenseNet-BC,我们评估了配置参数为{L = 100, k = 12},{L = 250, k = 24}和{L = 190, k = 40}的网络。这些配置参数将影响网络的深度(L)和增长率(k),进而影响网络的性能和复杂度。
在我们对ImageNet数据集的实验中,我们使用了一个具有4个密集块的DenseNet-BC结构,并对224×224的输入图像进行处理。初始卷积层由尺寸为7×7、步长为2的2k个卷积组成;所有其他层中的特征图数量也是根据k的设定而确定的。我们在ImageNet数据集上使用的确切网络配置如表1所示。
Experiments
作者在多个基准数据集上进行了实证,展示了DenseNet的有效性,并与最先进的架构进行了比较,特别是与ResNet及其变体进行了比较。
-
Datasets
CIFAR数据集是由32×32像素的彩色自然图像组成的。CIFAR-10(C10)包含来自10个类别的图像,而CIFAR-100(C100)包含来自100个类别的图像。训练集和测试集分别包含50,000张和10,000张图像,我们将5,000张训练图像作为验证集。我们采用了一个标准的数据增强方案(镜像/平移),这在这两个数据集中被广泛使用。我们在数据集名称后面加上一个“+”表示这种数据增强方案(例如C10+)。在预处理方面,我们使用通道均值和标准差对数据进行归一化。在最终运行中,我们使用所有的50,000张训练图像,并在训练结束时报告最终的测试错误率。
SVHN数据集包含32x32像素的彩色数字图像。训练集中有73,257张图像,测试集中有26,032张图像,还有531,131张图像用于额外的训练。按照通常的做法,我们在没有进行任何数据增强的情况下使用所有的训练数据,并从训练集中分割出包含6,000张图像的验证集。我们选择在训练期间具有最低验证错误率的模型,并报告测试错误率。我们遵循[42]的方法,将像素值除以255,使其处于[0,1]范围内。
ImageNet是ILSVRC 2012分类数据集,包含了1.2百万张用于训练的图像和5万张用于验证的图像,来自于1,000个类别。我们采用了与[8, 11, 12]中相同的数据增强方案来训练图像,并在测试时应用单一裁剪或10个裁剪,尺寸为224×224。按照[11, 12, 13]的方法,我们报告验证集上的分类错误率。
-
Training
下图是作者在上述数据集中训练的结果展示。
原文地址:https://blog.csdn.net/qq_22337877/article/details/144756022
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!