个人经验总结博客,写的不好的地方还请各路大神指正,不喜勿喷。网络结构图基本都是引用的,如有雷同,实在抱歉,可在下方评论中留言是否删除。

我们知道CNN网络结构一直在更新迭代,卷积可以理解为:“瞬时行为的持续性后果”,现在花点时间整理下CNN网络结构的发展演化。

首先说下一般CNN的网络结构组成:

1)卷积层

假设输入通道C_in, 输入通道H x W,输出通道C_out, kernal size设置为K。

(1) 普通卷积

按照如上参数,普通卷积的参数量是:

C_in x H x W x C_out

(2) Pointwise convolution

一般用于改变通道数。

(3) Depthwise Convolution

深度卷积的参数量一般是:

C_in​×K×KxC_out / C_out

(4) 分组卷积(Group convolution)

标准卷积是:kernel_size x kernel_size x in_channel,是在channel和spatial层面进行卷积,

而分组卷积则是G个:kernel_size x kernel_size x in_channel / G,是先算在spatial维度即切片,再算channel维度即块。

分组卷积有几个优点。

第一个优点是高效训练。因为卷积被分成了多个路径,每个路径都可由不同的 GPU 分开处理,所以模型可以并行方式在多个 GPU 上进行训练。

第二个优点是模型会更高效,即模型参数会随过滤器分组数的增大而减少。在之前的例子中,完整的标准 2D 卷积有 h x w x Din x Dout 个参数。具有 2 个过滤器分组的分组卷积有 (h x w x Din/2 x Dout/2) x 2 个参数。参数数量减少了一半。

(5) 空间或者深度可分离卷积(Channelwise or Depthwise separable convolution)

可分离卷积 = 分组卷积 + 深度卷积,普通的卷积是在整个channel层面上进行滑动,而可分离卷积是在切片上进行,每个切片经过卷积后得到卷积后的切片,再concat得到分组数量一样的深度feature map。后面接着是1x1卷积,我们知道1x1卷积最大的作用就是可改变输出通道,此时就可以用1x1改变输出通道。像前面这种切片的也就是channel太小的卷积用不用非线性的激活函数效果并不明显,所以在前面的切片部分没有用到激活函数,同理channel变化较大的网络层后面跟了激活函数。

(6) 膨胀(空洞)卷积(Dilated convolution)

这是一个由语义分割而产生的卷积结构,一般我们下采样都是采用pooling池化层,但是pooling池化层往往造成不可逆的特征丢失,而为了不造成不可逆的特征丢失,我们可以不用pooling层,但这样又会造成计算量过大,而既为了有下采样,又不让计算量过大,这个时候空洞卷积就产生了。我们知道普通卷积的dilated_rate=1,空洞卷积的膨胀率即dilated_rate > 1,我们可以理解为漏筛型结构,两两卷积核之间相差dilated-1的距离。如上所示就是dilated_rate=2的空洞卷积。

(7) 转置卷积(Deconvolution)

转置卷积也叫反卷积,顾名思义,就是跟正常的普通卷积相反的过程,跟膨胀卷积的区别是:膨胀卷积是kernel卷积核空洞,而反卷积是输入空洞。一般反卷积用于upsampling。除了反卷积以外,还有双线性插值,也可以起到upsample的作用。

2) 池化层

最大池化(MaxPooling)、平均池化(AveragePooling), 全局平均池化(GAP:Global AveragePooling)

池化的作用就是下采样,最大池化就是选取以stride为步长,K x K大小的核选取K x K范围内的最大值,平均池化就是计算K x K范围内的平均值。

全局平均池化层一般用于替代全连接层,全连接层计算量大且容易引起过拟合(如Alexnet)。而全局平均池化层则直接取整张feature map的均值,也没什么计算量,也避免了过拟合。

3) 激活层

激活函数的作用就是增加神经网络的非线性。这一部分可以单独讲讲。

4) BN层

机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢?BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。

5) Dropout层

Dropout层曾有人 类比于无性繁殖和有性繁殖,按理来说无性繁殖直接延续优秀基因存活率应该会比无性繁殖高,但实际却是有性繁殖的存活率高得多,原因或许就是有性繁殖将基因联合适应性减小,适应性更强。Dropout就像是强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消除减弱了神经元节点间的联合适应性,增强了泛化能力。

6) Disout层

相比于Dropout以一定概率停止某个神经元的激活,disout是采用是一种新型的特征图扰动的方法来增强神经网络的泛化能力。目前disout在多项任务上,其效果优于dropout,比如在ImageNet上训练的ResNet-50可以达到78.76%的准确率,而谷歌Dropout系列方法仅为76.8%。

开源链接:https://github.com/huawei-noah/Disout

论文链接:https://www.aaai.org/Papers/AAAI/2020GB/AAAI-TangY.402.pdf

1. LeNet

网络结构图:由两个卷积层,两个全连接层,和一个输出层组成。

2. AlexNet

3. VGGNet

4. GoogleNet

5.Inceptionv1-Inceptionv4

6. SqueezeNet

SqueezeNet是有fire module组成,fire module是由squeeze层和Expand层组成,squeeze层就是1x1的卷积层,expand层是由1x1卷积核的卷积层和 3x3 卷积核的卷积层,最后将两者的feature map进行concat。

Squeeze的网络结构表和参数量如下所示:

7. XceptionNet

8. MobileNetv1-MobileNetv3

