Densely Connected Convolutional Networks(2018.1)


文章目录

  • Abstract
  • 1. Introduction
    • 提出问题
    • 以前的解决方法
    • 我们的方法
    • 效果
  • 2. Related Work
  • 3. DenseNets
    • ResNets.
    • Dense connectivity.
    • Composite function.
    • Pooling layers.
    • Growth rate.
    • Bottleneck layers.
    • Compression.
    • Implementation Details.
  • 4. Experiments
  • 5. Discussion
    • Model compactness.
    • 隐性深度监督。
    • 随机与确定性联系
    • Feature Reuse.
  • 6. Conclusion

原文
源码

Abstract

最近的研究表明,如果卷积网络在靠近输入和接近输出的层之间包含更短的连接,那么卷积网络可以更深入、更准确、更有效地训练。在本文中,我们接受了这一观察结果,并引入了密集卷积网络(DenseNet),它以前馈方式将每一层连接到其他每一层。传统的L层卷积网络有L个连接——每层和后续层之间有一个连接——而我们的网络有L(L+1) 2个直接连接
对于每一层,使用所有前一层的特征映射作为输入,并使用其自身的特征映射作为所有后续层的输入。DenseNets有几个引人注目的优点:它们缓解了梯度消失问题,加强了特征传播,鼓励特征重用,并大大减少了参数的数量。我们在四个高度竞争的目标识别基准任务(CIFAR-10、CIFAR-100、SVHN和ImageNet)上评估了我们提出的架构。DenseNets在大多数情况下获得了最先进的显著改进,同时需要更少的计算来实现高性能

1. Introduction

先简要介绍了下此前的工作,从LeNet到ResNet

提出问题

随着cnn变得越来越深,一个新的研究问题出现了:当关于输入或梯度的信息通过许多层时,当它到达网络的末端(或开始)时,它可能会消失并“洗出”

以前的解决方法

许多最近的出版物解决了这个或相关的问题。ResNets[11]和公路网[34]通过身份连接将信号从一层传递到下一层随机深度[13]通过在训练过程中随机丢弃层来缩短ResNets,以获得更好的信息和梯度流。FractalNets[17]反复组合多个具有不同数量卷积块的并行层序列,以获得较大的标称深度,同时在网络中保持许多短路径。尽管这些不同的方法在网络拓扑结构和训练过程上各不相同,但它们都有一个关键特征:它们都创建了从早期层到后期层的短路径

我们的方法

在本文中,我们提出了一种架构,将这种见解提炼成一种简单的连接模式:为了确保网络中各层之间的最大信息流,我们将所有层(具有匹配的特征映射大小)直接相互连接为了保持前馈性质,每一层从所有前一层获得额外的输入,并将自己的特征映射传递给所有后续层。图1图解地说明了这种布局。关键的是,与ResNets相比,我们从未在将特征传递到一个层之前通过求和来组合特征;相反,我们通过连接它们来组合特征。因此,第L层有L个输入,由前面所有卷积块的特征映射组成。它自己的特征映射被传递到所有随后的层。这在L层网络中引入了L(L+1) / 2个连接,而不是像在传统架构中那样只有L个连接。由于其密集的连接模式,我们将我们的方法称为密集卷积网络(DenseNet)。
这种密集连接模式的一个可能反直觉的影响是,它比传统的卷积网络需要更少的参数,因为不需要重新学习冗余的特征映射。传统的前馈体系结构可以被视为具有状态的算法,这种状态在层与层之间传递。每一层从前一层读取状态,并写入后继层。它改变了状态,但也传递了需要保存的信息。ResNets[11]通过加性恒等变换使这种信息保存显式地实现ResNets的最新变化[13]表明,许多层的贡献非常小,实际上可以在训练期间随机丢弃。这使得ResNets的状态类似于(展开的)递归神经网络[21],但ResNets的参数数量要大得多,因为每层都有自己的权重。我们提出的DenseNet架构明确区分了添加到网络中的信息和保留的信息DenseNet层非常窄(例如,每层12个过滤器),只向网络的“集体知识”中添加一小部分特征图,并保持剩余的特征图不变,最终分类器根据网络中的所有特征图做出决策。

