网站首页 > 技术文章 正文
原创翻译,论文来自:https://arxiv.org/pdf/1704.04861.pdf
如有翻译瑕疵,敬请见谅
MobileNets: Efficient Convolutional Neural Networks for Mobile VisionApplications
摘要
我们提供一类称为MobileNets的高效模型,用于移动和嵌入式视觉应用。MobileNets是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深度神经网络。我们引入两个简单的全局超参数,在速度和准确度之间有效地进行折中。这些超参数允许模型构建器根据问题的约束为其应用选择合适大小的模型。在ImageNet分类问题上,我们对于不同的资源大小和准确度做了非常多的实验,与其他流行的模型相比较,展现出极强的性能。然后,我们在许多应用和用例中展现了MobileNets的有效性,包括目标检测,细粒度分类,人脸属性和大规模的地理定位。
1. Introduction
自从AlexNet赢得ImageNet挑战赛(ILSVRC2012)推广深度卷积神经网络以后,卷积神经网络在计算机视觉领域变得普遍存在。总得趋势是使用更深层更复杂的网络来实现更高的准确度。然而,这些提高准确率的进步并不一定会使网络在尺寸和速度方面更有效率。在许多现实世界的应用中,例如机器人,自动驾驶汽车和AR技术,识别任务需要及时地在有限计算资源的平台上进行。
本文介绍了一种高效的网络架构和两个超参数,以便构建非常小的,低延迟(快速度)的模型,可以轻松匹配移动和嵌入式视觉应用的设计要求。第二节回顾了之前在构建小模型的工作。第三节描述了 MobileNets架构和两个超参数(width multiplier和resolution multiplier),以便定义更小更高效的MobileNets。第四节介绍了ImageNet上的实验以及各种不同的应用和用例。第五节以汇总和结论来结束论文。
2. Prior Work
在最近的文献中,关于建立小型高效的神经网络的兴趣日益增加。一般来说,这些不同的方法可以归为两类,压缩训练好的模型和直接训练小网络模型。本文提出了一类网络结构,允许模型开发人员选择与其应用程序的资源限制(延迟,大小)相匹配的小型网络。MobileNets主要侧重于优化延迟,但也能够产生小型网络。很多关于小型网络的论文只关注大小,却不考虑速度。
MobileNets主要由深度可分离卷积构建(最初在一篇论文有提及,随后用于Inception模型以减少前面几层的运算)。扁平化的网络通过完全分解的卷积建立,并显示出极大的因式分解网络的潜力。独立于本文的Factorized Networks论文,引入了类似于因式分解卷积以及拓扑连接的使用。随后,Xception网络展示了如何将深度可分离的过滤器扩展到比Inception V3网络还优秀。另一个小型网络是SqueezeNet,它采用瓶颈方法来设计一个非常小的网络。其他减少计算量的网络包括structured transform networks和deep fried convnets。
获取小型网络的另一个办法是缩小,分解或者压缩训练好的模型。文献中基于压缩的方法有product quantization,哈希法与pruning,vector quantization和霍夫曼编码压缩。此外,各种各样的因式分解方法被提出来用于加速训练好的网络。培训小型网络的另一种方法是distillation(蒸馏法),使用更大的网络来教授小一点的网络。它使我们方法的补充,并在第四节的一些使用案例中有所涉及。另一种新兴的方法是low bit networks。
3. MobileNet Architecture
在本节中,我们首先描述MobileNet构建的核心层,它们是深度可分离的过滤器。然后我们介绍MobileNet网络结构,并以两个模型缩小参数(width multiplier和resolution multiplier)作为总结。
3.1 深度可分离卷积
MobileNet模型是基于深度可分离卷积,它是factorized convolutions的一种,而factorized convolutions将标准化卷积分解为深度卷积和1x1卷积(pointwise convolution)。对于MobileNets,深度卷积将单个滤波器应用到每一个输入通道。然后,pointwise convolution用1x1卷积来组合不同深度卷积的输出。在一个步骤,一个标准的卷积过程将输入滤波和组合成一组新的输出。深度可分离卷积将其分成两层,一层用于滤波,一层用于组合。这种分解过程能极大减少计算量和模型大小。图2展示了如何将一个标准卷积分解为深度卷积和1x1的pointwise convolution。
一个标准的卷积层输入维度为DF x DF x M的特征图谱F,产生DF x DF x N的特征图谱G,其中DF是正方形输入特征图谱的空间宽和高,M是输入通道的数量(input depth),DG是正方形输出特征图谱的空间宽和高,N是输出通道的数量(output depth)。
标准的卷积层是由卷积核K(尺寸是DK x DK x M x N)参数化的,其中DK是假设正方形核的空间空间维度,M是输入通道数量,N是输出通道数量。
如果假设卷积步幅是1并考虑padding,那么标准化卷积操作的输出特征图谱为:
而该操作的计算复杂度则是DK * DK * M * N * DF * DF,可见该计算复杂度依赖于输入通道M,输出通道N, 卷积核心尺寸Dk x Dk和特征图谱尺寸Df x Df。MobileNet模型就是用来面对这些属于术语及其相互关系的。首先,它使用深度可分离的卷积来破坏输出通道的数量的数量和内核大小的相互作用。
标准的卷积运算,具有基于卷积内核的滤波特征和组合特征,从而产生新的特征。滤波和组合步骤可以通过使用factorized convolutions(深度可分离卷积)分为两个步骤 ,以显著降低计算成本。
深度可分离卷积由两层构成:depthwise convolutions和pointwise convolutions。我们使用depthwise convolution对每个输入通道(输入的深度)执行单个滤波器。Pointwise convolution(1x1卷积)用来创建depthwise层的线性叠加。MobileNets对两层卷积层都使用了BatchNormalization和ReLU非线性激活。
Depthwise convolution可以被写作以下形式(每个输入通道一个滤波器):
K~指的是depthwise convolution的卷积核,大小是DK x DK x M。K~中的第m个特征作用于F的第m个特征,从而产生输出特征的第m个通道。
Depthwise convolution的计算复杂度为:Dk * Dk * M * DF * DF+M * N * DF * DF,就是两层卷积层操作的和。
通过将卷积表示为滤波和组合两个过程,可以减少计算量:
在第四节中,MobileNets使用3x3的深度可分离卷积比标准的卷积减少了8-9倍的计算复杂度,准确率只减少了一点点。空间维度的因式分解不会节省大量的计算复杂度,因为depthwise convolutions的计算复杂度本来就很小。
3.2 网络结构和训练
如前面部分所述的那样,MobileNet结构是由深度可分离卷积建立的,其中第一层是全卷积。通过以简单的方式定义网络,我们可以轻松地探索网络拓扑,以找到一个良好的网络。MobileNet的结构定义在表1中。所有层之后都是BatchNormalization和ReLU非线性激活函数,但是最后的全连接层例外,它没有非线性激活函数,直接馈送到softmax层进行分类。图三比较了常规卷积和深度可分离卷积(都跟着BN层和ReLU层)。在depthwise convolution和第一层卷积层中都能处理下采样问题。最后一个平均池化层在全连接层之前,将特征图谱的维度降维1x1。将depthwise convolution和pointwise convolution算为不同的层地话,MobileNet有28层。
仅仅通过少量的Mult-Adds简单地定义网络是不够的。确保这些操作能有效实现也很重要。例如,非结构化的稀疏矩阵操作通常不比密集矩阵运算快,除非是非常稀疏的矩阵。我们的模型结构将几乎全部的计算复杂度放到了1x1卷积中。这可以通过高度优化的通用矩阵乘法(GEMM)功能来实现。通常卷积由GEMM实现,但需要在称为im2col的内存中进行初始重新排序,以将其映射到GEMM。这个方法在流行的Caffe包中正在使用。1x1的卷积不需要在内存中重新排序而可以直接被GEMM(最优化的数值线性代数算法之一)实现。MobileNet在1x1卷积花费了95%计算复杂度,也拥有75%的参数(见表二)。几乎所有的额外参数都在全连接层。
使用类似于Inception V3的异步梯度下降的RMSprop,MobileNet模型在TensorFlow中进行训练。然而,与训练大模型相反,我们较少地使用正则化和数据增加技术,因为小模型不容易过拟合。当训练MobileNets时,我们不使用side heads或者label smoothing,通过限制croping的尺寸来减少图片扭曲。另外,我们发现重要的是在depthwise滤波器上放置很少或没有重量衰减(L2 正则化),因为它们参数很少。在下一节ImageNet的benchmark中,所有的模型通过同样的参数进行训练,但不考虑模型的大小。
3.3 Width Multiplier: Thinner Models
尽管基本MobileNet架构已经很小延迟很低,但特定用例或应用程序需要更小更快的模型。为了构建这些较小且计算量较少的模型,我们引入了一个非常简单的参数 α ,称为width multiplier。这个参数width multiplier的作用是在每层均匀地减负网络。对于一个给定的层和width multiplier α,输入通道的数量从M变成αM,输出通道的数量从N变成αN。
深度可分离卷积(以width multiplier参数α为计)的计算复杂度:
α ∈ (0, 1],通常设为 1, 0.75, 0.5和0.25。α=1表示基准MobileNet,而α<1则表示瘦身的MobileNets。Width multiplier有减少计算复杂度和参数数量(大概α二次方)的作用。Width multiplier可以应用于任何模型结构,以定义一个具有合理准确性,延迟和尺寸的新的较小的模型。它用于定义新的简化结构,但需要重新进行训练。
3.4 Resolution Multiplier: Reduced Representation
降低神经网络的第二个超参数是resolution multiplier ρ。我们将其应用于输入图像,并且每个层的内部特征随后被减去相同的乘数。实际上,我们通过设置输入分辨率隐式设置ρ。
我们现在可以将网络核心层的计算复杂度表示为具有width multiplier α 和 resolution multiplier ρ的深度可分离卷积:
ρ ∈ (0, 1],通常设为224,192,160或者128。ρ=1是基本MobileNets而ρ<1示瘦身的MobileNets。Resolution multiplier可以减少计算复杂度ρ的平方。
作为一个例子,我们可以看一下MobileNet中的一个典型的卷积层,看看深度可分离卷积,width multiplier 和 resolution multiplier如何降低计算复杂度和参数。表3显示了不同的架构收缩方法应用于该层,而表示的计算复杂度和参数数量。第一行显示了Multi-Adds和参数,其中Multi-Adds具有14x14x512的输入特征图,内核K的大小为3x3x512x512。我们将在下一节中详细介绍模型资源和准确率的折中。
猜你喜欢
- 2024-11-01 ViT再升级!9个视觉transformer最新改进方案让性能飞跃
- 2024-11-01 EfficientFormer:高效低延迟的Vision Transformers
- 2024-11-01 腾讯 AI Lab 开源世界首款自动化模型压缩框架PocketFlow
- 2024-11-01 速度提200倍,爱奇艺北航提基于耦合知识蒸馏视频显著区域检测算法
- 2024-11-01 ICCV2019 | 港科大、清华与旷视提出元学习的自动化神经剪枝网络
- 2024-11-01 NetAdapt:MobileNetV3用到的自动化网络简化方法 | ECCV 2018
- 2024-11-01 ICLR 2019 | 有限计算资源下“可动态瘦身”的神经网络
- 2024-11-01 新论文|一种新型吸附式无人机检测系统
- 2024-11-01 CVPR 2022 | 升级传统模型量化STE反向求导?CMU,脸书,港科提出新思路
- 2024-11-01 LeNet5那些经典的CNN网络结构到底是从何而来的?
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)