虽然不少CNN模型在图像识别领域取得了巨大的成功,可是一个愈来愈突出的问题就是模型的复杂度过高,没法在手机端使用,为了能在手机端将CNN模型跑起来,而且能取得不错的效果,有不少研究人员作了不少有意义的探索和尝试,今天就介绍两个比较轻量级的模型 mobile net 和 shuffle net。网络
在介绍这几个轻量型的网络以前,咱们先来看看,为何卷积神经网络的运算功耗这么大。ide
卷积神经网络,顾名思义,就是会有不少的卷积运算,而卷积神经网络中,最费时间的就是其中的卷积运算。咱们知道,一张 的图像,与一个 的卷积核作卷积卷积运算,须要 这么屡次的运算,而 CNN 中,随便一个卷积层, 都会有几十甚至上百个 feature map, 假设卷积层 含有 个 feature map,即通道数为 , 每一个 feature map 的大小为 , 卷积核的大小为 ,假设 的 feature map 大小与 同样,通道数为 , 中每一个 feature map 上的一个像素点,都是由 上的 feature map 与 卷积核作卷积运算得来的。这样,总共须要的运算次数为:学习
为了减小运算量,Mobile-net V1 利用了 depth-wise 的概念,咱们都知道 pooling 层的运做机理,input feature map 和 output feature map 是 一 一对应的,depth-wise convolution 也是相似的道理,作卷积的时候再也不把 input feature map 进行线性组合了,而是采起一 一对应的方式,这样卷积的运算次数就变成了:spa
也就是说,我input 有 个 feature map,卷积以后,仍是有 个 feature map,运算量减小了不少。3d
不过,也带来一个问题,这样卷积获得的 feature map 之间没有任何信息融合,这确定不利于特征提取的,因此在 depth-wise 卷积运算后面,会再接一个 的卷积运算,因此总的运算次数是:xml
V1 主要的模块以下图所示,就是利用 depth-wise 卷积替换了常规的卷积运算,为了让获得的 feature map 进行信息融合,后面又接了一个 的卷积。blog
Mobile-Net V1 推出来以后,Google 又推出了 Mobile-Net V2,V2 在 residual-block 里面作文章,利用 depth-wise convolution 和 的卷积,简单来讲,就是对 input feature map,先利用 进行通道扩展,这样一扩展,能够增长通道数,提高卷积层特征的表示能力,接着再利用 depth-wise convolution 作卷积运算,这样不会增长太多的运算量,又能利用不少的通道,最后再作一个通道压缩,一压缩,日后传的 feature map 的通道数并不会增长,论文中也给出了示意图:图片
shuffle-net 这个网络模型,是利用了 group 卷积的概念,与 depth-wise 有点像,只不过,depth-wise 是 feature map 一 一对应的,而 group 卷积是将每一个卷积层的 feature map 分红几个组,每一个组之间没有交叉,不过组内的 feature map 作卷积的时候和常规的卷积运算是同样的,因此 group 卷积的复杂度应该是介于常规卷积核 depth-wise 卷积之间的,shuffle-net 的创新之处在于,group 卷积以后,为了增长组与组之间的 feature map的通讯,提出了一个 shuffle channel 的技术,就是将 group 卷积以后 feature map 打乱,乱序链接到下一层,以下图所示:ip
经过 group 卷积,能够下降运算量,经过 channel shuffle,能够增长 feature map之间的信息融合,因此 shuffle-net 也能在提高运算效率的同时,保持必定的特征学习能力。论文也给出几种不一样的 block,ci
上图 (a) 是利用 depth-wise 卷积,(b) 和 (c) 都是 shuffle-net 的模块,不一样的就是卷积的 stride 不一样,因此最后的处理方式也不太同样。
参考文献 1: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 2: MobileNetV2: Inverted Residuals and Linear Bottlenecks 3: ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices