MobileNetV2 提出了一个适合移动端架构的高效神经网络结构:深度可分离卷积。其基本思想是用分解版本替代完成的卷积运算符,将卷积拆分为两个单独的层。第一层称为深度卷积,它通过对每个输入通道应用单个卷积滤波器来执行轻量级滤波。第二层是 1×1 卷积,称为逐点卷积,它负责通过计算输入通道的线性组合来构建新特征。 标准卷积 \(L_i\) 为 \(h_i∗w_i∗d_i\),应用标准卷积核产生 \(K∈R_k∗k∗d_i∗d_j\) 产生输出 \(L_j\) 为 \(h_i∗w_i∗d_i\)。
它是深度方向和 1×1 逐点卷积的计算成本总和。深度可分卷积与传统卷积层相比有效地减少了几乎 k2 倍的计算量。MobileNetV2 使用 k=3(3×3的深度可分卷积),因此计算成本比标准卷积小 8 到 9 倍,但精度只有很小的降低。
线性瓶颈的提出是 MobileNetV2
论文关键的 Insight,看了一遍论文,完全没看懂,这里搬运总结下别人的观点。
非正式地说,对于输入的一组真实图像,我们说层激活的集合形成一个“感兴趣的流形”(manifold of interest
)。长久以来,人们一直认为神经网络中的流形可以嵌入到低维子空间中。换句话说,当我们查看深层卷积层的所有单独的 d 通道像素时,在这些值中编码的信息实际上位于某个流形
中,这反过来又可嵌入到低维子空间中。
将流形
嵌入到低维子空间中,这样的实例可以通过减少层的维度来捕获和利用,从而降低操作空间的维度。这已经被 MobileNetV1 成功利用,通过宽度乘数参数在计算量和精度之间进行有效折衷,并且已经被合并到其他网络的高效模型设计中。遵循这种直觉,宽度乘数方法允许降低激活空间的维度,直到感兴趣的流形横跨整个空间为止。但是,当我们回想到深度卷积神经网络实际上具有非线性的每个坐标变换(例如ReLU)时,这种直觉就会失败,会产生以下问题:
ReLU
变换输出是非零的,那输入和输出之间是做了一个线性变换的,即将输入空间中的一部分映射到全维输出,换句话来说,ReLU的作用是线性分类器。总结可得存在的问题是: 我们想要兴趣流行存在低维空间中,即想要提升效果,维度是要低一点。但是维度如果低的话,激活变换ReLU函数可能会滤除很多有用信息,而ReLU对于没有滤除的部分,即非零的部分的作用是一个线性分类器。 既然在低维空间中使用ReLU做激活变换会丢失很多信息,论文针对这个问题使用linear bottleneck(即不使用ReLU激活,做了线性变换)的来代替原本的非线性激活变换。到此,优化网络架构的思路也出来了:通过在卷积模块中后插入linear bottleneck来捕获兴趣流行。 实验证明,使用linear bottleneck可以防止非线性破坏太多信息。
inverted residuals 可以认为是 residual block 的拓展。在 0<t<1,其实就是标准的残差模块。论文中 t 大部分为 6,呈现梭子的外形,而传统残差设计是沙漏形状。
MobileV2 架构包含具有 32 个滤波器的初始卷积层,基本单元 bootleneck
就是Inverted residuals 模块,所用到的 tricks 比如 Dwise,就是 Depthwise Separable Convolutions
,既各通道分别卷积,这里使用 ReLU6 (即f(x)=min{max(0,x),6})
作为非线性激活函数,这样在低精度计算下具有更强的鲁棒性。
下表所示的分类网络结构输入图像分辨率 224×224,输出是全卷积而非 softmax,k 就是识别目标的类别数目。