MobileNet系列(4):MobileNetv3网络详解

这篇具有很好参考价值的文章主要介绍了MobileNet系列(4):MobileNetv3网络详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

当前很多轻量级网络会经常使用到MobileNetv3,本文将讲解google继MobileNetv2之后提出的v3版本。MobileNetv3论文:Searching for MobileNetV3

MobileNet系列(4):MobileNetv3网络详解
根据MobileNetV3论文总结,网络存在以下3点需要大家注意的:

  • 更新了Block(bneck),在v3版本中原论文称之为bneck,在v2版倒残差结构上进行了简单的改动。
  • 使用了NAS(Neural Architecture Search)搜索参数
  • 重新设计了耗时结构:作者使用NAS搜索之后得到的网络,接下来对网络每一层的推理时间进行分析,针对某些耗时的层结构做了进一步的优化

MobileNetV3性能提升

MobileNetV3-Large is 3.2% more accurate on ImageNet classification while reducing latency by 20% compared to MobileNetV2. MobileNetV3-Small is 6.6% more accurate compared to a MobileNetV2 model with comparable latency. MobileNetV3-Large detection is over 25% faster at roughly the same accuracy as MobileNetV2 on COCO detection. MobileNetV3-Large LRASPP is 34% faster than MobileNetV2 R-ASPP at similar accuracy for Cityscapes segmentation

MobileNet系列(4):MobileNetv3网络详解

  • 可以看出V3版本的Large 1.0(V3-Large 1.0)Top-175.2,对于V2 1.0 它的Top-172,相当于提升了3.2%
  • 在推理速度方面也有一定的提升,(V3-Large 1.0)P-1手机上推理时间为51ms,而V264ms,很明显V3V2,不仅准确率更高了,而且速度更快了
  • V3-Small版本的Top-167.4,而V2 0.35 (0.35表示卷积核的倍率因子)的Top-1只有60.8,准确率提升了6.6%

很明显V3版本比V2版本要更优秀

网络的改进

更新了Block

  • 加入了SE模块(注意力机制)
  • 更新了激活函数
MobieNetV2 Block

MobileNet系列(4):MobileNetv3网络详解

  • 首先会通过一个1x1卷积层来进行升维处理,在卷积后会跟有BNReLU6激活函数
  • 紧接着是一个3x3大小DW卷积,卷积后面依旧会跟有BNReLU6激活函数
  • 最后一个卷积层是1x1卷积,起到降维作用,注意卷积后只跟了BN结构,并没有使用ReLU6激活函数。

另外网络还存在一个捷径分支shotcut,将我们输入特征矩阵与输出特征矩阵在相同维度的数值上进行相加操作。并且只有DW卷积的步距为1,且input_channel==output_channel,才有shotcut连接

MobieNetV3 Block

MobileNet系列(4):MobileNetv3网络详解
咋一看,与MobieNetV2 Block也没什么区别,最显眼的区别就是在MobieNetV3 Block中存在SE模块(注意力机制)

SE模块

对得到的特征矩阵,对每个channel进行池化处理,接下来通过两个全连接层得到输出的向量,其中第一个全连接层,它的全连接层节点数是等于输入特征矩阵channel的1/4,第二个全连接层的channel是与我们特征矩阵的channel保持一致的。经过平均池化+两个全连接层,输出的特征向量可以理解为是对SE之前的特征矩阵的每一个channel分析出了一个权重关系,它认为比较重要的channel会赋予一个更大的权重,对于不是那么重要的channel维度上对应一个比较小的权重

MobileNet系列(4):MobileNetv3网络详解
如上图所示:假设我们特征矩阵的channel为2,使用Avg pooling针对每一个channel去求一个均值,因为有两个channel,所以得到2个元素的向量,然后依次在经过两个全连接层,第一个channel为原来channel的1/4,并且对应relu激活函数。对于第二个全连接层它的channel和我们特征矩阵channel维度是一致的,注意这里使用的激活函数使h-sigmod,然后得到和特征矩阵channel大小一样的向量,每个元素就对应于每个channel的权重.比如第一个元素是0.5,将0.5与特征矩阵第一个channel的元素相乘,得到一个新的channel数据。

另外网络更新了激活函数
MobileNet系列(4):MobileNetv3网络详解
对应图中的NL表示的就是非线性激活函数,在不同层中使用的激活函数不一样,这里没有给出一个明确的激活函数,而是标注了一个NL,注意最后一层1x1的卷积是没有使用非线性激活函数的,用的是线性激活函数。

MobieNetV3 Block和MobieNetV2 Block结构基本是一样的,主要是增加了SE结构,并对激活函数进行了更新

重新设计耗时层结构

