MobileNets v1
论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
MobileNets v1的思路很简单,因为是为了移动端的嵌入网络,需要平衡计算量和内存占用等问题,因此网络不能太大,为了解决这个问题,就将普通的卷积更换成了深度可分离卷积
深度可分离卷积 Depthwise Separable Convolution
深度可分离卷积分为两个步骤:
1、depthwise convolution
就是对原始feature map的每个通道单独使用一个卷积核,分别进行操作
例如原始的feature map大小为,其中M为通道数,那么就采用M个大小为的卷积分别对M个通道进行卷积操作,最终的输出还为,计算量为
2、pointwise convolution
随后对上一步depthwise convolution的结果,使用N个大小为1*1的卷积,进行普通卷积,最终得到的输出为,计算量为
因此深度可分离卷积的总计算量为
而通过标准的卷积需要的计算量为
3*3的卷积,相当于减少了8-9倍的计算量,但是准确率的减少很少
Width Multiplier: Thinner Models
用一个超参数来压缩整个网络的feature map的通道数
Resolution Multiplier: Reduced Representation
用一个超参数来压缩整个网络的feature map大小
MobileNets v2
论文地址:MobileNetV2: Inverted Residuals and Linear Bottlenecks
在原始v1的版本上进行了改进,加入了Linear Bottlenecks
Linear Bottlenecks
linear bottlenecks本质上是不带ReLU的1x1的卷积层
具体的理由没有太看懂。。。
https://blog.csdn.net/kangdi7547/article/details/81431572
https://www.jianshu.com/p/630c27cb8c55
在进行element-wise sum之间的1*1卷积不使用激活函数
Inverted residuals
反向的residual模块
原始的residual模块,因此feature map的channel数很大,因此为了减少计算量,都会先使用1*1卷积降低通道数,然后再进行3*3卷积,最后使用1*1卷积恢复到想要的通道数
但是mobilenet的channel数已经很小了,而且使用了深度可分离卷积,不需要减少channel数进行计算了,因此本文提出了反向的residual
也就是先使用1*1卷积增大channel数,然后使用3*3的深度可分离卷积,最后在使用1*1卷积减少channel数
并且激活函数都采用了ReLu6
ReLu6(x)=min(max(0,x),6)
也就是只得到0-6之间的输出
网络结构
Mobilenets V3
论文地址:Searching for MobileNetV3
其实就是使用NAS(network architecture search)来搜索最优的网络结构
对mobilenets v2的block做了一点改进,加入了SE(Squeeze-and-Excite)模块