笔者还写了《轻量化网络总结[1]–SqueezeNet,Xception,MobileNetv1~v3》 ,点击即可查看
论文地址: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 × \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)
通道混洗实现过程:分组卷积共有g组,每个组有n个通道 → \rightarrow → 共(g×n)个输出通道,reshap为(g, n) → \rightarrow → 转置transpose为(n, g) → \rightarrow → 平坦化(flatten),分为g组。实现过程可微,保证模型端到端训练
1.1.3 实验结果
ShuffleNet v1设置超参数缩放因子s控制通道数量即ShuffleNet s×表示通道数缩放s倍与MobileNet v1中宽度因子类似
比较ShuffleNet v1与现有模型的分类误差和计算复杂度
比较ShuffleNet v1与MobileNet v1在ImageNet和COCO数据集上的分类误差和
论文地址: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+c2≥2c1c2⇒hw(c1+c2)+c1c2≥2hwc1c2+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网络架构基础模块:
1.2.3 实验结果
比较ShuffletNet v2不同大小的网络框架与ShuffleNet v1、MobileNet v2等模型在ImageNet数据集上的误差及推理速度
比较ShuffletNet v2与ShuffleNet v1、MobileNet v2等模型在COCO数据集的mAP精度和推理速度
在ShufflNet v2基础模块中引入SE架构并设计相关ShffleNet v2的大模型,比较在ImageNet数据集分分类误差
论文地址:https://arxiv.org/abs/1905.00953
OSNet(Omni-Scale Feature Learning for Person Re-Identification)是针对重识别(ReID)问题提出的一种轻量化网络模型,用于捕获不同的空间尺度(同构和异构)特征并封装多个尺度的任意特征组合
2.1 改造方案
(1)通过多个卷积特征流组成的残差连接块实现全尺度特征学习
(2)引入统一聚合门生成通道权值进行动态多尺度特征融合
2.2 实现方法
(1)全尺度特征学习模块由多个感受野不同的卷积特征流组成,确保每个卷积特征流捕获不同尺度
感受野概念:卷积神经网络中每一层输出特征图上的像素点在原始输入图像上映射区域的大小。
第 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=lk−1+[(fk−1)×∏i=1k−1si],其中 l k − 1 l_{k-1} lk−1为 k − 1 k-1 k−1层对应的感受野大小, f k f_k fk为第 k k k层卷积核(或池化尺寸)大小, s i s_i si为从1到 k − 1 k - 1 k−1层对应的步长Stride
(2)统一聚合门AG(Aggregation Gate)是一种可学习的神经网络用来生成通道权值进行动态多尺度特征融合。所有的特征流在同一个全尺度学习模块中共享AG,其中包含三层:全局平均池化(GAP),两个全连接/1×1卷积层。
其实统一聚合门AG和MobileNet v3中引入SE架构的注意力机制思想是一致的,不同的地方在于OSNet在同一全尺度特征模块中共用一个AG,实现动态组合不同尺度特征流。有关SE架构可阅读《轻量化网络总结–SqueezeNet,Xception,MobileNetv1~v3》中MobileNet v3部分。
2.3 实验结果
比较OSNet与其他模型在重识别对应数据集上的精度
验证全尺度特征学习模块中尺度指数T和统一聚合门特性对精度的影响;借鉴MobileNet v1中宽度和分辨率因子比较其对OSNet模型精度影响
比较OSNet与其他模型的计算量、参数量和ImageNet数据集上精度
论文地址:https://arxiv.org/abs/1911.11907
3.1 改造方案
(1)对特征图进行简单的线性运算(Cheap Operation)和特征连接(Identity)以更少参数生成更多特征图
3.2 实现方法
(1)特征图存在冗余,提出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} (s−1)×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+(s−1)×DF×DF×DM×DM×sN=DK×DK×MDK×DK×M×s1+DM×DM×ss−1≈M×sM+s−1,参数量比较: 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×sN≈M×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可通过常规卷积后的通道数量来控制
3.3 实验结果
研究了Ghost卷积模块中线性变化中卷积核尺寸d和变化次数s的计算量、参数量以及在CIFAR-10数据集上的准确率