除了更好的参数效率外,DenseNets的一大优势是其改进了整个网络的信息流和梯度,这使得它们易于训练每一层都可以直接访问损失函数和原始输入信号的梯度,从而实现隐式深度监督[20]。这有助于训练更深层次的网络架构。此外,我们还观察到密集连接具有正则化效应,这减少了训练集规模较小的任务的过拟合

效果

我们在四个高度竞争的基准数据集(CIFAR-10、CIFAR-100、SVHN和ImageNet)上评估DenseNets。我们的模型往往只需要更少的参数就能获得与现有的算法相当的精度。此外,我们在大多数基准任务上的表现明显优于当前最先进的结果

2. Related Work

公路网络[34]是第一批提供有效训练超过100层的端到端网络的架构之一。使用旁路路径和门控单元,具有数百层的高速公路网可以毫无困难地进行优化。旁路路径被认为是简化这些深度网络训练的关键因素。这一点在ResNets中得到了进一步的支持[11],其中纯实体映射被用作绕过路径。ResNets在许多具有挑战性的图像识别、定位和检测任务上取得了令人印象深刻的、破纪录的性能,例如ImageNet和COCO对象检测[11]。最近,随机深度被提出作为一种成功训练1202层ResNet的方法[13]。随机深度改进通过在训练过程中随机丢层来证明深度残差网络的训练。这表明并不是所有的层都需要,并强调在深度(残差)网络中存在大量的冗余

一种使网络更深的正交方法(例如,借助跳跃连接)是增加网络宽度GoogLeNet[36,37]使用一个“Inception模块”来连接由不同大小的过滤器生成的特征图。在[38]中,提出了一种具有广泛广义残差块的ResNets变体。事实上,只要深度足够,简单地增加ResNets每层的过滤器数量就可以提高其性能[42]。FractalNets还使用广泛的网络结构在多个数据集上取得了具有竞争力的结果[17]。

DenseNets不是从极深或极广的架构中提取表征能力,而是通过特征重用来挖掘网络的潜力产生易于训练和高度参数效率的浓缩模型。将不同层学习到的特征图连接起来,增加了后续层输入的变化,提高了效率。这构成了DenseNets和ResNets之间的主要区别。与同样连接来自不同层的特征的Inception网络[36,37]相比,DenseNets更简单、更高效

还有其他值得注意的网络架构创新产生了竞争性结果。网络中的网络(Network in Network, NIN)[22]结构将微多层感知器纳入卷积层的过滤器中,以提取更复杂的特征。在深度监督网络(DSN)[20]中,内部层由辅助分类器直接监督,这可以增强前一层接收到的梯度阶梯网络[27,25]将横向连接引入自动编码器,在半监督学习任务中产生了令人印象深刻的准确性。文献[39]提出了深度融合网络(deep - fused Nets, DFNs),通过结合不同基础网络的中间层来改善信息流。通过最小化重建损失的路径增强网络也被证明可以改善图像分类模型

3. DenseNets

考虑通过卷积网络传递的单个图像x0。网络由L层组成,每一层实现一个非线性变换H l(·),l是索引层。H l(·)可以是诸如批归一化(Batch Normalization, BN)[14]、整流线性单元(rectified linear units, ReLU)[6]、池化(Pooling)[19]或卷积(Convolu, Conv)等操作的复合函数。我们表示l这一层是x l.

ResNets.

传统的卷积前馈网络将第l层的输出作为输入连接到(l + 1)层[16],这就产生了如下的层转换:x l= Hl (x l−1)。ResNets[11]添加了一个跳过连接,通过恒等函数绕过非线性转换:
ResNets的一个优点是,梯度可以直接通过恒等函数从后面的层流向前面的层。然而,恒等函数和H l以求和的方式组合,这可能会阻碍信息在网络中的流动。

Dense connectivity.

为了进一步改善层之间的信息流,我们提出了一种不同的连接模式:我们引入从任何层到所有后续层的直接连接。图1图解地说明了结果DenseNet的布局。因此,l这一层接收所有前一层的特征映射,x 0,…,x l−1,作为输入:
其中[x 0,x 1,…],x l−1]表示第0,…,l−1层生成的特征图的拼接。
由于其密集的连通性,我们将这种网络架构称为密集卷积网络(DenseNet)。为了便于实现,我们将H l的多个输入连接起来。将eq.(2)中的(·)分解为单个张量。

Composite function.