在原论文中主要讲了两个部分:

  • 减少第一个卷积层的卷积个数(32 -> 16)
    在v1,v2版本第一层卷积核个数都是32的,在v3版本中我们只使用了16个
    MobileNet系列(4):MobileNetv3网络详解
    在原论文中,作者说将卷积核Filter个数从32变为16之后,它的准确率是和32是一样的,既然准确率没有影响,使用更少的卷积核计算量就变得更小了。这里节省了大概2ms的运算时间
  • 精简 Last Stage
    在使用NAS搜索出来的网络结构的最后一部分,叫做Original last Stage,它的网络结构如下:
    MobileNet系列(4):MobileNetv3网络详解
    该网络是主要是通过堆叠卷积而来的,作者在使用过程中发现这个Original Last Stage是一个比较耗时的部分,作者就针对该结构进行了精简,提出了一个Efficient Last Stage

MobileNet系列(4):MobileNetv3网络详解
Efficient Last Stage相比之前的Original Last Stage,少了很多卷积层,作者发现更新网络后准确率是几乎没有变化的,但是节省了7ms的执行时间。这7ms占据了推理11%的时间,因此使用Efficient Last Stage之后,对我们速度提升还是比较明显的。

重新设计激活函数

之前在v2版本我们基本都是使用ReLU6激活函数,现在比较常用的激活函数叫swish激活函数。
s w i s h x = x . σ ( x ) swish x=x.\sigma(x) swishx=x.σ(x)
其中 σ \sigma σ的计算公式如下:
σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+ex1
使用swish激活函数之后,确实能够提高网络的准确率,但是也存在2个问题:

  • 计算、求导复杂
  • 对量化过程不友好(对移动端设备,基本上为了加速都会对它进行量化操作)

由于存在这个问题,作者就提出了h-swish激活函数,在讲h-swish激活函数之前我们来讲一下h-sigmoid激活函数

h-sigmoid激活函数是在relu6激活函数上进行修改的:
R E L U 6 ( x ) = m i n ( m a x ( x , 0 ) , 6 ) RELU6(x)=min(max(x,0),6) RELU6(x)=min(max(x,0),6)
h − s i g m o i d = R e L U 6 ( x + 3 ) 6 h-sigmoid=\frac{ReLU6(x+3)}{6} hsigmoid=6ReLU6(x+3)

MobileNet系列(4):MobileNetv3网络详解
从图中可以看出h-sigmoidsigmoid激活函数比较接近,所以在很多场景中会使用h-sigmoid激活函数去替代我们的sigmoid激活函数。因此h-swish σ \sigma σ替换为h-sigmoid之后,函数的形式如下:
h − s w i t c h [ x ] = x R e L U 6 ( x + 3 ) 6 h-switch[x]=x\frac{ReLU6(x+3)}{6} hswitch[x]=x6ReLU6(x+3)

如上图右侧部分,是swishh-swish激活函数的比较,很明显这两个曲线是非常相似的,所以说使用h-switch来替代switch激活函数还是挺棒的。

在原论文中,作者说将h-swish替换swish,将h-sigmoid替换sigmoid,对于网络的推理过程而言,在推理速度上是有一定帮助的,并且对量化过程也是非常友好的。

MobieNetV3-Large 版本的网络结构

MobileNet系列(4):MobileNetv3网络详解
简单看下表中各参数的含义:

  • input输入层特征矩阵的shape
  • operator表示的是操作,对于第一个卷积层conv2d;这里的
  • #out代表的输出特征矩阵的channel,我们说过在v3版本中第一个卷积核使用的是16个卷积核
  • 这里的NL代表的是激活函数,其中HS代表的是hard swish激活函数,RE代表的是ReLU激活函数;
  • 这里的s代表的DW卷积的步距;
  • 这里的beneck对应的是下图中的结构;
  • exp size代表的是第一个升维的卷积,我们要将维度升到多少,exp size多少,我们就用第一层1x1卷积升到多少维。
  • SE:表示是否使用注意力机制,只要表格中标所对应的bneck结构才会使用我们的注意力机制,对没有打就不会使用注意力机制
  • NBN 最后两个卷积的operator提示NBN,表示这两个卷积不使用BN结构,最后两个卷积相当于全连接的作用
  • 注意:第一个bneck结构,这里有一点比较特殊,它的exp size和输入的特征矩阵channel是一样的,本来bneck中第一个卷积起到升维的作用,但这里并没有升维。所以在实现过程中,第一个bneck结构是没有1x1卷积层的,它是直接对我们特征矩阵进行DW卷积处理

MobileNet系列(4):MobileNetv3网络详解

bneck
  • 首先通过1x1卷积进行升维到exp size,通过DW卷积它的维度是不会发生变化的,同样通过SE之后channel也会不会发生变化的。最后通过1x1卷积进行降维处理。降维后的channel对应于#out所给的数值。
  • 对于shortcut捷径分支,必须是DW卷积的步距为1,且bneckinput_channel=output_channel才有shortcut连接