MobileNet得益于Separable Conv的使用,其中大量使用深度可分离卷积(3 x 3的depthwise GConv -- 1 x 1的pointwise conv)和1 x 1的pointwise conv -- 3 x 3的depthwise GConv -- 1 x 1的pointwise conv网络结构,极大的减少参数量,并保证了较好的精度。激活函数也是从v1中的ReLU换成了v3中的hswish激活函数。另外v3中增加了SE-Net模块,SE-Net通过自适应地重新校准通道特征响应来引入通道注意力(channel-attention)机制。包括下面的ResNeSt也是用到了注意力机制,不同的是,SE-Net引入的是通道注意力机制,而ResNeSt 实际上是站在巨人们上的"集大成者",特别借鉴了:Multi-path 和 Feature-map Attention思想。

9. ShuffleNetv1-v3

ShufflentNet也用了separable conv和1-3-1的网络block,除此之外还用到了通道shuffle,增强了模型的泛化性能,并减少了计算量。

10. NasNet

11. ResNet及其变体,Res2Next, ResNeXt,ResNeSt

ResNet是He Kaiming发明的网络结构,至今都是流传甚广,目前各种变体还都是采用了ResNet中的经典残差模块。目前刷新ResNet变体中最佳的网络结构是ResNeSt,这是一种基于split attention模块的网络结构。

ResNet通过前层与后层的“短路连接”(Shortcuts),加强了前后层之间的信息流通,在一定程度上缓解了梯度消失现象,从而可以将神经网络搭建得很深

1) ResNet

2) ResNeSt

12. DenseNet及其变体:PeleeNet、VoVNet

13. NasNet/MNasNet

13. EfficientNet/EfficientNet-Lite和EfficientDet

EfficientNet据说是目前兼具速度和精度的网络结构模型,

14. HRNet

普通的网络结构是采用串联的方式将卷积层串联起来:

而HRNet则是采用并联的方式,并且将不同分辨率的feature map之间进行融合fuse。

CNN网络结构发展演变:从LeNet到HRNet(一)相关推荐

  1. CNN网络结构发展最全整理

    来源:人工智能AI技术 本文约2500字,建议阅读9分钟 本文为你整理CNN网络结构发展史. 作者丨zzq 来源丨https://zhuanlan.zhihu.com/p/68411179 CNN基本 ...

  2. CNN的发展历史(LeNet,Alexnet,VGGNet,GoogleNet,ReSNet)

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 关于卷积神经网络CNN,网络和文献中有非常多的资料,我在工作/研究中也用了好一段时间各种常见的model了, ...

  3. 收藏 | 一文遍览CNN网络结构的发展

    来源:人工智能AI技术本文约2600字,建议阅读8分钟 本文介绍了十五种经典的CNN网络结构. CNN基本部件介绍 1. 局部感受野 在图像中局部像素之间的联系较为紧密,而距离较远的像素联系相对较弱. ...

  4. CNN网络结构进化概述

    网络工程问题是深度学习中比较基础的问题,网络工程的难点在于,缺乏对深度神经网络的理论理解(即常说的黑盒模型),无法根据理论来设计网络结构,实际中更多的是不断的尝试,根据实验反馈出来的结果确定某一结构是 ...

  5. 【CNN】卷积神经网络(LeNet)是什么?如何实现LeNet?

    系列文章目录 第一章 深度学习 CNN中的卷积神经网络(LeNet) 目录 系列文章目录 文章目录 前言 一.卷积神经网络(LeNet)是什么? 二.LeNet的网络结构 三.实现LeNet模型 ​​ ...

  6. Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  7. 有关CNN网络结构的总结

    从神经网络到卷积神经网络(CNN) 我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢? 其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如 ...

  8. usb接口 spec_USB连接器发展演变和趋势

    来源:连接器世界网 作者:Robert Hult [大比特导读]本文总结了USB连接器20年的历史,并对未来可能的发展方向做出分析和预测. 过去的20年被称为推成出新的二十年,这是有充分理由的.在这一 ...

  9. python解析原理_Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

最新文章

  1. Python开发技巧-使用Python生成HTML表格
  2. JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
  3. HNU 11720 God Created The Integers
  4. wordpress的下载和安装介绍
  5. LeetCode--174.地下城游戏(动态规划)
  6. 中国脚手架管市场趋势报告、技术动态创新及市场预测
  7. 4.支付平台架构:业务、规划、设计与实现 --- 中国银联和中国网联
  8. 高效的CSV文本处理利器——univocity-parsers
  9. MWC2010传递出什么信号?
  10. java tiles类似_java – 更好地替代Apache Tiles
  11. Unity - Projector - 实时[假]阴影
  12. App推广:ASO策略篇,清榜频发,优化热情不减
  13. FR-报表应用-分组报表-动态显示N个分组
  14. useRoutes() may be used only in the context of a <Router> component.
  15. 微信小程序开发之——用户登录-搭建开发者服务器(2)
  16. 利用iframe实现局部打印(区域打印)
  17. 阿里云服务器支持IPV6和CND的详细教程
  18. CSND Python技能树模块使用|Python 技能树测评
  19. Excel小技巧----VLOOKUP数据匹配
  20. 疫情防控大课观后感4

热门文章

  1. 农夫山泉有点牛!港股打新把暗盘系统都整崩溃了
  2. vs如何设置在Release下进行调试
  3. 配置管理——配置管理委员会
  4. forEach,$.each()以及$().each()的比较
  5. 股票ctp交易接口是什么?
  6. 应广单片机adc_应广单片机adc和pwm例程
  7. Android Fragment嵌套ViewPager,ViewPager嵌套多个Fragment
  8. Linux内核中的IPSEC实现(3)
  9. 【北邮国院大三上】互联网协议_Internet Protocol_PART A
  10. 公众号选题方向有哪些?