1.Depthwise Separable Convolution结构

深度可分离卷积(Depthwise Separable Convolution)是MobileNet-V1使用的一种卷积结构。层级结构如图1所示,它由一层深度卷积(Depthwise Convolution,DW)与一层逐点卷积(Pointwise Convolution,PW)组合而成的,每一层卷积之后都紧跟着批规范化和ReLU激活函数。跟标准卷积的区别就是精度基本不变的情况下,参数与计算量都明显减少。

mobilenet网络结构 PYTORCH mobilenetv2结构_ide


深度卷积,通过对每个输入通道分别利用卷积核进行滤波来实现轻量级滤波。

逐点卷积,通过计算输入通道间的线性组合来构建新的特征,将多个通道的特征进行整合。

mobilenet网络结构 PYTORCH mobilenetv2结构_自动驾驶_02


2.带有线性瓶颈的倒置残差结构

MobileNet-V2的架构是带有线性瓶颈的倒置残差结构(the inverted residual with linear bottleneck),层级结构如图3。如图4,与深度可分离卷积不同之处在于:

mobilenet网络结构 PYTORCH mobilenetv2结构_卷积_03


1)在DW之前添加一层PW。该层作用是用1x1的卷积对输入的低纬特征进行升维,即“Expansion”,升高的维度倍数即expansion factor 膨胀系数;

2)用linear bottleneck降维;

3)通过shortcut将这个block的输入和输出进行张量的加叠。

在MobileNet-V2中stride=1和stride=2走的流程是不同的,在stride=2时,因为input与output的大小不同,所以没有添加shortcut结构。

mobilenet网络结构 PYTORCH mobilenetv2结构_ide_04


2.1 linear bottleneck概念:

linear bottleneck即去掉第二个PW的激活函数,论文作者认为激活函数在高维空间能够有效增加非线性,在低纬空间会破坏特征,不如线性的效果好。由于第二个PW的功能就是降维,因此不适合使用Relu6。

注:ReLU对于负的输入,输出全为零;而原本特征就已经经过PW卷积压缩,再经过ReLU的话,又要“损失”一部分特征。ReLU6如图5,就是普通的ReLU,但是限制最大输出值为 6,这是为了在移动端设备 使用float16/int8等低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,如果激活值非常大,分布在一个很大的范围内,则低精度的float16/int8无法很好地精确描述如此大范围的数值,带来精度损失。

mobilenet网络结构 PYTORCH mobilenetv2结构_自动驾驶_05


2.2 倒置残差(Inverted Residual)对比标准残差(Residual)

mobilenet网络结构 PYTORCH mobilenetv2结构_卷积_06


Residual使用标准卷积提取特征,Inverted Residual始终使用DW卷积提特征。

Residual连接channel数多的特征表述,Inverted Residual连接channel数少的特征表述。

Residual先降维 (0.25倍)、卷积、再升维,而 Inverted Residual则是 先升维 (6倍)、卷积、再降维。直观的形象上来看,ResNet的微结构是沙漏形,而 MobileNet-V2 则是纺锤形,刚好相反。因此论文作者将MobileNet-V2的结构称为Inverted Residual Block。

2.3 网络结构

网络整体配置如下图所示:

mobilenet网络结构 PYTORCH mobilenetv2结构_人工智能_07


t是输入通道膨胀系数expansion factor

c是输出通道数

n是该模块重复次数

s是该模块第一次重复的步长,后面重复都是stride=1