【轻量级神经网络】MobileNet网络详解

文章目录

  • 1、深度卷积(Depthwise convolution)
  • 2、逐点卷积(Pointwise Convolution)
  • 3、深度可分离卷积(Depthwise Separable Convolution)
  • 4、Xception与MobileNet深度可分离卷积的区别

  • 深度学习领域内努力促使神经网络向小型化发展。在保证模型准确率的同时体积更小,速度更快。到了2016年直至现在,业内提出了SqueezeNet、ShuffleNet、NasNet、MnasNet以及MobileNet等轻量级网络模型。这些模型使移动终端、嵌入式设备运行神经网络模型成为可能。而MobileNet在轻量级神经网络中较具代表性。
  • MobileNet网络拥有更小的体积,更少的计算量,更高的精度。在轻量级神经网络中拥有极大的优势。

1、深度卷积(Depthwise convolution)

  • 深度卷积(Depthwise convolution, DW)不同于常规卷积操作,深度卷积中一个卷积核只有一维,负责一个通道,一个通道只被一个卷积核卷积,即没有各个通道进行卷积后相加的操作,因此卷积核个数与输入通道数相同,而且输出通道数也与输入通道数相同;常规卷积每个卷积核的维度与输入维度相同,每个通道单独做卷积运算后相加。
  • 以一张5x5x3(长和宽为5,RGB3通道)的彩色图片举例。每层深度卷积卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。设padding=1,stride=1,一个三通道的图像经过运算后生成了3个特征图,如下图所示:
    在这里插入图片描述
  • 深度卷积完成后的输出特征图通道数与输入层的通道数相同,无法扩展通道数。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的特征信息。因此需要逐点卷积来将生成的特征图进行组合生成新的特征图。

2、逐点卷积(Pointwise Convolution)

  • 逐点卷积(Pointwise Convolution, PW)的运算与标准的1*1卷积运算非常相似。
  • 逐点卷积卷积核大小为1×1xM(M为输入数据的维度),每次卷积一个像素的区域。逐点卷积运算会将上一层的特征图在深度(通道)方向上进行加权组合,生成新的特征图,新的特征图的大小与输入数据大小一致,这种卷积方式以较少的计算量进行降维或升维操作(改变输出数据的维度)。这种卷积被用来“混合”通道之间的信息。
  • 以一张5x5x3(长和宽为5,RGB3通道)的彩色图片举例,使用4个1x1x3的逐点卷积核进行卷积,逐点卷积运算后生成了4个特征图。这个例子是使用逐点卷积进行升维的操作,特征图从5x5x3 升维到5x5x4。如下图所示:
    在这里插入图片描述

3、深度可分离卷积(Depthwise Separable Convolution)

  • 从MobileNetV1开始,到V2、V3的线性瓶颈结构都大量使用了深度可分离卷积。
  • 深度可分离卷积(Depthwise Separable Convolution)是一种卷积结构。它是由一层深度卷积(Depthwise convolution)与一层逐点卷积(Pointwise Convolution)组合而成的,每一层卷积之后都紧跟着批规范化和ReLU激活函数。跟标准卷积的区别就是精度基本不变的情况下,参数与计算量都明显减少。
    在这里插入图片描述
  • 将深度卷积和逐点卷积组成深度可分离卷积后的示意图,如下图所示:
    在这里插入图片描述
  • 首先进行深度卷积操作,得出的特征图各通道之间是不关联的。接着进行逐点卷积把深度卷积输出的特征图各通道关联起来。
  • 深度可分离卷积使用了更小的空间代价(参数减少)和更少的时间代价(计算量更少)实现了标准卷积层一样的效果(提取特征)。
  • 一般的设Df为输入特征图边长,Dk为卷积核边长,特征图和卷积核均为长宽一致,输入通道数为M,输出通道数为N,则:
    • 标准卷积计算量为:Df×Df×Dk×Dk×M×N
    • 深度卷积的计算量为:Df×Df×Dk×Dk×M
    • 逐点卷积的计算量为:Df×Df×M×N
  • 上图所示实现输入特征图大小为5×5×3,输出特成图大小为5×5×4,设padding=1,stride=1,深度卷积卷积核大小为3×3,标准卷积也使用3×3尺寸卷积核。实现相同的卷积效果,参数量(不包含偏置)与计算量对比如下表所示:
    在这里插入图片描述
    在这里插入图片描述

