MobileNet V1阅读笔记


前言

之前阅读过很多经典的分类网络,MobileNet就是其中一篇,但是之前都是草草了结,只是为了读而读,没有很好地总结,近期做OCR识别相关项目,用到了MobileNetV3,忽然发现很多地方都忘记了,因此,这里重新阅读MobileNet系列论文,并做阅读记录,方便以后回顾。

论文标题: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications


摘要(Abstract)

论文为移动和嵌入式视觉应用提出了一类有效的模型,叫做MobileNets。MobileNets是基于流水线(streamlined)的网络结构,它使用 深度可分离卷积(depth-wise separable convolutions) 来构造轻量权重参数的深度神经网络。论文介绍了2个简单的全局超参数在速度和准确性方面做权衡。这些超参数让模型构建者能够根据自己应用的限制来选择合适大小的模型。论文在资源和准确性权衡上做了大量的实验并且证实:在ImageNet分类上论文提出的模型和其它比较流行的模型相比有强壮的性能。论文通过大量的应用和用例包括目标检测,微调分类,人脸属性和大尺度几何定位证实了MobileNets网络的有效性。


1. 介绍(Introduction)

因为AlexNet赢得了ImageNet 挑战赛,所以在计算机视觉中卷积神经网络变得流行起来。为了实现更高的准确性一般趋向于制作更深更复杂的网络。然而,就网络模型大小(size)和速度(speed)而言,这些提高准确性的技术让网络模型更有效不是非常必要的。在现实世界的应用中,比如机器人,自动驾驶,增强现实方面,识别任务需要被实时实行在有计算受限的平台。

论文提出一个有效的网络架构,它基于两个超参数来构造了非常小,低延迟的模型,它可以非常简单地匹配移动和嵌入式视觉应用的设计需求。章节2回顾了之前构造小模型的成果。章节3描述了MobileNet架构,它的两个超参数:宽度乘法因子(width multiplier)和分辨率乘法因子(resolution multiplier)用来定义更小和更有效的MobileNets。章节4描述了ImageNet数据集上的实验,包括各种不同的应用和用例。章节5做了一个总结和得出结论。


2. 以前成果(Prior Work)

在近期的文章中对于构造小且有效的网络模型成为一个热点方向。压缩预训练网络或者直接训练小的网络是两类主要方向。论文提出一类网络架构,它允许模型开发人员选择一个匹配资源限制(延迟,模型大小)的小网络。MobileNets主要集中于优化延迟但是也能产出小网络。很多小网络的文章主要集中于模型大小,没有考虑到速度。
接下来是对已有网络模型的解析,这里不做介绍了。

3。 MobileNet 架构(Architecture)

在这部分,首先描述了MobileNet的核心:深度可分离滤波器(depthwise separable filters)。
然后描述了MobileNet网络架构,最后描述了两个模型超参数:宽度乘法因子(width multipiler)和分辨率乘法因子(resolution multiplier)。

3.1 深度可分离卷积(Depth Separable Convolution)

在这里插入图片描述
MobileNet模型是基于深度可分离卷积,深度可分离卷积是由分解卷积组成,分解卷积将一个标准卷积分解成一个基于深度的卷积(depthwise convolution)和一个 1 × 1 1\times1 1×1卷积,又称基于点的卷积(pointwise convolution)。关于MobileNet,基于深度的卷积对每一个输入通道使用一个单一过滤器。然后基于点的卷积使用 1 × 1 1\times1 1×1卷积来组合基于深度卷积的输出。标准卷积是一个单一步骤,它由过滤器和组合输入成一个新的输出集合这两部分组成。深度可分离卷积将这两部分分成两层,一层为过滤器层,一层为组合层。这种分解对减少模型计算量和模型大小有显著效果。Figure 2 展示了如何将一个标准卷积(Fig.2(a))分解成一个基于深度的卷积(Fig.2(b))和一个 1 × 1 1\times1 1×1基于点的卷积(Fig.2( c ))。

标准卷积层输入一个 D F × D F × M D_{F}\times D_{F}\times M DF×DF×M特征图 F F F,输出一个 D G × D G × N D_{G}\times D_{G}\times N DG×DG×N特征图 G G G。这里 D F D_{F} DF是一个方形的输入特征图的空间宽度和高度, M M M是输入通道数(输入深度), D G D_{G} DG是一个方形的输出特征图的空间宽度和高度, N N N是输出通道数(输出深度)。

