经典网络DenseNet介绍

经典网络DenseNet介绍经典网络DenseNet(DenseConvolutionalNetwork)由GaoHuang等人于2017年提出,论文名为:《DenselyConnectedConvolutionalNetworks》,论文见:https://arxiv.org/pdf/1608.06993.pdfDenseNet以前馈的方式(feed-forwardfashion)将每个层与其它层连接起来。在传统卷积神经网络中,对于L层的网络具有L个连接,而在DenseNet中,会有L(L+1)/2个连接。每一层的

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

经典网络DenseNet(Dense Convolutional Network)由Gao Huang等人于2017年提出,论文名为:《Densely Connected Convolutional Networks》,论文见:https://arxiv.org/pdf/1608.06993.pdf

DenseNet以前馈的方式(feed-forward fashion)将每个层与其它层连接起来。在传统卷积神经网络中,对于L层的网络具有L个连接,而在DenseNet中,会有L(L+1)/2个连接。每一层的输入来自前面所有层的输出。

DenseNet网络:

(1).减轻梯度消失(vanishing-gradient)。

(2).加强feature传递。

(3).鼓励特征重用(encourage feature reuse)。

(4).较少的参数数量。

Dense Block:像GoogLeNet网络由Inception模块组成、ResNet网络由残差块(Residual Building Block)组成一样,DenseNet网络由Dense Block组成,论文截图如下所示:每个层从前面的所有层获得额外的输入,并将自己的特征映射传递到后续的所有层,使用级联(Concatenation)方式,每一层都在接受来自前几层的”集体知识(collective knowledge)”。增长率(growth rate)k是每个层的额外通道数。

经典网络DenseNet介绍

Growth rate:如果每个H_{l}函数产生k个feature-maps,那么第l层产生k_{0}+k(l-1)个feature-maps。k_{0}是输入层的通道数。将超参数k称为网络的增长率。

DenseNet Basic Composition Layer:BatchNorm(BN)-ReLu-3*3 Conv

DenseNet-B(Bottleneck Layers):在BN-ReLu-3*3 Conv之前进行BN-ReLU-1*1 Conv操作,减少feature maps size。

Transition Layer(过渡层):采用1*1 Conv和2*2平均池化作为相邻Dense Block之间的转换层,减少feature map数和缩小feature map size,size指width*height。在相邻Dense Block中输出的feature map size是相同的,以便它们能够很容易的连接在一起。

DenseNet-BC:如果Dense Block包含m个feature-maps,则Transition Layer生成\theta m输出feature maps,其中0<\theta <1称为压缩因子。当\theta =1时,通过Transition Layers的feature-maps数保持不变。当\theta <1时,称为DenseNet-C,在实验中\theta =0.5。当同时使用Bottleneck和\theta <1的Transition Layers时,称为DenseNet-BC。

下图是一个DenseNet结构图,来自于论文:使用了3个Dense Blocks。DenseNet由多个Desne Block组成。每个Dense Block中的feature-map size相同。两个相邻Dense Block之间的层称为Transition Layers。通过卷积和池化来更改feature-map size。

经典网络DenseNet介绍

论文中给出了4种层数的DenseNet,论文截图如下所示:所有网络的增长率k是32,表示每个Dense Block中每层输出的feature map个数。

经典网络DenseNet介绍

DenseNet-121、DenseNet-169等中的数字121、169是如何计算出来的:以121为例,1个卷积(Convolution)+6个Dense Block*2个卷积(1*1、3*3)+1个Transition Layer(1*1 conv)+12个Dense Block*2个卷积(1*1、3*3)+ 1个Transition Layer(1*1 conv)+24个Dense Block*2个卷积(1*1、3*3)+ 1个Transition Layer(1*1 conv)+ 16个Dense Block*2个卷积(1*1、3*3)+最后的1个全连接层=121。这里的层仅指卷积层和全连接层,其它类型的层并没有计算在内

公式表示:其中H_{l}(\cdot )表示非线性转换函数

(1).传统的网络在l层的输出为:x_{l}=H_{l}(x_{l-1})

(2).ResNet在l层的输出为:x_{l}=H_{l}(x_{l-1})+x_{l-1}

(3).DenseNet在l层的输出为:x_{l}=H_{l}([x_{0},x_{1},\cdots ,x_{l-1}])

假如输入图像大小为n*n,过滤器(filter)为f*f,padding为p,步长(stride)为s,则输出大小为:计算卷积层大小,如果商不是整数,向下取整,即floor函数;计算池化层大小,如果商不是整数,向上取整,即ceil函数。参考:https://blog.csdn.net/fengbingchun/article/details/80262495

经典网络DenseNet介绍

https://github.com/fengbingchun/Caffe_Test/tree/master/test_data/Net/DenseNet 上整理了DenseNet prototxt文件。

这里描述下DenseNet-121架构:k=32,与上表中”DenseNet-121″有所差异

(1).输入层(Input):图像大小为224*224*3。

(2).卷积层Convolution+BatchNorm+Scale+ReLU:使用64个7*7的filter,stride为2,padding为3,输出为112*112*64,64个feature maps。

(3).Pooling:最大池化,filter为3*3,stride为2,padding为1,输出为57*57*64,64个feature maps。

(4).Dense Block1:输出为57*57*(64+32*6)=57*57*256,256个feature maps。

