神经网络--轻量级分类网络回顾

目录

 

一、简介

二、轻量级网络

1.mobileNet

1.1 mobileNetV1

1.2 mobileNetV2

1.3 mobileNetV3

2.shuffleNet

3.squeezeNet

三、参数量介绍

1.时间复杂度

1.1 单个卷积层的时间复杂度

1.2 整个卷积网络的时间复杂度

2.空间复杂度

3. 计算平台的两个指标

4. 计算平台的两个指标

5. 网络参数优化

5.1 1*1的卷积降维同时优化时间复杂度和空间复杂度

5.2 两个3*3的卷积

5.3 使用 1*n与1*n卷积级联替代 1*n卷积

总结


 

一、简介

    轻量级分类网络和参数量计算的回顾,轻量级网络: mobileNet系列、shuffleNet和squeezeNet,网络参数计算: 模型参数和计算平台参数。

二、轻量级网络

1.mobileNet

    mobileNetV1使用深度可分离卷积(dw和pw)来构建轻量级网络

    mobileNetV2提出的inverted residual with linear bottleneck单元,两端浅中间深的倒漏斗,层数变多了整体网络准确率和速度都有提升

    mobileNetV3则结合AutoML,进行更轻量级的网络构建

1.1 mobileNetV1

代码MobileNet通过深度可分离卷积优进行计算量优化,将标准卷积转化为深度卷积和1 × 1卷积,每层后面都会接BN和ReLU。

神经网络--轻量级分类网络回顾_第1张图片

神经网络--轻量级分类网络回顾_第2张图片

 

(1)  宽度缩放因子 A:文中引入了α作为宽度缩放因子,其作用是在整体上对网络的每一层维度进行瘦身。α影响模型的参数数量及前向计算时的乘加次数。输入为αM维,输出为αN维。此时DSC的计算量变为:

(2)  分辨率缩放因子 A:该因子即为ρ,用于降低输入图像的分辨率(如将224*224降低到192*192,160*160,128*128)

1.2 mobileNetV2

Linear Bottlenecks:

A: 去掉了小维度输出层后面的非线性激活层,目的是为了保证模型的表达能力。

B: 在MobileNet V2中,执行降维的卷积层后面不会接类似ReLU这样的非线性激活层,也就是linear bottleneck的含义。

神经网络--轻量级分类网络回顾_第3张图片

(1) 如下a是普通的残差bottleneck模块 A:输入的特征图经过1x1和3x3的卷积进行压缩,再使用1x1的卷积进行扩张还原厚度,且每经过卷积处理都需要进行ReLU的非线性激活;

(2) 如下b是逆转的残差bottleneck模块 A:输入的特征图经过1x1和3x3的卷积进行扩张,再使用1x1的卷积进行压缩还原厚度,且最后的1x1卷积使用的是线性处理,确保了信息不被丢失。

(3) 在residual block中是先降维再升维,在inverted residual block中是先升维再降维。

神经网络--轻量级分类网络回顾_第4张图片

一个完整的V2 bottleneck,先通过pointwise卷积升维,然后深度卷积提取特征,最后再使用pointwise卷积进行降维,其中升维的比例称为expansion ratio。

神经网络--轻量级分类网络回顾_第5张图片

1.3 mobileNetV3

mobileNetV3基于AutoML构建,再人工微调对搜索结果进行优化,分别用于全局搜索以及局部搜索,ottleneck加入SE模块以及提出计算高效的h-swish非线性激活

神经网络--轻量级分类网络回顾_第6张图片

在bottleneck中引入了SE结构,放在Depthwise Convolution之后,并且将Expansion Layer的通道数目减少, 在提升精度的同时基本不增加时间消耗

(1). 将卷积移动到avg pooling后面,降低计算量。

(2). 去掉了尾部结构中“扩张-卷积-压缩”中的卷积以及其后面的卷积,进一步减少计算量,精度没有损失。

神经网络--轻量级分类网络回顾_第7张图片

2.shuffleNet

(1). 采用 depth-wise convolution 会有一个问题,就是导致信息流通不畅,即输出的 feature map 仅包含输入的 feature map 的一部分,在这里,MobileNet 采用了 point-wise convolution 解决这个问题。

(2). 对于第二层卷积而言,每个卷积核需要同时接收各组的特征作为输入,如图 (b) 所示。通过引入通道重排 channel shuffle可以很方便地实现这一机制。
 

神经网络--轻量级分类网络回顾_第8张图片

(A) 是一个残差模块。对于主分支部分,我们可将其中标准卷积3×3拆分成深度分离卷积。

(B) 主分支前后两个1x1逐点卷积分组化,并在两层之间添加通道重排操作 为了适配和恒等映射做通道融合。

神经网络--轻量级分类网络回顾_第9张图片

(C) 在辅分支加入步长为2的3×3平均池化,专门用于特征图的降采样,做元素相加的操作转为了通道级联,这扩大了通道维度,增加的计算成本却很少。

神经网络--轻量级分类网络回顾_第10张图片

3.squeezeNet

神经网络--轻量级分类网络回顾_第11张图片

