神经网络骨架network backbones
本文将列出神经网络几种骨架结构的历史沿袭,对从框架上了解backbones有重要帮助。阅读时间约10分钟。更多的机器视觉文献回顾可参阅:
https://github.com/senbinyu/Computer_Vision_Literatures
network backbones是神经网络最重要的体系结构。
1. Review papers
以下列出一些综述文章,推荐阅读第二篇
- Neena Aloysius and Geetha M, A Review on Deep Convolutional Neural Networks, 2017
A bit old and not include many state-of-art research, refer to paper A Review on Deep Convolutional Neural Networks
- Elhassouny, Azeddine et al, Trends in deep convolutional neural Networks architectures: a review, 2019.
Recommand. Reviewed most of the CNN backbones, refer to paper Trends in deep convolutional neural Networks architectures: a review
2. History
下图显示了神经网络开发的时间表
- Lenet, Yann LeCun et al., 1994
LeNet-5, 是一个简单但富有创造力的网络,最初用于手写识别。please refer to http://yann.lecun.com/exdb/lenet/
- AlexNet, Alex Krizhevsky et al., 2012
在2012年9月30日赢得了ImageNet大规模视觉识别挑战赛。该网络的前五名错误率为15.3%,比第二名的错误率低10.8个百分点。 主要发现是神经网络的深度对于检测的高性能至关重要。并且伴随着GPU的逐步广泛使用,使用深度大的网络成为现实。
卷积核大点, 11 * 11, 7 * 7, 5 * 5 etc., see from the figure
refer to paper [ImageNet Classification with Deep Convolutional Neural Networks] (https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)
- VGGNet, Karen Simonyan, Andrew Zisserman
2014 Imagenet 第二名.
-
验证增加净深度可以有效地改善性能。 但这带来了一个问题:大量的参数。
-
减小卷积核尺寸,两个3 * 3代替5 * 5,减小参数量
证明网络深度增加有助于检测,但引入更多的参数;于是发现了使用小卷积核能达到和使用大卷积核同样的目的,同时还能减少参数
refer to paper Imagenet classification with deep convolutional neural networks
GoogLeNet, Christian Szegedy, Wei Liu et al.
- v1, 2014 ImageNet 第一名.
-
除了增加网络深度之外(对于googlenet v1为22层),还会增加网络的宽度
-
引入较小的内核,1 * 1卷积,减小尺寸并保存参数。 参数:AlexNet ~ 12 GoogLeNet, VGG ~ 3 AlexNet
-
初始模块很容易添加或删除,它是模仿人的大脑以建立稀疏连接。
Refer to Going deeper with convolutions
- v2, Christian Szegedy et al. v2, v3 在同一篇文章.
-
分解卷积,使用1 * n和n * 1替换3 * 3,如下图所示。 从理论上讲,当特征图很大(n很大)时,它可以大大节省计算成本。 但实际上,它不能在早期阶段很好地工作,n范围12-20似乎是一个合理的数字。
-
有效减少网格尺寸。 并行使用池化层(下图中的步幅2)和起始层(与步幅2的卷积等)。
-
为有效网络的设计提出一些建议:避免代表性瓶颈,尤其是在网络早期。 高维表示更易于在网络内本地处理; 可以在较低维的嵌入上进行空间聚合,而不会损失很多表示能力(例如RGB图像到灰色); 平衡网络的宽度和深度(这在最近的EffectiveNet 2019中进一步得出结论)。 早期特征尺寸不能急剧减小,避免出现瓶颈;低维特征时进行空间融合,并不会特别明显的增加损失(这感觉也像是可以进行特征融合的一个体现)
Refer to paper Rethinking the Inception Architecture for Computer Vision
- v3, shares the same paper with v2, minor additions.
通过标签平滑进行模型正则化,减少模型的过度拟合。 培训方法:RMSProp代替SGD。 进行了分辨率测试。
Refer to paper Rethinking the Inception Architecture for Computer Vision
- v4 (pure inception-v4), inception-resnet, 在同一篇文章. 此处主要讲inception-resnet
-
将Inception模块与残差模块组合在一起以创建一个新模块:inception-resnet。 它增加了净深度并提高了速度。
-
比较:inception-v3与inception-resnet-v1; inception-vnet与inception-resnet-v2具有相似的精度。
Refer to paper Inception-v4, inception-resnet and the impact of residual connections on learning
ResNet, He Kaiming,2016
在 ILSVRC and COCO 2015等5个比赛中都获得第一名.
人们发现,更深的CNN对几乎所有任务都非常有用。 但是由于存在网络退化问题,因此很难训练它们。 提出了一种带有剩余模块的新架构。
-
较深的网络比较浅的网络性能更差。 一个创新的想法:如果什么也没学到,那就比以前更糟:因此提出了identity map(也称为shortcut连接)。 H(x)= x + F(x),F(x)= H(x)-x,称为残差。
-
ResNet的深度各不相同,从18层到34、50、101到非常深的152层。
-
不同的快捷方式,如果不更改尺寸,则可以使用身份映射。 但是在实践中,尺寸更改因此会产生“瓶颈”。 (这在基线后记中很流行,因为它可以保存参数。)
Refer to paper Deep Residual Learning for Image Recognition
Xception, Chollet, Francois, 2016
基于Inception-v3,如果我们不想每次都设计Inception体系结构,而只在一个模块上均匀使用相同的结构,则网络设计会更容易。 (这个想法在其他基准,例如mobileNet也得到应用。)
-
extreme inception. 从同等的初始结构,现在仅计算部分渠道, (group = xx in pytorch).
-
深度可分离卷积(最初来自phd论文:Laurent Sifre,Rigid-Motion Scattering For Image Classification),大大节省了参数。 通过均匀分离特征,下图中的参数可以是m * k + 3 * 3 * k,m是特征,k是核数。
更多具体的关于深度分离卷积可参见如下中关于轻量网络的描述https://github.com/senbinyu/Computer_Vision_Literatures
Refer to paper Xception: Deep Learning with Depthwise Separable Convolutions
ResNeXt, Xie Saining, He Kaiming,2017
ILSVRC 2016 第二名.
inception-resnet的修改。 不同于人工设计的Inception-Resnet,Resnext使用相同的分支来完成设计。
-
group convolution(群组卷积), cardinality(基数). 这是正常卷积(所有通道)和深度可分离卷积(每个通道)之间的折衷。
-
ImageNet-1K dataset 上测试,发现增加基数在一定程度上会改善表现,且比更深更宽更有效。文中实验了从1到32 groups,误差逐步降低。但需要注意的是,这是将dimensions控制在4d以上,更小的dimension下作者认为不值得再实验。
Refer to paper Aggregated Residual Transformations for Deep Neural Networks
denseNet, Huang Gao, Liu Zhuang,2017
CVPR2017 best paper, 特点:特征重用, 基于Resnet.
-
由于连接紧密,当前层与之前的所有层都有连接。 传统的CNN,L层,L连接,densedNet,一个密集块,L层具有L *(L + 1)/ 2个连接。
-
增长率,第l层具有k_0 + k *(l-1)个特征图,k_0是输入通道数,k是增长率(每层特征数)。
-
bottleneck layer, 作者发现此层对于密集网特别有效。 使用1 * 1转换,功能图4k(提高效率),然后使用3 * 3转换,减少回k
-
压缩时,过渡层特征图会用缩小。 实验也证实了这一点,热图显示,致密块与先前的过渡层的相关性较小。 说明了transition layer输出了很多冗余信息,去除一些,可以使网络轻量化,但又不至于严重影响精度。
Refer to paper Densely Connected Convolutional Networks
SENet, Hu Jie, Li Shen,2018
ILSVRC 2017第一名. This is an application of “attention” mechanism, more similar to human brain. 这是“注意力”机制的一种应用,更类似于人的大脑。更多可参见https://github.com/senbinyu/Computer_Vision_Literatures/blob/master/0_Backbones/1_attention_in_backbones.md
-
关注通道关系,并使用挤压和激励块。 1 * 1 * C,将所有通道信息放在一起,然后重新缩放(S型),重要的通道功能可以起到更大的作用。
-
挤压空间全局平均值,以使用不同渠道之间的联系及相关性,而非空间分布
-
激励中,实际上使用了两个完全连接的层:第一个层,使用ReLU将通道从C压缩到C / r,第二层以S形缩放到C通道。 那么重要的人可以做出更多的贡献。 r是压缩率。 作者发现16是最佳选择。
-
SE模块也可以与ResNet和Inception一起使用。
Refer to paper Squeeze-and-Excitation Networks
efficientNet, Tan Mingxing and Quoc V. Le,2019
有没有适用于神经网络架构设计的指导方法? 作者提出了一些基本要点和经验公式。
-
“扩大网络宽度,深度或分辨率的任何尺寸都可以提高精度,但是对于较大的模型,精度增益会降低”.
单独增加某个参数只能在一定范围内获得好的结果 -
模型缩放,平衡宽度,深度和分辨率可以带来更好的性能。 高效的复合系数。 三个主要参数的系数:宽度,w,深度,d,分辨率,r; 仅当时,它们才能实现相对平衡的体系结构。 如果要扩展或压缩2 ^ \ phi,\ phi是扩展系数,则它变为,所有三个参数都随指数改变。
-
相对于比较模型而言,相对较小,但效率更高且更准确。
Refer to paper EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
NAS
以上是根据人们的经验观察设计的体系结构。 有没有自动设计网络的方法? 在2016年,麻省理工学院和Google几乎同时提出了神经网络结构搜索。 但是计算成本非常昂贵。
-
搜索策略,这里使用强化学习,但还有许多其他方法,即进化算法,基于梯度的方法,增强等。
-
提速,分层表示,权重共享等
Refer to paper Neural Architecture Search with Reinforcement Learning
Designing Neural Network Architectures using Reinforcement Learning
Res2Net, Gao Shanghua et al., 2019
-
多尺度融合。 “大多数现有方法都以分层的方式表示多尺度特征。在本文中,我们通过在单个残差块内构造分层的类似残差的连接,为CNN提出了一种新颖的构建块,即Res2Net。” 它基于bottleNeck结构,依次为1 * 1、3 * 3和1 * 1,如下图所示。
-
可以与其他骨干网,ResNet,ResNeXt等结合使用。显着提高准确性。 从ResNet-50到Res2Net-50的COCO的70%到73%。
-
作者还尝试了各种任务,例如对象检测,语义/实例分割,关键点估计,所有这些都显示出令人满意的结果。
Refer to paper Res2Net: A New Multi-scale Backbone Architecture
更多的计算机视觉文献回顾可参阅:
https://github.com/senbinyu/Computer_Vision_Literatures