连续6个Dense Block,每个Dense Block包含2层卷积,卷积kernel大小依次为1*1、3*3,在卷积前进行BatchNorm+Scale+ReLU操作,第1、2个卷积输出feature maps分别为128、32。因为k=32,所以每个Dense Block输出feature maps数会比上一个Dense Block多32。每个Dense Block后做Concat操作。

(5).Transition Layer1:输出为29*29*128,128个feature maps。

A.BatchNorm+Scale+ReLU+1*1 conv,输出57*57*128。

B.平均池化,filter为2*2,stride为2,输出29*29*128。

(6).Dense Block2:输出为29*29*(128+32*12)=29*29*512,512个feature maps。

连续12个Dense Block,每个Dense Block包含2层卷积,卷积kernel大小依次为1*1、3*3,在卷积前进行BatchNorm+Scale+ReLU操作,第1、2个卷积输出feature maps分别为128、32。因为k=32,所以每个Dense Block输出feature maps数会比上一个Dense Block多32。每个Dense Block后做Concat操作。

(7).Transition Layer2:输出为15*15*256,256个feature maps。

A.BatchNorm+Scale+ReLU+1*1 conv,输出29*29*256。

B.平均池化,filter为2*2,stride为2,输出15*15*256。

(8).Dense Block3:输出为15*15*(256+32*24)=15*15*1024,1024个feature maps。

连续24个Dense Block,每个Dense Block包含2层卷积,卷积kernel大小依次为1*1、3*3,在卷积前进行BatchNorm+Scale+ReLU操作,第1、2个卷积输出feature maps分别为128、32。因为k=32,所以每个Dense Block输出feature maps数会比上一个Dense Block多32。每个Dense Block后做Concat操作。

(9).Transition Layer3:输出为8*8*512,512个feature maps。

A.BatchNorm+Scale+ReLU+1*1 conv,输出15*15*512。

B.平均池化,filter为2*2,stride为2,输出8*8*512。

(10).Dense Block4:输出为8*8*(512+32*16)=8*8*1024,1024个feature maps。

连续16个Dense Block,每个Dense Block包含2层卷积,卷积kernel大小依次为1*1、3*3,在卷积前进行BatchNorm+Scale+ReLU操作,第1、2个卷积输出feature maps分别为128、32。因为k=32,所以每个Dense Block输出feature maps数会比上一个Dense Block多32。每个Dense Block后做Concat操作。

(11).Classification Layer:

A.平均池化:filter为8*8,stride为1,padding为0,输出为1*1*1024,1024个feature maps。

B.卷积:kernel大小为1*1,输出1000个feature maps。

C.输出层(Softmax):输出分类结果,看它究竟是1000个可能类别中的哪一个。

可视化结果如下图所示:

经典网络DenseNet介绍

GitHubhttps://github.com/fengbingchun/NN_Test

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187810.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月18日 下午2:25
下一篇 2026年4月18日 下午2:31


相关推荐

  • anaconda安装opencv(whl文件)

    anaconda安装opencv(whl文件)我用pipinstall和condainstall的方法都安装不上去,都失败了,找了很多原因都没办法解决。没办法,只能尝试一下用第三方包whl文件安装下,因为原来没有用过这个方法,也不知道难不难,小心的去试了一下,没想到非常的容易!而且清华大学opencvpython库里的whl文件下载速度非常快(几十秒),比我之前在别的地方找的whl文件快多了。没安装上opencv或其他库的小伙伴,…

    2022年5月22日
    129
  • C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)[通俗易懂]

    C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)[通俗易懂]本文主要总结用C++的fstream、ifstream、ofstream方法读写文件,然后用seekg()、seekp()函数定位输入、输出文件指针位置,用tellg()、tellp()获取当前文件指针位置。一、核心类和函数功能讲解fstream:文件输入输出类。表示文件级输入输出流(字节流);ifstream:文件输入类。表示从文件内容输入,也就是读文件;ofstream:文件输…

    2022年5月29日
    154
  • form layui vue 和_layui是基于vue的吗?「建议收藏」

    form layui vue 和_layui是基于vue的吗?「建议收藏」layui不是基于vue的。layui是一款绝对开源和免费的前端UI框架,遵循原生“HTML/CSS/JS”的书写与组织形式;它虽然外在极简,但是内容丰富,里面包含众多组件从核心代码到API都非常适合界面的快速开发。layui不是基于vue的。layui(谐音:类UI)是一款采用自身模块规范编写的前端UI框架,遵循原生HTML/CSS/JS的书写与组织形式,门槛极低,拿来即用。lay…

    2022年6月25日
    34
  • html背景图片自适应屏幕大小_jsp背景图片自适应

    html背景图片自适应屏幕大小_jsp背景图片自适应html图片自适应窗口大小background-size:cover会把图片拉伸至足够大,但是背景图片有些部分可能显示不全#bgImg{height:100%;width:100%;background:url(‘../img/bg/snow.jpg’)no-repeat;background-size:cover;position:absolu…

    2022年10月6日
    4
  • python 面向对象(进阶篇)

    python 面向对象(进阶篇)上一篇《Python面向对象(初级篇)》文章介绍了面向对象基本知识:面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用类是一个模板,模板中包装了多个“函数”供使用(可以讲多函数

    2022年7月5日
    23
  • 月之暗面发布Kimi K2模型,万亿参数力拼行业领先

    月之暗面发布Kimi K2模型,万亿参数力拼行业领先

    2026年3月12日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号