zoukankan      html  css  js  c++  java
  • MobileNetV2: Inverted Residuals and Linear Bottlenecks

    1. 摘要

    作者提出了一个新的网络架构 MobileNetV2,该架构基于反转残差结构,其中的跳跃连接位于较瘦的瓶颈层之间。中间的扩展层则利用轻量级的深度卷积来提取特征引入非线性,而且,为了维持网络的表示能力作者去除了较窄层的非线性激活函数。

    2. 讨论和直觉

    2.1. 深度可分离卷积

    MobileNetV2 采用和 MobileNetV1 一样 3×3 大小的深度可分离卷积,相比标准卷积可以减少 8 到 9 倍的计算量。

    2.2. 线性瓶颈结构

    长期以来,人们一直认为神经网络中的兴趣流形(mainfold of interest)也就是激活特征,可以被嵌入到低维子空间中。基于这个事实,我们可以通过减少某一层网络的维度也就是通道数来减少激活特征的空间维度。MobileNetV1 中的宽度因子就是用来减少激活空间的维度的,直到激活特征可以扩展出整个空间,我们就找到了一个最佳的参数。

    但是,神经网络中还有非线性激活函数,这时候,上面的直觉就不成立了。比如 ReLU 会把负的激活值变为零,换句话说,深度网络仅在输出域的非零部分具有线性分类器的功能。如果 ReLU 使得某一个通道的一些值变为零,这会不可避免地带来那个通道的信息损失,但如果通道数比较多,我们就可以通过一种结构用其它通道的激活值来补偿这个损失。

    用一个随机矩阵 (T) 将左边的螺旋线嵌入到 (n) 维空间然后用 ReLU 激活,再用 (T^{-1}) 投影回去。可以看到 (n=2,3) 时信息损失非常大,而维度较高时则恢复得比较好。

    因此,为了避免损失太多信息,作者采用线性瓶颈层,也就是在通道数比较少的瓶颈层不采用非线性激活函数。

    2.3. 反转残差

    上图中每个块的厚度代表通道数的大小。可以看到,之前的残差结构先用一个 1×1 的卷积来降低通道数,然后进行一个卷积操作,最后再用一个 1×1 的卷积将通道数恢复到原始大小,跳跃连接建立在两个通道数比较多的层之间,并且每一层都采用 ReLU 激活。

    而反转残差结构则是先用一个 1×1 的卷积来提高通道数,然后进行一个深度卷积操作,最后再用一个 1×1 的卷积将通道数降低到原始大小,跳跃连接建立在两个通道数比较少的瓶颈层之间,并且画阴影的两个块没有 ReLU 激活函数。

    上图右边中间两层通道数比较多,所以采用激活函数,信息损失也没有那么大;而两端通道数比较少,如果激活的话信息损失会非常大,所以不采用激活函数。

    详细结构如下所示,其中瓶颈层到中间层通道数的提升比例称之为扩展因子 t,激活函数采用 ReLU6,也就是限制激活的最大值为 6。

    3. 网络结构

    如上表所示,第一层是标准卷积,然后后面是前述的瓶颈结构。其中 t 是扩展因子,c 是输出通道数, n 是重复次数,s 代表步长。如果步长为 2 ,代表当前重复结构的第一个块步长为 2,其余的步长为 1,步长为 2 时则没有跳跃连接,如下图所示。

    此外,也可以像 MobileNetV1 那样继续利用宽度乘子和分辨率乘子进一步降低模型的大小。

    4. 实验结果

    在 ImageNet 上的分类结果如下所示:

    在 COCO 数据集上的目标检测结果如下图所示:

    此外,作者还对比了不同的跳跃连接方式和是否采用线性瓶颈结构,进一步验证了网络设计的合理性。

    获取更多精彩,请关注「seniusen」!

  • 相关阅读:
    迷你资源管理器
    简单工厂和单例的一些事
    面向对象的七大原则
    继承和多态的一些事
    体检套餐系统
    信仰
    魔兽争霸系统
    优化MySchool总结习题
    事务,视图及索引
    [LeetCode] Combinations
  • 原文地址:https://www.cnblogs.com/seniusen/p/12025311.html
Copyright © 2011-2022 走看看