前面我们总结了MobileNet V1的结构和设计原理,MobileNet V2在V1的基础上进一步做了改进。他的一个Motivation是: 低维度的特征经过非线性的激活函数后会损失很多有用的信息。
可以这么理解:考虑V1的结构有DW(depth wise convolution)和PW(point wise convolution)两种不同的卷积,每一种卷积之后都会接一个batch normalization层和ReLu6()层,在PW之后低维的信息再通过ReLu6()会损失很多有价值的信息。
所以作者采用了residual connection和linear bottleneck 两种措施来缓解这个问题。V1和V2结构的区别:
V1:
- 将传统的卷积换成DW和PW相结合的形式,极大程度的减少的计算量
V2:
- 为了减少ReLu6()对于PW结果的压缩效应,将最后的PW换成Linear bottleneck(1*1 projection layer),只完成通道的压缩,不考虑再将结果进行激活(最后的低维信息不使用任何激活函数);
- 将激活函数对应的层前移(expansion layer),在高维信息上进行非线性的映射;
- 引入残差结构,加快梯度的反传,加快网络的收敛。
参考资料:
- https://machinethink.net/blog/mobilenet-v2/
- https://github.com/jmjeon94/MobileNet-Pytorch/blob/master/MobileNetV2.py