一、网络模型结构
提出了 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
具体结构如下:
expansion layer 实际上就是一个 11 的卷积层,用于对输入特征图进行升维
输出特征图时只进行 11 的卷积层,不接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