MobileNets: 高效的卷积神经网络用于移动视觉应用

摘要

我们提出了一类高效的模型,称为MobileNets,专门用于移动和嵌入式视觉应用。MobileNets基于一种简化的架构,利用深度可分离卷积构建轻量级的深度神经网络。我们引入了两个简单的全局超参数,能够有效地在延迟和准确性之间进行权衡。这些超参数使得模型开发者能够根据问题的约束选择适合的模型。我们在资源和准确性之间的权衡上进行了广泛的实验,并展示了与其他流行模型相比,MobileNets在ImageNet分类任务上的强劲表现。随后,我们展示了MobileNets在广泛的应用和用例中的有效性,包括物体检测、细粒度分类、面部属性和大规模地理定位。

1. 引言

自从AlexNet[19]通过在2012年ImageNet挑战赛(ILSVRC 2012)中获胜而让深度卷积神经网络(CNN)广为人知以来,卷积神经网络已经在计算机视觉中变得无处不在。一般的趋势是通过加深网络的层数和增加网络的复杂性来提高准确性[27, 31, 29, 8]。然而,这些提高准确性的进展并不一定使得网络在大小和速度上变得更加高效。在许多现实应用中,如机器人、自驾车和增强现实,识别任务需要在计算资源有限的平台上及时完成。

本文描述了一种高效的网络架构和一组两个超参数,用于构建非常小的、低延迟的模型,能够轻松匹配移动和嵌入式视觉应用的设计需求。第二节回顾了构建小型模型的相关工作。第三节描述了MobileNet架构和两个超参数:宽度乘数和分辨率乘数,用于定义更小、更高效的MobileNets。第四节介绍了在ImageNet上的实验以及各种不同应用和用例。第五节总结并得出结论。

2. 相关工作

最近文献中对构建小型高效神经网络的兴趣不断上升,例如[16, 34, 12, 36, 22]。许多不同的方法可以大致分为两类:压缩预训练网络或直接训练小型网络。本文提出了一类网络架构,使得模型开发者能够根据应用的资源限制(延迟、大小)选择合适的小型网络。MobileNets主要集中在优化延迟,但也能生成小型网络。许多关于小型网络的论文只关注大小,而没有考虑速度。

MobileNets主要由深度可分离卷积构建,深度可分离卷积最早在[26]中提出,并随后在Inception模型[13]中使用,以减少前几层的计算量。扁平化网络[16]通过完全分解的卷积构建网络,并展示了极度分解网络的潜力。与本文无关的另一篇论文,Factorized Networks[34]引入了类似的分解卷积以及拓扑连接的使用。随后,Xception网络[3]展示了如何扩展深度可分离滤波器,从而超越Inception V3网络。另一个小型网络是Squeezenet[12],它通过瓶颈方法设计了一个非常小的网络。其他减少计算量的网络包括结构变换网络[28]和深度卷积神经网络[37]。

获得小型网络的另一种方法是压缩、因式分解或压缩预训练网络。基于乘积量化[36]、哈希[2]、剪枝、向量量化和霍夫曼编码[5]等方法在文献中有所提出。此外,已经提出了各种因式分解方法以加速预训练网络[14, 20]。另一种训练小型网络的方法是蒸馏[9],它使用较大的网络来训练较小的网络。它与我们的方法是互补的,并在第四节的一些用例中有所涉及。另一个新兴的方向是低位网络[4, 22, 11]。
在这里插入图片描述

3. MobileNet架构

在本节中,我们首先描述MobileNet所基于的核心层——深度可分离卷积。接着,我们描述MobileNet的网络结构,并最终介绍两个用于缩小模型的超参数:宽度乘数(width multiplier)和分辨率乘数(resolution multiplier)。

3.1. 深度可分离卷积

MobileNet模型基于深度可分离卷积,这是一种因式分解卷积的形式,它将标准卷积分解为深度卷积和一个1×1卷积(称为逐点卷积)。在MobileNet中,深度卷积对每个输入通道应用一个单独的滤波器。随后,逐点卷积应用1×1卷积,将深度卷积的输出进行合并。标准卷积同时进行滤波和合并操作,生成一个新的输出集合;而深度可分离卷积将这个过程分解为两层:一个单独的滤波层和一个单独的合并层。这种因式分解大大减少了计算量和模型大小。图2展示了标准卷积(图2a)是如何分解为深度卷积(图2b)和1×1的逐点卷积(图2c)。

