MobileNetV1
Google Howard 等人提出的适用于移动设备的,使用 depthwise separable conv 构建的轻量 CNN。
引入了两个全局超参数,能够有效地平衡了速度和准确率。超参数允许模型构建者根据他们的问题,选择模型大小。
Depthwise Seperable Conv
这种卷积用两层结构,替代了标准卷积,加速计算:
-
depthwise conv:一个 filter 只过滤一层 feature map(标准卷积是所有层)。
-
pointwise conv:1x1 卷积,输出结果到下一层。
简单地说,depthwise conv 把标准卷积的求和步骤,放到了第二步 1x1 conv 来做。
标准卷积输入 的特征 map,输出 的 feature map,其中 M 是输入深度,N 是输出深度, 是输入输出 feature map 的宽高。标准卷积的算法:
标准卷积的计算复杂度:
其中 M 是输入通道数,N 是输出通道数, 是 kernel size, 是 feature map size。
而 depthwise 卷积的算法:
计算复杂度:
depthwise 卷积加上 1x1 卷积,计算复杂度:
二者相除,这种卷积计算复杂度减少了:
其中,MobileNet 使用 3x3 卷积,可以提速 8~9 倍,同时对准确率影响不大。
超参数
宽度超参数 ,把输入输出 变成 。通过设置 ,参数尺寸可以缩减约 。
分辨率超参数 ,把 feature map 变成 。通过设置 ,计算量可以缩减约 。
MobileNetV2
引入的新的网络结构:inverted residual with linear bottleneck
与 resnet 不同,输入层先用 conv 1x1 降维,在使用 Dwise conv 3x3 + Pointwise 1x1 代替原先的标准卷积。
与 MobileNetV1 bottleneck 使用非线性函数 ReLU 不同,linear bottleneck 输出层使用线性函数 conv 1x1。原因是:理论上,ReLU 在高维空间能有效增加非线性,但在低维空间(Depthwise Conv 后)会丢失信息,参见论文附录A;实验上,导致准确率损失。
Dwise 使用 ReLU6,当低精度运算时有更好的鲁棒性。
MobileNetV2 的 Keras 实现可参考: github
SqueezeNet 17’
TODO