轻量化神经网络--MobileNet v2学习记录

MobileNet v2论文原地址:

《Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation》 MobileNet v2是从v1网络改进而来的,也是为了部署到移动端设备,因此也是轻量级网络,先简单记录MobileNet v1的一些创新点。

  • Depthwise Separable Convolution(深度可分离卷积):其中的Depthwise Convolution结构可大大减少运算量和参数数量,在DW卷积中,每个卷积核的channel都是等于1的(即每个卷积核只负责输入特征矩阵的一个channel,故卷积核的个数必须等于输入特征矩阵的channel数,从而使得输出特征矩阵的channel数也等于输入特征矩阵的channel数);如果想改变/自定义输出特征矩阵的channel,那只需要在DW卷积后接上一个PW卷积,其实PW卷积就是普通的卷积而已(只不过卷积核大小为1)。
  • 两个超参数:宽度因子与分辨率因子,可以进一步降低网络的参数量。

MobileNet v2

1. MobileNet v1存在的问题

  •  结构问题:v1的结构非常简单,类似于VGGNet,为直筒结构。这种结构的性价比其实不高;
  • Depthwise convolution存在的问题:Depthwise convolution确实是大大降低了计算量,Depthwise+Pointwise的结构在性能上也能接近普通卷积。但是在实际应用时我们发现Depthwsie部分的kernel比较容易训废掉,训练完之后发现Depthwise训出来的kernel有不少是空的。因为depthwise每个kernel_dim相对于普通卷积要小得多,过小的kernel_dim加上ReLU的激活影响下,使得输出神经元很容易变为0,所以就学废了。ReLU对于0的输出梯度为0,所以一旦陷入0输出,就没法恢复了。

2. MobileNet v2的创新点

  •  Inverted residuals:通常的residuals block是先经过一个1*1的Conv layer,把feature map的通道数“压”下来,再经过3*3 Conv layer,最后经过一个1*1 的Conv layer,将feature map 通道数再“扩张”回去。即先“压缩”,最后“扩张”回去。而 inverted residuals就是 先“扩张”,最后“压缩”。
  • Linear bottlenecks:为避免Relu对特征的破坏,在residual block的Eltwise sum之前的那个 1*1 Conv 不再采用Relu激活函数。

3.  Inverted residuals(逆残差)

对比 MobileNet V1 与 V2 的微结构:

都采用 Depth-wise (DW) 卷积搭配 Point-wise (PW) 卷积的方式来提特征,这么做的好处是理论上可以成倍的减少卷积层的时间复杂度和空间复杂度。

V2 在 DW 卷积之前新加了一个 PW 卷积。DW 卷积由于本身的计算特性决定它自己没有改变通道数的能力,上一层给它多少通道,它就只能输出多少通道。所以如果上一层给的通道数本身很少的话,DW 也只能在低维空间提特征,因此效果不够好。现在 V2 为了改善这个问题,给每个 DW 之前都配备了一个 PW,专门用来升维,定义升维系数 ,这样不管输入通道数  是多是少,经过第一个 PW 升维之后,DW 都是在相对的更高维进行工作。

从高维向低维转换,使用ReLU激活函数可能会造成信息丢失或破坏(不使用非线性激活数数)。所以在projection convolution这一部分,我们不再使用ReLU激活函数而是使用线性激活函数。V2 去掉了第二个 PW 的激活函数。论文作者称其为 Linear Bottleneck。这么做的原因,是因为作者认为激活函数在高维空间能够有效的增加非线性,而在低维空间时则会破坏特征,不如线性的效果好。由于第二个 PW 的主要功能就是降维,因此按照上面的理论,降维之后就不宜再使用 ReLU6 了。

 对比 ResNet 与 MobileNet V2 的对比:

MobileNet V2 借鉴 ResNet,都采用了1*1卷积进行维度变换。同样使用 Shortcut 将输出与输入相加。

ResNet 使用标准卷积提特征,MobileNet 始终使用DW卷积提特征。

ResNet 先降维、卷积、再升维,而 MobileNet V2 则是 先升维、卷积、再降维。直观上看,ResNet 的微结构是沙漏形,而 MobileNet V2 则是纺锤形。因此作者将 MobileNet V2 的结构称为 Inverted Residual Block。这么做也是因为使用DW卷积而作的适配,希望特征提取能够在高维进行。如下图所示,左侧是ResNet网络中的残差结构(中间窄两头宽),右侧就是MobileNet v2中的逆残差结构(中间宽两头窄)。在残差结构中是1x1卷积降维->3x3卷积提取特征->1x1卷积升维,在逆残差结构中正好相反,是1x1卷积升维->3x3DW卷积提取特征->1x1卷积降维。 原文的解释是高维信息通过ReLU激活函数后丢失的信息更少。

