mobilenet

简介

传统的卷积神经网络模型往往需要耗费较多的计算资源,使得无法将其应用在移动端设备或嵌入式设备上。Google于2017年提出了MobileNet,在小幅降低识别准确率的代价下大大提升了模型的参数与运算量(相较于VGG16准确率下降0.9%,参数量只有VGG的1/32),使其可以部署在移动端进行应用。

image-20220713215738521

MobileNet v1

image-20220714085313697

DW卷积

在传统的卷积操作中,卷积核的channel是由输入特征矩阵的channel所决定的,输出特征矩阵的channel是由卷积核个数决定的;但在DW卷积中,卷积核的channel固定为1,且每个卷积核只与输入矩阵的一个channel进行卷积运算得到输出的一个特征图。

image-20220714082756136

PW卷积

PW卷积实际上就可以看作卷积核大小为1x1的普通卷积操作。DW卷积与PW卷积往往都是配合使用,称为深度可分离卷积 (Deepthwise Convolution)

image-20220714083518455

超参数α,β

超参数α,β对应的是 Width Multiplier以及Resolution Multiplier。α参数通过调整卷积核的通道数来达到降低计算量和模型参数的目的,β参数则是通过调整输入图像分辨率降低模型计算量。通过α,β参数可以灵活的调整的整个网络的参数量和计算量,在略微损失精度的情况下获得符合实际需求的轻量网络。

image-20220714084906595

在Moblie v1网络的实际训练中,人们发现一个问题:在DW卷积中,卷积核很容易出现大部分参数为0的情况,这使得卷积核在计算中“作废”。随后在v2版本的网络中,这一问题将会得到改善。

Mobile v2

Mobile v2是Google在2018年提出的,相比于v1网络,其准确率更高且网络更小。

Inverted residual block

在ResNet中提出的残差结构是采用1x1的卷积核进行降维后进行3x3卷积,然后再使用1x1的卷积核进行升维。MobileNet v2提出的Inverted residual block的流程正好相反,先进行1x1升维然后进行DW卷积,再进行降维。

image-20220714091602446

在v2版本网络中的激活函数也更改成了ReLU6函数。

image-20220715084023423

Linear Bottlenecks

作者认为,ReLU激活函数会造成低维特征的较大损失,但随着输出维度的升高,这一情况有明显改善。由于MobileNet的Inverted residual block输出的维度往往较低,因此Inverted residual block的输出由原来的非线性激活改为线性激活以减小损失。

需要注意的是,只有当stride=1且输入输出矩阵的形状相同时,才会进行shortcut连接。

image-20220715094717437

模型结构

  • t为扩展因子
  • c为输出特征矩阵的深度
  • n为bottleneck的重复次数
  • s为block第一层的步距

第二层输入中t=1意味着输入的特征矩阵没有被升维,因此在bottleneck中的第一层1x1卷积核升维可以省略。最后一层的1x1x1280的卷积操作可以看做是一个全连接操作,输出特征矩阵k即为分类个数。

MobileNet v3

MobileNet v3是在v2版本上做了进一步的优化,更新了Block结构,加入了SE模块、更新了激活函数,通过NAS进行参数搜索并重新设计较为耗时的层结构。

Squeeze-and-Excitation

SE注意力机制的目的是让网络学习到不同channel的重要程度形成通道权重,这种注意力机制让模型可以更加关注信息量最大的channel特征,而抑制那些不重要的channel特征。

image-20220716102049683

该机制是将特征图的每个通道进行平均池化操作,然后通过两个全连接层,最后输出每个通道的权重。

重设计耗时层结构

作者将第一层卷积核个数从32缩减至16,得到与原结构相同的模型准确率,如此可以节省2ms的推理时间;同时,通过NAS发现原来的Last Stage较为耗时,经过重新设计,精简了结构,从而节省了7ms的推理时间。

image-20220716103415574

image-20220716103440517

重设计激活函数

作者对v2版本的ReLU6激活函数替换成swish激活函数,使得模型准确率有了显著提升,但swish函数的计算以及求导较为复杂,对量化过程不友好,无法适应移动端的计算要求。

image-20220716105921759

因此,作者将h-swish激活函数替代swish,由于将sigmoid函数替换成h-sigmoid使得激活函数的复杂度降低,对推理以及量化过程有较大帮助。

image-20220716110228680

image-20220716111449630

模型结构

MobileNet v3 Large

image-20220716114452327

MobileNet v3 Small

image-20220716115017021