神经网络densecnn_CNN 模型之密集连接卷积网络 DenseNet

DenseNet是一种基于ResNet短路连接概念的深度学习模型,通过密集连接所有层,增强了信息流动并实现了特征重用。这种设计减少了梯度消失问题,降低了模型复杂度,同时在ImageNet任务上表现优于ResNet。DenseNet的核心在于使用Concatenate而非Element-wise Addition在通道维度上连接层,通过增长率控制特征维度的增长,适用于图像分类和小模型设计。
摘要由CSDN通过智能技术生成

前言

在计算机视觉领域,卷积神经网络(CNN)已经成为最主流的方法,比如最近的GoogLenet,VGG-19,Incepetion等模型。CNN史上的一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确度。ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(shortcuts,skip connection),这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。今天我们要介绍的是DenseNet模型,它的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection),它的名称也是由此而来。DenseNet的另一大特色是通过特征在channel上的连接来实现特征重用(feature reuse)。这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。本篇文章首先介绍DenseNet的原理以及网路架构,然后讲解DenseNet在Pytorch上的实现。

设计理念

我们常用的有 GoogleNet、VGGNet、ResNet 模型,但随着网络层数的加深,网络在训练过程中的前传信号和梯度信号在经过很多层之后可能会逐渐消失。先前有一些非常好的工作来解决这一问题。如在 Highway 和 ResNet 结构中均提出了一种数据旁路(skip-layer)的技术来使得信号可以在输入层和输出层之间高速流通,核心思想都是创建了一个跨层连接来连通网路中前后层。在本文中,作者基于这个核心理念设计了一种全新的连接模式。为了最大化网络中所有层之间的信息流,作者将网络中的所有层两两都进行了连接,使得网络中每一层都接受它前面所有层的特征作为输入。由于网络中存在着大量密集的连接,作者将这种网络结构称为 DenseNet。其结构示意图如下左图所示:

它主要拥有以下两个特性:

1)一定程度上减轻在训练过程中梯度消散的问题。因为从上左图我们可以看出,在反传时每一层都会接受其后所有层的梯度信号,所以不会随着网络深度的增加,靠近输入层的梯度会变得越来越小。

2)由于大量的特征被复用,使得使用少量的卷积核就可以生成大量的特征,最终模型的尺寸也比较小。

上右图所示的是构成 DenseNet 的单元模块,看上去和 ResNet 的单元模块非常相似,但实际上差异较大。我对结构设计上的细节进行了以下总结:

1)为了进行特征复用,在跨层连接时使用的是在特征维度上的 Concatenate 操作,而不是 Element-wise Addition 操作。

2)由于不需要进行 Elewise-wise 操作,所以在每个单元模块的最后不需要一个 1X1 的卷积来将特征层数升维到和输入的特征维度一致。

3)采用 Pre-activation 的策略来设计单元,将 BN 操作从主支上移到分支之前。(BN->ReLU->1x1Conv->BN->ReLU->3x3Conv)

4)由于网络中每层都接受前面所有层的特征作为输入,为了避免随着网络层数的增加,后面层的特征维度增长过快,在每个阶段之后进行下采样的时候,首先通过一个卷积层将特征维度压缩至当前输入的一半,然后再进行 Pooling 的操作。如下图所示:

5)增长率的设置。增长率指的是每个单元模块最后那个 3x3 的卷积核的数量,记为 k。由于每个单元模块最后是以 Concatenate 的方式来进行连接的,所以每经过一个单元模块,下一层的特征维度就会增长 k。它的值越大意味着在网络中流通的信息也越大,相应地网络的能力也越强,但是整个模型的尺寸和计算量也会变大。作者在本文中使用了 k=32 和 k=48 两种设置。

作者基于以上原则针对于 ImageNet 物体识别任务分别设计了 DesNet-121(k=32)、DesNet-169(k=32)、DesNet-201(k=32) 和 DesNet-161(k=48) 四种网络结构。其网络的组织形式和 ResNet 类似,也是分为 4 个阶段,将原先的 ResNet 的单元模块进行了替换,下采样过程略有不同。整体结构设计如下所示:

在 ImageNet 上的实验结果如下:

上左图表示的是参数量和错误率的关系,上右图表示的是模型测试的计算量和错误率的关系。我们不难看出,在达到相同精度时,DenseNet 的参数量和计算量均为 ResNet 的一半左右。

总的来说,这是一篇非常有创新性的工作,提出了共享特征、任意层间互连的概念很大程度上减轻了深层网络在训练过程中梯度消散而难以优化的问题,同时也减小了模型的尺寸和计算量,在标准数据集上获得了非常好的性能。唯一可能的不足是网络不能设计地特别「深」,因为随着 DenseNet 网络层数的增加,模型的特征维度会线性增长,使得在训练过程中的计算量和显存开销也会爆发地增长。

Q&A:

1.DenseNet 是否可以在物体检测任务中使用?效果如何?

A:当然,DenseNet 可以通过和 ResNet 一样的方法被应用到物体检测任务中。但是作者并没有在物体检测任务上进行实验,如果关注 DenseNet 在物体检测任务上的效果,可以参考第三方的将 DenseNet 用在物体检测任务上的实验结果。

2.通过图表可以看到,DenseNet 在相对较小计算量和相对较小的模型大小的情况下,相比同等规模的 ResNet 的准确率提升会更明显。是否说明 DenseNet 结构更加适合小模型的设计?

A:确实,在小模型的场景下 DenseNet 有更大的优势。同时,作者也和近期发表的 MobileNet 这一针对移动端和小模型设计的工作进行了对比,结果显示 DenseNet(~400MFlops)可以在更小的计算量的情况下取得比 MobileNet(~500MFlops)更高的 ImageNet 分类准确率。

3.DenseNet 中非常关键的连续的跨层 Concatenate 操作仅存在于每个 Dense Block 之内,不同 Dense Block 之间则没有这种操作,是怎样一种考虑?

A:事实上,每个 Dense Block 最后的特征图已经将当前 Block 内所有的卷积模块的输出拼接在一起,整体经过降采样之后送入了下一个 Dense Block,其中已经包含了这个 Dense Block 的全部信息,这样做也是一种权衡。

4.DenseNet 这样的模型结构在训练过程中是否有一些技巧?

A:训练过程采用了和 ResNet 的文章完全相同的设定。但仍然存在一些技巧,例如因为多次 Concatenate 操作,同样的数据在网络中会存在多个复制,这里需要采用一些显存优化技术,使得训练时的显存占用可以随着层数线性增加,而非增加的更快,相关代码会在近期公布。

为者常成,行者常至

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值