MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 阅读笔记

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 阅读笔记

最近在学习研究各种网络压缩与优化方法,今天阅读了文章《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》,这是Google的研究人员于2017年发表的,论文链接MobileNets_V1,并且在keras内已经有对应的MobileNet API。

下面说说该文章,其主要思想是depthwise separable convolution,其把常见的卷积层滤波和组合的功能分离出来(可以认为是因式分解),变成depthwise convolution和pointwise convolution。Depthwise convolution概念具体可以看Inception Network文章,简单来说就是对每一个channel分别用一个卷积DK * DK核卷积,得到的结果不组合成一个channel,因此一个M channel的输入,输出也会是M channel。而pointwise convolution则是常规的1*1的卷积层,其把depthwise convolution得到的各个channel进行组合,得到新的特征。

从计算量上分析,对于DF * DF * M的输入,常规卷积,假设其卷积核为DK * DK * M * N,,其计算量为DK * DK * M * N * DF * DF。
Depthwise convolution卷积核为DK * DK * M * 1,则计算量为DK * DK * M * DF * DF,而pointwise convolution部分计算量为M * N * DF * DF。其计算量之和是常规卷积的1/N + 1/DK^2倍。因此能缩小网络规模,加速计算。

文章使用的常规卷积模块与depthwise separable convolution模块对比:
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 阅读笔记

此外其还提出了Width Multiplier和Resolution Multiplier两个参数,前者是调整Depthwise convolution输出的特征数,后者是调整每层的输入分辨率。