通过这个表我们就可以搭建MobilenetV3网络结构了

对于MobileNetV3-Small网络结构,如下,这里就不讲了,跟我所讲的基本上都一致的。

MobileNet系列(4):MobileNetv3网络详解文章来源地址https://www.toymoban.com/news/detail-462190.html

MobileNetV3-Small

到了这里,关于MobileNet系列(4):MobileNetv3网络详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv5/v7 更换骨干网络之 MobileNetV3

    论文地址:https://arxiv.org/abs/1905.02244 代码地址:https://github.com/xiaolai-sqlai/mobilenetv3 我们展示了基于互补搜索技术和新颖架构设计相结合的下一代 MobileNets。MobileNetV3通过结合硬件感知网络架构搜索(NAS)和 NetAdapt算法对移动设计如何协同工作,利用互补的方法来提高移动端CP

    2024年02月08日
    浏览(39)
  • MobileNet系列(2):MobileNet-V2 网络详解

    MobileNet-V2论文:Inverted Residuals and Linear Bottlenecks, MobileNet-V2网络是由google团队在2018年提出的,相比MobileNetV1网络, 准确率更高,模型更小 。 网络中的亮点 Inverted Residuals (倒残差结构) Linear Bottlenecks 普通的残差结构 Resnet 网络提供的残差结构,如下图: 首先对输入特征矩阵

    2024年02月05日
    浏览(36)
  • YOLOv5改进实战 | 更换主干网络Backbone(四)之轻量化模型MobileNetV3

    前言 轻量化网络设计 是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝 :移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。 分组卷积 :将卷积操作分解为若干个较小的卷积操作,并将它们分

    2024年02月07日
    浏览(47)
  • YOLOv8改进轻量级PP-LCNet主干系列:最新使用超强悍CPU级骨干网络PP-LCNet,在CPU上让模型起飞,速度比MobileNetV3+快3倍,又轻又快

    💡本篇文章 基于 YOLOv8 芒果改进YOLO系列: YOLOv8改进轻量级主干系列:最新使用超强悍CPU级骨干网络PP-LCNet,在CPU上让模型起飞,速度比MobileNetV3+快3倍、打造全新YOLOv8检测器 。 🚀🚀🚀内含改进源代码,按步骤操作运行改进后的代码即可 参数量和计算量均下降 重点 :🔥🔥

    2024年02月06日
    浏览(50)
  • 深度学习网络模型 MobileNet系列MobileNet V1、MobileNet V2、MobileNet V3网络详解以及pytorch代码复现

    DW与PW计算量 普通卷积计算量 计算量对比 因此理论上普通卷积是DW+PW卷积的8到9倍 Residual blok与Inverted residual block对比: Residual blok :先采用1 x 1的卷积核来对特征矩阵进行压缩,减少输入特征矩阵的channel,再通过3 x 3的卷积核进行特征处理,再采用1 x 1的卷积核来扩充channel维

    2024年02月01日
    浏览(42)
  • 图片分类网络ViT、MobileViT、Swin-Transformer、MobileNetV3、ConvNeXt、EfficientNetV2

    参考我的另一篇博文《李沐论文精读系列二:Vision Transformer、MAE、Swin-Transformer》 参考我的另一篇博文《李沐论文精读系列二:Vision Transformer、MAE、Swin-Transformer》 论文名称:MobileViT: Light-Weight, General-Purpose, and Mobile-Friendly Vision Transformer 参考小绿豆的博文《MobileViT模型简介》

    2024年02月04日
    浏览(56)
  • 基于卷积神经网络的农作物病虫害图像识别(Opencv,Pytorch,Tensorflow,MobileNetV3)

    最近做了一个农作物虫害图像识别的程序,在此分享一下。本文用到的深度学习框架为Tensorflow2,Opencv等等!使用的数据集共有61种类别,分别代表不同的虫害类别。使用的网络模型为moblienetv3. Bi 设 Dai 坐 效果视频如下所示: 农作物虫害图像识别 代码如下所示:

    2024年02月11日
    浏览(44)
  • 计算机视觉之MobileNetV3

    MobileNetV3 是由 google 团队在 2019 年提出的轻量化网络模型,传统的卷积神经网络,内容需求大,运算量大,无法再移动设备以及嵌入式设备上运行,为了解决这一问题,MobileNet网络应运而生。MobileNetV3在移动端图像分类、目标检测、语义分割等任务上均取得了优秀的表现。Mo

    2024年02月05日
    浏览(73)
  • MobileNetV3详细原理(含torch源码)

    作者:爱笑的男孩。 个人简介:打工人。 持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及WindowsLinux实践小技巧。 如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 目录 MobileNetV3原理 MobileNetV3创新点

    2023年04月20日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包