标准卷积层的输入是一个尺寸为 DF×DF×MD_F \times D_F \times MDF×DF×M 的特征图 FFF,输出是一个尺寸为 DF×DF×ND_F \times D_F \times NDF×DF×N 的特征图 GSG_SGS,其中 DFD_FDF 是输入特征图的空间宽度和高度,MMM 是输入通道数(输入深度),DSD_SDS 是输出特征图的空间宽度和高度,NNN 是输出通道数(输出深度)。

标准卷积层由一个大小为 DK×DK×M×ND_K \times D_K \times M \times NDK×DK×M×N 的卷积核 KKK 参数化,其中 DKD_KDK 是卷积核的空间维度,假设其为正方形,MMM 是输入通道数,NNN 是输出通道数。

对于标准卷积,假设步幅为1且有填充,输出特征图的计算公式为:

Gk,l,n=∑i,j,mKi,j,m,n⋅Fk+i−1,l+j−1,m(1)\mathbf { G } _ { k , l , n } = \sum _ { i , j , m } \mathbf { K } _ { i , j , m , n } \cdot \mathbf { F } _ { k + i - 1 , l + j - 1 , m } \quad(1) Gk,l,n=i,j,mKi,j,m,nFk+i1,l+j1,m(1)

标准卷积的计算复杂度为:

DK⋅DK⋅M⋅N⋅DF⋅DF(2)D _ { K } \cdot D _ { K } \cdot M \cdot N \cdot D _ { F } \cdot D _ { F }\quad(2) DKDKMNDFDF(2)

其中,计算复杂度依赖于输入通道数 MMM、输出通道数 NNN、卷积核的大小 DK×DKD_K \times D_KDK×DK 和特征图的大小 DF×DFD_F \times D_FDF×DF。MobileNet通过使用深度可分离卷积来解决这些因素及其相互作用,首先通过深度可分离卷积将输出通道数与卷积核大小之间的相互作用解耦。

标准卷积操作通过卷积核对特征进行过滤,并将特征结合以生成新的表示。过滤和结合步骤可以通过使用因式分解卷积(称为深度可分卷积)来分开,从而显著减少计算成本。深度可分卷积由两层组成:深度卷积和逐点卷积。我们使用深度卷积为每个输入通道(输入深度)应用一个滤波器。然后,使用逐点卷积,一个简单的 1×1 卷积,来对深度层的输出进行线性组合。MobileNet 在两层中都使用批归一化(batchnorm)和 ReLU 非线性函数。深度卷积使用每个输入通道(输入深度)一个滤波器可以写成如下形式:
G^k,l,m=∑i,jK^i,j,m⋅Fk+i−1,l+j−1,m(3)\hat { \mathbf { G } } _ { k , l , m } = \sum _ { i , j } \hat { \mathbf { K } } _ { i , j , m } \cdot \mathbf { F } _ { k + i - 1 , l + j - 1 , m }\quad(3) G^k,l,m=i,jK^i,j,mFk+i1,l+j1,m(3)
其中,K^\hat { \mathbf { K } }K^ 是大小为 DK×DK×MD _ { K } \times D _ { K } \times MDK×DK×M 的深度卷积核,其中 mthm _ { t h }mth 个滤波器应用于 FFF 中的第 mthm _ { t h }mth 通道,从而生成过滤后的输出特征图 G^\hat { \mathbf { G } }G^ 的第 mthm _ { t h }mth 通道。

深度卷积的计算成本为:
DK⋅DK⋅M⋅DF⋅DF(4)D _ { K } \cdot D _ { K } \cdot M \cdot D _ { F } \cdot D _ { F }\quad(4) DKDKMDFDF(4)
与标准卷积相比,深度卷积的计算效率极高。然而,它只过滤输入通道,而不结合它们以生成新的特征。因此,需要一个额外的层来通过 1×11 \times 11×1 卷积对深度卷积的输出进行线性组合,以生成这些新的特征。

深度卷积和 1×11 \times 11×1(逐点)卷积的组合称为深度可分卷积,最早由 [26] 中提出。

