MobileNet 进化史: 从 V1 到 V3(V2篇)

这部分内容总共由如下 3 篇文章构成。

1. 前言

Andrew G. Howard 等于 2018 年在 MobileNet V1 的基础上又提出了改进版本 MobileNet V2。具体可以参考原始论文 MobileNetV2: Inverted Residuals and Linear Bottlenecks

从标题我们就可以看出,V2 中主要用到了 Inverted Residuals 和 Linear Bottlnecks。

2. Inverted Residuals

上一篇我们看到 V1 的网络结构还是非常传统的直桶模型(没有分支),但是 ResNet 在模型中引入分支并取得了很好的效果,因此到了 V2 的时候,作者也想引入进来,这就有了我们要探讨的问题了。

首先我们看下 Residual block 是怎么回事?下图可以看到,采用 1x1 的卷积核先将 256 维度降到 64 维,经过 3x3 的卷积这后,然后又通过 1x1 的卷积核恢复到 256 维。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQBALHNQ-1574781796609)(2019-11-24-14-44-59.png)]

那如果我们要把 residual block 运用到 MobileNet 中来的话,如果我们还是采用相同的策略显然是有问题的,因为 MobileNet 中本来 feature 的维度就不多,如果还要先压缩的话,会使模型太小了,所以作者提出了 Inverted Residuals,即先扩展(6倍)后压缩,这样就不会使模型被压缩的太厉害。

MobileNet 进化史: 从 V1 到 V3(V2篇)

MobileNet 进化史: 从 V1 到 V3(V2篇)

3. Linear Bottlnecks

Linear Bottlnecks 听起来很高级,其实就是把上面的 Inverted Residuals block 中的 bottleneck 处的 ReLU 去掉。通过下面的图片对比就可以很容易看出,实际上就是去掉了最后一个 1x1 卷积后面的 ReLU。

MobileNet 进化史: 从 V1 到 V3(V2篇)

那为什么要去掉呢?而且为什么是去掉最后一个卷积后面的 ReLU 呢?因为在训练 MobileNet V1 的时候发现最后 Depthwise 部分的 kernel 训练容易废掉,最终再经过ReLU出现输出为0的情况。作者发现是因为 ReLU,丢失了一部分信息。进一步的作者发现 ReLU 会对 channel 数较低的张量造成较大的信息损耗,因此执行降维的卷积层后面不会接类似于ReLU这样的非线性**层。白话的理解就是降维操作本来就会丢失一部分信息,而加上 ReLU 之后那是雪上加霜,所以去掉 ReLU 缓一缓。

4. MobileNet V2

完整的网络结构可以参考 netscope_mobilenet_v2

5. 效果

在 ImageNet 上相比 V1 参数量减少了,效果也更好了。

MobileNet 进化史: 从 V1 到 V3(V2篇)

6. 实操

相对 V1来说,V2 中并没有引入什么新的东西,所以实操部分跟 V1 没有什么区别,所以这里就不再赘述了。

参考

相关文章: