一般的卷积神经网络的参数量和计算量都很大,很难应用在资源有限的场景中。为了解决这个问题,通常是在训练好的模型上进行优化,如通过对模型压缩减少计算量和存储成本,也可以通过剪枝连接方法去掉了不重要的神经元连接或者通道修剪去掉非必要的通道实现加速,还可以将浮点模型转为定点的量化方法实现模型压缩和计算加速。知识蒸馏也是不错的办法,用大模型作为老师,通过知识蒸馏让大模型教导出小模型来实现参数量和计算量的减少。但是这些方法的性能上线取决于原始模型。除了以上方法,研发轻量级模型是减少参数量和计算量的一种很优秀的方法。神经网络的主要参数量和计算量是因为矩阵乘法共享的,轻量的神经网络架构应当去构建参数量和计算量更少的、更高效的深度网络。
MobileNets
图图1 标准卷积和深度可分离卷积
MobileNetV1将普通卷积替换为深度卷积和逐点卷积。普通卷积的卷积核是直接用在所有的输入通道上,而深度卷积分为两部分进行计算,首先按照通道分别对特征图分别进行卷积,并将输出特征图进行拼接,随后使用逐点卷积进行通道卷积得到特征图,逐点卷积是卷积核为1x1的卷积,通道数和输入特征图一致。理论上如果MobileNetV1采用3x3卷积核,那么深度可分离卷积相较普通卷积可以降低大约9倍的计算量。
普通的残差结构先用1x1的卷积降维,再升维的操作。在MobileNetV2却是相反的操作,原因是将残差块替换为了深度可分离卷积之后,参数减少,提取的特征也相对减少,如果再进行压缩的话,能提取的特征就更少了,MobileNetV2为了避免特征减少需要先扩张高维,再经过深度可分离卷积提取特征,随后将卷积提取的特征降到低维。因此残差结构是先升维,再降维的操作。由于ReLU6激活函数对于低维的信息可能会造成比较大的瞬损失,对于高维的特征信息造成的损失很小。所以使用一个线性的激活函数避免特征损失。
MobileNetV3进一步使用AutoML技术用更少的FLOPs获得了更好的性能。MobileNeX重新思考了反向瓶颈的必要性,并声称经典的瓶颈结构也可以实现高性能。
ShuffleNet
ShuffleNetV1认为在轻量级网络中,过多的使用1x1卷积导致严重损害网络的准确性,将1x1卷积替换为分组卷积,分组卷积就是将输入特征图分成不同的组,每个组由单独的卷积核进行组内做卷积,如图3所示,图中分组卷积,表示特征图只和对应的卷积核做卷积。每组卷积都生成一个特征图,共生和组数相同个数的特征图。分组卷积可以用少量的参数量和运算量就能生成大量的特征图。由于分组卷积只会在组内进行卷积,这导致特征图组和组之间无法实现信息的交互,通过扰动通道操作打乱原有特征顺序再进行重组,可以实现不同组之间信息交互。
图3 分组卷积
ShuffleNetV2分析FLOPs和方法在目标硬件上的实际速度差异原因:首先是 MAC (memory access cost)存储访问成本,这时导致分组卷积运行时间有着很大的运行成本的直接原因。在相同计算量下,并行程度高的网络要比其他的网络速度快很多。在计算量相等的情况,网络部署实现平台的不同,最后所呈现的网络运行时间也有差异。此外,在早期的一些工作,通过张量分解来实现矩阵乘法加速,后来的工作证实尽管计算量降低了75%,但是图像处理器上的运行时间却变慢了,原因是硬件供应商通过软件算法硬件化对3x3卷积进行优化。ShuffleNetV2总结了4条高效网络准则:
- 相等的信道宽度使内存访问成本最小化。
- 过多的分组卷积会增加内存访问成本。
- 网络分支过多会降低其并行化程度
- 元素级别操作是不可忽略的,尽管它们具有较小的计算复杂度,但内存访问成本相对较重。
根据上述四条。ShuffleNet V2引入了通道分离操作,如图4(a)所示。在每个单元开始之前,输入通道`c`被分成两个分支 。根据准则三,其中一个分支保持恒等映射。另外的分支包括三个具有相同输入输出通道卷积。两个1x1卷积不再分组,因为开始的分支结构已经产生了两个分组。然后,两个分支进行通道级别的融合操作。最后在进行通道打乱操作,用来网络增强信息交互能力。对于空间下采样操作,如图4(b)所示,通道分离操作被移除,然后输出通道的数量翻倍。
图4 ShuffleNetV2模块
一般的深度神经网络的特征图为了保证了对输入数据的全面理解,通常都会拥有冗余的信息,因此,在普通卷积构成的网络中生成特征图中存在许多类似的特征图对,假设能够不使过多的卷积核生产这些类似的特征层就可以有效减少卷积操作。GhostNetV1基于这个假设使用一种线性变化的方式产生冗余的特征图来有效降低模型参数量和计算复杂度。具体操作,Ghost模块同样将一个普通的卷积层分成两个部分。第一个部分使用普通的卷积操作,但是卷积核总的数量会需要严格地控制。随后对第一个部分得到的原始特征图进行简单的线性运算来生成更多的冗余特征图。由于没有需改变输出特征图的尺寸,Ghost模块需要的参数量和计算复杂度与普通卷积相比下降了很多。基于Ghost模块构建了一个高效的网络架构,即GhostNet。
由于卷积的轻量级模型在建模长程依赖性方面较弱,这限制了进一步的性能改进。最近,引发自然语言处理上变革的自注意机制的模型被引入到计算机视觉中,尽管自注意力机制模块可以捕捉全局信息,但是计算量随着输入分辨率的增加以二次方的速度增长。虽然面对对象问题产生了局部注意力模块(将图像切分为多个区域,在每个区域内分别部署注意力模块)能够降低了理论复杂度,但前处理进行图像切分需要进行大量变换张量形状的操作(比如调整图片大小,转置操作等),在计算资源不富裕的设备上会产生很高的时延。比如,将局部注意力模块和轻量化模型GhostNet结合,理论上复杂度只增加了20%,但是实际的推理时延却翻了2倍。目前经过自注意力机制在图像领域确实带来了惊喜,在多个大型数据集中也超过了不少卷积神经网络,但是在小数据集和少量的计算资源下短时间还无法取代卷积神经网络。因此,GhostNetV2提出了一种新的全连接注意力机制来捕获长距离空间信息,同时保持轻量级卷积神经网络的实现效率。具体地,全连接层被分解为水平全连接和垂直全连接以聚集卷积神经网络中2维特征图中的像素,形成全局感受野的注意力矩阵。并且将该注意力机制用来改造GhostNet的残差组件,通过增加全连接注意力机制来增强中间特征。与现有其他架构相比,GhostNetV2可以在精度和推理速度之间实现更好的平衡。但是全连接层会增加参数量和计算量。