网络优化之MobileNetV1

版权声明:人工智能/机器学习/深度学习交流QQ群:811460433 , 微信公众号:程序员深度学习 https://blog.csdn.net/sinat_24143931/article/details/86166241
人工智能/机器学习/深度学习交流QQ群:116270156
也可以扫一扫下面二维码加入微信群,如果二维码失效,可以添加博主个人微信,拉你进群

1. 算法概述

深度学习被广泛应用关于图像分类、检测等领域中,但是现在的网络存在网络结构复杂、权重参数过多、推理时间过长等问题,使得深度学习网络不容易在移动端部署应用,因此模型压缩,加速成为一个非常重要的课题。本文提出了一种新的网络结构:MobileNets, 将传统的卷积层改造成两层卷积结构,在不影响模型精度的条件下大大减少模型推理的时间和参数数量。

2. 算法详解

Mobilenet网络结构以depthwise separable convolutions(深度可分离卷积层)为核心,该卷积层是将标准的卷积操作分解为两个卷积层,一个是depthwise convolution,该卷积层的每个filter都只跟输入层的每个通道进行卷积,另外一个是11的卷积层(即pointwise convolution),主要作用是将上一层的结果进行合并。下图表示一个标准的卷积层是怎样被因式分解为一个depthwise convolution和一个11的卷积层的。
图2

Mobilenet的算法是用图1中的(b)、(c)代替(a), 其中 D K D_K 表示卷积核大小,M表示输入特征图的通道数,N表示卷积层的通道数。下面分别详细讲解下a、b、c三个图。

  • (a)表示传统卷积层的卷积过程,输入 D F × D F × M {D_F} \times {D_F} \times M 的特征图F,卷积核的大小为 D K × D K × N {D_K} \times {D_K} \times N ,最后会输出一个 D G × D G × N {D_G} \times {D_G} \times N 的特征图G,其中 D F D_F 是输入特征图的宽高, D K D_K 是卷积核大小, D G D_G 是输出特征图的宽高,M是输入的通道数,N是卷积层的通道数,也是输出特征图的通道数。
  • (b)表示depthwise convolution的过程,输入 D F × D F × M {D_F} \times {D_F} \times M 的特征图F,卷积核的大小为 D K × D K × M {D_K} \times {D_K} \times M ,最后会得到一个 D G × D G × M {D_G} \times {D_G} \times M 的特征图G,跟传统卷积层的区别是,depthwise convolution是逐通道做卷积,得到M个结果,并且这M个结果之间不累加,而传统卷积层是用N个卷积核依次卷积输入的所有(也就是M个)feature map,然后累加这M个结果,最终得到N个累加后的结果,注意这里的卷积层通道数和输入特征图通道数一样,都是M。
  • (c)表示 1 × 1 × N 1 \times1 \times N 的卷积核卷积(b)的输出结果,即输入特征图 D F × D F × M {D_F} \times {D_F} \times M ,最后输出 D G × D G × N {D_G} \times {D_G} \times N 的特征图,这个跟传统卷积过程一样。

接下来我们比较下depthwise separable convolutions(深度可分离卷积层)和传统卷积层的计算量。

  • (a)表示的传统卷积层的计算量为 D G × D G × D K × D K × M × N {D_G} \times {D_G} \times {D_K} \times {D_K} \times M \times N ,这个公式可以这样理解,因为输出特征图的每个点都是由卷积操作产生的,而每次卷积的计算量是 D K × D K {D_K} \times {D_K} ,所以如果输入特征图和卷积核的通道数都是1,并且输出特征图大小为 D G × D G {D_G} \times {D_G} 的条件下,卷积的计算量为 D G × D G × D K × D K {D_G} \times {D_G} \times {D_K} \times {D_K} ,如果输入特征图的通道数为M,卷积核通道数为N,那么卷积计算量则为 D G × D G × D K × D K × M × N {D_G} \times {D_G} \times {D_K} \times {D_K} \times M \times N
  • (b)表示的depthwise convolution是逐通道分别卷积,所以计算量为 D G × D G × D K × D K × M {D_G} \times {D_G} \times {D_K} \times {D_K} \times M
  • (c)就是传统的 1 × 1 × N 1 \times 1 \times N 卷积层,所以计算量为 D G × D G × 1 × 1 × M × N {D_G} \times {D_G} \times 1 \times 1 \times M \times N
  • depthwise separable convolutions(深度可分离卷积层)的计算量则为(b)、(c) 计算量的和,所以是 D G × D G × D K × D K × M + D G × D G × M × N {D_G} \times {D_G} \times {D_K} \times {D_K} \times M{\rm{ + }}{D_G} \times {D_G} \times M \times N

两种卷积层的计算量差别可以看下面这个式子:

D G × D G × D K × D K × M + D G × D G × M × N D G × D G × D K × D K × M × N = 1 N + 1 D K 2 \frac{{{D_G} \times {D_G} \times {D_K} \times {D_K} \times M{\rm{ + }}{D_G} \times {D_G} \times M \times N}}{{{D_G} \times {D_G} \times {D_K} \times {D_K} \times M \times N}}{\rm{ = }}\frac{{\rm{1}}}{N}{\rm{ + }}\frac{{\rm{1}}}{{D_K^{\rm{2}}}}

假如卷积核的大小为3*3,通道数是9,那么卷积操作的计算量可以降到原来的2/9左右。
下图表示传统卷积和深度可分离卷积层的差别。
在这里插入图片描述
然后看看这个网络结构:如果把depthwise和pointwise看做不同层的话,MobileNet一共包含28层。第一个卷积层不做分解,另外最后有个均值pooling层,全连接层和softmax层。这里dw就表示depthwise。
在这里插入图片描述
这个Table2介绍了网络中不同类型层的计算时间在总时间中的比例以及参数的数量在总的参数数量中的比例。
在这里插入图片描述
前面讲的都是在计算时间和参数的减少,现在看看计算准确率的对比:Table4,表示本文卷积和标准卷积的对比。可以看出Accuracy减少得不是很明显,但是却大大减少了计算时间和参数数量。
在这里插入图片描述
为了得到更小和更快的模型,作者介绍了两个概念:Width Multiplier 和 Resolution Multiplier。前者表示输入channel变成baseline的多少倍,如Table6;后者表示对输入图像做缩放,如Table7。
在这里插入图片描述
其他更多实验对比可以参看论文。

一个细节:实际中L2正则项的系数要比较小,因为本身参数已经减少许多了。

3. 总结

作者主要提出一种将传统卷积层拆分成两个卷积层的MolileNet网络,可以在基本保证准确率的前提下大大减少计算时间和参数数量。

4. 最后

欢迎大家扫一扫下面二维码加入微信交流群,如果二维码失效,可以添加博主个人微信,拉你进群

猜你喜欢

转载自blog.csdn.net/sinat_24143931/article/details/86166241