轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet

笔者还写了《轻量化网络总结[1]–SqueezeNet,Xception,MobileNetv1~v3》 ,点击即可查看

轻量化网络

    • 1. ShuffleNet
      • 1.1 ShuffleNet v1
      • 1.2 ShuffleNet v2
    • 2. OSNet
    • 3. GhostNet

轻量化网络模型的 核心是在 保持精度的前提下,从 模型大小推理速度两方面 综合对网络进行 轻量化改造,使深度学习网络模型更容易部署在移动端或嵌入式设备。以下详细介绍轻量化网络模型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卷积计算量和参数量
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第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 × \frac{M}{G} × N DK×DK×DF×DF×GM×N参数量 D K × D K × M G × N D_K × D_K × \frac{M}{G} × N DK×DK×GM×N
其中DK为卷积核尺寸,DF为输出特征图尺寸,M、N分别为输入、输出特征图通道数量,G为分组数。可以看出常规卷积的计算量和参数量是分组卷积的G倍

此外分组卷积可以将每个分组并行训练,提高训练效率;在部分场景中分组卷积可以利用通道间的稀疏性(类似正则化)达到更好的效果

(2)分组卷积中通道输出仅从一小部分输入通道组中导出降低了通道组之间的信息流通和表示能力,为保证通道间的全关联提出通道混洗(Channel Shuffle)
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第2张图片

  • 图a常规的分组卷积,即输出只来源于部分输入通道降低了通道组之间的信息融合
  • 图b引入通道混洗,即对组卷积(GConv)之后的特征图进行混合重组,使后续组卷积的输入来源于不同的组保证了通道组之间的信息融合
  • 图c通道混洗的效果,展现其随机过程,即均匀的混合不同通道组的特征图

通道混洗实现过程:分组卷积共有g组,每个组有n个通道 → \rightarrow 共(g×n)个输出通道,reshap为(g, n) → \rightarrow 转置transpose为(n, g) → \rightarrow 平坦化(flatten),分为g组。实现过程可微,保证模型端到端训练

ShuffleNet v1网络架构基础模块
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第3张图片

  • 图a为将残差模块常规卷积替换为分离卷积(DWConv)
  • 图b为带有逐点分组卷积(GConv)和通道混洗的残差模块(ShuffleNet v1网络步长为1的基础模块)
  • 图c为具有下采样的逐点分组卷积(GConv)和通道混洗的残差模块,并且将相加(Add)改为连接(Concat)增大了输出特征图通道数量(ShuffleNet v1网络步长为2的基础模块)

ShuffleNet v1网络框架
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第4张图片

  • 整体架构包含常规卷积、最大池化、ShuffletNet v1基本模块(stage,步长1和步长2两种)、全局平均池化、全连接层
  • 控制不同的分组数g对应不同的输出通道数量,越大的分组数g对应越大的输出通道数量

1.1.3 实验结果

ShuffleNet v1设置超参数缩放因子s控制通道数量即ShuffleNet s×表示通道数缩放s倍与MobileNet v1中宽度因子类似

比较了不同分组数和通道数下的有无通道混洗的分类误差
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第5张图片

比较ShuffleNet v1与现有模型的分类误差和计算复杂度
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第6张图片
比较ShuffleNet v1与MobileNet v1在ImageNet和COCO数据集上的分类误差和
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第7张图片

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\sqrt{c_1c_2} \Rightarrow hw(c_1+c_2)+c_1c_2≥2hw\sqrt{c_1c_2}+\frac{B}{hw} \Rightarrow c1+c22c1c2 hw(c1+c2)+c1c22hwc1c2 +hwB MAC ≥ 2 h w B + B h w ≥2\sqrt{hwB}+\frac{B}{hw} 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 = \frac{hwc_1c_2}{g} 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)+\frac{c_1c_2}{g} = hwc_1+\frac{Bg}{c_1}+\frac{B}{hw} =hw(c1+c2)+gc1c2=hwc1+c1Bg+hwB
可知当计算量FLOPs相等时,分组卷积中分组数的升高会增大MAC

(3)网络框架中的碎片化结构有利于提高模型准确率,然而在高并行的情况下会增加很多额外开销(内核启动、同步等)影响计算效率

(4)元素级操作如ReLU、残差连接虽然FLOPs较小但是会增加较高的MAC尤其是深度卷积并且元素级操作占用了部分时间不可忽略

在ShuffletNet v1网络框架的基础模块中:
① 采用了瓶颈(Bottleneck)导致输入、输出特征图通道数量不同
② 大量使用了逐点分组卷积
③ 使用过多的分支碎片化结构
④ 大量使用ReLU、残差连接(Add)等元素级操作

针对以上不足,设计了ShuffleNet v2网络架构基础模块
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第8张图片

  • 图a和b为ShuffletNet v1网络框架中无下采样和下采样的基础模块
  • 图c对应步长为1的ShffleNet v2基础模块,引入Channel Split将特征图的输入通道分为两个分支(即按通道对半分),其中一个分支为残差连接,另一个分支包含三个卷积,其中将1×1逐点分组卷积替换常规1×1卷积三个卷积之间的输入输出通道数量保持一致;残差连接中将Add替换为Concat,由于Channel Split类似组卷积因此将通道混洗移至残差连接(Concat)之后保证整个模块输入输出通道数量相同;事实上残差连接(Concat)和通道混洗之后可以和下一模块的Channel Split合成一个元素级操作
  • 图d对应步长为2的ShuffleNet v2基础模块不使用Channel Split而是将特征图直接输入两个分支,每个分支都包含步长为2的深度卷积并且使用常规1×1卷积,最后连接(Concat)在一起进行通道混洗保证整个模块输入输出特征图尺寸减半但通道数量翻倍

ShuffleNet v2网络框架
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第9张图片

  • 与ShuffleNet v1网络框架基本类似,替换其中的基础模块
  • 控制不同的参数(s)对应不同的输出通道数量即s×,越大的参数s对应越大的输出通道数量

1.2.3 实验结果

比较ShuffletNet v2不同大小的网络框架与ShuffleNet v1、MobileNet v2等模型在ImageNet数据集上的误差及推理速度
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第10张图片

比较ShuffletNet v2与ShuffleNet v1、MobileNet v2等模型在COCO数据集的mAP精度和推理速度
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第11张图片
在ShufflNet v2基础模块中引入SE架构并设计相关ShffleNet v2的大模型,比较在ImageNet数据集分分类误差
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第12张图片

2. OSNet

论文地址:https://arxiv.org/abs/1905.00953
OSNet(Omni-Scale Feature Learning for Person Re-Identification)是针对重识别(ReID)问题提出的一种轻量化网络模型,用于捕获不同的空间尺度(同构和异构)特征并封装多个尺度的任意特征组合

2.1 改造方案

(1)通过多个卷积特征流组成的残差连接块实现全尺度特征学习
(2)引入统一聚合门生成通道权值进行动态多尺度特征融合

2.2 实现方法

(1)全尺度特征学习模块由多个感受野不同的卷积特征流组成,确保每个卷积特征流捕获不同尺度
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第13张图片

  • 全尺度特征学习模块包含4个卷积特征流每个特征流感受野(尺度)遵循尺度增量模式并且引入尺度指数T,代表多特征流中增量大小。当T=4时,有4个特征流,对应感受野为3×3、5×5、7×7、9×9
  • 为减少计算量和参数量将常规3×3卷积替换为3×3深度可分离卷积,即Lite 3×3
    轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第14张图片

感受野概念:卷积神经网络中每一层输出特征图上的像素点在原始输入图像上映射区域的大小。
k k k感受野计算公式 l k = l k − 1 + [ ( f k − 1 ) × ∏ i = 1 k − 1 s i ] l_k = l_{k-1} + [(f_k - 1)×\prod_{i=1}^{k-1}s_i] lk=lk1+[(fk1)×i=1k1si],其中 l k − 1 l_{k-1} lk1 k − 1 k-1 k1层对应的感受野大小, f k f_k fk为第 k k k层卷积核(或池化尺寸)大小, s i s_i si为从1到 k − 1 k - 1 k1层对应的步长Stride

(2)统一聚合门AG(Aggregation Gate)是一种可学习的神经网络用来生成通道权值进行动态多尺度特征融合。所有的特征流在同一个全尺度学习模块中共享AG,其中包含三层:全局平均池化(GAP),两个全连接/1×1卷积层。
其实统一聚合门AGMobileNet v3中引入SE架构的注意力机制思想是一致的不同的地方在于OSNet在同一全尺度特征模块中共用一个AG,实现动态组合不同尺度特征流。有关SE架构可阅读《轻量化网络总结–SqueezeNet,Xception,MobileNetv1~v3》中MobileNet v3部分。

OSNet网络框架
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第15张图片

  • 整体架构包含常规卷积、最大池化、全尺度特征学习模块(bottleneck)、全局平均池化、全连接层
  • 运用了7×7大卷积核

2.3 实验结果

比较OSNet与其他模型在重识别对应数据集上的精度
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第16张图片
验证全尺度特征学习模块中尺度指数T和统一聚合门特性对精度的影响;借鉴MobileNet v1中宽度和分辨率因子比较其对OSNet模型精度影响
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第17张图片

比较OSNet与其他模型的计算量、参数量和ImageNet数据集上精度
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第18张图片

3. GhostNet

论文地址:https://arxiv.org/abs/1911.11907

3.1 改造方案

(1)对特征图进行简单的线性运算(Cheap Operation)和特征连接(Identity)以更少参数生成更多特征图

