MobileNetV1&MobilenetV2模型

目录

资源

Mobilenetv1网络及原理

深度可分离卷积

MobileNetV1 中引入的两个超参数

mobilenetV1的网络结构

MobilenetV2网络及原理

MobilenetV2与MobilenetV1的主要区别

MobilenetV2瓶颈层

倒残差

MobilenetV2升维的数学证明 

整体网络框架

性能

总结

讨论

Reference


资源

MobilenetV2官方pytorch代码:

https://pytorch.org/vision/stable/_modules/torchvision/models/mobilenetv2.html#mobilenet_v2

MobilenetV2,pytorch预训练模型:

'mobilenet_v2': 'https://download.pytorch.org/models/mobilenet_v2-b0353104.pth'

MobilenetV2论文:

https://arxiv.org/pdf/1801.04381.pdf

MobilenetV1论文:

https://arxiv.org/pdf/1704.04861.pdf

Mobilenetv1网络及原理

        mobileNet V1不做过多的介绍,主要是为了mobilenet介绍的一个过渡。mobileNet V1是一种体积较小、计算量较少、适用于移动设备的卷积神经网络。mobileNet V1的主要创新点是用深度可分离卷积(depthwise separable convolution)代替普通的卷积,并使用宽度乘数(width multiply)减少参数量,不过减少参数的数量和操作的同时也会使特征丢失导致精度下降。

深度可分离卷积

        标准的卷积过程如图1,卷积核做卷积运算时得同时考虑对应图像区域中的所有通道(channel),而深度可分离卷积对不同的通道采用不同的卷积核进行卷积,如图2所示它将普通卷积分解成了深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)两个过程,这样可以将通道(channel)相关性和空间(spatial)相关性解耦。原文中给出的深度可分离卷积后面都接了一个BN和ReLU层。

MobileNetV1 中引入的两个超参数
 

1.Width Multiplier(\alpha): Thinner Models

所有层的通道(channel)数乘以\alpha参数(四舍五入),模型大小近似下降到原来的\alpha ^{2}倍,计算量下降到原来的\alpha ^{2}倍。\alpha\in(0,1] with typical settings of 1, 0.75, 0.5 and 0.25,降低模型的宽。

2.Resolution Multiplier(ρ): Reduced Representation

输入层的 分辨率(resolution)乘以\rho参数 (四舍五入),等价于所有层的分辨率乘\rho,模型大小不变,计算量下降到原来的\rho ^{2}倍。\rho\in(0,1],降低输入图像的分辨率。

mobilenetV1的网络结构

MobilenetV2网络及原理

MobilenetV2与MobilenetV1的主要区别

MobilenetV1、MobilenetV2键模块上的差别:

MobilenetV2、ResNet关键模块上的差别:

MobilenetV2主要解决mobilenetV1存在的两个问题:

  1. v1版本没有残差链接
  2. 很多deepwise卷积核训练出来是0,原因有三点

          (1)卷积核权重数量和通道数量太少;

          (2)Relu非线性变换,根据ReLU的性质,输入特征若为负数,该通道的特征会被清零,本来特征已经经过压缩,这会进一步损失特征信息;

          (3)低精度,会使比较小的权重置为0。

MobilenetV2瓶颈层

为什么要去除Relu替换成为线性变换?

就是解决mobilenetV1的问题2(2),Relu非线性变换,根据ReLU的性质,输入特征若为负数,该通道的特征会被清零,本来特征已经经过压缩,这会进一步损失特征信息;

倒残差

        残差块已经被证明有助于提高精度,所以mobileNetV2也引入了类似的块。经典的残差块(residual block)的过程是:1x1(降维)-->3x3(卷积)-->1x1(升维), 但深度卷积层(Depthwise convolution layer)提取特征限制于输入特征维度,若采用残差块,先经过1x1的逐点卷积(Pointwise convolution)操作先将输入特征图压缩(一般压缩率为0.25),再经过深度卷积后,提取的特征会更少。所以mobileNetV2是先经过1x1的逐点卷积操作将特征图的通道进行扩张,丰富特征数量,进而提高精度。这一过程刚好和残差块的顺序颠倒,这也就是倒残差的由来:1x1(升维)-->3x3(dw conv+relu)-->1x1(降维+线性变换)。

这张图可能会更直观一些:

MobilenetV2升维的数学证明 

这张图的大意就是输入的2维空间的n个点,经随机矩阵映射到m维并用Relu激活,随着m(dim)的增大,映射的结果与初始输入越近似。

上图是论文提出的一个引理,定义了一个公式:y_{0}=Relu(Bx)其中B是输入x的权重矩阵,如果想使方程有唯一解,要满足两个条件(1)y_{0}中至少有n个激活为正(对应在block中的操作是升维,确保正激活足够多),(2)与n个正激活值对应的B中的n个神经元权重非线性相关。换一种思路去理解这个问题就会变得比较容易,我们把求解的过程想象成求解n元一次方程,其中(1)可以理解为我们至少要有关于未知的n组联立方程,这样我们才能求出n元方程的唯一解。因为Relu对非正的值会激活为0,所以方程组就小于n组,这就无法求解n元方程了,所以要求y_{0}中至少有n个激活为正。其中(2)可以理解为,n组联立方程不能是线性相关,如果线性相关,那么联立方程组又小于n,无法求解n元方程组,举个2元方程组的例子,x+y=c1,2x+2y=c2,这样的2元方程组就是共线的,不满足有唯一解。 

如果想满足方程组有唯一解,那么联立的非共线方程组就应该足够多,换句话说就是m(dim)要更大,对应的操作就是要先进行升维处理。 

整体网络框架

需要注意的点:

1.第一个瓶颈层不对特征进行升维;

2当stride=1时,才会使用elementwise 的sum将输入和输出特征连接(如图x左侧);stride=2时,无short cut连接输入和输出特征(如图x右侧);

性能

ImageNet Classification:

COCO Object Detection:

  

总结

MobilenetV1主要提出了深度可分离卷积。深度卷积在每一个通道单独进行卷积计算不与其它通道特征进行加和,这样做虽然会减少计算量,但通道间的联系就减弱了,为了建立通道间的联系,提出了逐点卷积,深度卷积和逐点卷积组合起来在提取特征的同时减少了计算量又不失通道间的特征关联。

MobilenetV2提出了线性瓶颈层和倒残差模块。线性瓶颈层最后的非线性激活改进成了线性激活,主要原因在于,若输入特征为负数,该通道的特征会被清零,本来特征已经经过压缩,这会进一步损失特征信息。倒残差模块,加入了shortcut连接,使用1x1的卷积先进行升维操作,再使用3x3的卷积提取特征,最后使用1x1的卷积再进行降维操作,如果比较熟悉resnet的残差模块,这部分就是和resnet残差模块相反的操作。

讨论

有问题欢迎加群讨论

Reference

1.MobileNet系列---mobileNetV1 - 半夜打老虎 - 博客园

2.MobileNet系列---mobileNetV2 - 半夜打老虎 - 博客园 

3.【精读AI论文】谷歌轻量化网络MobileNet V2(附MobileNetV2代码讲解)_哔哩哔哩_bilibili

4.MobileNetV1 & MobileNetV2 简介_Man-CSDN博客_mobilenet v1 

猜你喜欢

转载自blog.csdn.net/qq_36076233/article/details/122986655