原始Residual block和Inverted residual block对比

在使用逆残差结构时需要注意,并不是所有的倒残差结构都有shortcut连接,只有当stride=1且输入特征矩阵与输出特征矩阵shape相同时才有shortcut连接(才能相加)。

在这里插入图片描述

Inverted residuals结构模型:

DW层提取得到的特征受限于输入的通道数,若是采用以往的residual block,先“压缩”,再卷积提特征,那么DW可提取得特征就太少了,因此一开始不“压缩”,MobileNetV2反其道而行,一开始先“扩张”,论文实验“扩张”倍数为6;

如果卷积层的过滤器都是使用低维的tensor来提取特征的话,那么就没有办法提取到整体的足够多的信息。所以,如果提取特征数据的话,我们可能更希望有高维的tensor来做这个事情。这就是v2的想法,通过高维的输入来提取特征。

先通过Expansion layer(扩展层)来扩展维度,之后在用深度可分离卷积来提取特征(输入维度大,卷积可提取特征越多),之后使用Projection layer(投影层)来压缩数据,让网络由高维变低微。因为Expansion layer 和 Projection layer都是有可以学习的参数,所以整个网络结构可以学习到如何更好的扩展数据和从新压缩数据。

下图更详细的展示了整个模块的结构。我们输入是24维,最后输出也是24维。但这个过程中,我们扩展了6倍,然后应用深度可分离卷积进行处理。整个网络是中间胖,两头窄,像一个纺锤形。

从高维向低维转换,使用ReLU激活函数可能会造成信息丢失或破坏(不使用非线性激活数数)。所以在projection convolution这一部分,我们不再使用ReLU激活函数而是使用线性激活函数。

4. Linear bottlenecks(线性瓶颈层)

当采用“扩张”→“卷积提特征”→ “压缩”时,在“压缩”之后会碰到一个问题,那就是Relu会破坏特征。Relu对于负的输入,输出全为零;而本来特征就已经被“压缩”,再经过Relu的话,又要“损失”一部分特征,因此这里不采用Relu;

论文解释:

如果当前激活空间内兴趣流形完整度较高,经过ReLU,可能会让激活空间坍塌,不可避免的会丢失信息。

论文中对这块的描述比较晦涩难懂,其实大致意思就是:我们在设计网络结构的时候,想要减少运算量,就需要尽可能将网络维度设计的低一些,但是维度如果低的话,ReLU激活函数可能会滤除很多有用信息。而ReLU对于没有滤除的部分,即非零的部分的作用是一个线性分类器。既然在低维空间中使用ReLU做激活变换会丢失很多信息,论文针对这个问题在Bottleneck末尾使用linear bottleneck(即不使用ReLU激活,做了线性变换)来代替原本的非线性激活变换。
       实验证明,使用linear bottleneck可以防止非线性破坏太多信息。

如图所示,input是一个2维数据,其中兴趣流形是其中的蓝色螺旋线。本例使用矩阵T将数据嵌入到n维空间中,后接ReLU,再使用T^{-1}将其投影回2D平面。可以看到设置n=2,3时信息丢失严重,中心点坍塌掉了。当n=15..30之间,恢复的信息明显多了。

激活函数对比:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

 在这里插入图片描述

在这里插入图片描述

5. Inverted Residual + Linear Bottleneck

 结构如下图所示。在MobileNet-v2的网络设计中,除了继续使用Depthwise Conv(Bottleneck中间的卷积层)结构之外,还使用了Expansion layer和 Projection layer。Expansion layer是使用1x1卷积将低维空间映射到高维空间(扩大通道数),这里Expansion有一个超参数是维度扩展几倍,可以根据实际情况来做调整的,默认值是6,也就是扩展6倍。Projection layer也是使用1x1卷积,他的目的是希望把高维特征映射到低维空间去(减小通道数)。需要注意的是residual connection是在输入和输出的部分进行连接。另外,前面已经说过,因为从高维向低维转换,使用ReLU激活函数可能会造成信息丢失或破坏,所以在Projection convolution这一部分,我们不再使用ReLU激活函数而是使用线性激活函数。

6.  MobileNet v2整体网络结构 

其中t代表的是扩展因子(逆残差结构中第一个1x1卷积的扩展因子),c代表输出特征矩阵的channel,n代表差结构重复的次数,s代表步距(注意:这里的步距只是针对重复n次的第一层倒残差结构,后面的都默认为1)。

 仅为学习记录,侵删!

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎记录学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值