轻量化网络(二)MobileNetV2: Inverted Residuals and Linear Bottlenecks

论文链接

Pytorch实现

Tensorflow实现

Mobilenet V2是谷歌在Mobilenet V1上的进一步改进,第一版参考文章,是Mobilenet系列的第二篇。该文章以深度可分离卷积(Depthwise Separable Convolutions)为基础提出了Inverted Residuals and Linear Bottlenecks,深度可分离卷积在许多神经网络中有很大效果,大大较少了FLOPs。

1、Inverted Residuals结构

轻量化网络(二)MobileNetV2: Inverted Residuals and Linear Bottlenecks_第1张图片轻量化网络(二)MobileNetV2: Inverted Residuals and Linear Bottlenecks_第2张图片

从Figure 3和网络结构图可以看到,倒残差结构与残差结构不同点在于,残差结构中间的卷积核数量较少,减少输出的特征通道数量,使得其更“薄”,即先降维再升维。不用于残差结构,倒残差结构先升维后降维,使用 1 × 1 1 \times 1 1×1卷积核升维,这样的目的是为了后续的深度可分离卷积。深度可分离卷积对输入特征的每一层进行单独卷积后再使用 1 × 1 1 \times 1 1×1卷积核交互特征通道之间的信息。因此升维后,深度可分离卷积提取的特征将更加丰富,提升性能。在本文中扩展因子t=6,即将通道扩大6倍。

轻量化网络(二)MobileNetV2: Inverted Residuals and Linear Bottlenecks_第3张图片
Table 1中示意融合了倒残差思想的Bottleneck redidual block,其中使用了Relu6激活函数,相当于对0到6之间的值做线性变换,其他值均输出为0,解释是实验是在低精度设备上。Table 2示意的是整个Mobilenet v2的网络结构图。

#Mobilenet V2 Bottleneck
self.conv = nn.Sequential(
                # pw
                nn.Conv2d(inp, hidden_dim, 1, 1, 0, bias=False),
                nn.BatchNorm2d(hidden_dim),
                nn.ReLU6(inplace=True),
                # dw
                nn.Conv2d(hidden_dim, hidden_dim, 3, stride, 1, groups=hidden_dim, bias=False),
                nn.BatchNorm2d(hidden_dim),
                nn.ReLU6(inplace=True),
                # pw-linear
                nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),
                nn.BatchNorm2d(oup),
            )

2、linear bottleneck
linear bottleneck是Mobilenet v2利用了大篇幅来讨论的,在文章中提出一个“manifold of interest”.的概念。作者认为特征的每一层通道中的信息是多种多样,但是最终会被压缩成通道数较低的特征中。压缩特征通道的确是一个很好的压缩模型的方式,同时已经在大量的网络模型中使用。Mobilenet v1中的 width multiplier 也是通过压缩特征通道实现的模型压缩。
但是因为使用激活函数(如Relu)来导致失败。激活函数会导致特征信息的损失,主要针对的是低纬度的输入。
轻量化网络(二)MobileNetV2: Inverted Residuals and Linear Bottlenecks_第4张图片Figure 1中展示的是ReLU会对channel数较低的“manifold of interest”造成较大的信息损耗,随着维度持续增加,直到15时,Relu才很少减少信息的损失。
在网络结构中的体现是取消了深度可分离卷积后的激活函数。

MobileNets v2在ImageNet Classification, Object Detection,Semantic Segmentatio等领域进行了测试,具体结果参考论文。

你可能感兴趣的:(pytorch,tensorflow,神经网络,深度学习)