标准卷积层由卷积核 K K K参数化, 参数大小为 D K × D K × M × N D_{K}\times D_{K}\times M\times N DK×DK×M×N。这里 D K D_{K} DK为核的空间宽度和高度,假设核为方形。 M M M为输入通道数, N N N为输出通道数。

标准卷积层的输出特征图计算公式如下所示:
在这里插入图片描述
标准卷积的计算量为:
在这里插入图片描述
这里,计算量依赖输入通道数 M M M,输出通道数 N N N,卷积核大小 D K × D K D_{K}\times D_{K} DK×DK,输入特征图大小 D F × D F D_{F}\times D_{F} DF×DF。MobileNet模型打破了这些项间的关系。首先,使用深度可分离卷积打破输出通道数和核大小的交互。

标准卷积操作有过滤功能(基于卷积核)和组合特征功能(生成新的表示)。通过使用分解卷积(又称为深度可分离卷积)将过滤和组合步骤分离成两步,深度可分离卷积减少了计算量。

深度可分离卷积由两层组成:基于深度的卷积和基于点的卷积。基于深度的卷积对每一个输入通道(输入深度)使用一个单一过滤器。基于点的卷积, 一个简单的 1 × 1 1\times 1 1×1卷积,被用于创建一个线性组合,它的输入是基于深度卷积层的输出。MobileNets对这两层都使用了batchnorm和ReLU非线性激活。

基于深度的卷积计算公式如下所示:
在这里插入图片描述
这里 K K K表示深度卷积核,它的大小为 D K × D K × M D_{K}\times D_{K}\times M DK×DK×M。这里 K K K 中第 m t h m_{th} mth卷积核用于输入特征图 F F F m t h m_{th} mth通道来产生第 m t h m_{th} mth个输出特征图 G G G通道。

基于深度的卷积的计算量为:
在这里插入图片描述
基于深度的卷积相对于标准卷积来说非常有效。然而,它仅用于过滤输入通道,不能组合输入特征产生新的特征。因此需要基于点的卷积来进行线性组合操作来生成新的特征表示。

基于深度的卷积核基于点的卷积这两步称为深度可分离卷积。

深度可分离卷积的计算量为:
在这里插入图片描述
上式为基于深度卷积核基于点卷积计算量的和。

将卷积分解为过滤和组合两层,与标准卷积层相比,获得计算量的减少比率为:
在这里插入图片描述
MobileNets使用了 3 × 3 3\times 3 3×3深度可分离卷积,和标准卷积相比,它减少了 8 到 9 8到9 89倍的计算量,然而准确率却仅有比较小的减少。

对基于深度的卷积核进行分解不会得到很多计算量的减少,因为基于深度的卷积核本身计算量就比较小。

3.2 网络结构和训练(Network Structure and Training)

在这里插入图片描述
MobileNet结构基于深度可分离卷积构建的,第一层除外,它是一个完全卷积。通过这种简单的项(items)定义的网络能够简单地探索网络然后发现一个好的网络。MobileNet架构在Table 1中定义。所有层都紧跟一个batchnorm和ReLU非线性激活,当然最后的全连接层除外,它被送入softmax层用于分类。Fig.3对比了常规卷积层和论文提出的深度可分离卷积,在每一个卷积层后都紧跟batchnorm和ReLU。下采样在步长为2的卷积中执行,第一层卷积也算在内。在全连接层之前,最后的平均池化减少空间分辨率到1。将基于深度的卷积核基于点的卷积分别统计,MobileNet有28层。
在这里插入图片描述
不能依据小数量的Mult-Adds操作来简单定义网络。确保这些操作能够有效实现是非常重要的。例如,非结构化稀疏矩阵操作不会比稠密矩阵操作更快,除非是非常高级别的稀疏。论文中的模型结构几乎把所有的计算操作都放入了稠密的 1 × 1 1\times 1 1×1卷积中。它的实现可以通过GEMM(general matrix multiply)函数被非常高效的优化。通常,通过GEMM实现的卷积需要在内存中重新排序,使用 im2col 将数据映射到GEMM中。例如,这种方法被应用于比较流行的Caffe 包中。 1 × 1 1\times 1 1×1卷积不需要在内存上重新排序,可以被GEMM直接实现,这是最优的数字线性代数算法之一。MobileNet花费了 95 % 95\% 95%的计算时间在 1 × 1 1\times 1 1×1卷积操作上,同时有 75 % 75\% 75%的参数量,具体请看Table.2。额外参数中几乎所有的都在全连接层上。
在这里插入图片描述
MobileNet模型在TensorFlow中被训练,使用RMSprop,伴随异步梯度下降,和Inception V3相似。然而,和训练大型模型相比,论文使用少量的正则化和数据增强技术,因为小模型有更小的几率出现过拟合。当训练MobileNets时,不需要heads部分或者进行标签平滑,另外通过限制小的剪切的大小(通常被用于大型Inception训练)可以减少畸变图像的数量。另外,论文发现在基于深度的过滤器中应用小的或者不使用权重衰减是很重要的,因为参数量少。下个章节中介绍所有模型使用相同训练参数进行训练,不论模型大小。