3.2 实现方法

(1)特征图存在冗余,提出Ghost卷积模块使用低成本的计算获得冗余保证对输入数据的全面理解

轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第19张图片

  • Ghost卷积模块通过常规卷积获取通道数较少的特征图(一般为输出特征图通道数量的一半),其次对少量特征图按通道进行简单线性变化,最后进行特征连接(Identity)输出与常规卷积相同尺寸的特征图
  • 实际应用中为提高效率常规卷积可采用1×1逐点卷积来跨通道处理特征,线性变化可采用分离卷积(如3×3或5×5)逐通道处理空间信息
  • Ghost卷积模块可以理解为将常规卷积的乘法拆分为两个计算量更少的乘法后相加,是深度可分离卷积思想的衍生

有关计算量(只考虑乘法,不考虑加法)和参数量如下:
常规卷积计算量 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
Ghost卷积模块中常规卷积计算量 D K × D K × D F × D F × M × N s D_K × D_K × D_F × D_F × M × \frac{N}{s} DK×DK×DF×DF×M×sN参数量 D K × D K × M × N s D_K × D_K × M × \frac{N}{s} DK×DK×M×sN
Ghost卷积模块中线性变化计算量 ( s − 1 ) × D F × D F × D M × D M × N s (s-1) × D_F × D_F × D_M × D_M × \frac{N}{s} (s1)×DF×DF×DM×DM×sN参数量 D M × D M × N s D_M × D_M × \frac{N}{s} DM×DM×sN
其中DK为常规卷积中卷积核尺寸,DM为线性变化中卷积核尺寸,DF为输出特征图尺寸,M、N分别为输入、输出特征图通道数量,s变化次数(线性变化+恒等变换Identity)。

Ghost卷积模块与常规卷积计算量比较 D K × D K × D F × D F × M × N s + ( s − 1 ) × D F × D F × D M × D M × N s D K × D K × D F × D F × M × N = D K × D K × M × 1 s + D M × D M × s − 1 s D K × D K × M ≈ M + s − 1 M × s \frac {D_K × D_K × D_F × D_F × M × \frac{N}{s} + (s-1) × D_F × D_F × D_M × D_M × \frac{N}{s}}{D_K × D_K × D_F × D_F × M × N} = \frac {D_K × D_K × M × \frac{1}{s} + D_M × D_M × \frac{s-1}{s}}{D_K × D_K × M}≈\frac{M+s-1}{M×s} DK×DK×DF×DF×M×NDK×DK×DF×DF×M×sN+(s1)×DF×DF×DM×DM×sN=DK×DK×MDK×DK×M×s1+DM×DM×ss1M×sM+s1参数量比较 D K × D K × M × N s + D M × D M × N s D K × D K × M × N ≈ M + s M × s \frac {D_K × D_K × M × \frac{N}{s} + D_M × D_M × \frac{N}{s}}{D_K × D_K × M × N} ≈ \frac {M+s}{M×s} DK×DK×M×NDK×DK×M×sN+DM×DM×sNM×sM+s,其中≈部分假设 D K = D M D_K=D_M DK=DM当s远小于M时参数量和计算量有明显减少
说明: N = M ′ × s N=M'×s N=M×s,其中M’为Ghost卷积模块中常规卷积后的通道数量;因此变化次数s可通过常规卷积后的通道数量来控制

GhostNet网络框架基础模块
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第20张图片

  • 步长为1的基础模块由两个Ghost卷积模块的残差连接(Add)组成,其中使用扩展系数采用先升维度后降维的方式
  • 步长为2的基础模块由两个Ghost卷积模块和一个步长为2的下采样分离卷积的残差连接(Add)组成,其中使用扩展系数采用先升维度后降维的方式;并且在残差连接部分也有步长为2的下采样分离卷积和逐点卷积以保证可以进行连接(Add)操作
  • 两个基础模块都只在第一个卷积层模块使用激活函数

GhostNet网络框架
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第21张图片

  • 整体架构包含常规卷积、GhostNet基本模块(G-bench,步长1和步长2两种)、全局平均池化、全连接层
  • exp代表Ghost卷积模块升维后的通道数,out代表输出通道数,SE代表是否引入SE架构,Stride代表步长

3.3 实验结果

研究了Ghost卷积模块中线性变化中卷积核尺寸d和变化次数s的计算量、参数量以及在CIFAR-10数据集上的准确率
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第22张图片

比较GhostNet与不同网络模型的计算量、参数量、延迟以及在ImageNet数据集上的精度
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第23张图片

比较GhostNet与MoblieNet v2
轻量化网络总结[2]--ShuffleNetv1/v2,OSNet,GHostNet_第24张图片

你可能感兴趣的:(轻量化网络,深度学习,计算机视觉,神经网络,视觉检测)