结构虽简单,但性能强悍——3个小型卷积神经网络简介
摘要: 本文介绍了三种小型结构的卷积神经网络,在降低计算复杂度的前提下,其性能也不错。此外,无需使用高性能计算机就可以进行仿真,适合初学者仿真体验。
人工智能、深度学习太火了,火到哪一个领域都有讨论的声音。稍微对深度学习有所了解的人们,尤其是对于计算机视觉领域有所涉猎的人们,当一听到深度学习、卷积神经网络时,脑海里不由得自动脑补这样一幅画面——一台满和负载嗡嗡响的GPU服务器、一台满屏代码不断跳跃的显示屏以及坐在电脑前不断尝试不同卷积神经网络模型的科研人员。这幅场景在各个实验室不断的重复出现,那是不是玩人工智能和深度学习一定都是这样呢?答案是不一定。虽然大多数卷积神经网络都是由于其大型结构而取得非常好的性能,但是这些模型对计算能力有比较高的要求。有些人员只想尝试应用下卷积神经网络、体验下效果,这个时候难道也得配一台高性能计算的服务器吗?如果是这种情况的话,本文将告诉你三种卷积神经网络,这些卷积神经网络在你老的台式机(哪怕是没有GPU)、甚至是你的手机上都能够仿真运行,为你节省一大笔开销,是不是很期待?下面一窥这三种卷积神经网络模型的结构及其性能分析。
MobileNet
MobileNet使用深度可分离卷积(depthwise separable Convolutions),这种卷积块结构首先由Xception引入。深度可分离卷积由两部分组成,分别为深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)。
假设二维特征图(feature map)进行标准卷积操作,输入特征图经过卷积操作后进行输出,如图所示,其计算复杂度为D2f∗M∗N∗D2kDf2∗M∗N∗Dk2。其中输入特征图的维度为DfDf,MM和NN分别表示输入通道数以及输出通道数,DkDk是卷积核大小。

深度卷积在每个输入通道上分别映射一个卷积。因此,其输出通道数与输入通道数相同,其计算成本是Df∗M∗DkDf∗M∗Dk。

最后的操作是逐点卷积。它是1×1内核大小的卷积,它将由深度卷积创建的特征简单地结合起来,其计算成本是M∗N∗DfM∗N∗Df。

深度可分离卷积的计算代价是由深度卷积和逐点卷积两部分代价组成。与一般的卷积操作相比,深度可分离卷积降低了原始计算复杂度的(1/N+1/D2k)(1/N+1/Dk2)。假设卷积核大小为3x3,则仿真运算量降低了8倍。
MobileNet同时也提供了两个参数以允许进一步减少运算量。其中一个参数为瘦身乘子(width multiplier)其取值范围为0~1,用来减少网络的通道数,每一层减少alpha∗Nalpha∗N个通道,该参数能被用来权衡模型性能与仿真等待时间。另外一个参数为分辨率乘子(resolution multiplier),该参数将缩放输入图像的尺寸,尺寸范围为224~128之间。由于MobileNet使用全局平均池化代替全连接,你可以使用224x22$图像训练该网络,并将训练好的的网络应用于128x128大小的图像上!
ShuffleNet
ShuffleNet原创了三种混洗单元(Shuffle unit),如下图所示每个单元都是由逐群卷积(pointwise group convolution)和信道混洗(channel shuffle)组成。

一个组卷积包含几个卷积,每一组获取部分输入信道。下图是一个组卷积过程,有3组,每一组有3个输入信道。

这种结构极大的降低了计算代价。假设,如果有4个输入信道和8个输出信道,从中选择2组,每组有2个输入信道和4个输出信道。当只有一组时,其计算代价为D2f∗D2k∗4∗8Df2∗Dk2∗4∗8;当有2组时,其计算代价为D2f∗D2k∗2∗4Df2∗Dk2∗2∗4或者D2f∗D2k∗4∗4Df2∗Dk2∗4∗4。至少是减少了2倍的计算代价。在作者的文章中,当组数为8时取得了最好的结果,因此降低计算量是非常重要的。
EffNet
EffNet为空间可分离卷积(spatial separable convolutions),这与MobileNet的深度可分离卷积非常相似。

如图所示,可分离深度卷积以蓝色矩形块表示,它是由一个行内核(1x3)、可分类池化以及列内核(3x1)的深度卷积组成。
正常深度为3x3的卷积核的计算代价为32∗D2f∗M32∗Df2∗M。第一个深度为1x3卷积核的计算代价为3∗D2f∗M3∗Df2∗M,可分离池化操作将特征图高度减半,具有边际成本。第二个深度为3x1的卷积核的计算代价为3∗D2f/2∗M3∗Df2/2∗M。这样一来,总的计算代价为1.5∗(3∗D2f∗M)1.5∗(3∗Df2∗M),是原先的一半!
此外,EffNet相较于MobileNet和ShuffleNet的一个优化操作是在开始时没有“标准卷积”。

MobileNet和ShuffleNet都避免更换第一层,因为它们觉得该层的计算量已经很小了。虽然我尊重这种说法,但我认为每一个优化都是重要的。在优化了网络的其它层之后,第一层适当地变大。实验结果表明,用EffNet块替换第一层后,降低了每个层计算量的30%。
总结
MobileNet、ShuffleNet以及EffNet这三种卷积神经网络结构都是通过优化计算量构想出来的。每个都用自己的版本取代了经典卷积结构。
MobileNet(Github)深度可分离卷积使用一个深度卷积与逐点卷积结构,此外,引入了两超参数,分别为瘦身乘子和分辨率乘子,都是用来减少特征映射空间的维数。
ShuffleNet(Github)每组采用逐点卷积,为了结合每个组所产生的特征,引入了混洗层(shuffle layer)。
EffNet(Github)使用空间可分离卷积,只是一个简单的深度卷积被分为沿着X轴和Y轴,二者中间有一个池化层。

作者信息
Arthur Douillard,深度学习工程师
本文由阿里云云栖社区组织翻译。
文章原标题《3 Small But Powerful Convolutional Networks》,译者:海棠,审校:Uncle_LLD。
本文为云栖社区原创内容,未经允许不得转载。