受[12]的影响,我们定义H l(·)为三个连续操作的复合函数:批归一化(batch normalization, BN)[14],然后是整流线性单元(rectified linear unit, ReLU)[6]和3 × 3卷积(Conv)。

Pooling layers.

当特征图的大小发生变化时,Eq.(2)中使用的连接操作是不可行的。然而,卷积网络的一个重要部分是下采样层,它改变了特征图的大小。为了便于我们架构中的下采样,我们将网络划分为多个紧密连接的密集块;见Figure2。我们将块之间的层称为过渡层,它们进行卷积和池化。我们实验中使用的过渡层包括一个批处理归一化层和一个1×1卷积层,然后是一个2×2平均池化层

一个有三个dense块的深致密网。两个相邻块之间的层称为过渡层,(包括一个批处理归一化层和一个1×1卷积层,然后是一个2×2平均池化层)通过卷积和池化来改变特征图的大小

Growth rate.

如果每个函数H l产生k个特征映射,则第l层有k 0 + k x (l−1)个输入特征映射,其中k 0为输入层的通道数(每个通道对应着一个特征映射)。DenseNet和现有网络架构的一个重要区别是,DenseNet可以有非常窄的层,例如,k = 12。我们把超参数k称为网络的增长率。
我们在第4节中表明,相对较小的增长率足以在我们测试的数据集上获得最先进的结果。对此的一种解释是,每一层都可以访问其块中的所有前面的特征图,因此可以访问网络的“集体知识”。可以将特征映射视为网络的全局状态。每一层向这个状态添加k个自己的特征映射。增长率决定了每一层对全局状态贡献多少新信息。全局状态一旦写入,就可以从网络中的任何地方访问,并且与传统网络体系结构不同,不需要从一层到另一层复制它。

Bottleneck layers.

虽然每一层只产生k个输出特征映射,但它通常有更多的输入。在[37,11]中已经指出,可以在每次3×3卷积之前引入1×1卷积作为瓶颈层,以减少输入特征映射的数量,从而提高计算效率。我们发现这种设计对DenseNet特别有效,我们参考了具有这种瓶颈层的网络,即**BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3×3)**版本的H l,如DenseNet-B。在我们的实验中,我们让每个1×1卷积生成4k特征映射。
1×1卷积

Compression.

为了进一步提高模型的紧凑性,我们可以减少过渡层的特征映射的数量。如果一个密集块包含m个特征映射,我们让下面的过渡层生成θm(向下取整)输出特征映射,其中0 < θ≤1称为压缩因子。当θ=1时,跨过渡层的特征映射数保持不变。我们将θ<1的DenseNet称为DenseNet- C,实验中设θ = 0.5。当瓶颈层和过渡层均为θ <1;我们称我们的模型为DenseNet-BC。

Implementation Details.

在除ImageNet以外的所有数据集上,我们实验中使用的DenseNet有三个dense块,每个块都有相同数量的层。在进入第一个密集块之前,对输入图像执行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}的网络
在ImageNet上的实验中,我们在224×224输入图像上使用具有4个密集块的DenseNet-BC结构。初始卷积层包括2k个卷积,大小为7×7,步幅为2;所有其他层中的特征映射的数量也遵循设置k。我们在ImageNet上使用的确切网络配置如表1所示。

4. Experiments


5. Discussion

从表面上看,DenseNets与ResNets非常相似:Eq.(2)与Eq.(1)的不同之处在于H l(·)是串联而不是求和。然而,这个看似很小的修改的含义导致了两种网络体系结构的本质不同的行为。

Model compactness.

作为输入连接的直接结果,任何DenseNet层学习的特征图都可以被所有后续层访问。这鼓励了整个网络中的特性重用,并导致了更紧凑的模型。
图4中的左两个图显示了一项实验的结果,该实验旨在比较DenseNets的所有变体(左)和可比较的ResNet架构(中)的参数效率。我们在C10+上训练了多个不同深度的小网络,并绘制了它们的测试准确率作为网络参数的函数。与AlexNet[16]或VGG-net[29]等其他流行的网络架构相比,预激活的ResNets使用更少的参数,但通常获得更好的结果[12]。因此,我们将DenseNet (k = 12)与该架构进行比较。DenseNet的训练设置与前一节保持相同。

