【MobileNet】MobileNet V1

news2025/1/16 4:45:59

MobileNet V1

  • 1、简介
  • 2、Depthwise Separable Convolution
    • 1)Depthwise Separable Convolution 的优点
    • 2)Depthwise Separable Convolution 网络结构
    • 3)pytorch 函数 实现 depth-wise convolution
  • 2、Mobile 网络结构
    • pytorch实现 Mobile 网络结构(benchmark)
  • 3、超参数 α: Width Multiplier
  • 4、超参数 β:Resolution Multiplier

文献名称: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision
下载地址:https://arxiv.org/pdf/1704.04861.pdf


1、简介

1、MobileNets 基于流线型架构:流线型架构指的是像vgg那样,数据从头流到尾,没有resnet或desnet的那种跨层连接结构

2、使用深度可分离卷积depthwise separable convolutions)来构建轻量级深度神经网络,在 损失一定的accuracy 的情况下,极大程度的减小了网络的计算量,适用于 计算能力较小的 移动应用 和 嵌入式应用。

3、该网络引入了两个简单的全局超参数:宽度乘数分辨率乘数,可以有效地在 延迟(latency) 和 准确性(accuracy) 之间进行权衡。这些超参数允许模型构建者根据问题的限制条件为其应用程序选择合适大小的模型。
\quad \quad \quad - α(宽度乘数 Width Multiplier)
\quad \quad \quad - β(分辨率乘数 Resolution Multiplier)

以上标黄的就是 MobileNet 的重点,我们下面详细讲解。


2、Depthwise Separable Convolution

Mobile Net 是基于 Depthwise Separable Convolution 建立的,Depthwise Separable Convolution 是一种可分解的卷积的形式,它可以将 标准卷积 分解为 depth-wise卷积 和 point-wise卷积 (conv 1×1)
在这里插入图片描述
在这里插入图片描述

1)Depthwise Separable Convolution 的优点

这种因式分解大大减少了计算量和模型大小。

假设 输入图像的高宽皆为 D F D_F DF, 通道数为 M M M; filter 的高宽皆为 D K D_K DK,通道数也为 M M M, 个数为 N N N
在 padding=same,stride=1 的情况下,也就是输出图像尺寸和输入图像尺寸一样,为 ( D F , D F ) (D_F,D_F) DFDF 的情况下,
做一次 标准卷积的计算量是: D F ∗ D F ∗ M ∗ N ∗ D K ∗ D K D_F * D_F * M * N * D_K * D_K DFDFMNDKDK

在这里插入图片描述

而达到相同输出尺寸效果,做一次 Depthwise Separable Convolution 需要的计算量是: D F ∗ D F ∗ M ∗ D K ∗ D K + M ∗ N ∗ D F ∗ D F D_F * D_F * M * D_K * D_K + M * N * D_F * D_F DFDFMDKDK+MNDFDF。 其中:

  • D F ∗ D F ∗ M ∗ D K ∗ D K D_F * D_F * M * D_K * D_K DFDFMDKDK 是 depth- wish convolution 部分的计算量
  • M ∗ N ∗ D F ∗ D F M * N * D_F * D_F MNDFDF是 point-wis convolution 部分的计算量

在这里插入图片描述

我把2种方式的计算量相除一下:( Mobile Net 基本上用的都是 filter=3*3 的 depth-wise conv,即 D K 2 = 3 D_K^2=3 DK2=3
D e p t h w i s e   S e p a r a b l e   C o n v o l u t i o n 的计算量 标准卷积的计算量   = D F ∗ D F ∗ M ∗ D K ∗ D K + M ∗ N ∗ D F ∗ D F D F ∗ D F ∗ M ∗ N ∗ D K ∗ D K   = 1 N + 1 D K 2   = 1 N + 1 9 \frac{Depthwise\ Separable\ Convolution 的计算量}{标准卷积的计算量} \\ \ \\ = \frac{D_F * D_F * M * D_K * D_K + M * N * D_F * D_F}{D_F * D_F * M * N * D_K * D_K} \\ \\ \ \\ = \frac{1}{N} +\frac{1}{D_K^2} \\ \ \\ = \frac{1}{N} +\frac{1}{9} 标准卷积的计算量Depthwise Separable Convolution的计算量 =DFDFMNDKDKDFDFMDKDK+MNDFDF =N1+DK21 =N1+91

所以,可以发现,Depthwise Separable Convolution 的计算量是 标准卷积计算量的 1/8 ~ 1/9 左右,计算量小好多,这样模型速度也会快很多。然而,这样的操作,会使 accuracy 有一定的下降,下降有,但不多。


2)Depthwise Separable Convolution 网络结构

  • 左边是标准的卷积网络结构(一个 3x3 的卷积曾后面跟一个 BN层和ReLU层),
  • 右边是Depthwise Separable Convolution 网络结构,先是一个 depth-with 卷积层,后面跟 BN层和ReLU层,再是一个 point-with 卷积层,再跟 BN层和ReLU层。

