主要分类网络-面试整理

VGG

核心:

  1. VGGNet全部使用3x3的卷积核和2x2的池化核,通过不断加深网络结构来提升性能。网络层数的增长并不会带来参数量上的爆炸,因为参数量主要集中在最后三个全连接层中。同时,两个33卷积层的串联相当于1个55的卷积层,3个3x3的卷积层串联相当于1个7x7的卷积层,即3个3x3卷积层的感受野大小相当于1个7x7的卷积层。但是3个3x3的卷积层参数量只有7*7的一半左右,同时前者可以有3个非线性操作,而后者只有1个非线性操作,这样使得前者对于特征的学习能力更强
  2. 使用1x1的卷积层来增加线性变换,输出的通道数量上并没有发生改变。这里提一下1x1卷积层的其他用法,1x1的卷积层常被用来提炼特征,即多通道的特征组合在一起,凝练成较大通道或者较小通道的输出(升维和降维?),而每张图片的大小不变。有时1x1的卷积神经网络还可以用来替代全连接层
    优点:多个小卷积替代大的,增加的非线性层,且参数量减少。

GoogleNet(Inception V1)

核心:

  1. 引入了Inception结构(融合不同特征的尺度信息)
  2. 1x1卷积降维
  3. 丢弃全连接层,使用全局平均池化
  4. 添加两个辅助分类器(softmax层)帮助训练

全局平均池化:对于输出的每一个通道的特征图的所有像素计算一个平均值。优点:降维、减少网络参数、正则、
收敛速度减慢
为什么使用全局平均池化层

Inception V2(2015)
  1. 两个3x3卷积代替5x5卷积
  2. 使用BN算法,可以提高大网络的收敛速度
  3. 1n和n1这种非对称卷积来代替n*n的对称卷积
  4. 增加滤波器输出的模块,来产生高维的稀疏特征(看不懂,啥意思?)

非对称卷积:非对称卷积不要用在靠近输入的层,会影响精度,要用在较高的层,这种方法不是哪儿都适用的,非对称卷积在图片大小介于12×12到20×20大小之间的时候,效果比较好,具体原因未知。
非对称卷积(googlenet系列)

Inception V3(2015.12)
  1. 在v2的基础上使用RMSProp优化、Label Smoothing技巧、7×7卷积分解以及对auxiliary classifier(辅助分类)加入BN层正则
  2. 并行的降维结构(使用多个conv和polling一起降维)
    并行降维:操作会造成表达瓶颈问题,也就是说特征图的大小不应该出现急剧的衰减(只经过一层就骤降 ) 。如果出现急剧缩减,将会丢失大量的信息,对模型的训练造成困难。所以使用多个conv+polling一起来降维。
    作者讲了很多的分类网络
Inception V4(2016.02)
  1. Stem模块、Inception-A模块、Inception-B模块、Inception-C模块(这些模块是由之前的v1、v2、v3的trick设计的)
  2. 融合了Residual模块(v1,v2,v3的Inception module来替换resnet shortcut中的bootleneck)
Xception (2016.10)
  1. 通道分离式卷积(没有正式提出?只是一种思想?):模型参数有微量的减少,减少量很少:Inception V3是先做1x1的卷积,再做3x3的卷积,这样就先将通道进行了合并,即通道卷积,然后再进行空间卷积,而Xception则正好相反,先进行空间的3x3卷积,再进行通道的1x1卷积(也就是1x1卷积发挥了作用!!!-跨通道交互、聚合)
  2. RELU的有无

详解Inception结构:从Inception v1到Xception
[论文笔记] Inception V1-V4 系列以及 Xception

从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2,ShuffleNetV2,MobileNetV3

ResNet(2016)

核心:

  • 引入了两种残差结构,解决深层网络的退化问题
  • 缓解了梯度消失
    网络结构:
  • resnet残差结构:(3x3 conv +3x3conv)和(1x1conv降维 +3x3conv + 1x1conv 升维)
  • 瓶颈层(resnet残差结构)纯是为了节省计算量,对最终的模型精度并无影响
  • 因为有时残差结构需要匹配维度,所以还有一种残差结构(当步长不为1或者输入和输出通道数不一致时触发)
    在这里插入图片描述
ResNeXt(2017)

