《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记

代码地:MobileNet v2

1. 概述

导读:这篇文章提出的网络结构叫做MobileNet v2是在v1的基础上改进得到的,使用了改进的残差网络结构优化网络的性能。其主要贡献是提出了一种新型的网络层模块,该模块的输入是低维度的压缩表达,之后经过轻量级的depthwise卷积扩展到高维度,最后特征经过线性卷积映射到低维度去。官方已经在Tensorflow-Slim模块库中包含了该模块,在其它的框架下也是可以通过标准操作进行实现的。之后作者将文章提出的网络结构作为基础主干网络嫁接不同的头部,展现了该网络的通用性。

2. 方法设计

2.1 Depthwise Separable Convolutions

这里使用的深度可分离卷积与MobileNet v1中的版本是一致的,使用的卷积核大小为3。具体可以参考:《MobileNets v1: Efficient Convolutional Neural Networks for Mobile Vision Applications》论文笔记

2.2 Linear Bottlenecks

对于CNN网络中某一层的卷积特征的维度为hiwidih_i*w_i*d_i,而理论上呢这did_i个维度的信息其实是可以使用一些主要channel的信息进行表达的,这就可以对其进行降维,但是却不给网络带来显著影响(网络剪裁也是类似的思路),这个在MobileNet v1版本中的width multiplier参数实现了这个功能。但是呢,这个思路存在一个前提,那就是网络中的维度关系式线性的,而深度CNN网络由于使用ReLU等非线性**函数,这就使得特征的空间变为了RnR^n空间维度的了,这样的话可能会导致部分信息的丢失,对此文中做了如下的分析。

低维(2维)的信息嵌入到n维的空间中,并通过随机矩阵T对特征进行变换,之后再加上ReLU**函数,之后在通过T1T^{-1}进行反变换。当n=2,3时,会导致比较严重的信息丢失,部分特征重叠到一起了;当n=15到30时,信息丢失程度降低,但是变换矩阵已经是高度非凸的了。
《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记
因而卷积的输出较小的时候是不应该添加ReLU**层的,因而文章可分离卷积的结构进行了改进,具体改进与比较见下图。下图对比了不同的卷积方式,其中颜色最浅的代表下一个块(本块输出,下块输入),其中带斜杠的为不包含ReLU等非线性**函数的层。
《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记

  • 1)(a)是传统的卷积:输入和输出维度不一样,且卷积核直接对输入的红色立方体进行滤波;
  • 2)(b)是可分离卷积:左侧333*3卷积的每个卷积核只对输入的对应层进行滤波,此时特征维度不变;右边的111*1的卷积对特征进行升维或者降维(图中为升维);
  • 3)(c)中为Linear Bottlenecks的可分离卷积:输入通过333*3 depthwise卷积+ReLU6,得到中间相同维度的特征。之后在通过111*1 conv+ReLU6,得到降维后的特征(带斜线立方体)。之后在通过111*1卷积(无ReLU)进行升维;
  • 4)(d)中则是维度比较低的特征,先通过111*1 conv(无ReLU)升维,而后通过333*3 depthwise卷积+ReLU6保持特征数量不变,再通过111*1 conv+ReLU6得到降维后的下一层特征(下一层特征在升维时,无ReLU,因而图中最右边立方体带斜线);

那瓶颈层内部为何需要升维呢?
原因是为了增加模型的表达能力(不确定这样理解是否正确):当使用ReLU对某通道的信息进行处理后,该通道会不可避免的丢失信息;然而如果有足够多的通道的话,某通道丢失的信息,可能仍旧保留在其他通道中,因而才会在瓶颈层内部对特征进行升维。文中附录证明了,瓶颈层内部升维足够大时,能够抵消ReLU造成的信息丢失(如文中将特征维度扩大了6倍)。

ReLU6**函数带来的影响:
《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记

2.3 Inverted residuals

下图是文章涉及的Inverted residuals与传统残差块之间的对比:
《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记
其中可以看出文章提出的结构使用上一节中的结论将中间的卷积替换为了深度可分离的卷积。因而新的残差块的形式具体被设计成如下的形式:
《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记
可以看到相比传统的残差块其增加了一个参数tt用来控制channel扩展的幅度(文章后面也说这个是很有作用的),将**函数ReLU换成了ReLU6。上面表中展现了有stride与无stride的网络结构,其形式为如下形式(有stride的没有shortcut,因为维度匹配):
《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记

2.4 网络结构

表2展示了MobileNet v2的整体结构,其初始化卷积是使用32 filter的全卷积实现的,后面接了19个表1中的残差块,使用了在低精度计算上鲁棒性表现更好的ReLU6作为**函数,在网络中使用3x33x3的卷积,训练阶段也是用Dropout与BN。
对于channel扩充的比例,文章推荐将其设置为5~10之间,对于小的网络其值可以相对设小,对于大的网络其值可以相对设大一些,而文中将其设置为6。
《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记
表中的tt为bottleneck内部升维的倍数,cc为输出特征的维数,nn为该bottleneck重复的次数,ss为瓶颈层第一个conv的步幅(stride)。需要注意的是:

  • 1)当n>1n>1时(即该bottleneck重复的次数>1),只在第一个bottleneck stride为对应的ss,其他重复的bottleneck stride均为1,也就是说特征图尺寸只在第一个残差块减小,后面就为stride=1的模块,尺寸不变化;
  • 2)只在stride=1时,输出特征尺寸和输入特征尺寸一致,才会使用shortcut将两端的特征elementwise sum得到输出,否则是没有存在shortcut的;
  • 3)当n>1n>1时,只在第一个瓶颈层特征维度为cc,其他时候channel不变;

文章设计得到的网络结构与现有的小型网络进行对比:
《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记

3. 实验结果

3.1 图像分类

《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记

3.2 目标检测

《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记

3.3 语义分割

《MobileNet v2: Inverted Residuals and Linear Bottlenecks》论文笔记