MobileNet V2算法详解
论文地址:https://arxiv.org/pdf/1801.04381.pdf
MobieNet-v2结果
本文使用的SSDlite算法,就是讲SSD的prediction layer换成了DW+PW的结构
大量的实验表明,feature map的复用能提高实验结果,因此本文也就使用了 shortcut结构。这篇论文的题目:MobileNetV2: Inverted Residuals and Linear Bottlenecks,创新点就是文章的题目
创新点
1.Line bottlenecks: 就是下图(d)中的conv1x1, linear 1x1卷积之后没有使用Relu
2.Inverted residuals: 传统的残差网络是宽---窄----框的block,而mobileNet-v2的block是窄---宽----窄,中间是升维的layer
上图(d)为MoblileNet-v2 block结构
先进行升维,连接DW conv layer和Relu, 再降维+linear(就是不添加relu**),再添加skip connection
Line Bottlenecks
mobileNet中除了引入depthwise separate convolution代替传统的卷积,还使用width multiplier参数来做通道的缩减,相当于给模型“瘦身”,这样特征信息都集中在压缩后的通道中,但是吐过此时加上一个非线性**,如Relu,就会有较大的信息丢失,因此为了减少信息丢失,就有了文中的linear bottleneck,意思就是bottleneck的输出不接非线性**层,所以是linear,bottleneck就是维度缩减那一层的输出
上图说明将原始维度增加到15或者30再做Relu的输入时,输出回复到原始维度后基本不会丢失很多信息,相比之下,如果原始输入维度只增加到2或3之后再作为Relu的输入,输出回复到原始维度后丢失的信息较多,因此在MobileNetv2中,执行降维的卷积层后面不会接类似Relu这样的非线性**层,也就是linear bottleneck的含义
为什么在PW层去除relu,而不是DW层?
升维后进行DW卷积操作,会产生很多冗余信息,再要在PW层筛选出有用的信息就可以了,当然在DW卷积层不添加Relu,分线性相对弱一些而已。
Inverted residuals
倒置的residuals,就是与residual bolck的结构相反,这样做的原因是:作者认为感兴趣的流形是在低维空间中,中间对低维数据进行扩充就会保留大多数的信息。比如说上层输出为128通道,如果直接使用128个filter去卷积,这必然会导致信息流通不好(通道和空间的完全解耦),如果先升维为128*6,再进行DW卷积,信息流通好了,但是会产生信息冗余,所以再使用1*1卷积降维。
上图展示了从传统卷积到depthwise separable convolution再到inverted residuals block.
- 表示的传统的3*3卷积操作,假设输入channel数量为n,那么(a)中红色块(卷积核)的大小为3*3*n
- 是mobileNet中采用的depthwise separable convolution
- 在(b)的基础上添加了bottleneck的操作
- 是无数个(c)相连,(d)是本文中的inverted residual bolck结构,和原来的ResNet中的residual block对维度的操作正好相反
下图是residual block和inverted residual block的对比:residual block中是先降维再升维,inverted residual block是先升维再降维
两种改进的结果分析
MobileNet-v2结构
说明:t是expansion factor,也就是每个inverted residual block的第一个1*1卷积的升维比率,比如第三行的输入channel是16,则每个inverted residual block的第一个1*1卷积的输入是channel数是16,输出channel数为16*6;C是每个inverted residual block最后一层输出channel数;n是blockd的重复个数;s是stride