深度可分卷积的计算成本为:
DK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF(5)D _ { K } \cdot D _ { K } \cdot M \cdot D _ { F } \cdot D _ { F } + M \cdot N \cdot D _ { F } \cdot D _ { F }\quad(5) DKDKMDFDF+MNDFDF(5)
这是深度卷积和 1×11 \times 11×1 逐点卷积的总和。

通过将卷积表示为过滤和结合的两步过程,我们得到了计算上的降低:
DK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DFDK⋅DK⋅M⋅N⋅DF⋅DF=N‾1+1DK2\frac { D _ { K } \cdot D _ { K } \cdot M \cdot D _ { F } \cdot D _ { F } + M \cdot N \cdot D _ { F } \cdot D _ { F } } { D _ { K } \cdot D _ { K } \cdot M \cdot N \cdot D _ { F } \cdot D _ { F } } = _ { \overline { { N } } } ^ { 1 } + \frac { 1 } { D _ { K } ^ { 2 } } DKDKMNDFDFDKDKMDFDF+MNDFDF=N1+DK21
MobileNet 使用 3 × 3 的深度可分卷积,与标准卷积相比,计算量减少了 8 到 9 倍,同时准确度仅有小幅下降,如第 4 节所示。
在空间维度上进行额外的因式分解,例如在 [16, 31] 中所做的,实际上并不会节省太多计算,因为在深度卷积中消耗的计算量非常少。

在这里插入图片描述

3.2. 网络结构和训练

MobileNet 的结构基于前一节提到的深度可分卷积,唯一的例外是第一层,它是一个标准的卷积层。通过以如此简单的方式定义网络,我们能够轻松探索网络拓扑,从而找到一个合适的网络。MobileNet 的架构定义如表 1 所示。除最后一个全连接层外,所有层后都跟有批归一化(batchnorm)[13] 和 ReLU 非线性激活,最后的全连接层没有非线性激活,输出进入 softmax 层进行分类。图 3 对比了常规卷积层(包括批归一化和 ReLU 非线性激活)与因式分解层(包括深度卷积、1 × 1 逐点卷积,以及每个卷积层后的批归一化和 ReLU)。下采样通过在深度卷积以及第一层中使用步幅卷积(strided convolution)来处理。最终的平均池化层将空间分辨率减少到 1,之后是全连接层。将深度卷积和逐点卷积视为独立的层时,MobileNet 一共有 28 层。

仅仅根据少量的 Mult-Adds 来定义网络是不够的,确保这些操作可以高效实现也同样重要。例如,非结构化的稀疏矩阵运算通常并不比密集矩阵运算更快,除非稀疏度非常高。我们的模型结构将几乎所有的计算都放在密集的 1 × 1 卷积中。这可以通过高度优化的通用矩阵乘法(GEMM)函数来实现。通常,卷积是通过 GEMM 来实现的,但需要在内存中进行初步重排,称为 im2col,以便将其映射到 GEMM。例如,流行的 Caffe 包 [15] 就使用了这种方法。1 × 1 卷积不需要这种内存重排,可以直接通过 GEMM 实现,而 GEMM 是最优化的数值线性代数算法之一。MobileNet 将 95% 的计算时间花费在 1 × 1 卷积上,这也占据了 75% 的参数,如表 2 所示。几乎所有的额外参数都在全连接层中。
在这里插入图片描述

MobileNet 模型在 TensorFlow [1] 中使用 RMSprop [33] 和类似于 Inception V3 [31] 的异步梯度下降进行训练。然而,与训练大型模型不同,我们使用较少的正则化和数据增强技术,因为小型模型在过拟合方面问题较少。在训练 MobileNets 时,我们不使用侧头或标签平滑(label smoothing),并且通过限制在大规模 Inception 训练中使用的小裁剪的大小,减少图像失真的数量。此外,我们发现,对于深度卷积滤波器,由于其中的参数非常少,因此非常重要的一点是几乎不使用或完全不使用权重衰减(L2 正则化)。在接下来的 ImageNet 基准测试中,所有模型都使用相同的训练参数,无论模型的大小如何。

3.3. 宽度乘数:更精简的模型

