经典网络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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pytest skipif_pytest失败重跑

    pytest skipif_pytest失败重跑前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

  • .NET设计模式访问者模式

    一.访问者模式的定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。二.访问者模式的结构和角色:1.Visitor抽象访问者角色,为该

    2021年12月24日
  • ajax asmx 404,ajax webservice asmx 401未经授权的错误(ajax webservice asmx 401 unauthorized error)…

    ajax asmx 404,ajax webservice asmx 401未经授权的错误(ajax webservice asmx 401 unauthorized error)…ajaxwebserviceasmx401未经授权的错误(ajaxwebserviceasmx401unauthorizederror)我有一个内部网站,需要登录才能让人们在会议期间记录笔记和其他信息。我试图通过AJAX调用将数据发布到同一服务器上的Web服务,在同一文件夹中。我收到401未经授权的错误。使用Javascript:functionsaveNotes(){var…

  • 双重指针赋值

    双重指针赋值int*p;p=(int*)mallloc(sizeof(int)*len);*p=1;//p[0]=1*(p+1)=2;//p[1]=2二:双重指针赋值bool**p;p=(bool**)malloc(sizeof(bool*));cout<<“inputarray”<<endl;for(inti=0;i<m;…

  • xml文件格式化[通俗易懂]

    xml文件格式化[通俗易懂]xml文件格式化看到这样的xml文档是否你的脑袋已经萌化:(ps:此时的内心是崩溃的~~~)那么让我们用UE编辑器进行对xml进行格式化吧!编辑软件:(ps:xml格式化前)**第一步:打开UE文件编辑软件第二步:打开咋们需要格式的xml文件第三步:点击格式第四步:选择XMLlint工具第五步:在弹出的窗口,勾选标签“重格式化并重缩进输出,缩进位置”(ps:英文:Reformat

  • Pycharm写Python脚本 | Python新建文件自动注释

    Pycharm写Python脚本 | Python新建文件自动注释Pycharm写Python脚本|Python新建文件自动注释效果如图所示:1.打开Pycharm,点击File,选择Settings2.点击Editor,选择里面的FileandCodeTemplates,找到并点击PythonScript3.在右侧空白处输入代码#@Time:${DATE}${TIME}#@Author:SHAUN#@File:${NAME}.py#Software:${PRODUCT_NAME}其中:${DATE}表示当前

发表回复

您的电子邮箱地址不会被公开。

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