(1)  squeeze层 A:使用1∗1卷积代替3∗3 卷积参数减少为原来的1/9

(2)  expand 层  A:使用1∗1 和3∗3 卷积 filter的组合

(3)  3个可调的超参数  A: s1x1(1∗1 filter的个数)、e1x1(1∗1 filter的个数)、e3x3(3∗3 filter的个数

神经网络--轻量级分类网络回顾_第12张图片

    总共有9层fire module,中间穿插一些max pooling,最后是global avg pooling代替了fc层(参数大大减少)。在开始和最后还有两层最简单的单层conv层,保证输入输出大小可掌握

三、参数量介绍

1.时间复杂度

1.1 单个卷积层的时间复杂度

M每个卷积核输出特征图的边长
K每个卷积核的边长
Cin每个卷积核的通道数,也即输入通道数,也即上一层的输出通道数。
Cout本卷积层具有的卷积核个数,也即输出通道数。

输出特征图尺寸本身又由输入矩阵尺寸X、卷积核尺寸K、Padding、 Stride 这四个参数所决定,表示如下:

1.2 整个卷积网络的时间复杂度

D 神经网络所具有的卷积层数,也即网络的深度。
l 神经网络第l个卷积层
Cl 神经网络第 l个卷积层的输出通道数 Cout ,也即该层的卷积核个数。
对于第l个卷积层而言,其输入通道数 Cin 就是第l-1个卷积层的输出通道数。
可见,CNN整体的时间复杂度并不神秘,只是所有卷积层的时间复杂度累加而已。

神经网络--轻量级分类网络回顾_第13张图片

2.空间复杂度

空间复杂度,严格来讲包括两部分:总参数量 + 各层输出特征图
参数量:模型所有带参数的层的权重参数总量
特征图:模型在实时运行过程中每层所计算出的输出特征图大小

 

神经网络--轻量级分类网络回顾_第14张图片

 

时间复杂度决定了模型的训练/预测时间。如果复杂度过高,则会导致模型训练和预测耗费大量时间

空间复杂度决定了模型的参数数量

3. 计算平台的两个指标

算力π:也称为计算平台的性能上限,指的是一个计算平台倾尽全力每秒钟所能完成的浮点运算数。单位是 FLOPS or FLOP/s。
带宽β:也即计算平台的带宽上限,指的是一个计算平台倾尽全力每秒所能完成的内存交换量。单位是Byte/s。

算力决定“屋顶”的高度(绿色线段)
带宽决定“房檐”的斜率(红色线段)

神经网络--轻量级分类网络回顾_第15张图片

 

       不管模型的计算强度 I有多大,它的理论性能 P最大只能等于计算平台的算力 π 。当模型的计算强度 I大于计算平台的计算强度上限 Imax时,模型在当前计算平台处于 Compute-Bound状态,即模型的理论性能 受到计算平台算力 的限制,无法与计算强度成正比 从充分利用计算平台算力的角度上看,此时模型已经完全利用了计算平台的全部算力。

      当模型的计算强度 I小于计算平台的计算强度上限 Imax时,由于此时模型位于 房檐区间,因此模型理论性能 P的大小完全由计算平台的带宽上限 β(房檐的斜率)以及模型自身的计算强度 I所决定,因此这时候就称模型处于 Memory-Bound 状态

4. 网络参数优化

4.1 1*1的卷积降维同时优化时间复杂度和空间复杂度

神经网络--轻量级分类网络回顾_第16张图片

输入尺寸为 28*28*256, 1*1 卷积核 128 个, 3*3 卷积核 192 个, 5*5 卷积核 96 个,卷积核一律采用 Same Padding 确保输出不改变尺寸。在 3*3 卷积分支上加入 64 个 1*1 卷积前后的时间复杂度对比如下式:

神经网络--轻量级分类网络回顾_第17张图片

4.2 两个3*3的卷积

对于同一个输入尺寸,单个 5*5 卷积的输出与两个 3*3 卷积级联输出的尺寸完全一样,即感受野相同。

神经网络--轻量级分类网络回顾_第18张图片

参数量:

神经网络--轻量级分类网络回顾_第19张图片

 

4.3 使用 1*n与1*n卷积级联替代 1*n卷积

神经网络--轻量级分类网络回顾_第20张图片

 


总结

(0). 入门级,直接整体替换backbone 例如将VggNet16换为mobileNet。

(1). 初级,减channel,砍block 即成比例地降低一个经典网络的channel,例如channel数降低为之前的1/2;或者stage的block重复数减小,例如将某个stage的block重复数从8减小为6。

(2). 中级,替换block 比如mobileNetV2出来了之后,整体将之前模型的block替换为mobileNetV2的block;或者shuffleNetV2 出来之后,整体将之前模型的block替换为mobileNetV2的结构。

(3). 高级,从头开始设计,集众家之所长 即理解业界各个经典模型背后的motivation以及解决思路,不再拘泥于生搬硬套。将各个经典模型背后的设计思路吃透,了然于胸,下笔如有神。

你可能感兴趣的:(神经网络--分类)