论文标题:Densely Connected Convolutional Networksgit
论文做者:Gao Huang Zhuang Liu Laurens van der Maaten Kilian Q. Weinberger
github
论文地址:https://arxiv.org/pdf/1608.06993.pdf算法
DenseNet 的GitHub地址:https://github.com/liuzhuang13/DenseNet网络
参考的 DenseNet 翻译博客:https://zhuanlan.zhihu.com/p/31647627架构
声明:小编翻译论文仅为学习,若有侵权请联系小编删除博文,谢谢! app
小编是一个机器学习初学者,打算认真研究论文,可是英文水平有限,因此论文翻译中用到了Google,并本身逐句检查过,但仍是会有显得晦涩的地方,若有语法/专业名词翻译错误,还请见谅,并欢迎及时指出。机器学习
传送门:请点击我ide
若是点击有误:https://github.com/LeBron-Jian/DeepLearningNote函数
在计算机视觉领域,卷积神经网络(CNN)已经成为最主流的方法,好比AlexNet, VGGNet, Inception,ResNet等模型。CNN史上一个里程碑事件是ResNet模型的出现,ResNet能够训练出更深的CNN模型,从而实现更高的准确度。ResNet模型的核心是经过创建前面层与后面层之间的“短路链接”(shortcuts , skip connection),这有助于训练过程当中梯度的反向传播,从而能训练出更深的CNN网络。今天咱们要介绍的是DenseNet模型,它的基本思路与ResNet一致,可是它创建的是前面全部层与后面层的密集链接(dense connection),它的名称也是由此而来。性能
众所周知,在DenseNet以前,卷积神经网络提升效率的方向,要么深(好比ResNet,解决了网络深时候的梯度消失问题),要么宽(好比GoogLeNet的 Inception),而做者从Feature入手,经过对feature 的极致利用达到更好的效果和更少的参数。因此DenseNet的另外一大特点是经过特征在channel 上的链接来实现特征复用(feature reuse)。这些特色让DenseNet在参数和计算成本更少的情形下实现比 ResNet 更优的性能,DenseNet也所以斩获CVPR 2017的最佳论文奖。本文学习其论文。
该文章提出的DenseNet核心思想在于创建了不一样层之间的链接关系,充分利用了feature,进一步减轻了梯度消失问题,加深网络不是问题,并且训练效果很是好。另外,利用bottleneck layer,Translation layer以及较小的growth rate使得网络变窄,参数减小,有效抑制了过拟合,同时计算量也减小了。DenseNet优势不少,并且在和ResNet的对比中优点仍是很是明显的。
最近的研究代表,若是神经网络各层到输入和输出层采用更短的链接(shorter connections),那么网络能够设计的更深,更准确且训练起来更有效率。在这篇文章中,咱们基于这个观点,介绍了稠密卷积网络(DenseNet),该网络在前馈时将每一层与其余的任一层都进行了链接。传统的 L 层卷积网络有 L 个链接——每一层与它的前一层和后一层相连——咱们的网络有 L(L+1)/2 个链接。每一层都将以前的全部层的特征图做为输入,而它本身的特征图是以后全部层的输入。DenseNets 有一些很不错的优势:有助于解决梯度消失(vanishing-gradient)问题,加强特征 (feature)传播,促进特征的重复利用,大大减小了参数的数量。咱们在四个目标检测任务(CIFAR-10, CIFAR-100, SVHN和 ImageNet)中验证了咱们提出的结构。DenseNets 在这些数据集上大都有较大的提升,并且使用更少的计算量就能够得到更好的性能。代码和预训练模型以下:https://github.com/liuzhuang13/DenseNet。
在视觉检测任务中,卷积神经网络(CNNs)已经成为占有绝对优点的机器学习方法。尽管它们在20年前就已经被提出了,可是计算机硬件和网络结构的改善才使训练深层的卷积网络在最近成为现实。起初的LeNet5有5层,VGG有19层,只有去年的Highway网络和ResNets网络才克服了100层网络的障碍。
随着CNNs变得愈来愈深,一个新的问题出现了:当输入或梯度信息在通过不少层的传递以后,在到达网络的最后(或开始)可能会消失或者“被冲刷掉”(wash out)。不少最新的研究都说明了这个或者与这个相关的问题。ResNet网络和Highway网络将旁路信息(bypass Signal)进行链接。随机深度(stochastic depth)在训练过程当中随机丢掉了一些层,进而缩短了ResNets网络,得到了更好的信息和梯度流。FractalNets 使用不一样数量的卷积 block 来重复的链接一些平行层,得到更深的网络同时还保留了网络中的 short paths。尽管这些方法在网络结构和训练方法等方面有所不一样,但他们都有一个关键点:他们都在前几层和后几层之间产生了短路径(short paths)。
上图为一个dense block的结构图,在传统的卷积神经网络中,若是你有 L 层,那么就会有 L 个链接,可是在DenseNet中,会有 L(L+1)/2 个链接。简单说,就是每一层的输入来自前面全部层的输出。就是说 x0 是 input,H1 的输入是 x0(input),H2的输入是 x0 和 x1 (x1 是 H1 的输出)。
在这篇文章中,咱们提出了一个结构,该结构是提炼上述观点而造成的一种简单的链接模式:为了保证可以得到网络层之间的最大信息,咱们将全部层(使用合适的特征图尺寸)都进行互相链接。为了可以保证前馈的特性,每一层将以前全部层的输入进行拼接,以后将输出的特征图传递给以后的全部层。结构如图1所示。重要的一点是,与ResNets不一样的是,咱们不是在特征传递给某一层以前将其进行相加(combine),而是将其进行拼接(concatenate)。所以,第 l 层 有 l 个输入,这些输入是该层以前的全部卷积块(block)的特征图,而它本身的特征图则传递给以后的全部 L-l 层。这就表示,一个 L 层的网络就有 L(L+1)/2 个链接,而不是像传统的结构仅仅有 L 个链接,因为它的稠密链接模块,因此咱们更喜欢将这个方法称为稠密卷积网络(DenseNet)。
该稠密链接模块的一个优势是它比传统的卷积网络有更少的参数,由于它不须要再从新学习多余的特征图。传统的前馈结构能够被当作一种层与层之间状态传递的算法。每一层接收前一层的状态,而后将新的状态传递给下一层。它改变了状态,但也传递了须要保留的信息。ResNets将这种信息保留的更明显,由于它加入了自己的变换(identity transformations)。最近不少关于ResNets的研究都代表ResNets的不少层是几乎没有起做用的,能够在训练时随机的丢掉。这篇论文【21】阐述了ResNets很像(展开的)循环神经网络,可是比起循环神经网络有更多的参数,由于它每一层都有本身的权重。咱们提出的DenseNet结构,增长到网络中的信息与保留的信息有明显的不一样。DenseNet层很窄(例如每一层有12个滤波器),仅仅增长小数量的特征图到网络的“集体知识”(collective knowledge),而且保持这些特征图不变——最后的分类器基于网络中的全部特征图进行预测。
除了更好的参数利用率,DenseNet 还有一个优势是它改善了网络中信息和梯度的传递,这就让网络更容易训练。每一层均可以直接利用损失函数的梯度以及最开始的输入信息,至关因而一种隐形的深度监督(implicit deep supervision)。这有助于训练更深的网络。此外,咱们还发现稠密链接有正则化的做用,在更少训练集的任务中能够下降过拟合。
咱们在四个目标检测任务(CIFAR-10, CIFAR-100,SVHN和ImageNet)中验证了DenseNet。在和现有模型有类似准确率的前提下,咱们 的模型有更少的参数。此外,咱们的网络还超过了目前在大部分的检测任务都有最好结果的算法。
自从神经网络被提出以后,网络结构的探索就成为神经网络研究的一部分。最近神经网络的普遍关注也给这个研究领域注入了新的生机。网络层数的增长也让更多的人进行结构的改善,不一样链接模式的探索,早期研究观点的复现等方面的研究。
在 1980s 神经网论文中提出的级联结构很像咱们提出的稠密网络。他们以前的工做主要关注在全链接的多层感知机上。最近,使用批梯度降低训练的全链接的级联网络也被提出来了。尽管在小数据上有效,但该方法的网络却有几百个参数。【9, 23, 31, 41】提出在CNNs 中利用跨层连接得到的多种特征,这已经被证实在不少视觉任务上有效。和咱们的工做相似,【1】使用和咱们类似的跨层连接方式提出了一种纯理论的网络架构。
Highway是这些网络中第一个提出使用 100 多层的结构训练一个端到端的网络。使用旁路(bypassing paths)和门控单元(gating units),Highway 网络能够很轻松地优化上百层的网络。旁路被认为是使深层网络容易训练关键因素。该观点在ResNets中被进一步证明,ResNets使用自己的特征图做为旁路。ResNets在不少图像识别,定位和检测任务(如ImageNet 和 COCO 目标检测)中都得到了不错的效果,而且还打破了以前的记录。最近,一种能够成功训练 1202层ResNets的随机深度(stochastic depth)被提出。随机深度经过训练过程当中随机丢掉一些层来优化深度残差网络的训练过程。这代表深度(残差)网络中并非全部的层都是必要的,有不少层是冗余的。咱们论文的一部分就受到了该论文的启发。预激活(pre-activation)的ResNets也有助于训练超过 1000 层的网络。
一种让网络更深(如跨层链接)的正交法(orthogonal approach)是增长网络的宽度。GooLeNet使用了“inception”模块,将不一样尺度的滤波器产生的特征进行组合链接。在【38】中,提出了一种具备普遍宽度的残差模块,它是ResNets的一种变形。事实上,只简单的增长ResNets每一层的滤波器个数就能够提高网络的性能。FractalNets 使用一个宽的网络结构在一些数据集上也得到了不错的效果。
DenseNets 不是经过很深或者很宽的网络来得到表征能力,而是经过特征的重复使用来利用网络的隐含信息,得到更容易训练,参数效率更高的稠密模型。将不一样层学到的特征图进行组合链接,增长了以后层输入的多样性,提高了性能。这同时也指出了 DenseNets和 ResNets 之间的主要差别。尽管 Inception 网络也组合链接了不一样层的特征,但DenseNets 更简单,也更高效。
也有不少著名的网络结构得到了不错的结果。NIN 结构将多层感知机与卷积层的滤波器相链接来提取更复杂的特征。在DSN中,经过辅助分类器来监督内部层,增强了前几层的梯度。Ladder网络将横向链接(lateral connection)引入到自编码器中,在半监督学习任务中得到不错的效果。在【39】中,DFNs经过链接不一样基础网络的中间层来改善信息的传递。带有能够最小化重建损失路径(pathways that minimize reconstruction losses)的网络也能够改善图像分类模型的性能。
图1表示的是 Dense block,而图2 表示的则是一个 DenseNet的结构图,在这个结构图中包含了3个 dense block。做者将DenseNet 分为多个 dense block,缘由是但愿各个 dense block 内的 feature map 的 size 统一,这样在作 concatenation 就不会有 size的问题。
假设一张图片 x0 在卷积网络中传播。网络共有 L 层,每一层都有一个非线性转换 Ht(*),其中 l 表示层的维度(即第几层)。 Ht(*) 是一个组合函数,有BN,ReLU,池化或者卷积。咱们用 xt 表示 lth 层的输出。
ResNets。传统的前馈网络是将 lth 层的输出做为 (l + 1)th 层的输入,可用该方程来表示:xl = Hl(xt - 1)。ResNets增长了一个跨层链接,将自身与非线性转换的结果相加:
因此对ResNet而言,l 层的输出是 l-1 层的输出加上对 l-1 层输出的非线性变换。
ResNets 的一个优势是能够直接将梯度从后层传向前层。然而,自身与通过 Hl 获得的输出是经过求和的形式来链接的。这可能使网络中信息的传播受到影响。
稠密链接(Dense connectivity)。为了更好的改善层与层之间信息的传递,咱们提出了一种不一样的链接模式:将该层与以后的全部层进行链接,如图1所示,所以,lth 层将与以前全部层的特征图 x0,...xl-1做为输入:
其中 [x0, ...xl-1] 表示第 0, ... l-1层输出的特征图的进行拼接。因为他的稠密链接模式,咱们称该网络结构为稠密卷积网络(DenseNet)。为了便于表达,咱们将方程(2)中 Hl(*) 的多个输入表示为一个向量。
组合函数(composite function)。受【12】的启发,咱们将 Hl(*) 定义为三种操做的组合函数,分别是BN,ReLU和3*3的卷积。
池化层(pooling layers)。当特征图的尺寸发生改变时,方程(2)中链接操做就会出现问题。然而,卷积网络有一个基础的部分——下采样层,它能够改变特征图的尺寸。为了便于下采样的实现,咱们将网络划分为多个稠密链接的 dense block。如图2所示。咱们将每一个 block 之间的层称为过渡层,完成卷积核池化的操做。在咱们的实验中,过渡层由 BN层,1*1卷积层和2*2平均池化层组成。
增加速率(growth rate)。若是每一个函数 Hl 都产生 k个特征图,以后的 lth 层就有 k0+k(l+1) 个特征图做为输入,其中 k0 表示该层的通道数。DenseNet和现存网络结构的一个很重要的不一样是,DenseNet的网络很窄,如 k=12.咱们将超参数 k 称为网络的增加速率。咱们会在文章的第4部分进行说明,一个很小的增加速率在咱们测试的数据集上就能够得到不错的效果。这种状况的一种解释就是,每一层均可以和它所在的 block 中以前的全部特征图进行链接,使得网络具备了“集体知识”(collective knowledge)。能够将特征图看作是网络的全局状态。每一层至关因而对当前状态 增长 k 个特征图。增加速率控制着每一层有多少信息对全局状态有效。全局状态一旦被写定,就能够在网络中的任何地方被调用,而不用像传统的网络结构那样层与层之间的不断重复。
Bottleneck层。尽管每一层只产生 k 个输出特征图,但它却有更多的输入,在【37, 11】中已经说明能够在 bottleneck 层中3*3的卷积以前加入 1*1 的卷积实现降维,能够减小计算量。咱们发现这种设计对 DenseNet 极其有效,咱们将具备 bottleneck 层,即 BN-ReLU-Conv (1*1)——BN-ReLU-Conv(3*3) 的结构称为 DenseNet-B。在咱们的实验中,咱们令 1*1 的卷积生成 4k 个特征图。
Compression(压缩)。为了简化模型,咱们在过渡层中减小了特征图的数量。若是一个Dense block 有 m 个特征图,咱们让以后的过渡层生成 θm 个输出特征图,其中 0 < θ <=1 表示Compression系数,当 θ=1 时,通过过渡层的特征图数量没有改变。咱们定义 θ<1 的DenseNet为DenseNet-C,而且在咱们的实验中 θ = 0.5。若是 bottleneck 和过渡层都有 θ < 1,咱们称该模型为 DenseNet-BC。
实现细节。在除了ImageNet外的全部数据集上,咱们实验中使用的 DenseNet都有3个dense block,每一个 block 都要向他的层数。在进入第一个 dense block 以前,输入图像先通过 16个(DenseNet-BC中是两倍的增加速率)卷积。对于 3*3 的卷积层,使用一个像素的零填充来保证特征图尺寸不变。在两个 dense block 之间的过渡层中,咱们在 2*2 的平均池化层以后增长了 1*1 的卷积。在最后一个 dense block 以后,使用全局平均池化和softmax分类器。三个 dense block 的特征图的尺寸分别是 32*32, 16*16, 8*8 。咱们改变一些参数 {L=40, k=12},{L=100, k=12},{L=100,k=24},在基本的 DenseNet上作了一些实验。对于 DenseNet-BC,分别设置{L=100, k=12},{L=250, k=24},{L=190,k=40}。
对于在ImageNet数据集上的实验,咱们使用4个dense block的 DenseNet-BC结构,图片的输入是 224*224。最开始的卷积层有 2k(64)个卷积,卷积核是 7*7,步长是2;其他全部层的特征图都设为 k。在ImageNet数据集上的网络如表1所示。
table1 就是整个网络的结构图。这个表中的 k=32,k=48中的 k 是 growth rate,表示每一个 dense block 中每层输出的 feature map个数。为了不网络变得很窄,做者都是采用较小的 K,好比32这样的,做者的实验也代表小的 k 能够有更好的效果。根据 dense block 的设计,后面几层能够获得前面全部层的输入,所以 concat后的输入 channel 仍是比较大的。另外这里每一个 dense block的 3*3 卷积前面都包含了一个 1*1 的卷积操做,就是所谓的 bottleneck layer,目的是减小输入的 feature map 数量,既能降维减小计算量,又能融合各个通道的特征。另外做者为了进一步压缩参数,在每两个 dense block 之间又增长了 1*1 的卷积操做。所以在后面的实验对比中,若是看到DenseNet-C这个网络,表示增长了这个 Translation layer,该层的 1*1 卷积的输出 channel 默认是输入 channel 到一半。若是你看到 DenseNet-BC这个网络,表示既有 bottleneck layer,又有 Translation layer。
咱们在一些检测任务的数据集上证实 DenseNet的有效性,而且和现有的一些网络进行了对比,特别是ResNet和它的变形。
CIFAR。两种CIFAR数据集都是 32*32 的彩色图,CIFAR-10(C10)是10类,CIFAR-100(C100)是100类。训练集和测试集分别有 50000 和 10000 张图片,咱们从训练集中选 5000 张做为验证集。咱们采用这两个数据集上普遍使用的数据加强方式(镜像/平移)。用在数据集后的“+”来标色使用了这种数据加强方式(如C10+)。至于预处理,我么使用每一个颜色通道的均值和标准差来归一化。最后,咱们使用所有的 50000 张训练图片,在训练结束时记录测试偏差。
SVHN。SVHN数据集是 32*32的彩色数字图。训练集有 73257张图片,测试集有 26032张,有 531131 张做为额外的训练。在接下来实验中,咱们没有使用任何的数据加强,从训练集中选取 60000 张图片做为验证集。咱们用验证集偏差最小的模型来进行测试。咱们对像素值执行除 255 操做,归一化到 【0, 1】。
ImageNet。ILSVRC 2012 分类数据集有 1.2百万张训练集,50000张验证集,共 1000类。咱们采用和论文【8, 11, 12】一样的数据加强方式,在测试时使用 Single-crop 或 10-crop 将图片尺寸变为 224*224。根据【11, 12, 13】,咱们记录了在验证集上的分类偏差。
table 2 在三个数据集(C10, C100,SVHN)上和其余算法的对比结果。ResNet【11】就是Kaiming He的论文,对比结果一目了然。DenseNet-BC的网络参数和相同深度的 DenseNet相比确实减小了不少!参数减小除了能够节省内存,还能减小过拟合。这里对于SVHN 数据集,DenseNet-BC的结果并无 DenseNet(k=24)的效果好,做者认为缘由主要是 SVHN 这个数据集相对简单,更深的模型容易过拟合。在表格的倒数第二个区域的三个不一样深度 L 和 k 的 DenseNet的对比能够看出随着 L 和 K 的增长,模型的效果是更好的。
做者在不一样数据集上采样的 DenseNet 网络会有一点不同,好比在 Imagenet 数据集上,DenseNet-BC 有 4个 dense block,可是在别的数据集上只用3个 dense block。
全部的网络均使用随机梯度降低法(SGD)进行训练。在CIFAR和SVHN 数据上,咱们令 batchsize = 64,分别训练了 300轮和40轮。最初的学习率都为 0.1,分别在训练总轮数的 50%和75%时,将学习率变为原来的 0.1倍。在ImageNet上,咱们将模型训练了90轮,batchsize=256。初始学习率设为 0.1,在第30轮和第 40 轮分别将学习率缩小 10倍。受 GPU内存的限制,咱们设最大的模型(DenseNet-161) batchsize=128。为了弥补小 batch size 的不足,咱们将模型训练了 100 轮,而且在 90轮时将学习率除以 10。
根据【8】,咱们设置梯度衰减值为 10e-4,Nesterov 动量设为 0.9。咱们采用论文【10】中介绍的权重初始化方式。对于三种没有使用数据加强的数据,如 C10, C100,SVHN,咱们在每一个卷积层(除了第一层)以后增长了一层 dropout层,而且设置失活率为 0.2。对于每一个任务和每一个模型都只进行一次测试。
咱们使用不一样的深度(L),不一样的增加速率(k),来分别训练 DenseNets。在CIFAR 和 SVHN 上的结果如表2所示。为了突出结果,咱们对其作了标记,将性能优于现存模型的结果加粗,将该数据集上的最好结果用蓝色标记。
准确率(Accuracy)。可能最惹人注目的是表2最后一行的结果,其是 L=190, k=40 的 DenseNet-BC 网络在CIFAR 上的结果,性能已超过现存的全部模型。在C10+上错误率为 3.45%,在C100+上的错误率 为 17.18% 。在C100+上的偏差率远远低于宽ResNet(wide ResNet)网络。咱们在C100和C100(无数据加强)上的偏差很喜人:比 FractalNets和使用dropout正则项的结果低了接近 30%。在SVHN上,L=100,k=24 的 DenseNet(使用dropout)也远超宽ResNet 的最好结果。然而,250层的DenseNet-BC 的性能却没有提高太多。这多是由于 SVHN的任务很简单,复杂的模型每每会致使过拟合。
容量(Capacity)。不考虑 compression或bottleneck层, L和k越大,模型性能越好。咱们把这归功于模型容量的增长。这在C10+和C100+这两列中获得了很好的证实。在C10+这列,偏差率从 5.24%降到了 4.10%,最后到了 3.74%。由于模型的参数量从1M增长到7M,最后到了 27.2M。在C100+这列,咱们能够看到类似的结果。这代表DenseNet可使用更大更深的模型来增长表征能力,也代表他们没有出现过拟合或者残差网络的优化困难等问题。
参数效率。表2 的结果代表DenseNet比常见的网络(特别是ResNet)的参数效率更高。使用 bottleneck结构而且在过渡层使用降维操做的 DenseNet-BC的参数利用率极其高。例如,咱们的 250层模型只有 15.3 M的参数量,可是它的性能却远超其余参数量超过 30M的模型,像 FractalNets和 宽 ResNet。咱们也将L=100,k=12的 DenseNet-BC性能与 1001层 pre-activation的 ResNet进行了比较(如,在C10+的偏差 4.51%VS4.62%, 在C100+的偏差:22.27%VS22.71%)。这两个网络在C10+数据上的训练loss和测试偏差如图4(右图)。1001层的深度ResNet收敛到一个更低的loss,但却有类似的测试偏差。咱们会在接下来对这个内容进行更深刻的探讨。
过拟合(Overfitting)。更高效的利用参数的一个做用是DenseNets不容易发生过拟合。在不使用数据加强的数据集上,咱们发现到 DenseNet结构和以前的工做相比较,其改进仍是很明显的。在C10上,偏差降了 29%,从 7.33%降到了 5.19%。在C100上,降了大约 30%,从 28.2%降到了 19.64%。经过实验,咱们发现一个潜在的过拟合现象:在C10上,经过将 k 从 12 增长到 24,模型的参数量增长了 4倍,而偏差却从 5.77% 增长到 5.83%,DenseNet-BC 的 bottleneck 和 compression层彷佛是应对这种现象的一种有效措施。
咱们在ImageNet分类任务上测试了不一样深度和增加速率的 DenseNet-BC 的偏差,而且和ResNet结构的性能进行了比较。为了对这两种结构有一个公平的比较,咱们排除了其余全部的因素,如数据预处理方式,优化器设置。咱们仅仅将 DenseNet-BC 网络替代ResNet模型,而保留ResNet的其余实验参数不变。
咱们记录了DenseNets在ImageNet上 single-crop 和 10-crop的验证偏差,如表3所示。
DenseNets 和 ResNets Single-crop的top-1 验证偏差如图3所示,其中左图以参数量为变量,右图以 FLOPs为变量。
如图3所示,与ResNets相比,在相同性能的前提下 DenseNets参数量和计算量更小。例如,拥有 20M 参数的 DenseNet-201 的偏差率和拥有超过 40M 参数的 101-ResNet 偏差率相近。从图3的右图也能够看到相似的结果:和ResNet-50 计算量接近的 DenseNet 大约是 ResNet-101 计算量的两倍。
图3是DenseNet-BC 和 ResNet在ImageNet数据集上的对比,左边的那个图是参数复杂度和错误率的对比,你能够在相同错误率下看参数复杂度,也能够在相同参数复杂度下看错误率,提高仍是很明显的,右边是flops(能够理解为计算复杂度)和错误率率的对比,一样有效果。
值得注意的是,咱们是修改和ResNets对应的超参数而不是DenseNets的。咱们相信还能够经过修改更多的超参数来优化DenseNet在ImageNet上的性能。
图4也很重要,左边的图表示不一样类型DenseNet的参数和 error 对比。中间的图表示 DenseNet-BC和ResNet在参数和error的对比,相同 error 下,DenseNet-BC的参数复杂度要小不少。右边的图也是表达 DenseNet-BC-100 只须要不多的参数就能达到和 ResNet-1001相同的结果。
从表面来看,DenseNets和ResNets很像:方程(2)和方程(1)的不一样主要在输入 Hl(*) (进行拼接而不是求和)。然而,这个小的改变倒是给这两种网络结构的性能带来了很大的差别。
模型简化性(Model Compactness)。将输入进行链接的直接结果是,DenseNets 每一层学到的特征图均可以被之后的任一层利用。该方式有助于网络特征的重复利用,也所以获得了更简化的模型。
图4左边的两张图展现了实验的结果,左图比较了全部 DenseNets的参数效率,中图对DenseNets 和 ResNets 的参数效率进行了比较。咱们在 C10+ 数据上训练了不一样深度的多个小模型,并绘制出准确率。和一些流行的网络(如AlexNet, VGG)相比,pre-activation 的 ResNets 的准确率明显高于其余网络。以后,咱们将 DenseNets (k=12)与这网络进行了比较。DenseNet的训练集同上节。
如图4,DenseNet-BC 是参数效率最高的一个 DenseNet 版本。此外,DenseNet-BC 仅仅用了大概 ResNets 1/3 的参数量就得到了相近的准确率(中图)。该结果与图3的结果相一致。如图4右图,仅有 0.8M 参数量的 DenseNet-BC 和有 10.2M参数的 101-ResNets 准确率相近。
隐含的深度监督(implicit deep supervision)。稠密卷积网络能够提高准确率的一个解释是,因为更短的链接,每一层均可以从损失函数中得到监督信息。能够将 DenseNets 理解为一种“深度监督”(Deep supervision)。深度监督的好处已经在以前的深度监督网络(DSN)中说明,该网络在每一隐含层都加了分类器,迫使中间层也学习判断特征(discriminative features)。
DenseNet和深度监督网络类似:网络最后的分类器经过最多两个或三个过分层为全部层提供监督信息。然而,DenseNets的损失含数字和梯度不是很复杂,这是由于全部层之间共享了损失函数。
随机 VS 肯定链接。稠密卷积网络与残差网络的随机深度正则化(stochastic depth regularzaion)之间有着有趣的关系。在随机深度中,残差网络随机丢掉一些层,直接将周围的层进行链接。由于池化层没有丢掉,因此该网络和DenseNet有着类似的链接模式:以必定的小几率对相同池化层之间的任意两层进行直接链接——若是中间层随机丢掉的话。尽管这两个方法在根本上是彻底不同的,可是 DenseNet 关于随机深度的解释会给该正则化的成功提供依据。
总结一下:DenseNet和stochastic depth的关系,在 stochastic depth中,residual中的layers在训练过程当中会被随机drop掉,其实这就会使得相邻层之间直接链接,这和DenseNet是很像的。
特征重复利用。根据设计来看,DenseNets 容许每一层得到以前全部层(尽管一些是经过过渡层)的特征图。咱们作了一个实验来判断是否训练的网络能够重复利用这个机会。咱们首先在 C10+ 数据上训练了 L=40, k=12 的 DenseNet。对于每一个 block的每一个卷积层 l,咱们计算其与 s 层链接的平均权重。三个 dense block 的热度图如图 5 所示。平均权重表示卷积层与它以前层的依赖关系。位置(l, s)处的一个红点表示层 l 充分利用了前 s 层产生的特征图。由图中能够获得如下结论:
咱们提出了一个新的卷积网络结构,称之为稠密卷积网络(DenseNet)。它将两个相同特征图尺寸的任意层进行链接。这样咱们就能够很天然的设计上百层的网络,还不会出现优化困难的问题。在咱们的实验中,随着参数量的增长,DenseNets的准确率也随之提升,并且也没有出现交叉表现或过拟合的现象。经过超参数的调整,该结构在不少比赛的数据上都得到了不错的结果。此外,DenseNets有更少的参数和计算量。由于咱们只是在实验中调整了对于残差网络的超参数,因此咱们相信经过调整更多的超参数和学习率,DenseNets的准确率还会有更大的提高。
遵循这个简单的链接规则,DenseNet能够很天然地将自身映射(identity mappings),深度监督(deep supervision)和深度多样化(diversified depth) 结合在一块儿。根据咱们的实验来看,该结构经过对网络特征的重复利用,能够学习到更简单,准确率更高的模型。因为简化了内部表征和下降了特征冗余,DenseNets多是目前计算机视觉领域中在卷积网络方面很是不错的特征提取器。在之后的工做中咱们计划研究 DenseNets下的特征迁移工做。