3.3 宽度乘法因子:让模型更瘦(Width Multiplier: Thinner Models)

尽管基础的MobileNet架构早已是小的和低延迟,但是对于特别用例或者应用可能需要模型更小和更快。为了构造这些更小和小计算量的模型,论文引入一个简单的参数 α \alpha α,即宽度乘法因子,它用来对网络的每一层进行瘦身(通道瘦身,更少的通道数)。对每一层和宽度乘法因子 α \alpha α,输入通道数为 α M \alpha M αM,输出通道数为 α N \alpha N αN
使用宽度乘法因子 α \alpha α后的深度可分离卷积的计算量为:
在这里插入图片描述
这里 α ∈ ( 0 , 1 ] \alpha \in(0,1] α(0,1],经典设置为 1 , 0.75 , 0.5 , 0.25 1, 0.75, 0.5, 0.25 1,0.75,0.5,0.25 α = 1 \alpha = 1 α=1表示基础MobileNet, α < 1 \alpha < 1 α<1表示删减版MobileNets。宽度乘法因子对减少计算量和参数数量(大约减少了 α 2 \alpha ^{2} α2)是很好有效的。宽度乘法因子可用于任何需要在准确性,延迟和模型大小做权衡的小型模型。

3.4 分辨率乘法因子:减少表示(Resolution Multiplier: Reduced Representation)

减少网络计算量的第二个超参数是分辨率乘法因子 ρ \rho ρ。论文将它用于输入图像和每层的内部表示。在实践中,论文通过设置输入图像分辨率来隐式设置 ρ \rho ρ

论文使用宽度乘法因子 α \alpha α和分辨率乘法因子 ρ \rho ρ表示MobileNet网络核心层-深度可分离卷积层的计算量为:
在这里插入图片描述
这里, ρ ∈ ( 0 , 1 ] \rho \in (0,1] ρ(0,1],通过将输入分辨率设置为 224 , 192 , 160 , 128 224, 192, 160, 128 224,192,160,128来隐式设置。 ρ = 1 \rho = 1 ρ=1表示基础MobileNet, ρ < 1 \rho < 1 ρ<1表示减少计算量的MobileNets。分辨率乘法因子可以减少计算量大约 ρ 2 \rho ^{2} ρ2

在这里插入图片描述

论文对宽度乘法因子和分辨率乘法因子减少计算量和参数量进行举例说明,如Table.3所示。Table.3中第一行展示了对于全卷积层,输入特征图大小为 14 × 14 × 512 14\times 14\times 512 14×14×512,核 K K K大小为 3 × 3 × 512 × 512 3\times 3\times 512\times 512 3×3×512×512的 Mult-Adds和参数量。资源和准确性详细权衡在下一章节有介绍。

4. 实验(Experiments)

这一部分,论文首先探索了基于深度卷积的有效性,以及选择通过减少网络宽度来减少收缩模型而不是网络层数的有效性。然后展示了基于两个超参数(宽度乘法因子和分辨率乘法因子)来减少网络计算量的权衡并和比较流行的网络模型进行比较。最后探索了MobileNets应用于不同的应用。
这里细节就不介绍了,大家感兴趣可以自行阅读论文。

总结

到这里,MobileNet网络的复习就完成了,主要贡献有两点:
1)提出深度可分离卷积:基于深度的卷积+基于点的卷积,减少计算量和参数量的同时,保证准确率。
2)提出两个超参数:宽度乘法因子和分辨率乘法因子,进一步减少MobileNet模型计算量和参数量。

以上是个人理解,如有错误,敬请谅解,欢迎指正,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值