mobilenet v2

一、网络模型结构

提出了 inverted residual structure,主要由 bottleneck block 和 expansion layer 组成,后面会详细的介绍它们的结构

1.1 inverted residual structure

Residual block

运行流程:input -> 1 * 1 卷积降维,relu -> 3 * 3 卷积,relu -> 1 * 1 卷积升维,relu -> add(input, output)

Inverted residual block


运行流程:input -> 1 * 1 卷积升维,relu -> 3 * 3 DW卷积,relu -> 1 * 1 卷积降维,不要relu -> add(input, output)

Residual block 是一个先降维再升维的过程
Inverted residual block 正好相反,是一个先升维再降维的过程,并且在降维时,不使用relu激活函数。具体细节看 bottleneck block 的实现

2.2 bottleneck convolution

具体结构如下:
Bottleneck with expansion layer

expansion layer 实际上就是一个 1 * 1 的卷积层,用于对输入特征图进行升维
输出特征图时只进行 1 * 1 的卷积,不接rule6非线性层。
具体 block 参数如下图所示:


残差块的特征融合过程,只有在strid=1,即输出特征图和输出特征图维度相同的情况下,才进行特征相加融合。过程如上图所示

2.3 网络整体结构

t 表示 expansion factor,就是经过 expansion layer 后,输出通道数 = 输入通道数 * t。
c 表示输出的通道数,n表示该 block 重复n次,s 表示步长。

2.4 为什么提出这样的结构,灵感来自哪里

作者的观点:

  • a、relu 会过滤掉特征值小于0的信息,从而造成信息损失,所以针对通道数较小的特征图,只进行 1 * 1 的卷积运算,但不进行 relu 非线性运算
  • b、神经网络需要引入 non-linearities,否则整体只是一个线性组合,表达能力有限。所以我们还是需要使用rule,为了减少rule层带来的信息损失,作者提出了 expansion layer
    先进行通道升维,然后再进rule运算,由于通道数的增加,在某些通道上丢失的信息,可能在其他通道上得到了补偿。
  • 基于以上两点,作者最终设计了 bottleneck block结构

不同通道数的rule输出对比:

可以看到通道数越大,rule后保存的信息越多。

二、实验

分类

目标检测


MobileNet的输入大小:320 × 320

论文和code

posted @ 2021-09-03 17:05  blackx  阅读(147)  评论(0编辑  收藏  举报