4、Xception与MobileNet深度可分离卷积的区别

  • 事实上深度可分离卷积不是在MobileNetV1中第一次提出的,而是在2016年由谷歌的Xception网络结构中提出的。MobileNetV1在Xception的基础上,对深度可分离卷积进行了改进,做到了计算量与参数量的下降:
  • 假定M为输入层的通道数,N为输出层的通道数。
  • Xception的深度可分离卷积是由输入参数开始,使用1x1xMxN卷积将输入层的通道数转换为目标通道数,再通过3x3x1卷积核对每个通道进行卷积,每次卷积过后使用ReLU进行激活。
  • MobileNetV1的深度可分离卷积则是先使用3x3x1xM对输入层的每个通道分别卷积,之后通过1x1xMxN将输入层通道数转换为输出层通道数,每次卷积过后做一次批规范化操作,再使用ReLU进行激活。
  • 这里我们使用MobileNetV1网络结构的第一个深度可分离卷积层来举例,输入层维度为112x112x32,输出层维度为112x112x64,Xception与MobileNet的深度可分离卷积的计算量与参数个数对比如下表:
    在这里插入图片描述
    参考链接:https://blog.csdn.net/qq_37555071/article/details/108393809

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/70275.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

42.SpringBoot—原理篇

一、SpringBoot原理篇。 (1)自动配置。 (1.1)bean加载方式。 (1.1.1)xml方式。(适用自定义bean与第三方bean) (1.1.2)注解方式组件扫描。(适用于自定义bean&#xff…

C++QT教程3——手册4.11.1自带教程(笔记)——创建一个QT快速应用

文章目录 创建一个QT快速应用创建项目创建主视图添加应用逻辑为视图添加动画素材文件 参考文章 创建一个QT快速应用 本教程使用内置的QML类型,介绍了Qt Quick的基本概念。有关可以选择的用户界面选项的更多信息,请参阅用户界面。 本教程描述了如何使用…

File Upload

File Upload 文件上传功能是大部分WEB应用的常用功能,网站允许用户自行上传头像、照片、一些服务类网站需要用户上传证明材料的电子档、电商类网站允许用户上传图片展示商品情况等。然而,看似不起眼的文件上传功能如果没有做好安全防护措施,…

c++通过gsop调用基于https的webservice接口总结

ww哦步骤: 第一步:生成头文件 webservice接口一般会有一个对外接口文档。比如:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL 问号后面的参数表示WSDL文档,是一个XML文档,看不懂配置没关系&a…

红帽8.2版本CSA题库:第十题配置用户帐户

红帽8.2版本CSA题库:第十题配置用户帐户 useradd -u 3533 manalo #传创建用户指定uid为3533 echo flectrag | passwd --stdin manalo #设置密码 tail -1 /etc/passwd #查看

RTT(RT-Thread)IIC设备

目录 IIC设备 IIC介绍 电气连接 IIC总线时序 IIC协议 读协议 写协议 访问I2C总线设备 查找 I2C 总线设备 I2C数据读写(数据传输) 配置IIC步骤 IIC设备 IIC介绍 I2C(Inter Integrated Circuit)总线是 PHILIPS 公司开发…

SpringBoot案例-部门管理-新增

根据页面原型,明确需求 页面原型 需求 阅读接口文档 接口文档链接如下: 【腾讯文档】SpringBoot案例所需文档 https://docs.qq.com/doc/DUkRiTWVaUmFVck9N 思路分析 前端在输入要新增的部门名称后,会以JSON格式将数据传入至后端&#xf…

2023年国赛数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 最短时…

leader-line相关配置问题

安装完两个插件都是教去改config // configureWebpack: config > {// let path require(path)// config.module.rules.push({// test: path.resolve(__dirname, node_modules/leader-line/),// use: [// {// loader: skeleton-loader,// …

开源低代码平台Openblocks

网友 HankMeng 想看低代码工具,正好手上有一个; 什么是 Openblocks ? Openblocks 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用程序。 传统上,构建内部应用程序需要复杂的前端和后端交互,…

使用GraphQL在Postman中进行API测试

GraphQL 是一种用于API的开源数据查询和操作语言,用于API的查询语言和运行时。它使客户端能够精确地指定其数据需求,并获得预测性地结果。GraphQL旨在提高API的效率、灵活性和可靠性。 Postman 是一款用于API开发的强大工具,它支持REST和Gra…

Vite更新依赖缓存失败,强制更新依赖缓存

使用vitets开发一段时间了,感觉并不是想象中的好用,特别是出现些稀奇古怪的问题不好解决,比如下面这个问题 上午9:50:08 [vite] error while updating dependencies: Error: ENOENT: no such file or directory, open E:/workspace-dir/node…