博客
关于我
【论文笔记】DenseNet
阅读量:100 次
发布时间:2019-02-26

本文共 2160 字,大约阅读时间需要 7 分钟。

介绍卷积神经网络与DenseNet的创新结构

卷积神经网络(CNNs)已成为现代视觉物体识别领域的主流技术。尽管CNN最初提出于20世纪90年代,但直到最近,由于硬件性能和网络架构的进步,才真正实现了深度CNN的训练。然而,随着CNN层数的增加,输入信息或梯度经过多层后往往会逐渐消失。这一现象限制了网络的表达能力,影响了模型的性能。

为解决这一问题,本文提出了一种全新的网络连接模式:每一层不仅接收来自其直接上层的输入,还能直接从之前所有层获取feature-maps。这种设计目的是最大化网络内的信息流动,使得每一层都能充分利用前面所有层的输出信息。

DenseNet的创新结构

DenseNet的核心思想是通过稠密连接(dense connectivity)来构建网络。与传统的卷积前馈网络不同,DenseNet中的每一层都从它之前的所有层中接收额外的输入,这意味着每一层都能获取到来自上一层及其之前所有层的feature-maps。具体来说,第l层的输入Xl是由X0, X1, ..., X(l-1)三个feature-maps拼接而成。

DenseNet的结构包括以下关键组件:

1. 组合函数(Composite function)

DenseNet中的每一层都包含一个复合函数,包括批量标准化(BN)、激活函数(ReLU)和3x3卷积层。这些操作确保了网络能够有效地进行非线性特征提取。

2. 池化层(Pooling layers)

为了保证不同feature-maps的尺寸一致,DenseNet采用多个稠密块(dense blocks)进行分解。块与块之间的转换层包含批量标准化、1x1卷积以及2x2平均池化操作。这种设计不仅保证了网络的有效性,还为后续拼接操作提供了必要的条件。

3. 增长率(Growth rate)

DenseNet的核心参数是增长率(growth rate)。假设每一层产生k个feature-maps,则第l层的输入feature-maps数为k0 + k*(l-1),其中k0是输入层的通道数。实验表明,选择较小的k值(如k=12)可以在保证性能的前提下,显著减少网络复杂度。

4. 瓶颈层(Bottleneck layers)

为了进一步优化计算效率,DenseNet引入了瓶颈层(bottleneck layers)。在每个3x3卷积层之前,加入一个1x1卷积层作为瓶颈。这种设计有效地降低了计算复杂度,同时保持了网络的表达能力。

5. 压缩因子(Compression factor)

为提高网络的紧密度,DenseNet可以在转换层中引入压缩因子。输入feature-maps数为m时,其输出尺寸会根据压缩因子进行调整。压缩因子小于1的DenseNet被称为DenseNet-C。

实现细节

DenseNet的具体实现可以通过以下代码框架来理解:

def bn_act_conv_drp(current, num_outputs, kernel_size, scope='block'):    current = slim.batch_norm(current, scope=scope + '_bn')    current = tf.nn.relu(current)    current = slim.conv2d(current, num_outputs, kernel_size, scope=scope + '_conv')    current = slim.dropout(current, scope=scope + '_dropout')    return currentdef block(net, layers, growth, scope='block'):    for idx in range(layers):        bottleneck = bn_act_conv_drp(net, 4 * growth, [1, 1],                                      scope=scope + '_conv1x1' + str(idx))        tmp = bn_act_conv_drp(bottleneck, growth, [3, 3],                               scope=scope + '_conv3x3' + str(idx))        net = tf.concat(axis=3, values=[net, tmp])    return net

6. 实验配置

在ImageNet数据集上,DenseNet的基本配置为{L=40, k=12}。通过多个稠密块和适当的转换层,网络能够有效地捕捉图像中的复杂特征。在实际应用中,DenseNet的性能表现优于传统的卷积网络。

总结

DenseNet通过稠密连接和信息流动的优化,显著提升了卷积神经网络的性能和表达能力。其创新的网络结构不仅解决了深层网络中的梯度消失问题,还为后续的研究提供了新的方向。通过合理的设计和优化,DenseNet已经在多个实践中取得了显著的成果。

转载地址:http://wvbk.baihongyu.com/

你可能感兴趣的文章
Python中实现获取所有微信好友的头像并拼接成一张图片
查看>>
Python中对象的布尔值
查看>>
python中对集合的操作
查看>>
python中将列表转换为元组的时间复杂度,反之亦然
查看>>
Python中布尔表达式的求值
查看>>
python中很常用的10个内置函数整理(初学必备)
查看>>
python中打印二维列表数据
查看>>
python中打散数组shuffle
查看>>
Python中执行外部命令
查看>>
Python中拼接numpy数组-ChatGPT4o作答
查看>>
Python中提示:no module named 'PIL'
查看>>
Python中提示:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position
查看>>
python中数据类型存储_浅谈Python中的数据类型
查看>>
python中文件最重要的功能是什么-学 Python 都用来干嘛的?
查看>>
python中文版语言_高盛最新调查:Python超过汉语成为未来最重要技能,你准备学哪种编程语言?...
查看>>
Python中文问题SyntaxError
查看>>
Python中方括号和括号括起来的列表有什么区别?
查看>>
python中时间处理_Python中处理时间的几种方法小结
查看>>
Python中枚举串口(包括虚拟端口)的跨平台方法是什么?
查看>>
python中根号下a怎么写_python中根号怎么表示
查看>>