尽管基础的 MobileNet 架构已经很小且延迟低,但许多特定的使用场景或应用可能需要模型更小、更快。为了构建这些更小且计算开销更低的模型,我们引入了一个非常简单的参数 α,称为宽度乘数。宽度乘数 α 的作用是均匀地在每一层对网络进行缩减。对于给定的层和宽度乘数 α,输入通道数 M 变为 αMαMαM,输出通道数 N 变为 αNαNαN
在这里插入图片描述

深度可分卷积的计算成本在宽度乘数 Q 下为:
DK⋅DK⋅αM⋅DF⋅DF+αM⋅αN⋅DF⋅DF(6)D _ { K } \cdot D _ { K } \cdot \alpha M \cdot D _ { F } \cdot D _ { F } + \alpha M \cdot \alpha N \cdot D _ { F } \cdot D _ { F }\quad(6) DKDKαMDFDF+αMαNDFDF(6)

温馨提示:
阅读全文请访问"AI深语解构" MobileNets: 高效的卷积神经网络用于移动视觉应用

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

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

相关文章

SDP服务发现协议:动态查询设备能力的底层逻辑(面试深度解析)

SDP的底层逻辑揭示了物联网设备交互的本质——先建立认知,再开展协作。 一、SDP 核心知识点高频考点解析 1.1 SDP 的定位与作用 考点:SDP 在蓝牙协议栈中的位置及核心功能 解析:SDP(Service Discovery Protocol,服务发现协议)位于蓝牙协议栈的中间层,依赖 L2CAP 协议传…

CppCon 2018 学习:GIT, CMAKE, CONAN

提到的: “THE MOST COMMON C TOOLSET” VERSION CONTROL SYSTEM BUILDING PACKAGE MANAGEMENT 这些是 C 项目开发中最核心的工具链组成部分。下面我将逐一解释每部分的作用、常见工具,以及它们如何协同构建现代 C 项目。 1. VERSION CONTROL SYSTEM&am…

使用tensorflow的线性回归的例子(五)

我们使用Iris数据,Sepal length为y值而Petal width为x值。import matplotlib.pyplot as pltimport numpy as npimport tensorflow as tffrom sklearn import datasetsfrom tensorflow.python.framework import opsops.reset_default_graph()# Load the data# iris.d…

虚幻基础:动作——蒙太奇

能帮到你的话,就给个赞吧 😘 文章目录 动作——蒙太奇如果动作被打断,则后续的动画通知不会执行 动作——蒙太奇 如果动作被打断,则后续的动画通知不会执行

[工具系列] 开源的 API 调试工具 Postwoman

介绍 随着 Web 应用的复杂性增加,API 测试已成为开发中不可或缺的一部分,无论是前端还是后端开发,确保 API 正常运行至关重要。 Postman 长期以来是开发者进行 API 测试的首选工具,但是很多基本功能都需要登陆才能使用&#xff…

【力扣 简单 C】746. 使用最小花费爬楼梯

