卷积神经网络(Convolutional Neural Networks, CNNs)由于其强大的表征学习能力,在计算机视觉领域取得了瞩目的成就,并得到了广泛的应用。为了进一步提高网络的精度,目前CNN的整体发展趋势是向着更深、更复杂的网络发展,但也因此导致了更高的计算代价。而在实际应用中,网络可能需要部署在计算资源有限的平台上,因此简化网络参数、减少网络计算量、提高网络效率也成为卷积网络研究的一个方向。目前轻量化网络研究主要包括以下几个思路:(1)压缩预训练的网络,如通过剪枝(pruning)、乘积量化(product quantization)、矢量量化(vector quantization)、哈希编码、霍夫曼编码等方式实现网络计算量压缩;(2)设计具有更少参数及计算量的高效网络模型,如SquezeNet、Deep fried convnets 、MobileNet、ShuffleNet、GhostNet等;(3)模型蒸馏(distillation),基于预训练的大规模网络引导训练更小规模的网络。
本文主要整理了轻量化网络结构设计研究中的几个经典网络模型:MobileNet[1]、ShuffleNet[2]和GhostNet[3]。
1. 常规卷积网络
在介绍轻量化网络模型前,先对常规卷积网络的操作做一回顾。常规卷积网络中,一个卷积层包含若干个滤波器(filters),每个滤波器包含若干个滤波矩阵,即卷积核(kernels)。一个滤波器对输入的操作如图1所示(忽略偏置计算),对于3通道的输入,一个滤波器将包含3个卷积核,每个卷积核对输入的一个通道进行卷积,各卷积核计算结果相加,得到一个输出特征图。当采用多个滤波器时,即可得到多通道的输出特征图。
![](https://i-blog.csdnimg.cn/blog_migrate/52bb6cc509e7fef1aed526ba7ada4e28.jpeg)
常规卷积层的计算量(乘加操作数)为 。其中H,W,C分别为输入的高、宽及通道数,N为输出通道数(即滤波器数),k为卷积核尺寸。
2. MobileNet
MobileNet由Google团队提出,旨在提供一种适用于计算资源有限的移动设备的卷积网络。其核心是卷积层采用深度可分离卷积(Depthwise separable convolution)。
由第1节回顾可以发现常规卷积层操作其实可以分成两步。第一步是对输入各通道进行卷积滤波,第二步是对第一步结果线性组合。由于常规卷积层中这两步操作并不解耦,因此每个滤波器的卷积核参数并不相同,卷积时需要独立计算,当各层输出特征图通道数增加(即增大)时计算量显著增大。
深度可分离卷积的基本思路是将常规卷积层的两步操作解耦,即逐通道卷积(Depthwise convolution)和逐点卷积(Pointwise convolution),如图2所示。具体操作如下:
(1)逐通道卷积实现深度方向的空间卷积。这一步中输入的每个通道对应一个卷积核,通过卷积操作得到和输入通道数C相同通道的输出。这一步可以看做只采用1个包含C个卷积核的滤波器对输入各通道分别卷积滤波但不求和。也可以看做C个滤波器,每个滤波器仅包含对应单通道的1个卷积核,相当于极端的分成C组的分组卷积(Group convolution)。该步的计算量为。
(2)接着逐点卷积将逐通道卷积结果各通道进行组合的卷积。这一步可以看做对逐通道卷积输出结果进行常规的卷积操作,但卷积核尺寸固定为1*1,从而实现逐点的线性组合。这一步中滤波器数量可以自己设定,从而可以输出通道数为的特征图。该步的计算量为,这里假设逐通道卷积输出与输入尺寸相同。
![](https://i-blog.csdnimg.cn/blog_migrate/c393f2e4838a722aca5d6c9082de64fa.jpeg)
综上一个深度可分离卷积层的计算量为,相比具有相同输出特征图的常规卷积层其计算量减少为原来的
倍。
图3给出了MobileNet中采用的深度可分离卷积层结构和MobileNet整体结构。可以注意到MobileNet采用的深度可分离卷积在逐通道卷积和逐点卷积后均跟随Batch Normalization和ReLU激活函数。也有其他一些采用深度可分离卷积的方法尽在逐点卷积后进行Batch Normalization和ReLU激活。此外后续研究中MobileNet也有了更新的版本,如MobileNet V2,MobileNet V3,感兴趣的读者可以自行研究。
![](https://i-blog.csdnimg.cn/blog_migrate/90caac3ca1af02fbf78305d5fdf20254.jpeg)
3. ShuffleNet
ShuffleNet是旷视科技提出的应用于移动设备的高效CNN模型。其作者注意到此前的运用深度可分离卷积的方法中1*1的逐点级卷积(Pointwise convolution)占用大量的计算资源。一个直接的解决思路是利用通道稀疏连接的方法,如分组卷积(Group convolution),来降低其计算复杂度。
分组卷积实际上早在AlexNet中就有使用,其基本思路是将输入特征图分为g组,每组内分别进行常规卷积,如图4(a)。由于每组输入和输出的通道数均变为原本的1/g,总计算量变为常规卷积的1/g。但是分组卷积存在的一个问题是一组输出只与本组内的输入有关,不同组间缺乏信息交互,可能会降低模型表征能力。
![](https://i-blog.csdnimg.cn/blog_migrate/cd277f28b015ff1d643d0de045232ae1.jpeg)
为了解决分组卷积组间信息无法交互的问题,ShuffleNet提出一种采用通道间混洗(Channel shuffle)的分组卷积。在一层分组卷积得到输出后,对各组输出均匀打乱,使得下一层分组卷积中各分组的特征图来自上一层不同组的输出,从而实现不同分组间信息交互,如图4(b)及(c)。具体实现中,如图5所示,通过简单的维度变换(Reshape)和转置(Transpose)即可实现通道混洗:首先将上一层输出的通道数g×n维度变化为(g, n),接着转置为(n, g),最后重新维度变化为g×n。综上通过通道混洗的分组卷积一方面降低了计算量,一方面实现了通道间的信息交互。
![](https://i-blog.csdnimg.cn/blog_migrate/ad63fa49d356a01b7327feda2e3c4085.jpeg)
在此基础上原文参考残差网络的bottleneck设计给出包含和不包含下采样的两个ShuffleNet Unit,如图6。
![](https://i-blog.csdnimg.cn/blog_migrate/6cc48bdc2cf4d3183f35f0e854a47720.jpeg)
进一步的,给出不同分组数的ShuffleNet如图7。此外后续研究中ShuffleNet也有了更新的版本,如ShuffleNet V2,感兴趣的读者可以自行研究。
![](https://i-blog.csdnimg.cn/blog_migrate/e9734cdae4454b25dbb6898da8abc8b4.jpeg)
4. GhostNet
GhostNet由华为诺亚方舟实验室提出,作者注意到常规卷积操作得到的特征图间存在很多冗余,例如图8中用相同颜色标出的特征图间相关性很高。因此可以减少常规卷积生成的特征图数量,而基于这些特征图采用一些廉价操作(Cheap operations),如简单线性变换等,生成更多特征图。原文中将常规卷积生成的特征图称为本质特征图(Intrinsic feature maps),由廉价操作生成的特征图称为幻影特征图(Ghost feature maps),因此该操作也可以称为幻影卷积(Ghost convolution)。
![](https://i-blog.csdnimg.cn/blog_migrate/8a26aad8d9a0bbecdfe77252c49fc24c.jpeg)
幻影卷积的具体操作如图9所示。假设希望生成通道数为N的特征图输出,幻影卷积也可以分为两步:
(1)首先通过常规卷积生成通道数为M=N/s的本质特征图。这一步操作与常规卷积无异,但通过减少输出通道数降低了计算量,该步的计算量为。
(2)接着对于本质特征图中的每一个特征图分别通过s个变换生成最终输出的特征图。
可以采用线性变换、仿射变换及小波变换等,且可以同时采用多个不同类型或超参数的变换。但考虑到硬件计算效率及实用性,原文中采用固定尺寸的卷积操作实现线性变换(该卷积操作对每个通道独立进行,相当于对本质特征图进行了s-1次depthwise卷积)。同时变换的最后一项
取恒等映射,即在最终输出中保留本质特征图。假设采用卷积核尺寸为d的卷积实现线性变换,则该步的计算量为
。
![](https://i-blog.csdnimg.cn/blog_migrate/a93abd897624b744073dd3d9c25e27d1.jpeg)
综上一个幻影卷积的计算量为
相比具有相同输出特征图的常规卷积层其计算量比为(后两项近似是通过假设k与d近似相等,s远小于C得到的)
即计算量近似为常规卷积的1/s倍。
在此基础上原文参考残差网络的bottleneck设计给出包含和不包含下采样的两个幻影卷积bottleneck(G-bneck),如图10。
![](https://i-blog.csdnimg.cn/blog_migrate/e951be73dc29f6111da76e63963861e1.jpeg)
进一步的给出GhostNet结构设计如图11。其中SE代表是否采用SE模块。
![](https://i-blog.csdnimg.cn/blog_migrate/80cc564ade4ef9d36b94521d2f83d836.jpeg)
5. 参考文献
[1] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications, 2017.
[2] ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices, 2018.