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倍)后压缩,这样就不会使模型被压缩的太厉害。
3. Linear Bottlnecks
Linear Bottlnecks 听起来很高级,其实就是把上面的 Inverted Residuals block 中的 bottleneck 处的 ReLU 去掉。通过下面的图片对比就可以很容易看出,实际上就是去掉了最后一个 1x1 卷积后面的 ReLU。
那为什么要去掉呢?而且为什么是去掉最后一个卷积后面的 ReLU 呢?因为在训练 MobileNet V1 的时候发现最后 Depthwise 部分的 kernel 训练容易废掉,最终再经过ReLU出现输出为0的情况。作者发现是因为 ReLU,丢失了一部分信息。进一步的作者发现 ReLU 会对 channel 数较低的张量造成较大的信息损耗,因此执行降维的卷积层后面不会接类似于ReLU这样的非线性**层。白话的理解就是降维操作本来就会丢失一部分信息,而加上 ReLU 之后那是雪上加霜,所以去掉 ReLU 缓一缓。
4. MobileNet V2
完整的网络结构可以参考 netscope_mobilenet_v2。
5. 效果
在 ImageNet 上相比 V1 参数量减少了,效果也更好了。
6. 实操
相对 V1来说,V2 中并没有引入什么新的东西,所以实操部分跟 V1 没有什么区别,所以这里就不再赘述了。