要看MobileNet先看Xception。Xception是inception V3的改进,具体是引入了深度可分卷积结构
- 将传统的卷积操作分成两步,假设原来是3*3的卷积,那么depthwise separable convolution就是先用M个3*3卷积核一对一卷积输入的M个feature map,不求和,生成M个结果;然后用N个1*1的卷积核正常卷积前面生成的M个结果,求和,最后生成N个结果。
- Xception深度可分是利用了可分离卷积形式来改进inception V3,但是鉴于inception的结构,它成了先1*1点卷积,然后再深度分离通道卷积。而且它证明了不仅可以加快收敛,还能提高准确率,略微减少参数。而且还证明了在通道depthwise conv后紧接非线性激活层不好(可能是因为这里的特征比较低维。)
- MobileNet则不同,它是借用了正常的分离卷积形式,即先通道分离卷积,再pointwise conv.(先有了Xception后有MobielNet)
深度可分卷积:标准卷积是将通道方向和空间方向上同时考虑,而深度可分就是先进行通道方向的卷积,再进行深度方向上卷积。优点:减少参数及计算量,实验发现还可以提高分类精度。
MobileNet和MobileNet V2的区别:
首先V1中是直接深度分离卷积(带RelU6激活),然后深度方向点卷积(带RelU6激活)。
而V2中则引入了残差模块,然后在模块内又先对输入进行1*1核升维,然后深度分离卷积(激活),再点卷积(linear,无激活,这里后面又接1*1升通道,因此这个点卷积得到的特征图是瓶颈(最窄的地方)!)。
因此之所以可以1*1是因为实验发现图像特征复用有很大益处,其次是因为深度分离卷积带来的参数量的降低的前提。因此这个反残差模块是类似两头宽中间窄的形状,与残差模块的先1*1降通道,再标准卷积,再1*1升通道不同(没有depthwise这种形式,只能这样做来降低参数量)。
LInear Bottlenecks:MobileNet V2 微结构中第二个PW后去掉 ReLU6。对于低维空间而言,进行线性映射会保存特征,而非线性映射会破坏特征。