CNN 已被广泛用在计算机视觉领域,但是近年来各种 CNN 模型复杂度越来越高,计算量越来越大,导致很多模型无法应用在移动端。本文介绍一种高效的 CNN 模型 MobileNets,MobileNets 使用 Depthwise Convolution 和 Pointwise Convolution 替代传统的卷积操作,可以大大减少参数量和计算量。
1.Group Convolution
Group Convolution 是分组卷积,MobileNets 中的 Depthwise Convolution 是 Group Convolution 的一种,因此首先介绍一下 Group Convolution。
首先回顾传统卷积是的具体过程,假设输入的 feature map 通道数 C=6,输出的 feature map 通道数 N=3,则传统卷积过程中需要 N 个 C×k×k 的卷积核,如下图所示。
传统卷积
而 Group Convolution 卷积前先把 feature map 分为 G 组,然后对每组分别进行卷积。则每组的输入通道数为 C/G,每组的卷积核个数为 N/G,卷积核大小为 (C/G)×K×K。假设 G=3,则 Group Convolution 如下图所示。
Group Convolution
输入通道数为 C,输出通道数为 N,则对于传统卷积,卷积核总参数量为 N×C×K×K,而 Group Convolution 的总参数量为 N×(C/G)×K×K,即减少为原来的 1/G。
Depthwise Convolution 是 Group Convolution 的特例,当 G=C 时,Group Convolution 就是 Depthwise Convolution,此时参数量为 N×K×K。MobileNets 通过 Depthwise Convolution 降低了模型的参数量。
2.MobileNets
2.1 MobileNets 卷积操作
MobileNets 是谷歌在 2017 年提出的模型,论文《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》。
MobileNets 的核心结构是 Depthwise Separable Convolution,这一结构可以分解为两个卷积操作:Depthwise Convolution 和 Pointwise Convolution。其中 Depthwise Convolution 就是上面提到的 Group Convolution,把输入的 feature map 分为 G=C 组,对每组分别进行卷积;而 Pointwise Convolution 就是传统的卷积操作,但是卷积核的大小为 1×1。
MobileNets 通过 Depthwise Convolution 层和 Pointwise Convolution 层替换传统的卷积,如下图所示,M 为输入 feature map 通道数,N 为输出 feature map 的通道数,DF 是输出 feature map 的尺寸,DK 是卷积核大小。
MobileNets 卷积操作
上图 a 是传统的卷积,输入通道数为 M 的 feature map,传统卷积使用 N 个 DK×DK 的卷积核输出得到通道为 N×DF×DF 的 feature map,计算量=DK×DK×M×N×DF×DF。而图 b、c 分别对应 Depthwise 和 Pointwise Convolution,先经过 M 个 Depthwise 得到 M×DF×DF 的 feature map,再经过 N 个 Pointwise 得到 N×DF×DF 的 feature map,效果和传统卷积类似,但计算量大大减少。下面的公式显示了 MobileNets 卷积操作计算量和传统卷积计算量的比值:
MobileNets 卷积操作计算量和传统卷积计算量的比值
2.2 MobileNets 结构
MobileNets 卷积操作
上图左边是传统卷积的示意图,右边是 MobileNets 的 Depthwise Separable Convolution,在 Depthwise Convolution 和 Pointwise Convolution 之间加上 Batch Norm 和 Relu 激活函数。
MobileNets 的整体结构如下表所示:
MobileNets 整体结构
下表显示了 MobileNets 计算量分布以及参数分布:
MobileNets 计算量分布和参数分布
为了更好地对 MobileNets 进行瘦身,作者提供了两个超参数:width multiplier α 和resolution multiplier ρ。α 和 ρ 的取值范围都是 (0, 1],其中 α 可以按比例减少通道数量,而 ρ 可以按比例减小 feature map 的尺寸 (即高和宽),加上这两个参数后 Depthwise Separable Convolution 的参数量可以用下面的公式计算:
MobileNets 瘦身公式
3.实验效果
MobileNets 识别准确率和参数量对比
上面是 MobileNets 和一些经典模型的准确性和参数量对比,MobileNets 可以大大减少模型的参数量,同时不会使模型准确性下降很多。