这篇文章是对MobileNetV1的改进,论文原文《MobileNetV2: Inverted Residuals and Linear Bottlenecks》。
MobileNetV2延续了MobileNetV1的depthwise separable convolution,不同的是V2引入了一个linear bottlenecks的概念。因为depthwise convolution没有改变通道数的能力,输入多少通道就输入多少通道。所以如果输入通道数很少的话,depthwise convolution就只能在低维空间提取特征了,得不到很好的效果。
为了解决这个问题,V2在depthwise convolution前面加了一个pointwise convolution用于升维,论文中t=6。
另外之所以称为linear bottleneck,是因为作者去掉了第二个pointwise convolution的激活函数ReLU,作者认为激活函数在高维空间能够有效增加非线性,但在低维空间则会破坏特征。
下图展示了ReLU会对channel数较低的manifolds造成较大的信息损耗,当输出维度增加到15以后再ReLU才基本不会丢失太多的信息。
MobileNetV1使用的是类似VGG的直筒结构,而V2则引入了residual connection。但是与ResNet的residual connection不同的是这里称之为inverted residual block,两边窄中间宽。
就是先升维(t=6),depthwise convolution,然后再降维。这么做是因为MobileNetV2将residual block的bottleneck替换成了depthwise convolution,因其参数少,提取的特征就相对少了,如果还是采用residual block的先降维的话,提取的特征就更少了。
表2的数据似乎有点问题。
- t 是输入通道的倍增系数(即中间部分的通道数是输入通道数的多少倍)
- n 是该模块重复次数
- c 是输出通道数
- s 是该模块第一次重复时的 stride
训练策略:
- RMSPropOptimizer
- decay 0.9
- momentum 0.9
- batch normalization
- standard weight decay 0.00004
- initial learning rate 0.045
- learning rate decay 0.98 per epoch
下面是论文中一些实验结果。