目录
论文阅读
代码解析
小结
论文阅读
1.前言
神经网络在机器智能的很多领域都有革命性的改进,在图像识别的领域精确度已经能够超过人类。然而,为了提高精确度常常会带来消耗,需要更高的计算资源,是很多手机和嵌入式设备所不具有的。这篇文章介绍了一个新神经网络结构,是专门为手机和资源有限的环境量身定制的。我们的网络通过减少计算次数和内存占用,推进了为移动设备量身定制的计算机视觉模型达到一个更先进的水平。
我们主要的贡献是具有线性瓶颈的倒置残差。这个模型对输入的低维度的表现先扩展到高维度,然后进行轻量级depthwise卷积运算,特征再进行一个线性的卷积回到低维度的表现。
2.细节讨论
2.1Depthwise Separable Convolutions
深度分离卷积块对很多高效的网络结构都是很关键的,在本篇论文的模型中也使用了这种结构。用分解成两层的卷积来替代原始的卷积。分解后的两层第一层叫做depthwise卷积,它的filter的参数很少,是对输入的每一个channel进行单独的卷积运算。第二层是一个1x1的卷积,叫做pointwise卷积,可以改变channel的个数。
对于标准的卷积运算,假设输入是,卷积kernel
,输出为
,那么需要消耗的计算量为
,而如果是Depthwise separable卷积,需要的计算量为
如果标准卷积的k为3,那么用depthwise可以减少接近8/9的计算量而只会有些微的精度损失。
2.2 Linear Bottlenecks
当channel的个数比较少的时候,所有的信息都集中在比较窄的channel中,这这时候进行非线性激活比如RELU,会丢失很多信息。而在MobileNet V1中引入的一个超参数width multiplier会缩减channel,这样看起来就像一个瓶子的颈部一样。这种情况下用RELU激活机会丢失掉不少信息。
上图是作者展示用RELU激活时,当channel越小,丢失的信息越多,当channel越大,丢失的信息越少。其实不难理解,当channel为2时,信息都集中在这两个channel中,如果有部分数值小于0就会被RELU激活丢失掉。而如果channel为30,其实信息是分散的,而且具有了冗余,所以通过RELU激活后归于0的值可能并不会影响太多信息的存储。
所以作者建议对于channel数很少的那些层做线性激活。bottlenect就表示缩减的层,linear bottleneck表示对channel缩减的层做线性激活。如果要用RELU激活需要先增加channel数再做RELU激活。
2.3 Inverted residuals
因为channel比较少的tensor信息特别集中,而且使用非线性激活会损失信息,所以作者想到对channel比较少的tensor进行channel的扩张。而残差block是先进行channel缩减,然后扩张,这样可能会丢失信息。作者就想到了一种倒置的残差block,先进行channel扩张,然后进行channel缩减。如下图显示对比,虚线的tensor后进行线性激活,这种倒置残差block是作者对残差block提出的一个改进。