提出原因:
传统的要提高模型的准确率,都是加深或加宽网络,但是随着超参数数量的增加(比如channels数,filter size等等),网络设计的难度和计算开销也会增加
核心;
1.ResNeXt结合了inception与resnet的优点
2.分组卷积(优势):参数量减少,分可以学习更多元的特征表示,此外分组的操作或许能起到网络正则化的作用。

SE Net(2017)、SE ResNet、 SE ResNeXt (2018)

核心:通道注意力SE模块、分组卷积

RegNetX和RegNetY

  NAS(Neural Architecture Search)网络搜索技术非常火,但这对计算资源要求也比较高(都是大厂玩的东西)。包括这篇论文中的RegNet也有使用到NAS技术。但在论文中作者一再强调这篇论文与之前的一些NAS论文不同(例如MobileNetv3,EfficientNet),之前的一些有关NAS的论文都是在给定的设计空间(designed search space)中通过搜索算法去搜索出一组最佳参数组合。但在这篇论文中作者要探究的是如何去设计设计空间(design design spaces)并发现一些网络的通用设计准则(network design principles),而不是仅仅去搜索出一组参数.(即如何从一个给定的原始设计空间AnyNet一步步探索出最终的RegNet空间

  • RegNetX的网络结构(stem+body+head)

    • stem就是一个普通的卷积层(默认包含bn以及relu),卷积核大小为3x3,步距为2,卷积核个数为32.
    • body就是由4个stage堆叠组成,如图(b)所示。每经过一个stage都会将输入特征矩阵的height和width缩减为原来的一半。而每个stage又是由一系列block堆叠组成,每个stage的第一个block中存在步距为2的组卷积(主分支上)和普通卷积(捷径分支上),剩下的block中的卷积步距都是1,和ResNet类似。
    • head就是分类网络中常见的分类器,由一个全局平均池化层和全连接层构成。
  • RegNetY在block中的Group Conv后接了个SE(Squeeze-and-Excitation)模块(类似于EfficientNet吧)

RegNet网络结构与搭建

ResNeSt(2020)

ResNeSt看上去像ResNeXt 和 SKNet 的结合体
在这里插入图片描述

从ResNet、DenseNet、ResNeXt、SE Net、SE ResNeXt 演进学习总结
ResNet家族:ResNet、ResNeXt、SE Net、SE ResNeXt(讲的很细)

DenseNet(2017)

核心;
建立了不同层之间的连接关系(每一层的输入来自前面所有层的输出),充分利用了feature,进一步减轻了梯度消失问题,加深网络不是问题,而且训练效果非常好。
利用bottleneck layer(1x1conv),Translation layer(倍率减少维度)以及较小的growth rate(固定输出特征图的个数-特征维度?)使得网络变窄,参数减少,有效抑制了过拟合,同时计算量也减少

1、减轻了vanishing-gradient(梯度消失)
2、加强了feature的传递
3、更有效地利用了feature
4、一定程度上较少了参数数量

MobileNet(2017)

核心:

  1. 将Xception中通道分离卷积的思想应用,提出深度可分离卷积
  2. 使用超参数a,b;a控制卷积核个数,b控制图像尺寸
  3. 网络是参照VGG修改的,所以没有残差结构,有人说MobileNet v1网络中的DW卷积很容易训练废掉,效果并没有那么理想
MobileNetv2(google 2018年)
  1. 与resnet的残差结构相比,提出了逆向的残差结构(Inverted residuals–1*1conv升维+3*3DW conv + 1*1conv降维)
  2. 提出了线性瓶颈单元(linear bottlenecks)(去掉残差结构最后一个relu6,因此称为线性单元)
  3. 并不是所有的倒残差结构都有shortcut连接(Add),只有当stride=1且输入特征矩阵与输出特征矩阵shape相同时才有shortcut连接(只有当shape相同时,两个矩阵才能做加法运算,当stride=1时并不能保证输入特征矩阵的channel与输出特征矩阵的channel相同)
    为什么使用逆向残差:原文说高维信息通过ReLU激活函数后丢失的信息更少。减少参数,增强非线性表达能力(我觉得原本的残差结构参数更少吧)
    为什么使用线性单元:防止非线性破坏太多信息
MobileNetv3(google 2019年)

MobileNetV3的网络基础模块,包括深度可分离卷积(depthwise separable convolutions),逆向残差模块(inverted residual structure),线性瓶颈模块(linear bottleneck),**挤压模块(Squeeze-And-Excite)**等都是借鉴的mobile v1,v2,SENet等网络结构。基于这些网络结构的基础组件,采用NAS(network architecture search)的方式,搜索得到MobileNetV3-Large 和MobileNetV3-Small这2个网络结构。

  1. 激活函数更新优化,v3在网络层比较靠后的位置(靠后的层维度高,计算量更大)使用h-swish激活函数(相对于swish激活函数计算量更少)。

MobileNet(v1、v2)网络详解与模型的搭建
轻量级网络模型之MobileNet系列

ShuffleNet(2017)

使用group convolution的网络有很多,如XceptionMobileNetResNeXt等。其中Xception和MobileNet采用了depthwise convolution,这是一种比较特殊的group convolution,此时分组数恰好等于通道数,意味着每个组只有一个特征图。但这些网络存在一个很大的弊端:采用了密集的1x1 pointwise convolution(计算量还是较大)

group convolution层另一个问题是不同组之间的特征图需要通信,否则就好像分了几个互不相干的路,大家各走各的,会降低网络的特征提取能力,这也可以解释为什么Xception,MobileNet等网络采用密集的1x1 pointwise convolution,因为要保证group convolution之后不同组的特征图之间的信息交流

  • mobileNet只做了3x3卷积的deepwise convolution,而1x1的卷积还是传统的卷积方式,还存在大量冗余,ShuffleNet则在此基础上,将1*1卷积做了shuffle和group操作,实现了channel shufflepointwise group convolution操作(其实就是引入了1x1分组卷积),最终使得速度和精度都比mobileNet有提升
  • block:1*1 group conv升维+channel shuffle + 3*3DW conv + 1*1 group conv降维
  • 注意相对于基本ResNet轻量级结构,3x3的depthwise convolution之后没有使用ReLU激活函数
  • 注意步长为1和步长为2使用不同的残差结构:对于每个阶段,第一个基本单元采用的是stride=2(残差使用Add),这样特征图width和height各降低一半,而通道数增加一倍。后面的基本单元都是stride=1(残差使用Concat),特征图和通道数都保持不变。对于基本单元来说,其中瓶颈层,就是3x3卷积层的通道数为输出通道数的1/4,这和残差单元的设计理念是一样的。

channel shuffle:对group convolution之后的特征图进行“重组”,这样可以保证接下来采用的group convolution其输入来自不同的组,因此信息可以在不同组之间流转具体操作需要看源代码
shuffleNet系列

ShuffleNetv2(2018旷视)

提出原因:
单纯的乘加运算FLOPs并不能完全表示模型的运算速度,访存开销memory access cost(MAC)也应该考虑进去
核心:

  • 设计网络的4个原则
    单个模块的输入输出通道相同,可以最小化访存开销(MAC)
    过量使用组卷积group convolution ,会增加MAC
    网络的分支越多,并行度越差
    Element-wise 操作的时间是不可忽略的
  • 最终结论
    使用平衡的卷积,(相同的输入,输出通道数)
    组卷积的group数要谨慎设计
    减少网络的并行度,减少碎片化(如Inception,以及Auto ML自动产生的网络
    减少Element-wise 操作(元素级操作)
  • 具体做法(和v1相比):
    v2中的传统模块增加了channel split(将通道分成了c-c’和c’两个通道,实验中,c’=c/2,其中一个分支直接恒等映射),实现输入和输出通道相同。
    传统模块中将add操作转化为concat操作,有助于增加信息量,减少运算量(这只是在这里是这样吧,一般情况下concat的运算量更高吧)
    Group conv换成了普通的conv,可以减少group数,减少MAC
    将channle shuffle操作移到残差模块的最后来做
    残差结构也是使用两种结构,但都使用Concat

从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2,ShuffleNetV2,MobileNetV3

EfficientNetv1(google 2019)和v2(google 2021)

EfficientNet网络详解
EfficientNetV2网络详解

RepVGG(2021CVPR)

核心:
  • 在VGG网络的Block块中加入了Identity和残差分支,相当于把ResNet网络中的精华应用 到VGG网络中;
  • 模型推理阶段,通过Op融合策略(结构重参数化)将所有的网络层都转换为Conv3*3,便于模型的部署与加速。
  • 该论文中的包含的亮点包括:(1)网络训练和网络推理阶段使用不同的网络架构,训练阶段更关注精度,推理阶段更关注速度。
网络为什么要这么设计?训练时要采用多分支结构,推理时将多分支模型转换成单路模型?
  • 训练时要采用多分支结构,丰富了梯度的流动性,增强模型的表征能力。

  • 推理采用单路模型会更快更省内存并且更加的灵活

    • 更快:主要是考虑到模型在推理时硬件计算的并行程度以及MAC(memory access cost),对于多分支模型,硬件需要分别计算每个分支的结果,有的分支计算的快,有的分支计算的慢,而计算快的分支计算完后只能干等着,等其他分支都计算完后才能做进一步融合,这样会导致硬件算力不能充分利用,或者说并行度不够高。而且每个分支都需要去访问一次内存,计算完后还需要将计算结果存入内存(不断地访问和写入内存会在IO上浪费很多时间)。
    • 更加灵活:对于多分支的模型,结构限制较多剪枝很麻烦,而对于Plain结构的模型就相对灵活很多,剪枝也更加方便。
    • 多分支转化成单路模型后很多算子进行了融合(比如Conv2d和BN融合),使得计算量变小了,而且算子减少后启动kernel的次数也减少了(比如在GPU中,每次执行一个算子就要启动一次kernel,启动kernel也需要消耗时间)。而且现在的硬件一般对3x3的卷积操作做了大量的优化,转成单路模型后采用的都是3x3卷积,这样也能进一步加速推理。
结构重参数化
  • 将残差块中的3*3卷积层和BN层进行融合(其实就是通过BN的计算公式和卷积的计算做的线性融合);
  • 将另一分支的1*1卷积转换为3*3卷积(对1*1卷积周围补0);
  • 对最后一个分支的BN层,先构建一个3*3卷积,再用卷积和BN融合公式;
  • 最后合并所有分支的3*3卷积。即将所有分支的权重W和偏置B叠加起来,从而获得一个融合之后的Conv3*3网络层。
RepVGG算法实现步骤
  • 获取并划分训练数据集,并对训练集执行数据增强操作;
  • 搭建RepVGG训练网络,训练分类网络,直到网络收敛为止;
  • 加载训练好的网络,对该网络执行重参数化操作,具体的细节如上节所述;
  • 加载重参数化后的模型,执行模型推理。
RepVGG算法存在的一些问题

(1)从训练阶段转推理阶段之前,需要执行模型重参数化操作;(2)在模型重参数化过程中会增加一些额外的计算量;(3)由于每个残差块中引入了多个残差分支,网络的参数量也增加了一些。
RepVGG网络简介
RepVGG算法详解

ConvNeXt(2022CVPR)

  ConvNeXt使用的全部都是现有的结构和方法,没有任何结构或者方法的创新。论文中的作者认为可能是随着技术的不断发展,各种新的架构以及优化策略促使Transformer模型的效果更好,然后对标Swin Transformer的设计用卷积进行了一系列的仿照实验。
  首先利用训练 vision Transformers 的策略去训练原始的ResNet50 模型,提升了许多:AdamW优化器进行了300轮训练并使用 cosine衰减学习率调度器,前20轮进行了预热。批量大小为1024,初始化学习率为 0.001,0.05的权重衰退。我们在训练的是时候用了 [63]中的绝大多数数据增强和正则化策略。除了与在 [31]中重复的数据增强操作和 [45]中的EMA,这些没有带来性能提升。注意这点和 [63]相反,在 [63]中重复的数据增强对ViT的稳定训练是至关重要的。( [63]、[31]、[45]均为Swin Transformer论文的参考文献)。

ConvNeXt的改进策略
  • macro design:改变stage的比率、改变stem结构(卷积核大小为4x4步距为4)

  • ResNeXt:作者采用的是更激进的depthwise convolution,认为depthwise convolution和self-attention中的加权求和操作很相似。

  • inverted bottleneck:作者认为Transformer block中的MLP模块非常像MobileNetV2中的Inverted Bottleneck模块,即两头细中间粗。(但作者修改了一下顺序)

  • large kerner size:作者将depthwise conv的卷积核大小由3x3改成了7x7(和Swin Transformer一样)

  • various layer-wise micro designs:和Transformer一样,使用GELU替换ReLU;使用更少的激活函数(但在Transformer中并不是每个模块后都跟有激活函数);使用更少的Normalization;将BN替换成LN;在Swin Transformer中是通过一个单独的Patch Merging实现下采样,ConvNext网络也单独使用了一个下采样层卷积核大小为2步距为2的卷积
    ConvNeXt网络详解

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值