该图显示,DenseNet-bc始终是DenseNet参数效率最高的变体。此外,为了达到相同的精度水平,DenseNet-BC只需要大约1/3的ResNets参数(中间图)。这个结果与我们在图3中展示的ImageNet上的结果一致。图4的右图显示,只有0.8M可训练参数的DenseNet-BC能够达到与具有10.2M参数的1001层(预激活)ResNet[12]相当的精度。

隐性深度监督。

密集卷积网络精度提高的一种解释可能是,通过较短的连接,各个层从损失函数获得了额外的监督。人们可以将DenseNets理解为一种“深度监督”。深度监督的好处之前已经在深度监督网络(DSN;[20]),其中每个隐藏层都附加了分类器,强制中间层学习判别特征
DenseNets以隐式的方式执行类似的深度监督:网络顶部的单个分类器通过最多两到三个过渡层为所有层提供直接监督。然而,DenseNets的损失函数和梯度基本上不那么复杂,因为所有层之间共享相同的损失函数

随机与确定性联系

在密集卷积网络和残差网络的随机深度正则化之间有一个有趣的联系[13]。在随机深度下,残差网络中的层被随机丢弃,从而在周围层之间建立直接连接由于池化层永远不会被丢弃,因此网络产生了与DenseNet类似的连接模式:在相同池化层之间的任何两层都有很小的概率直接连接——如果所有中间层都被随机丢弃。尽管方法最终是完全不同的,但DenseNet对随机深度的解释可能会为该正则化器的成功提供见解。

Feature Reuse.

通过设计,DenseNets允许各层访问其所有前一层的特征图(尽管有时通过过渡层)。我们进行了一个实验来调查一个训练过的网络是否利用了这个机会。我们首先在C10+上训练DenseNet, L = 40, k = 12。对于每个卷积层l在一个块内,我们计算分配给具有层5的连接的平均(绝对)权重。图5显示了所有三个密集块的热图。平均绝对权重充当卷积层对其前一层的依赖关系的代理。位置(l,s)中的红点表示层l通常情况下大量使用之前生成的s层特征图。从图中可以得出以下几点结论:
1. 所有层将权重分散到同一块内的许多输入上。这表明,早期层提取的特征确实被同一密集块中的深层层直接使用。
2. 过渡层的权重也在前一个密集块内的所有层上分散它们的权重,表明信息流通过很少的间接从DenseNet的第一层流向最后一层。
3. 第二和第三密集块内的层一致地为过渡层(三角形的顶部行)的输出分配了最小的权重,这表明过渡层输出了许多冗余特征(平均权重较低)。这与DenseNet-BC的强大结果保持一致,这些输出正是被压缩的。
4. 尽管最后的分类层,如最右边所示,也在整个密集块上使用权重,但似乎有一种对最终特征图的集中,这表明在网络后期可能会产生一些更高级的特征。

经过训练的DenseNet中卷积层的平均绝对滤波器权值。像素(s,l)的颜色编码了密集块内连接卷积层s到l的权重的平均L1范数(通过输入特征映射的数量归一化)。用黑色矩形突出显示的三列分别对应两个过渡层和分类层。第一行编码连接到密集块的输入层的权重。

6. Conclusion

我们提出了一种新的卷积网络架构,我们称之为密集卷积网络(DenseNet)。它引入了具有相同特征图大小的任意两个层之间的直接连接。我们表明,DenseNets可以自然地扩展到数百层,同时没有优化困难
在我们的实验中,随着参数数量的增加,DenseNets倾向于在精度上得到一致的提高,而没有任何性能下降或过拟合的迹象。在多种设置下,它在几个高度竞争的数据集上获得了最先进的结果。此外,densenet只要更少的参数和更少的计算来实现最先进的性能。由于我们在研究中采用了针对残差网络优化的超参数设置,因此我们相信,通过更详细地调整超参数和学习率计划,可以进一步提高DenseNets的准确性。
在遵循简单的连接规则的同时,DenseNets自然地集成了身份映射、深度监督和多元化深度的特性。它们允许在整个网络中重用特征,因此可以学习更紧凑,根据我们的实验,更准确的模型。由于其紧凑的内部表示和减少的特征冗余,DenseNets可能是基于卷积特征的各种计算机视觉任务的良好特征提取器,例如[4,5]。我们计划在未来的工作中使用DenseNets研究这种特征转移。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257398.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI并行计算:CUDA和ROCm

