精华内容
下载资源
问答
  • 因此,基于密集卷积神经网络提出一种结合局部与全局特征的联合监督识别方法,以密集卷积神经网络为基础得到图像特征,通过结合局部特征(卷积神经网络特征)与全局特征(方向梯度直方图特征)进行分类,分类器目标...
  • 注:本文源自本人的硕士毕业论文,未经许可,严禁转载!...在本章中,论文首先研究密集卷积网络(DenseNet)的结构和工作原理,随后本人提出一些改进意见,包括增加密集块中的层数、使用复合型综合函数...

    第三章 基于密集连接卷积网络改进的目标分类算法

    最近的研究表明,如果卷积网络包含接近输入的层和接近输出的层之间的较短连接,则卷积网络可以更深入,更精确和更有效地进行训练。在本章中,论文首先研究密集卷积网络(DenseNet)的结构和工作原理,随后本人提出一些改进意见,包括增加密集块中的层数、使用复合型综合函数、使用不同尺寸的卷积核和池化核、使用变化的增长率、压缩模型使其紧凑等方式对网络进行了改进。实验表明改进后的网络在物体分类任务上表现更好。DenseNet以前馈的方式将每层连接到每个其他层。传统的具有L层的卷积网络具有L个连接,每个层与其后一个层之间,DenseNet具有 个直接连接。对于每一层,前面所有图层的特征映射都被用作输入,并且它自己的特征映射被用作所有后续图层的输入。DenseNet有几个引人注目的优点:它们可以缓解消失梯度问题,加强特征传播,鼓励特征重用以及大幅减少参数数量。论文在识别基准任务(CIFAR-10,CIFAR-100,SVHN)的上验证了改进后网络的准确率。 DenseNet在其中大部分技术上都取得了显着的改进,同时需要较少的计算来实现高性能。

    3.1 DenseNet基本原理

    3.1.1 DenseNet结构

    近几年, 卷积神经网络(CNN)已经成为视觉对象识别的主要机器学习方法。虽然它们最初是在20多年前推出的,但计算机硬件和网络结构的改进使得最近才开始真正深入CNN。最初的LeNet5由5层组成,而VGG有19层,仅Highway网络和残差网络(ResNet)超过了100层网络结构。

    随着CNN网络结构的日益加深,出现了一个新的研究问题:随着有关输入或梯度的信息经过许多层,在到达网络的末端(或开始)时,它可能损耗或者消失。许多最近的论文解决了这个以及相关问题。ResNets和Highway Networks通过跳跃连接将来自一个层的信号传递给下一层。随机深度通过在训练期间随机丢弃一些层来缩短ResNets结构以保证更好的信息和梯度传递。 FractalNet通过多次合并具有不同数量的卷积块的并行层序列以获得大的标称深度,同时在网络中保持许多短路径。虽然这些不同的方法在网络拓扑和训练过程中各不相同,但是它们都具有一个关键特征:它们创建从早期层到后期层的短路径。

    在本章中,我们对这种将这种见解提炼成简单连接模式的体系结构加以验证,并尝试改进策略。为了确保网络中各层之间的最大信息流,直接连接所有的网络层。为了保留前馈特性,每一层都从前面的所有层获得附加输入,并将其自身的特征映射传递到所有后续层。图3-1示意性地说明了这种布局。最重要的是,与ResNets相比,DenseNet从未将特征通过求和组合到一个层中,相反地,DenseNet通过连接它们来组合特征。因此,第 层有l个输入,由前面所有卷积块的特征映射组成。它自己的特征映射被传递给所有的 后续层。这在一个L层网络中引入了 个连接,而不仅仅是像在传统架构中一样的L个连接。由于其密集的连接性模式,我们将这种方法称为密集卷积网络(DenseNet)。
    在这里插入图片描述
    图3-1 DenseNet(左)与ResNet(右)部分结构对比

    这种密集连接可能是反直觉效应模式是它比传统需要更少的参数卷积网络,因为不需要重新学习多余的特征图(feature maps)。传统的前馈架构可以被看作是具有状态的算法,其中信息从一层到下一层进行传递,每层从它的前一层读取状态然后写入后续层。这种节后改变了状态,但也传递了需要被保存的信息。ResNets通过增加性标识转换使得信息被保留。ResNets最近的变化显示了许多层次贡献很小,并且事实上可以在训练中随机丢弃。这使ResNets的状态类似到递归神经网络,但ResNets的参数数量要大得多,因为每一层都有自己的权重。DenseNet架构明确区分被添加到网络中的信息和保留的信息。DenseNet的层非常狭窄(例如,每一层有12个特征图),通过向网络中增加一小部分特征图,并保持其余特征映射不变,最后的分类器基于网络中所有的特征图做决策。

    除了更好的参数使用效率外,DenseNet还有一大优势就是他们改进的信息流和梯度流经整个网络,这使得他们很容易训练。每个层都可以直接访问损失函数的梯度和原始输入信号,使得网络包含了隐式的深度监督。这有助于训练更深的网络架构。此外,我们还观察到密集的连接具有正则化效果,这减轻了训练集规模较小时产生的过度拟合问题。

    论文使用几个标准数据集(CIFAR-10,CIFAR-100,SVHN)来评估DenseNet。实验达到了与现有算法相媲美的准确性,而且往往需要更少的参数。并且,性能优于目前的最新技术水平大部分基准测试任务的结果。

    3.1.2 相关研究

    自神经网络问世以来,网络架构的探索一直是其中重要的一部分。最近神经网络的普及也恢复了这一研究领域。层数越来越多在现代网络中放大了网络之间的差异架构,并激发对不同连接性的探索模式和对旧研究思路的重新审视。

    级联结构类似于密集网络布局,该结构自20世纪80年代起已经在神经网络中进行了研究贡献。他们的开创性工作侧重于完全连接的多层感知器在层与层之间训练。最近,完全连接的级联网络受到批梯度下降训练算法的影响。尽管对小数据集有效,但这一方法只能扩展到具有几百个参数的网络。利用多级特征在CNN通过跳跃连接(skip-connnections)被证明是适用于各种视觉任务的。

    Highway Networks是提出训练端到端网络最早的架构之一,网络首次超过100层。通过使用绕过路径与门控单元,Highway Networks网络有效地使用SGD优化数百个图层。被绕过的路径被认为是简化了这些非常深的网络训练的关键因素。这一点在ResNet中得到进一步支持,ResNet在挑战图像识别,定位和检测任务等方面取得了令人印象深刻的创纪录的表现,如ImageNet和COCO目标检测。最近,随机深度作为一种成功的方法训练了一个1202层深的ResNet网络结构。随机深度通过随机丢弃一些层(Dropout机制)来改善深度残留网络的训练。这表明不是所有层都是必须的,并强调在深度(残差)网络中存在着比较大的冗余量。DenseNet正是受到这一观点的启发。

    一种使网络层数更深的正交方法(例如,在跳过连接的帮助下)是增加网络宽度。 GoogLeNet使用了“Inception module”。该模块连接了由不同大小的过滤器生成的特征映射。ResNet的一个变种提出了更广泛的残差块。在实际上,简单的增加ResNet每一层的过滤器数量能提升网络的表示能力。

    DenseNet通过特征重用(feature reuse)来探索网络的潜力,以产生易于训练和高参数效率的密集模型,而不是从极端的图形表示力深层或广泛的架构。通过连接不同的层中学习到的特征映射会增加后续层输入的变化并提高效率,这形成了DenseNet和ResNet之间的一个主要区别。与同样也是连接由不同层提取的特征的InceptionNet相比,DenseNets更简单,更高效。

    还有其他值得注意的网络体系结构创新,他们同样取得了有竞争力的结果。Network In Network(NIN)结构包括微型多层感知器进入卷积层的滤波器中以提取更复杂的特征。在深度监督网络(DSN)中,内部层直接受到辅助分类器的监督,这可以加强由较早的层传递来的梯度。Ladder Network引入横向连接到自动编码器(autoencoder),获得了在半监督学习任务方面较高的准确性。Deeply-Fused Net(DFNs)被引出的目的是为了提升信息的流动,通过组合中间层不同的基础网络。通过增加路径来减少重建损失的网络也被证明可以改善图像分类模型。

    3.2 改进的DenseNet结构

    现在考虑一个通过卷积网络传递的单个图像 。这个网络包含L层,每一层实现一个非线性变换 ,其中l表示层数。 可以是一个符合函数,诸如批量标准化(Batch Normalization)、整流线性单元(ReLU)、卷积(Conv)或者赤化(Pooling)。定义 层的输出为 。DenseBlock的结构如图3-2所示:
    在这里插入图片描述
    图3-2 一个5层Dense Block模型

    传统前馈卷积网络将 层的输出直接作为 层的输入,得到这个传递函数: 。而ResNet在进行非线性转换时添加了跳跃连接(skip-connection),得到下面的转换方程: 。ResNet的一个明显优点就是梯度直接从后面的层流向前面的层。然而,非线性变换及其输出是以加法结合在一起,这将影响网络中信息的流动。

    3.2.1 密集连接(Dense connectivity)

    为了进一步提升网络中信息的流动性,模型使用一种不同的连接方式:将每一层直接与后面的每一层相连接。因此,第 层会获取前面所有层的特征图,公式如下,其中 表示由第0,1, ,l-1层产生的特征图组成的向量。
    (3-1)
    因为使用了密集连接(Dense connectivity),这种网络结构称之为Dense Convolution Network(DenseNet)。为了便于实施,合并多输入的 为一个简单向量。

    3.2.2 综合函数(Composite function)

    定义 为一个包含了三个连续操作的复合函数:批量标准化(Batch Normalization),整流线性单元(ReLU)和一个 卷积(Conv)。

    3.2.3 池化层(Pooling layer)

    图3-2中使用的级联操作在特征映射的大小发生变化时变得不可行。但是,卷积网络的一个重要组成部分是汇集可改变特征映射大小的层。为了便于在体系结构中合并,将网络分成多个密集连接的密集块(dense blocks)。密集块之间的层称为过渡层,它们进行卷积和池化操作。 在我们的实验中使用的过渡层包括批量标准化层和1×1卷积层,然后是2×2平均池化层。

    3.2.4 增长率(Growth rate)

    如果每一层的函数 生成k个特征图作为输出,那么第 层有 个输入特征图,其中 是原始输入图像的通道数。为了防止网络增长太宽,并改善参数效率,限制k为一个小的整数,例如k=12。我们引入超参数k作为网络的增长率,并且相对较小的增长率就足够了在我们测试的数据集上获得最新的结果。对此的一种解释是每个层都有到其他密集块特征映射的访问权限,另一种解释是将特征图看做网络的全局状态,即每一层为自己增加k个特征图。增长率调节每一层贡献给全局状态的新信息量。全局状态一旦写入,就可以从网络的任何地方访问它,这与传统网络体系结构不同,我们不需要一层一层地复制它。

    3.2.5 瓶颈层(Bottleneck layers)

    尽管每一层只产生k个输出特征图,它通常有更多的输入。前面我们提到,可以引入1×1卷积作为每次3×3卷积之前的瓶颈层(Bottleneck layer),以减少输入特征图的数量,从而减少输入特征图的数量,提高计算效率。我们发现这个设计对DenseNet非常有效,并将Bottleneck layer引入我们的网络,即BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3)版本的综合函数,作为DenseNet-B。除非另有规定,每个1×1卷积减少在所有实验中输入到4k特征映射。

    3.2.6 压缩(Compression)

    为了进一步提高模型的紧凑性,我们可以减少过渡时的特征映射的数量层。 如果密集块包含m个特征映射,我们让下一个过渡层生成不超过 的最大整数个输出特征图,其中 被称为压缩因子。当 时,转换过程中的特征映射的数量保持不变。我们称DenseNet当 时为DenseNet-C,我们在实验中设定 。当同时使用了瓶颈层(Bottleneck layers)和压缩(Compression)方法时,我们称我们的模型为DenseNet-BC。
    在这里插入图片描述
    图3-3 包含3个Dense Block的DenseNet结构

    3.3 DenseNet卷积网络的实现与测试

    3.3.1 Tensorflow框架

    TensorFlow是Google推出的一套机器学习系统,使用其简单灵活的架构可以轻松构建各种复杂的算法模型。其高效的执行系统和分布式架构保证了在模型训练和执行时的高性能。再加上其跨平台可移植性及实验可复现,支持快速产品化等特点,逐渐成为主流的机器学习平台。

    TensorFlow是一个基于计算图(Computational Graph)的数值计算系统。计算图是一个有向图,图中的节点表示数学计算操作的算子(operations)。节点之间的连接的边代表参与计算的高维数组,成为tensor。计算图的执行可以看做数据tensor按照计算图的拓扑结构顺序,从输入节点逐步流过所有中间节点,最后到达输出节点的过程。Session(会话)系统执行的入口,其负责完成节点布置和传输节点的添加等任务。

    本节DenseNet的结构正是用到了TensorFlow来实现。

    3.3.2 DenseNet网络实现

    DenseNet网络的结构如图3-3所示,其中N表示 卷积和 卷积的组合。我们可以看到,具有不同层的网络也有一个大致相似的结构。网络首先在输入图像上做一次卷积和池化操作,然后进入第一个DenseBlock,DenseBlock里面就是在做密集的连接运算。第一个DenseBlock后是一个Transition Layer,同样还是一个卷积和池化操作。再往后就是与前面类似的结构,只不过通过卷积得出的特征图尺寸越来越小,深度越来越大。网络的最后一层就是分离N类的Softmax层,采用全连接结构。

    网络结构代码由TensorFlow框架实现。和通常使用一样,我们从输入图像开始一步一步构建网络的拓扑结构。代码实现的关键点在于如何实现“跳跃连接”,在DenseBlock中,我们将前面层的特征图全都传到后面层中。我们注意到,不同尺寸的特征图进入DenseBlock,每一个DenseBlock中的特征图的尺寸是一样的,我们使用框架提供的一个合并函数:tf.concat(concat_dim, values, name=’concat’)。该函数的第一个参数concat_dim必须是一个数,表明在哪个维度上进行连接操作,第二个参数values就是两个或者一组待连接的tensor。举个例子,DenseBlock中的第一层特征图a是一个[16,32,32,16]维的数组,经过一次卷积得到中间特征图b是一个[16,32,32,6]维的数组,调用函数c= tf.concat(3, (a,b))得到一个[16,32,32,22]维的向量,作为第二层的输入特征图。在DenseBlock中,每一层都调用该函数将上一层的特征图和本层产生的特征图进行合并,最终DenseBlock中最后一层就得到前面多有特征图的组合。

    表3-1 DenseNet网络结构图
    Layer Feature Size DenseNet-121 DenseNet-169 DenseNet-201 DenseNet-161
    Conv 112×112 7×7 conv
    Pooling 56×56 3×3 max pool
    DenseBlock1 56×56 N×6
    N×6
    N×6
    N×6

    L1 56×56 1×1 conv
    28 × 28 2×2 avg pool
    DenseBlock2 28 × 28 N×12 N×12 N×12 N×12
    L2 28 × 28 1×1 conv
    14 × 14 2×2 avg pool
    DenseBlock3 14 × 14 N×24 N×32 N×48 N×36
    L3 14 × 14 1×1 conv
    7 × 7 2×2 avg pool
    DenseBlock4 7 × 7 N×16 N×32 N×32 N×24
    Classification 7 × 7 ,Average Pooling
    1000D full connection

    3.3.3 网络训练

    我们凭经验证明了它的有效性,DenseNet在几个基准数据集上进行比较具有最先进的网络架构,尤其是与ResNet及其变体相比。

    1、数据库
    模型训练使用CIFAR-10数据集。CIFAR-10数据集是一个经典的物体识别数据集,该数据集是由60000张 的RGB彩色图片构成,共有10个分类,每一类有6000张图像。其中包含50000张训练图片和10000张测试图片。

    数据集被分为5个Training Batch和1个Test Batch,每个Batch有10000张图像。测试批次包含来自每个类的恰好1000个随机选择的图像。训练批次以随机顺序包含剩余图像,但一些训练批次可能包含来自一个类的图像比另一个更多。这10类物体分别是:飞机,汽车,鸟,猫,麋鹿,狗,青蛙,马,船和卡车。这些分类完全互斥,汽车和卡车之间没有重叠。汽车包括轿车、SUV等,卡车只包括大卡车。两者都不包含皮卡车。

    2、开始训练
    所有的网络均使用随机梯度下降算法(SGD)进行训练。在CIFAR数据集上我们使用小批量训练大小为64,并使用300和40作为训练周期。初始学习率设为0.1,并且在训练周期的50%和75%阶段再除以10。在ImageNet上,我们使用256的小批量训练集和90个训练周期。初始学习率设为0.1,并且在训练周期为30和60的阶段再除以10。由于GPU内存的限制,我们使用的小批量训练尺寸为128,作为补偿,我们训练100个周期,并且在90周期时将学习率除以10。

    随后,我们使用一个 的权重衰减,并使用高斯分布来初始化权重。在没有数据增量的三个数据集里,我们在每一个卷积层(除了第一个)后加上一个Dropout层,并设随机丢弃率(dropout rate)为0.2。测试误差仅对一项任务进行一次评估。

    3、训练结果
    我们使用不同的深度L和不同的增长率k。在CIFAR和SVHN数据集上的主要测试结果图表3-2所示。

    表3-2 CIFAR和SVHN数据集上的错误率
    Method Depth Params C10 C10+ C100 C100+ SVHN
    ResNet 110 38.6M — 6.61 — — —
    ResNet2 164 1.7M 11.26 5.46 35.58 24.33 —
    DenseNet(k=12) 40 1.0M 7.00 5.24 27.55 24.42 1.79
    DenseNet(k=12) 100 7.0M 5.77 4.10 23.79 20.20 1.67
    DenseNet(k=24) 100 27.2M 5.83 3.74 23.42 19.25 1.59
    DenseNet-B(k=12) 100 0.8M 5.92 4.51 24.15 22.27 1.76
    DenseNet-B(k=24) 250 15.3M 5.19 3.62 19.64 17.60 1.74
    DenseNet-B(k=40) 190 25.6M — 3.46 — 17.18 —

    首先来看准确率。可能最引人注目的是表3-2最下面的一行,可以看出当L=190,k=40时的DenseNet-BC在CIFAR数据库上表现地比现有的最好的算法还要出色。最终的错误率是3.46%(C10+)和17.18%(C100+),这一结果明显低于宽度ResNet架构得到的错误率。我们在C10和C100(均没有图像增量)上的最好结果甚至有更多令人鼓舞的地方:两者都以丢弃路径的正则化方式得到比FractalNet低30%的结果。DenseNet在SVHN数据集上以L=100,k=24的结构超过了ResNet取得最好成绩。然而,250层的DenseNet-BC并不能进一步改进短连接带来的变现,可能是由于SVHN是个比较容易解释的任务,并且及其深的模型容易过拟合。

    再来看参数量,如果没有压缩层或者瓶颈层的话,网络会有一个趋势就是性能会随着L和k的增加而变现更好。我们将此归因于相应的模型容量的增长。最好的证明就是在C10数据集上随着错误率从5.24%下降到4.10%,最后降到3.74%,参数的数量从1.0M到7.0M,再到27.2M。在C100数据集上也能观察到这一趋势。这表明DenseNet可以利用更大更深层模型的持续增长的变现力。也表明网络不会受到ResNet中过拟合或者优化难等问题的困扰。

    表中的结果表明DenseNet比其他架构模型(尤其是对比了ResNet)有更高效的参数利用率。具有Bottleneck结构的DenseNet-BC结构具有显著的参数利用率。比如,最深的模型仅有15.3M的参数量,但它始终优于其他模型,比如ResNet的参数量超过了30M。需要强调的是,超参数L=100和k=12的DenseNet-BC结构能达到与1001层的ResNet相当的性能(C10错误率4.51%vs 4.62%,C100错误率22.27%vs22.71%),但是参数量却少了90%。图3-4表明了两种网络在C10数据集上的训练损失(Training loss)和测试误差(Test Error)。

    最后研究一下过拟合现象。高效利用参数的一个积极的作用就是能够减轻过拟合现象。我们注意到,在没有进行增强的数据集上,DenseNet架构相比于之前的工作的改进尤为明显。在C10上,改进意味着相对误差从7.33%降至5.19%,相对减少29%。在C100上,减小幅度为30%,从28.2%降至19.64%。在我们的实验中,我们观察到潜在的过拟合出现在一个单一的设置:在C10中,通过增加k=12到k=24所产生的参数4倍增长导致误差从5.77%小幅增加到5.83%。DenseNet-BC的Bottleneck层和压缩层是对付这种趋势的有效方法。
    在这里插入图片描述
    图3-4 DenseNet测试图

    3.3.4 与同类方法对比

    从表面看,DenseNet网络与ResNet非常相似,只有功能函数由 变成了加法。然而,这个看起来很小的修改的影响导致两种网络架构的行为大不相同。
    在这里插入图片描述
    图3-5 DenseNet与ResNet错误率比较

    1、模型紧凑
    作为输入级联的直接结果,DenseNet任何层获得的特征映射可以被所有后续层访问。这鼓励了整个网络中的特征重用,并导致更紧凑的模型。图3-5中的图显示了这是一个旨在比较所有DenseNet参数效率和一个可比较的ResNet体系结构的实验结果。模型在C10上训练多个不同深度的小网络,并将它们的测试精度作为网络参数的一个函数。与其他流行的网络结构(比如AlexNet和VGGNet)相比,带有预激活的ResNet使用较少的参数,同时通常可获得更好的结果。因此,我们比较DenseNet(k=12)与ResNet。DenseNet的训练参数设置与上一节保持一致。

    图3-5显示DenseNet-BC始终是DenseNet的最高参数的有效变体。此外,为了达到相同的准确度,DenseNet-BC只需要ResNet大约1/3的参数量。这一结果与我们在表3-2中呈现的ImageNet上的结果一致。表3-2显示一个仅有0.8M可训练的DenseNet-BC就能够实现与1001层ResNet相当的准确度,后者具有10.2M的参数量。

    2、隐含的深度监督。
    提高密集卷积网络准确性的一个解释可能是单个层通过较短的连接从损失函数外接收额的监督。可以理解为DenseNets在进行一种“深度监督”。前面在深度监督网络中展示了“深度监督”的好处,它们将分类器附加到每个隐藏层,强制中间层学习判别特征。

    DenseNet以隐含的方式执行类似的深层监督:网络顶部的单个分类器通过至多两个或三个过渡层直接监督所有层。然而,DenseNets的损失函数和梯度实质上并不复杂,因为所有层之间共享相同的损失函数。

    3、随机连接与确定性连接。
    密集卷积网络和残余网络的随机深度正则化之间有一定的联系。在随机深度中,ResNet中的层随机丢弃,从而在周围层之间建立直接连接。由于池化层永远不会被丢弃,因此网络会产生与DenseNet类似的连接模式:如果所有中间层都是随机丢弃的,则在任何两层之间有一个小概率可以直接连接。 尽管这些方法与以往完全不同,但DenseNet对随机深度的解释可能会提供正规化一种正确的启示。

    4、特征重用
    按照设计,DenseNet允许每层访问来自其前面所有层的特征图(尽管有时会通过过渡层)。我们进行一项实验来验证一个被训练过的网络是否利用了这一优势。我们首先在C10上训练一个DenseNet,令L=40和k=12。对于密集块中的每一个卷积层l,我们计算分配给层s连接的平均绝对权重。平均绝对权重充当卷积层所依赖的前面层的替代物。位置 处的点表示层l使用前面s层生成的特征图的平均情况。可以得到以下观测结果:

    (a)所有图层将其权重分布在同一个块内的许多输入上。 这表明非常早期的层提取的特征实际上直接被整个同一密集块中的深层使用。

    (b)过渡层的权重也将它们的权重分散到前一个密集块内的所有层上,从而通过少量间接指示从DenseNet的第一层到最后一层的信息流。

    (c)第二个和第三个密集块内的图层始终将最小权重分配给过渡图层(三角形顶部行)的输出,表明过渡图层输出许多冗余特征(平均具有低权重)。 这与DenseNet-BC的强大结果保持一致,在这些结果中正好压缩了这些输出。

    (d)尽管最右侧的分类层也使用了整个密集块中的权重,但似乎还是会集中在最终的特征图上,这表明网络后期可能会产生更多的高级特征。

    3.3.5 DenseNet小结

    DenseNet将具有相同特征图大小的任何两个图层之间进行直接连接。我们发现DenseNet可以自然扩展到数百层,同时不会出现优化问题。在实验中,随着参数数量的增加,DenseNet倾向于提高准确度的一致性,没有任何性能下降或过度拟合的迹象。在多个设置下,它在多个高度竞争的数据集上实现了最先进的结果。而且,DenseNet需要实质上更少的参数和更少的计算来实现最新的性能。因为本研究中采用了针对残留网络优化的超参数设置,所以我们相信通过更详细地调整超参数和学习速率计划,可以获得DenseNet准确性的进一步提高。

    在遵循简单的连接规则的同时,DenseNets自然地整合了身份映射的属性,深度监督和多样化的深度。它们允许在整个网络中重用特征,并因此可以学习更紧凑。由于其紧凑的内部表示和减少的特征冗余,DenseNet可能是用于构建在卷积特征上的各种计算机视觉任务的良好特征提取器。

    3.4 本章小结

    本章首先讲述了密集卷积网络(DenseNet)的结构和原理,并通过组合优化策略将其改造成高质量的特征提取器。实验表明经过不断地增加层数可以有效提高准确率,并且不会产生过拟合的现象。实验成功将算法应用在分类问题上,下一章我们将该网络作为基础网络用于图像检测。

    展开全文
  • 通过3D卷积神经网络密集连接从MR图像中估计年龄
  • 卷积神经网络可能是这一巨大成功背后的关键组成模块。这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工作原理的理解。简介过去我们接触到了密集连接的神经网络。那些神经网络中,所有的神经元被分成了...
    在自动驾驶、医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情。卷积神经网络可能是这一巨大成功背后的关键组成模块。这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工作原理的理解。

    简介

    过去我们接触到了密集连接的神经网络。那些神经网络中,所有的神经元被分成了若干组,形成了连续的层。每个这样的单元都与相邻层的每一个单独的神经元相连接。下图所示的是这样一个架构。

    dd77e19418bd056d21111fea0902ec91.png

    图 1:密集连接的神经网络架构

    当我们基于一个有限的固定特征集合解决分类问题的时候,这种方法是很奏效的——例如,我们根据足球运动员在比赛中记录的统计数据来预测他的位置。但是,当处理照片的时候,问题变得更加复杂。当然,我们可以把每个像素的亮度视作一个单独的特征,然后将它作为密集网络的输入传递进去。不幸的是,为了让它能够应付一张典型的智能手机照片,我们的网络必须包含数千万甚至上亿的神经元。另一方面,虽然我们可以将照片缩小,但是我们也会在这个过程中损失有价值的信息。所以我们马上就会发现,传统的策略是没有用的——我们需要一种新的聪明的方法,来尽可能多的利用数据,但同时还要减少必需的计算量和参数。这就是 CNN 发挥作用的时候了。

    数字照片的数据结构

    让我们先花少许时间解释一下数字图像的存储方式。大多数人可能意识到了,图像实际上就是巨大的数字矩阵。每个数字代表的是一个单独像素的亮度。在 RGB 模型中,彩色图片是由 3 个这样的矩阵组成的,每个矩阵对应着 3 个颜色通道(红、绿、蓝)中的一个。在黑白图像中,我们仅使用一个矩阵。每个矩阵都存储着 0 到 255 的数值。这个数值范围是图像存储信息的效率(256 个数值刚好对应一个字节)和人眼敏感度之间的折中(我们仅能区分同种颜色的几种有限色度)。

    daf7c196f63a430cf8662d8da7f56fcf.png

    图 2. 数字图像的数据结构

    卷积

    核卷积并不仅仅用在卷积神经经网络中,它也是很多其他计算机视觉算法的关键元素。这个过程是这样的:我们有一个小的数字矩阵(称作卷积核或滤波器),我们将它传递到我们的图像上,然后基于滤波器的数值进行变换。后续的特征图的值要通过下面的公式计算,其中输入图像被记作 f,我们的卷积核为 h。计算结果的行列索引分别记为 m 和 n。

    071f76e776ac5c1b20e40a51ab7f19b0.png

    5537ead80fe5e6a858538d2c431f5366.gif

    图 3. 核卷积的例子

    在将我们的滤波器放在选中的像素上之后,我们将卷积核中的每一个数值和图像中对应的数值成对相乘。最后将乘积的结果相加,然后把结果放在输出特征图的正确位置上。我们在上边的动画中可以以一个微观的形式看到这个运算的过程,但是更有趣的是我们在整幅图像上执行这个运算得到的结果。图 4 展示了用数个滤波器做卷积的结果。

    3bc7cf3e552fad483819a7a47145bdc3.gif

    图 4. 用卷积核寻找边缘

    Valid 和 Same 的卷积

    如图 3 所示,当我们在用 3x3 的卷积核在 6x6 的图像上执行卷积时,我们得到了 4x4 的特征图。这是因为在我们的图像里面,只有 16 个独特的位置来放置卷积核。由于我们的图像的尺寸在每次卷积的时候都会收缩,在图像完全消失之前,我们只能做有限次的卷积。此外,如果我们注意一下卷积核是如何在图像上移动的,我们会发现,边缘的像素会比中央的像素影响更小。这样的话我们会损失图片中包含的一些信息,你可以在下图看到,像素的位置是如何改变它对特征图的影响的。

    6484d496ab6f9ac69f9d0d5d06b636d3.gif

    图 5. 像素位置的影响

    为了解决这两个问题,我们可以使用一个额外的边界来填充图像。例如,如果我们使用 1 像素的填充,我们将图像的尺寸增大到了 8x8,这样,3x3 的滤波器的输出将会成为 6x6。通常在实际中我们用 0 来做额外的填充。根据我们是否使用填充,我们会进行两种类型的卷积——Valid 和 Same。命名相当令人费解,所以在这里解释一下:valid 代表我们使用的是原始图像,same 代表我们在图像周围使用了边界,因此输入和输出的图像大小相同。在第二种情况下,扩充的宽度应该满足下面的方程,其中 p 是 padding(填充),f 是滤波器的维度(通常是奇数)。

    ee321c5dc988e2237c83fc1428f05509.png

    跨步卷积

    cdf3e1ef60507cb8a64b4aa78fb3491b.gif

    图 6. 跨步卷积的例子

    在之前的例子中,我们总是将卷积核移动一个像素。但是,步长也可以看做是卷积层的一个参数。在图 6 中,我们可以看到,如果我们使用更大的步长,卷积会成为什么样子。在设计 CNN 结构时,如果我们想让接受域有更少的重叠或者想让特征图有更小的空间维度,那么我们可以决定增大步长。考虑到扩充和跨步,输出矩阵的维度可以使用下面的公式计算:

    36fec0bc05d4174cd58b3069b0040e8e.png

    转换到第三个维度

    立体卷积是一个非常重要的概念,它不仅让我们能够处理彩色图像,而且更重要的是,可以在一个单独的层上使用多个滤波器。最重要的规则是,滤波器和你想在其上应用滤波器的图像必须拥有相同的通道数。基本上,我们继续使用和图 3 类似的示例,尽管我们这次从第三个维度让矩阵中的数值对相乘。如果我们想在同一张图像上应用多个滤波器,我们会为每个滤波器独立地计算卷积,然后将计算结果逐个堆叠,最后将他们组合成一个整体。得到的张量(3D 矩阵可以被称作张量)满足下面的方程,其中:n 是图像的大小,f 是滤波器的大小,n_c 是图像中的通道数,p 是所用的填充,s 是所用的步长,n_f 是滤波器的数量。

    031051c0ddfe91147ce611e0ff1faa67.png

    e5b650ef3fc1a379a26e41c6d35be15e.png

    图 7. 立体卷积

    卷积层

    使用我们今天所学内容构造一个卷积层的时间到了。我们的方法几乎与用在密集连接神经网络上的方法相同,唯一的差别就是不使用简单的矩阵相乘,这一次我们将会使用卷积。前向传播包含两个步骤。第一步是计算中间结果 Z,它是由前一层的输入数据与张量 W(包含滤波器)的卷积结果,加上偏置项 b 得到的。第二步是给我们的中间结果应用一个非线性的激活函数(我们的激活函数记作 g)。矩阵方程的爱好者将在下面找到合适的数学公式。在下面的插图中,你可以看见一个小型的可视化,它描述了我们方程中用到的张量的维度。

    0a88ac77275a651b6c0f7b5160ef19ca.png

    9472c17573199e695f48f0ce0c8b3906.png

    图 8. 张量维度

    连接剪切和参数共享

    在本文开始,由于需要学习的参数数量巨大,我提到密集连接神经网络在处理图像方面是很弱的。既然我们已经了解了关于卷积的所有内容,让我们来考虑一下它是如何优化计算的吧。在下图中,2D 卷积以一种稍微不同的方式进行了可视化——用数字 1-9 标记的神经元组成接收后续像素亮度的输入层,A-D 这 4 个单元代表的是计算得到的特征图元素。最后但同等重要的是,I-IV 是卷积核中的数值——它们必须被学习到。

    b09d34b90bd2da696aff307a37df52b2.gif

    图 9. 连接剪切和参数共享

    现在,让我们聚焦于卷积层的两个重要属性。第一,你可以看到,连续两层中,并不是所有的神经元都是彼此相连的。例如,单元 1 仅仅会影响到 A 的值。第二,我们发现,一些神经元会共享相同的权重。这两个属性都意味着我们要学习的参数数量要少很多。顺便说一下,值得注意的是,滤波器中的每个值都会影响到特征图中的每个元素——这在反向传播中是特别重要的。

    卷积层反向传播

    任何一个曾经试图从零编写自己的神经网络的人都知道,前向传播远远不到成功的一半。真正有趣的是当你开始反向传播的时候。现在,我们不必在反向传播上花心思——深度学习框架都为我们做好了,但是我认为,了解背后发生的东西是很值得的。就像在密集连接神经网络中一样,我们的目标是在一个叫做梯度下降的过程中计算导数,然后使用它们来更新参数值。

    在计算中我们会使用链式法则——这个我在之前的文章中提到过。我们想要评估参数的变化对结果特征图的影响,然后评估它对最终结果的影响。在开始进入细节之前,让我们来统一一下将会用到的数学符号——为了让事情变得容易一些,我会放弃偏导数的完整符号,而会使用下面的简写符号。但是请记住,这个符号始终代表代价函数的偏导数。

    7204add3932785843b16887f470699fd.png

    10bbf7a36966004485abdc1af41c51e4.png

    图 10. 一个卷积层在前向和反向传播中的输入和输出数据

    我们的任务是计算 dW^[l] 和 db^[l]——它们是与当前层的参数相关的导数,还要计算 dA^[ l -1],它们会被传递到之前的层。如图 10 所示,我们以 dA^[ l ] 为输入。当然,这些对应张量的维度都是相同的,dW 和 W,db 和 b,以及 dA 和 A。第一步就是通过在我们的输入张量上应用我们的激活函数的导数,得到中间值 dZ^[l]。根据链式法则,这个运算的结果在后面会被用到。

    1ecca476629572a932fe3387cef182d7.png

    现在,我们需要处理卷积神经网络自身的反向传播,为了达到这个目的,我们会使用一个叫做全卷积的矩阵运算——见下图。请注意,我们在这里使用的卷积核会提前旋转 180°。这个运算可以通过下面的公式描述,其中的滤波器记作 W,dZ[m,n] 是一个标量,它属于从前一层得到的偏导数。

    f65b9e2f1d51671eb8c41fd7c2f4513b.png

    d05a6e331d8ad9079f761fdb01c346ab.gif

    图 11. 全卷积

    池化层

    除了卷积层,CNN 通常会用到所谓的池化层。它们最早被用来减小张量的大小以及加速运算。这些层是比较简单的——我们需要将我们的图像分成不同的区域,然后在每一个部分上执行一些运算。例如,对 Max Pool 层而言,我们会选择每个区域的最大值,并将它放到对应的输出区域。与卷积层的情况一样,我们有两个可用的超参数——滤波器大小和步长。最后但同样重要的一点是,如果你对一个多通道的图像执行池化操作,那么每一个通道的池化应该单独完成。

    0f42262d7a57baef84121f8cb95dc56f.gif

    图 12. 最大池化(max pooling)的例子

    池化层反向传播

    我们在这篇文章中只讨论最大池化反向传播,但是我们学到的规则是适用于所有类型的池化层的——只需要做微小的调整即可。因为在这种层中,我们没有任何必须更新的参数,所以我们的任务就是合适地分配梯度。我们记得,在最大池化的前向传播中,我们选择的是每个区域的最大值,并将它传递到了下一层。所以在反向传播中也是很清晰的,梯度不应该影响前向传播中不包含的矩阵的元素。实际上,这是通过创建一个掩膜来完成的,这个掩膜记住了前一阶段数值的位置,我们可以在后面转移梯度的时候用到。

    b48cdc698457ca50ed3d3b76d6cf9dc7.gif

    深度学习&计算机视觉精讲

    深度学习&计算机视觉精讲 - 网易云课堂study.163.com

    原价799,现在限时只要388。

    助您推开AI的大门,掌握深度学习

    展开全文
  • 为此,文中提出了一种基于深度的卷积神经网络(CNN)人群密度估计方法,利用典型的深层网络Googlenet 和VGGnet进行了方法改进。通过采用一个包括18个拥挤景区密集场景、超过160 K密度的注释图像数据集进行的实验测试...
  • 卷积神经网络Densenet的分析与总结

    千次阅读 2018-06-28 21:58:24
    我们接受这一观察并且提出密集卷积神经网络,该网络以前馈方式将每层连接到每个其他层。具有L层的传统的卷积神经网络,其有L个连接,当前层只与下一层有一个连接;而我们提出的DenseNet,其具有L(L+1)/2个连接,当前...

    1 简介

           最近的研究表明,如果卷积神经网络中靠近输入和输出层之间存在短链接,那么网络可以更深、更精确,并且能够更有效的进行训练。我们接受这一观察并且提出密集卷积神经网络,该网络以前馈方式将每层连接到每个其他层。具有L层的传统的卷积神经网络,其有L个连接,当前层只与下一层有一个连接;而我们提出的DenseNet,其具有L(L+1)/2个连接,当前层与后边的每一层都有一个连接。对于每一层,前边所有层的特征图被用作输入,并且它自己产生的特征图被用作后边每个层的输入。DenseNet有几个引人注目的优点:可以缓解梯度消失的问题,加强特征传播,鼓励特征重用以及大幅减少参数数量。(DenseNets have several compelling advantages: they alleviate thevanishing-gradient problem, strengthen feature propagation, encourage featurereuse, and substantially reduce the number of parameters.)

    2 模型结构

           为了保证最大的信息在网络层与层之间的流动,我们将所有层直接相互连接,每一层将前边所有层的输出作为自身的输入,同时将自身的输出特征图传递到后续的所有图层中。

           我们直观来看的话,DenseNet应该存在大量的参数,但是实际上其具有较小的参数数量,因为不需要重新学习冗余特征图。DenseNet的另一优势是其提高了信息和梯度在网络中的流动,所以DenseNet容易训练。因为每一层都可以直接从损失函数出获取梯度值,并且每一层都可以从输入端获取输入信号。

    3 网络结构

           如果特征图的尺寸改变的话,就不能进行拼接操作了。池化层是卷积神经网络中的重要部分,使用池化层后必然会改变特征图的尺寸,所以我们将网络分成了多个密集连接的密集块(Dense Block),如下图所示:

    我们把两个Dense Block之间的层称为过渡层(transition layers),包含卷积层和池化层,实际上有BN—1*1卷积—2*2平均池化。


    4 总结

           1. Densenet与Resnet的区别在于:Resnet是对应通道内的像素做加法运算,而Densenet是对各个通道做拼接。

           2. Densenet的提出是由于发现网络中如果存在短连接的话,能够更方便的训练,并且网络会更深、更有效,其特点是缓解梯度消失、加强特征传播、鼓励特征重用和大幅减小参数数量。

           3. Dense Block由BN-Relu-Conv(1*1)-BN-Relu-Conv(3*3)组成,Transition layer由1*1 Conv-2*2平均池化(stride=2)构成。


    展开全文
  • 提出了一种基于深度卷积神经网络的单目视觉深度估计方法,该方法采用端到端学习框架来构建模型。采用残差网络(ResNet)作为神经网络模型框架的编码部分来提取深度信息特征。采用密集连接卷积网络(DenseNet)对编码...
  • 文章目录0 引言 0 引言 DenseNet论文链接:https://arxiv.org/pdf/1608.06993.pdf Github学习地址:https://github.com/liuzhuang13/DenseNet

    0 引言

    DenseNet论文链接:https://arxiv.org/pdf/1608.06993.pdf

    Github代码学习地址:https://github.com/liuzhuang13/DenseNet

    1 论文学习

    DenseNet论文拜读(中文):https://blog.csdn.net/MRZHUGH/article/details/105901717

    2 源码学习

    Caffe: https://github.com/shicai/DenseNet-Caffe

    Pytorch: PyTorch documentation on models

    Keras, Tensorflow and Theano: https://github.com/flyyufelix/DenseNet-Keras

    MXNet: https://github.com/miraclewkf/DenseNet

    3 Tensorflow2.1 使用

    目前我主要在kaggle的一个比赛上用的DenseNet201,用于图像分类;
    安装并导入相关库:

    # Install and import necessary libraries
    import tensorflow as tf
    import tensorflow.keras.layers as L
    from keras.applications.densenet import DenseNet201
    
    from sklearn import metrics
    from keras.callbacks import ModelCheckpoint
    
    

    不同数据集不同的处理方法,这里就不细说了,得到相应的train_dataset,valid_dataset,test_dataset;
    设置好EPOCHS,BATCH_SIZE,IMAGE_SIZE,Learning rate,lr_schedule;
    其中我用的是EfficientNerB7,就把IMAGE_SIZE=768;
    lr_schedule由keras.callbacks.LearningRateSchedule()得到的;
    之后就可以迁移DenseNet201进行训练了;

    # model
    with strategy.scope():
        model = tf.keras.Sequential([
            DenseNet201(
                input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3),
                weights='imagenet',
                include_top=False
            ),
            L.GlobalAveragePooling2D(),
            L.Dense(train_labels.shape[1], activation='softmax')
        ])
            
                 
        model.compile(
            optimizer='adam',
            loss = 'categorical_crossentropy',
            metrics=['categorical_accuracy']
        )
    #     model.summary()
    
    # save model
    ch_p_den = ModelCheckpoint(filepath="model_den.h5", monitor='val_loss', save_weights_only=True,
                                                     verbose=1)
    
    # train model
    history = model.fit(
        train_dataset, 
        epochs=EPOCHS, 
        callbacks=[lr_schedule, ch_p_den],
        # STEPS_PER_EPOCH_1 = train_labels.shape[0] // BATCH_SIZE
        steps_per_epoch=STEPS_PER_EPOCH,
        validation_data=valid_dataset
    )
    

    最后的训练结果(部分):

    展开全文
  • 卷积神经网络中包含的都是卷积层,根据任务需要可以适当保留池化层,为了完成密集预测,卷积神经网络中的全连接层必须被卷积层替代,这也是全卷积神经网络最大的特点之一。
  • 但在此之前,我们先来看一个简单的卷积神经网络示例,即使用卷积神经网络对 MNIST 数字进行分类,这个任务我们在第 2 章用密集连接网络做过(当时的测试精度为 97.8%)。虽然本例中的卷积神经网络很简单,但其精度...
  • 1. 创新接收任意尺寸输入的全卷积网络使用反卷积的上采样融合深层粗糙特征和浅层精细特征的跳跃结构2.模型提出为什么可以将CNN转化为FCN?全连接层可以看作卷积层,其中,feature map 1x1,向量长度为通道数。为什么...
  • 卷积神经网络,是计算机视觉领域使用最广泛的一种深度学习模型。可以对比,使用简单的卷积神经网络,即可达到比使用Dense层模型精确度更高的模型。 与密集连接层不同,卷积层学到的是图像的局部模式,而Dense层是从...
  • 针对传统计算机辅助检测系统中肺结节检测存在大量假阳性的问题,提出一种基于三维卷积神经网络的肺结节识别方法。首先,将传统二维卷积神经网络扩展为三维卷积神经网络,充分挖掘肺结节的三维特征,增强特征的表达能力;...
  • Day04-经典卷积神经网络解读 文章目录Day04-经典卷积神经网络解读作业说明示例代码一、环境配置二、数据准备三、模型配置四、模型训练五、模型校验六、模型预测完成作业 作业说明 今天的实战项目是基于经典卷积神经...
  • 在填充锯齿状空洞的卷积通路上构建并行三维卷积神经网络,提取多尺度图像块进行训练,捕获大范围空间信息。利用密集连接的恒等映射特性,将浅层特征叠加到网络末端,在MRI多模态图像中分割出水肿区、增强区、核心区和囊...
  • 2、卷积神经网络的两个有趣的性质。 【1】平移不变性 【2】卷积神经网络可以学到模式的空间层次结构。 3、特征图:对于包含两个空间轴(高度和宽度)和一个深度轴(也叫做通道轴)的3D张量,其卷积也叫做特征图。 4...
  • 因此, 针对密集场景下的人数估计问题, 提出了一种改进的基于卷积神经网络的人数估计方法。为了改善摄像透视畸变带来的影响, 分别利用深层网络和浅层网络提取人群特征, 深层和浅层网络分别设计了不同核大小的卷积层, ...
  • 今天这篇博客是关于卷积神经网络,它与密集链接模型相比可以提高在相当程度上提高精度,结果还是不错的。使用卷积神经网络之前还要了解一些卷积神经网络相关的基础知识,下面简单介绍一下再进行代码编写。 1、密集...
  • 基于卷积神经网络的图像分类

    万次阅读 2018-02-10 17:01:23
    《Convolutional Neural Networks for Large-Scale Remote-Sensing Image Classification》本文提出了一种全卷积神经网络来产生密集分类(逐像素分类),特点是:位置无关、输出是一系列卷积层的结果。首先将负责...
  • 针对经典的基于卷积神经网络的单幅图像超分辨率重建方法网络较浅、提取的特征少、重建图像模糊等问题,提出了一种改进的卷积神经网络的单幅图像...,设计了由密集残差网络和反卷积网络组成的新型深度卷积神经网络结构...
  • 图解:卷积神经网络数学原理解析

    千次阅读 2020-12-23 13:11:51
    密集连接的神经网络结构 当我们根据一组有限的人工设计的特征来解决分类问题时,这种方法很有效。例如,我们根据足球运动员在比赛期间的统计数据来预测他的位置。然而,当处理照片时,情况变得更加复杂。当然,...
  • 提出了一种基于改进卷积神经网络的视网膜血管分割方法。首先, 将残差学习和密集连接网络(DenseNet)相结合, 更充分地利用每一层的特征;通过增加短连接的方式, 缩短了低层特征图到高层特征图之间的路径, 强化了特征的...
  • TASK3: CNN卷积神经网络

    2020-05-26 22:03:45
    CNN:卷积神经网络。即至少有一个卷积层的网络。典型的 CNN 还包括其他类型的层级,例如池化层和密集层。 卷积:向图像应用核(滤波器)的过程 核/滤波器:小于输入的矩阵,用于将输入变成多个小区域 填充:在输入...
  • 前言在计算机视觉领域,卷积神经网络(CNN)已经成为最主流的方法,比如最近的GoogLenet,VGG-19,Incepetion等模型。CNN史上的一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确...
  • 卷积神经网络框架之Google网络 Going deeper with convolutions 简述: 本文是通过使用容易获得的密集块来近似预期的最优稀疏结构是改进用于计算机视觉的神经网络的可行方法。提出“Inception”卷积神经网络,...
  • 卷积神经网络 摘 要 卷积网络是一种强大的视觉模型,它可以产生层次化特征...我们定义并详细说明了全卷积神经网络的结构,解释它们在像素位置密集型预测任务中的应用,并得出与先前模型之间的连接。本文将经典的...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 246
精华内容 98
关键字:

密集卷积神经网络