请添加图片描述


3)pytorch 函数 实现 depth-wise convolution

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

如上就是 pytorch 的卷积函数,要做 depth-wise 卷积的话,重点就在参数 groups

  • 标准常规卷积时,group=1,意思是将输入分为一组。
  • 当将其设为 groups=in_channels 时,意思是将输入的每一个通道作为一组,然后分别对其卷积,再将每组的输出concat,最后输出通道数等于输入通道数。举例如下:
nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=0, groups=in_channels, bias=False)

2、Mobile 网络结构

请添加图片描述

pytorch实现 Mobile 网络结构(benchmark)

pytorch 的模型实现:github 地址


3、超参数 α: Width Multiplier

虽然 MobileNet 架构已经很小,且延迟很低,但很多时候特定的场景或应用程序可能需要模型更小更快。为了构造这些更小、计算成本更低的模型,作者引入了一个非常简单的参数 - 宽度乘数 α \alpha α

宽度乘数 α \alpha α 的作用是在每一层上均匀地薄化网络,也就是每一层都按比例 α \alpha α 减小 channel 数量。比如,之前,上一层的输出 channel 为 M,输出 channel 为 N;那么现在使用 宽度乘数 α \alpha α,上一层的输出 channel 为 α \alpha αM,输出 channel 为 α \alpha αN。 这样的话,参数 数量大概是之前的 α 2 \alpha^2 α2。计算量为: D F ∗ D F ∗ α M ∗ D K ∗ D K + α M ∗ α N ∗ D F ∗ D F D_F * D_F * \alpha M * D_K * D_K + \alpha M * \alpha N * D_F * D_F DFDFαMDKDK+αMαNDFDF

α \alpha α 的取值一般为 : 1, 0.75, 0.5, 0.25


4、超参数 β:Resolution Multiplier

分辨率乘数 β \beta β 是用来减小图像尺寸的, 一般使用 β \beta β 将图像缩小为 (32的倍数):224, 192, 160 or 128。
这样,参数数量大概是之前的 β 2 \beta^2 β2, 计算量为: β D F ∗ β D F ∗ M ∗ D K ∗ D K + M ∗ N ∗ β D F ∗ β D F \beta D_F * \beta D_F * M * D_K * D_K + M * N * \beta D_F * \beta D_F βDFβDFMDKDK+MNβDFβDF

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hiveSQL开窗函数详解

hive开窗函数 文章目录hive开窗函数1. 开窗函数概述1.1 窗口函数分类1.2 窗口函数和普通聚合函数的区别2. 窗口函数的基本用法2.1 基本用法2.2 设置窗口的方法2.2.1 window_name2.2.2 partition by2.2.3 order by 子句2.2.4 rows指定窗口大小窗口框架2.3 开窗函数中加 order by…

Linux下使用Makefile实现条件编译

在Linux系统下Makefile和C/C语言都有提供条件选择编译的语法,就是在编译源码的时候,可以选择性地编译指定的代码。这种条件选择编译的使用场合有好多,例如我们开发一个兼容标准版本与定制版本兼容的项目,那么,一些与需…

[数据结构]:07-二叉树(无头结点)(C语言实现)

目录 前言 已完成内容 二叉树实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-QueueFunction.cpp 04-TreeFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码。使用C引用主要是为了…

金三银四,助力你的大厂梦,2023年软件测试经典面试真题(3)(共3篇)

前言 金三银四即将到来,相信很多小伙伴要面临面试,一直想着说分享一些软件测试的面试题,这段时间做了一些收集和整理,下面共有三篇经典面试题,大家可以试着做一下,答案附在后面,希望能帮助到大…

【软件测试】从0到1的突破,appium自动化测试你真的会吗?自动化测试思路总结......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 总结一下APP UI自动…

超店有数分享:tiktok数据分析工具推荐,助你成功出海!

现阶段的跨境电商人都纷纷入局tiktok,这是风口也是发展趋势。Tiktok的下载量已经超过了35亿,每月都有10亿用户活跃,在154国家/地区使用。Tiktok用户每天在平均花1小时左右进行浏览,打开率也很高。如今,tiktok也越来越成…

酷雷曼VR丨十大“高含金量”荣誉,一起见证!

VR全景领域 十大“高含金量”荣誉 高光时刻 一同见证 01、双高新技术企业 同时获得国家高新技术企业、中关村高新技术企业双认证,是对酷雷曼企业研究开发组织管理水平、科技成果转化能力、自主知识产权数量、销售与总资产成长性等多维度实力的综合体现。 双高…

【MinIO】文件断点续传和分块合并

