轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet
Posted Gthan学算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet相关的知识,希望对你有一定的参考价值。
笔者还写了《轻量化网络总结[1]–SqueezeNet,Xception,MobileNetv1~v3》 ,点击即可查看
轻量化网络
轻量化网络模型的 核心是在 保持精度的前提下,从 模型大小和 推理速度两方面 综合对网络进行 轻量化改造,使深度学习网络模型更容易部署在移动端或嵌入式设备。以下详细介绍轻量化网络模型ShuffleNetv1/v2,OSNet,GhostNet:
1. ShuffleNet
1.1 ShuffleNet v1
论文地址:https://arxiv.org/pdf/1707.01083.pdf
1.1.1 改造方案
(1)通过逐点分组卷积(Pointwise Group Conv)降低计算量
(2)通过通道混洗(Channel Shuffle),保证不同组特征图之间的通道全关联
1.1.2 实现方法
(1)大量的1×1卷积耗费计算资源,通过逐点分组卷积能够有效降低1×1卷积计算量和参数量
分组卷积将输入特征图按通道进行分组,按分组独立进行常规卷积并且相互组别之间的卷积互不干扰
有关计算量(只考虑乘法,不考虑加法)和参数量如下:
常规卷积计算量:
D
K
×
D
K
×
D
F
×
D
F
×
M
×
N
D_K × D_K × D_F × D_F × M × N
DK×DK×DF×DF×M×N、参数量:
D
K
×
D
K
×
M
×
N
D_K × D_K × M × N
DK×DK×M×N
分组卷积计算量:
D
K
×
D
K
×
D
F
×
D
F
×
M
G
×
N
D_K × D_K × D_F × D_F × \\fracMG × N
DK×DK×DF×DF×GM×N、参数量:
D
K
×
D
K
×
M
G
×
N
D_K × D_K × \\fracMG × N
DK×DK×GM×N
其中DK为卷积核尺寸,DF为输出特征图尺寸,M、N分别为输入、输出特征图通道数量,G为分组数。可以看出常规卷积的计算量和参数量是分组卷积的G倍
此外分组卷积可以将每个分组并行训练,提高训练效率;在部分场景中分组卷积可以利用通道间的稀疏性(类似正则化)达到更好的效果
(2)分组卷积中通道输出仅从一小部分输入通道组中导出降低了通道组之间的信息流通和表示能力,为保证通道间的全关联提出通道混洗(Channel Shuffle)
- 图a为常规的分组卷积,即输出只来源于部分输入通道降低了通道组之间的信息融合
- 图b引入通道混洗,即对组卷积(GConv)之后的特征图进行混合重组,使后续组卷积的输入来源于不同的组保证了通道组之间的信息融合
- 图c为通道混洗的效果,展现其随机过程,即均匀的混合不同通道组的特征图
通道混洗实现过程:分组卷积共有g组,每个组有n个通道 → \\rightarrow → 共(g×n)个输出通道,reshap为(g, n) → \\rightarrow → 转置transpose为(n, g) → \\rightarrow → 平坦化(flatten),分为g组。实现过程可微,保证模型端到端训练
ShuffleNet v1网络架构基础模块:
- 图a为将残差模块中常规卷积替换为分离卷积(DWConv)
- 图b为带有逐点分组卷积(GConv)和通道混洗的残差模块(ShuffleNet v1网络步长为1的基础模块)
- 图c为具有下采样的逐点分组卷积(GConv)和通道混洗的残差模块,并且将相加(Add)改为连接(Concat)增大了输出特征图通道数量(ShuffleNet v1网络步长为2的基础模块)
ShuffleNet v1网络框架:
- 整体架构包含常规卷积、最大池化、ShuffletNet v1基本模块(stage,步长1和步长2两种)、全局平均池化、全连接层
- 控制不同的分组数g对应不同的输出通道数量,越大的分组数g对应越大的输出通道数量
1.1.3 实验结果
ShuffleNet v1设置超参数缩放因子s控制通道数量即ShuffleNet s×表示通道数缩放s倍与MobileNet v1中宽度因子类似
比较了不同分组数和通道数下的有无通道混洗的分类误差
比较ShuffleNet v1与现有模型的分类误差和计算复杂度
比较ShuffleNet v1与MobileNet v1在ImageNet和COCO数据集上的分类误差和
1.2 ShuffleNet v2
论文地址:https://arxiv.org/pdf/1807.11164.pdf
1.2.1 改造方案
(1)卷积层中输入特征图和输出特征图的通道数量相等可以减少内存访问成本(MAC)
(2)分组卷积中分组数的升高会增大内存访问成本(MAC)
(3)网络框架的碎片化会降低并行度,影响运行速度
(4)逐元素(element-wise)操作,如ReLU、残差连接中Add等会增大内存访问成本(MAC)
1.2.2 实现方法
目前衡量网络框架的一个通用指标计算量FLOPs不完全等于真正的衡量指标速度或延迟。其间存在差异的原因:① 影响速度除了FLOPs还有内存访问成本 ② 并行度对速度至关重要,相同FLOPs高并行度模型速度块 ③ 模型在不同平台或采用不同的库对运行速度都有影响
4条改造方案的原理说明:
(1)轻量化网络多采用深度可分离卷积,其中包含大量的逐点卷积(1×1卷积)。针对逐点卷积假设其输出特征图尺寸为
h
×
w
h×w
h×w,输入、输出特征图通道分别为
c
1
c_1
c1、
c
2
c_2
c2,则逐点卷积的乘法计算量(FLOPs):
B
=
h
w
c
1
c
2
B = hwc_1c_2
B=hwc1c2 ,内存访问成本(MAC)即访问操作数:MAC
=
h
w
(
c
1
+
c
2
)
+
c
1
c
2
= hw(c_1+c_2)+c_1c_2
=hw(c1+c2)+c1c2,其中
h
w
c
1
hwc_1
hwc1、
h
w
c
2
hwc_2
hwc2和
c
1
c
2
c_1c_2
c1c2分别为输入、输出特征图的内存消耗和卷积核的内存消耗
根据不等式
c
1
+
c
2
≥
2
c
1
c
2
⇒
h
w
(
c
1
+
c
2
)
+
c
1
c
2
≥
2
h
w
c
1
c
2
+
B
h
w
⇒
c_1+c_2≥2\\sqrtc_1c_2 \\Rightarrow hw(c_1+c_2)+c_1c_2≥2hw\\sqrtc_1c_2+\\fracBhw \\Rightarrow
c1+c2≥2c1c2⇒hw(c1+c2)+c1c2≥2hwc1c2+hwB⇒ MAC
≥
2
h
w
B
+
B
h
w
≥2\\sqrthwB+\\fracBhw
≥2hwB+hwB,当前仅当
c
1
=
c
2
c_1=c_2
c1=c2时等号成立。
可知当计算量FLOPs相等时,输入特征图和输出特征图的通道数量相等时产生最小的MAC
(2)假设分组卷积中的分组数为g,其余参数同(1)。ShuffleNet v1说明了分组卷积的乘法计算量FLOPs: B = h w c 1 c 2 g B = \\frachwc_1c_2g B=ghwc1c2 ,其内存访问成本MAC = h w ( c 1 + c 2 ) + c 1 c 2 g = h w c 1 + B g c 1 + B h w = hw(c_1+c_2)+\\fracc_1c_2g = hwc_1+\\fracBgc_1+\\fracBhw =hw(c1+c2)+以上是关于轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet的主要内容,如果未能解决你的问题,请参考以下文章
轻量化卷积神经网络模型总结by wilson(shffleNet,moblieNet,squeezeNet+Xception)
轻量级网络ShuffleNetV1 和 ShuffleNetV2