1 介绍 1.1 CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;是Nvidia于2006年推出的一套通用并行计算架构&#xff0c;旨在解决在GPU上的并行计算问题。其易用性和便捷性能够方便开发者方便的进行GPU编程&#xff0c;充分利用GPU的并行能力&#xff0…

(使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))

使用vite搭建vue3项目&#xff08;vite vue3 vue router pinia element plus&#xff09; 初始化项目安装依赖&#xff0c;运行项目初始配置 初始化项目 1.需要在创建项目的位置cmd目录下执行 2. npm init vitelatest 回车 npm init vitelatest3.填上自己的项目名称 回车…

ELK(三)—安装可视化工具

目录复制 目录 一、ElasticSearch-Head可视化工具介绍1.1特性&#xff1a;1.2用法&#xff1a; 二、安装2.1docker安装2.2Chrome插件安装 一、ElasticSearch-Head可视化工具介绍 ElasticSearch-Head 是一个基于浏览器的 Elasticsearch 可视化工具&#xff0c;它提供了一个直观…

JSON字符串转泛型对象

JSON字符串转泛型对象 以下问题只仅限于博主自身遇到&#xff0c;不代表绝对出现问题 相关类展示&#xff1a; 参数基类 public class BaseParams { }基类 public abstract class AbstractPush<Params extends BaseParams> {protected abstract void execute(Params…

mysql数据库中int字段长度,即int(1)和int(10)的区别

1.起因 为什么想起来看这个问题&#xff0c;是最近有同事问mysql的init类型的字段长度的问题&#xff0c;他问int(1)和int(10)是什么意思&#xff0c;是字段长度越大&#xff0c;能存储的数字越大么&#xff1f;咋一问&#xff0c;还有点懵&#xff0c;从惯性思维来看&#xf…

论文分享 | 基于机载单目视觉的四旋翼无人机群内相对定位

阿木实验室推出的开源项目校园赞助活动&#xff0c;再次迎来开发者参与&#xff01; 国防科技大学电子对抗学院司晓坤同学&#xff0c;在Prometheus开源仿真架构的基础上进行了二次开发&#xff0c;且使用Prometheus 450&#xff08;P450&#xff09;进行了真机实验并发表了相…

12月8日星期五今日早报简报微语报早读

12月8日星期五&#xff0c;农历十月廿六&#xff0c;早报微语早读。 1、广东男篮官宣&#xff1a;易建联9号球衣退役12月29日 正好首秀21周年&#xff1b; 2、2024届全国普通高校毕业生规模预计达1179万人&#xff1b; 3、国务院&#xff1a;严禁新增钢铁产能 严格合理控制煤…

leetcode面试经典150题——35 螺旋矩阵

题目&#xff1a; 螺旋矩阵 描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 提示&…

Linux centos8安装JDK1.8、tomcat

一、安装jdk 1.如果之前安装过jdk&#xff0c;先卸载掉旧的 rpm -qa | grep -i jdk 2.检查yum中有没有java1.8的包 yum list java-1.8* 3.yum安装jdk yum install java-1.8.0-openjdk* -y 4.验证 二、安装tomcat Index of /tomcat 可以在这里选择你想要安装的tomcat版本…

学习设计模式的一个好网址

常用设计模式有哪些&#xff1f; (refactoringguru.cn)https://refactoringguru.cn/design-patterns

统信UOS_麒麟KYLINOS安装奇安信并自动配置服务器IP端口号

往期好文&#xff1a;麒麟iso镜像中GRUB字体大小怎么改&#xff1f; hello&#xff0c;大家好啊&#xff0c;今天我要给大家介绍的是在统信UOS或者麒麟KYLINOS操作系统上安装奇安信网神终端管理系统&#xff0c;并通过自动配置IP及端口号来简化管理流程的方法。这种配置主要通过…

Linux-实现小型日志系统

目录 一.日志 二.实现任意个数元素求和 三.编写一个日志函数 1.设置日志等级 2.设置日志时间 3.设置日志的打印格式 4.将日志的内容输出到文件 一.日志 日志等级&#xff0c;日志时间&#xff0c;日志内容&#xff0c;文件的名称和行号 日志等级…