目录 题目 解法一 题目 解法一 int min(int a, int b) {return a < b ? a : b; }int minCostClimbingStairs(int* cost, int costSize) {const int n costSize; // 楼顶&#xff0c;第n阶// 爬到第n阶的最小花费 // 爬到第n-1阶的最小花费从第n-1阶爬上第n阶的花费…

python+django开发带auth接口

pythondjango开发带auth接口 # coding utf-8 import base64 from django.contrib import auth as django_authfrom django.core.exceptions import ObjectDoesNotExist from django.http import JsonResponsefrom sign.models import Eventdef user_auth(request):"&quo…

RBAC权限模型如何让API访问控制既安全又灵活?

url: /posts/9f01e838545ae8d34016c759ef461423/ title: RBAC权限模型如何让API访问控制既安全又灵活? date: 2025-07-01T04:52:07+08:00 lastmod: 2025-07-01T04:52:07+08:00 author: cmdragon summary: RBAC权限模型通过用户、角色和权限的关联实现访问控制,核心组件包括用…

安达发|告别低效排产:APS高级排程如何助力电池企业智造升级?

在全球能源转型的背景下&#xff0c;动力电池、储能电池等市场需求快速增长&#xff0c;电池制造企业面临着订单波动大、工艺复杂、交期严格等挑战。传统的手工排产或基于ERP的简单计划模式已难以满足高效、精准的生产需求。APS高级排程通过智能算法优化生产计划&#xff0c;实…

数据结构20250620_数据结构考试

试卷01 天津金海通软件笔试题 选择题(4*416) 对于双向循环链表,在p指针所指的结点之后插入s指针所指结点的操作应为 p->nexts; s->prip; p->next->pris; s->nextp->nextp->nexts; p->next->pris; s->prip; s->nextp->nexts->pri …

4. 寻找正序数组的中位数

题目&#xff1a; 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例&#xff1a; 输入&#xff1a;nums1 [1,3], nums2 [2] 输出&#xff1a…

DeepSeek飞机大战小游戏HTML5(附源码)

用DeepSeek帮忙生成的飞机大战小游戏网页版&#xff0c;基于HTML5。 提示词prompt 帮我做一个网页版的飞机大战游戏 html5的游戏功能说明 玩家控制&#xff1a; 使用键盘方向键或WASD移动飞机 空格键发射子弹 移动设备支持触摸控制 游戏机制&#xff1a; 敌机会从屏幕顶部随机位…

全素山药开发指南:从防痒处理到高可用食谱架构

摘要&#xff1a;本文系统性解析山药的化学特性&#xff08;黏液蛋白/皂苷致痒机制&#xff09;及全素场景下的烹饪解决方案&#xff0c;提供6种高内聚低耦合的食谱实现&#xff0c;附完整防氧化与黏液控制技术方案。一、核心问题分析&#xff1a;山药处理中的“痛点”致痒物质…

OpenLayers 入门指南:序言

本专栏旨在帮助零GIS基础的开发人员系统掌握OpenLayers这一强大的开源Web地图库&#xff0c;通过 “理论实战” 结合的方式&#xff0c;逐步实现从创建地图到构建一个基础地图应用模版。无论你是前端开发者、GIS爱好者&#xff0c;都可以通过此专栏零基础开始用OpenLayers开发一…

WebRTC轻量学习 libdatachannel

最近想了解一些在浏览器中推送音视频流&#xff0c;寻找很多版本的代码&#xff0c;C、Go、Python等语言实现的webRTC协议。 按照搭建难度和快速实现首选Python版本的WebRTC&#xff0c;这种是最适合原型开发的。 选型&#xff1a;C的开源库libdatachannel Python的开源库Ai…

Vue2中的keep-alive:组件状态缓存与性能优化实战指南

目录 一、什么是keep-alive&#xff1f; 与普通组件切换的对比 二、核心用法详解 1. 基础用法&#xff1a;动态组件缓存 2. 路由视图缓存 3. 生命周期钩子 三、进阶配置与优化 1. 精准控制缓存组件 &#xff08;1&#xff09;include/exclude属性 &#xff08;2&…

FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护?

url: /posts/f96ba438de34dc197fd2598f91ae133d/ title: FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护? date: 2025-07-02T22:05:04+08:00 lastmod: 2025-07-02T22:05:04+08:00 author: cmdragon summary: FastAPI框架安全加固方案包括密钥轮换自动化、请…

NeighborGeo:基于邻居的IP地理定位(五)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 5. Case analysis 为了说明NeighborGeo在优化图结构和利用邻居信息进行预测方面的优势,将目标I…

Ethernet IP与Profinet共舞:网关驱动绿色工业的智慧脉动

Ethernet IP与Profinet共舞&#xff1a;驱动绿色工业的智慧脉动 光伏建筑一体化&#xff0c;建筑碳中和&#xff0c;在全球气候变化、国家碳达峰碳中和战略大背景下&#xff0c;敬畏生活、生产与自然和谐共处&#xff0c;确立自身资源循环高效利用的倒计时和路线图。 在全球气…

衡石科技破解指标管理技术难题:语义层建模如何实现业务与技术语言对齐?

在数字化转型的深水区&#xff0c;企业指标管理体系普遍面临一个核心矛盾&#xff1a;业务部门需要敏捷的数据洞察支撑决策&#xff0c;而IT部门却受困于复杂的数据架构和冗长的需求响应周期。这种矛盾的本质&#xff0c;是传统指标管理体系中“技术语言”与“业务语言”的割裂…