【MinIO】文件断点续传和分块合并 文章目录【MinIO】文件断点续传和分块合并0. 准备工作1. 检查文件是否存在1.1 定义接口1.2 编写实现方法2. 检查分块文件是否存在2.1 定义接口2.2 编写实现方法3. 上传分块文件接口3.1 定义接口3.2 编写实现方法4. 合并分块文件接口4.1 定义接…

如何判断一个客户是大客户?

米茂搜对主要外贸销售客户的识别方法整理如下:1. 确定研究目标。通过对客户数据的收集和分析,找出大客户,对大客户实施个性化管理,并对其服务进行跟踪,以及。不时地改善服务,以保持他们的忠诚度。2. 扩大信…

ChatGPT 引爆全网热议,如果当它是“聊天机器人”,那你可就错了

近日来,智能聊天机器人ChatGPT的出现引发众多网友讨论,那它到底是什么呢? 2022年11月,人工智能公司OpenAI推出了一款聊天机器人:ChatGPT。它能够通过学习和理解人类语言来进行对话,还能与聊天对象进行有逻…

骨传导耳机对骨头有影响吗?骨传导耳机好不好

首先很明确的告诉你,骨传导耳机对骨头是没有影响的,骨传导耳机反倒可以起到保护听力的作用。 骨传导是一种声音传导方式,即将声音转化为不同频率的机械振动,通过人的颅骨、骨迷路、内耳淋巴液传递,螺旋器、听神经、听觉…

【转载】bootstrap自定义样式-bootstrap侧边导航栏的实现

bootstrap自带的响应式导航栏是向下滑动的,但是有时满足不了个性化的需求: 侧滑栏使用定位fixed 使用bootstrap响应式使用工具类 visible-sm visible-xs hidden-xs hidden-sm等对不同屏幕适配 侧滑栏的侧滑效果不使用jquery方法来实现,使用的是css3 tr…

02-27 周一 图解机器学习SVM-人脸识别之PCA降维

02-27 周一 图解机器学习SVM分类时间版本修改人描述2023年2月27日09:48:38V0.1宋全恒新建文档 简介 本文主要是在试图代码分析图解机器学习这本书中5.5人脸识别分类(p60),主要的过程是使用PCA技术和SVM技术进行人脸的分类工作。 准备 数据集…

JavaScript中单例模式这样用

如果希望自己的代码更优雅、可维护性更高以及更简洁,往往离不开设计模式这一解决方案。 在JS设计模式中,最核心的思想:封装变化(将变与不变分离,确保变化的部分灵活,不变的部分稳定)。 单例模式…

Spring Batch 综合案例实战中

目录 需求一 需求二 转视频版 需求一 需求:先动态生成50w条员工数据,存放再employee.csv文件中 步骤1:定义:DataInitController RestController public class DataInitController {Autowiredprivate IEmployeeService emplo…

arduino-sentry2之卡片篇

欧克,今天在学生的强烈要求下 我又重启arduino的sentry2调试篇 目前实验结果,可以检测到10张交通卡片 也就是如图所示十张 具体视频如下: https://live.csdn.net/v/279170 具体代码如下: #include <Arduino.h> #include <

什么是千年虫?计算机如何开始处理日期?都有哪些时间日期格式化?

目录 “千年虫”漏洞&#xff08;Year 2000 Problem&#xff0c;简称“Y2K”&#xff09; 计算机是怎么开始处理日期的么&#xff1f; 举例1&#xff1a;时间格式化举例( 过滤器) 举例2&#xff1a;时间格式化 自定义私有过滤器(日期格式化) 高性能计数器演示 OLE时间对象…

Vue的组件(注册、局部、组件复用、props、emit、生命周期)全解

文章目录前言知识点组件注册局部组件组件复用组件间通信props 类型检测子父组件通信之 emit动态组件生命周期函数前言 Vue 支持模块化和组件化开发&#xff0c;可以将整个页面进行模块化分割&#xff0c;低耦合高内聚&#xff0c;使得代码可以在各个地方使用。 知识点 组件注册…

python自学之《21天学通Python》(15)——第18章 数据结构基础

数据结构是用来描述一种或多种数据元素之间的特定关系&#xff0c;算法是程序设计中对数据操作的描述&#xff0c;数据结构和算法组成了程序。对于简单的任务&#xff0c;只要使用编程语言提供的基本数据类型就足够了。而对于较复杂的任务&#xff0c;就需要使用比基本的数据类…

华三OSPF 综合实验

OSPF 实验 实验拓扑 实验需求 按照图示配置 IP 地址按照图示分区域配置 OSPF &#xff0c;实现全网互通为了路由结构稳定&#xff0c;要求路由器使用环回口作为 Router-id&#xff0c;ABR 的环回口宣告进骨干区域 实验解法 1.配置 IP 地址部分 2.按照图示分区域配置 OS…