MobileNet——压缩卷积层计算量 (目标检测)(one/two-stage)(深度学习)(CVPR 2017)

论文名称:《 MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications 》 

论文下载:https://arxiv.org/abs/1704.04861

论文代码:https://github.com/miraclewkf/mobilenet-MXNet


1、算法概述:

深度学习在图像分类,目标检测和图像分割等任务表现出了巨大的优越性。但是伴随着模型精度的提升是计算量,存储空间以及能耗方面的巨大开销,对于移动或车载应用都是难以接受的。之前的一些模型小型化工作是将焦点放在模型的尺寸上。

MobileNet使用了一种称之为deep-wise的卷积方式来替代原有的传统3D卷积,减少了卷积核的冗余表达。在计算量和参数数量明显下降之后,卷积网络可以应用在更多的移动端平台。

MobileNet模型的核心就是将原本标准的卷积操作因式分解成一个depthwise convolution和一个1*1的卷积(文中叫pointwise convolution)操作。简单讲就是将原来一个卷积层分成两个卷积层,其中前面一个卷积层的每个filter都只跟input的每个channel进行卷积,然后后面一个卷积层则负责combining,即将上一层卷积的结果进行合并。 

MobileNet——压缩卷积层计算量 (目标检测)(one/two-stage)(深度学习)(CVPR 2017)_第1张图片

如上图:M表示输入特征的通道数,N表示输出特征的通道数(也是本层的卷积核个数)。因此如果假设卷积核大小是DK*DK*M*N,输出是DF*DF*N,那么标准卷积的计算量是DK*DK*M*N*DF*DF。这个式子可以这么理解,先去掉M*N,那么就变成一个二维卷积核去卷积一个二维输入feature map;那么如果输出feature map的尺寸是DF*DF,由于输出feature map的每个点都是由卷积操作生成的,而每卷积一次就会有DK*DK个计算量,因此一个二维卷积核去卷积一个二维输入feature map就有DF*DF*DK*DK个计算量;如果有M个输入feature map和N个卷积核,那么就会有DF*DF*DK*DK*M*N计算量。

2、卷积细节:

传统的3D卷积使用一个和输入数据通道数相同的卷积核在逐个通道卷积后求和最后得出一个数值作为结果,计算量为

其中M为输入的通道数,Dk为卷积核的宽和高。
一个卷积核处理输入数据时的计算量为(有Padding):

其中DF为输入的宽和高。
在某一层如果使用N个卷积核,这一个卷积层的计算量为:

如果使用deep-wise方式的卷积核,我们会首先使用一组二维的卷积核,也就是卷积核的通道数为1,每次只处理一个输入通道的,这一组二维卷积核的数量是和输入通道数相同的。
在使用逐个通道卷积处理之后,再使用3D的1*1卷积核来处理之前输出的特征图,将最终输出通道数变为一个指定的数量,论文原图说明的比较到位:

MobileNet——压缩卷积层计算量 (目标检测)(one/two-stage)(深度学习)(CVPR 2017)_第2张图片


图a中的卷积核就是最常见的3D卷积,替换为deep-wise方式:一个逐个通道处理的2D卷积(图b)结合3D的1*1卷积(图c)
从理论上来看,一组和输入通道数相同的2D卷积核的运算量为:

3D的1*1卷积核的计算量为:

因此这种组合方式的计算量为:

deep-wise方式的卷积相比于传统3D卷积计算量为:

MobileNet——压缩卷积层计算量 (目标检测)(one/two-stage)(深度学习)(CVPR 2017)_第3张图片

举一个具体的例子,给定输入图像的为3通道的224x224的图像,VGG16网络的第3个卷积层conv2_1输入的是尺寸为112的特征图,通道数为64,卷积核尺寸为3,卷积核个数为128,传统卷积运算量就是


如果将传统3D卷积替换为deep-wise结合1x1方式的卷积,计算量为:

可见在这一层里,MobileNet所采用卷积方式的计算量与传统卷积计算量的比例为:

3、网络结构:

传统的3D卷积常见的使用方式如下图左侧所示,deep-wise卷积的使用方式如下图右边所示:

MobileNet——压缩卷积层计算量 (目标检测)(one/two-stage)(深度学习)(CVPR 2017)_第4张图片

从图中可以看出,deep-wise的卷积和后面的1x1卷积被当成了两个独立的模块,都在输出结果的部分加入了Batch Normalization和非线性激活单元。
Deep-wise结合1x1的卷积方式代替传统卷积不仅在理论上会更高效,而且由于大量使用1x1的卷积,可以直接使用高度优化的数学库来完成这个操作。以Caffe为例,如果要使用这些数学库,要首先使用im2col的方式来对数据进行重新排布,从而确保满足此类数学库的输入形式;但是1x1方式的卷积不需要这种预处理。
在MobileNet中,有95%的计算量和75%的参数属于1x1卷积。下图为MobileNet在ImageNet上训练时使用的网络架构(表格中含有dw的就表示这一层采用了deep-wise结合1x1的方式)

MobileNet——压缩卷积层计算量 (目标检测)(one/two-stage)(深度学习)(CVPR 2017)_第5张图片

4.实验结果:

为了验证MobileNet作为基础网络的有效性,Google团队使用MobileNet在不同的视觉识别任务上组为基础网络都表现出了优异的性能。

目标检测中,MobileNet 可以作为一个有效的基网络部署在目标检测系统上。基于2016 COCO 数据集,比较了在 COCO 数据上训练的 MobileNet 进行目标检测的结果。下图列出了在 Faster-RCNN 和 SSD 框架下,MobileNet,VGG 以及 Inception V2 作为基础网络的对比结果。在不同而检测框架和输入尺寸设定下,以MobileNet为基础网络的检测框架表现出了不明显逊色于两个基础网络的性能,而且在计算量和模型尺寸方面有较大优势。

MobileNet——压缩卷积层计算量 (目标检测)(one/two-stage)(深度学习)(CVPR 2017)_第6张图片

5、算法总结:

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

你可能感兴趣的:(目标检测,目标检测:经典论文解读)