当前位置:网站首页>CV-Model【3】:MobileNet v2
CV-Model【3】:MobileNet v2
2022-07-31 01:40:00 【zzzyzh】
前言
本文主要对论文进行解读,并解释有关MobileNetV2网络的框架部分,同时还对MobileNetV1网络和MobileNetV2网络进行了对比研究
原论文链接:
MobileNetV2: Inverted Residuals and Linear Bottlenecks
1. Abstract & Introduction
1.1. Abstract
在本文中,描述了一种新的移动架构MobileNetV2,它提高了移动模型在多任务和基准测试以及不同模型规模范围内的最新性能。还描述了在大家称为SSDLite的新框架中将这些移动模型应用于对象检测的有效方法。此外,本文演示了如何通过一个简化形式的DeepLabv3(本文称之为Mobile DeepLabv3)来构建移动语义分割模型。
基于倒置的残差结构,其中shortcut connections在薄瓶颈层之间。中间扩展层使用轻量级深度方向卷积来过滤作为非线性源的特征。此外发现,重要的是要消除狭窄层中的非线性,以保持代表性的力量。本文证明这提高了性能,并提供了导致这种设计的直觉。最后,本文的方法允许将输入/输出域从转换的表达中分离出来,这为进一步的分析提供了一个方便的框架。
V2相较于V1的新想法包括Linear Bottleneck 和 Inverted Residuals,mobileNetV2是对mobileNetV1的改进,是一种轻量级的神经网络。mobileNetV2保留了V1版本的深度可分离卷积,增加了线性瓶颈(Linear Bottleneck)和倒残差(Inverted Residual)。
1.2. Introduction
神经网络已经彻底改变了机器智能的许多领域,为具有挑战性的图像识别任务提供了超人的准确性。然而,提高精度的驱动力往往是有代价的:现代最先进的网络需要大量的计算资源,超出了许多移动和嵌入式应用的能力。
本文介绍了一种新的神经网络体系结构,它是专门为移动和资源受限环境定制的。本文的网络推动了移动定制计算机视觉模型的发展,在保持相同精度的同时,显著减少了所需的运算次数和内存。
本文的主要贡献是一个新颖的层模块:线性瓶颈的反转残差。该模块将低维压缩表示作为输入,该低维压缩表示首先被扩展到高维,并用轻量深度卷积进行滤波。随后通过线性卷积将特征投影回低维表示。正式实现可作为TensorFlow-Slim模型库的一部分在中获得。
该模块可以在任何现代框架中使用标准操作有效地实现,并允许本文的模型使用标准基准在多个性能点上击败最先进的技术。此外,该卷积模块特别适合于移动设计,因为它允许通过从不完全具体化大的中间张量来显著减少推断期间所需的内存占用。这减少了许多嵌入式硬件设计中对主存储器访问的需求,这些设计提供少量非常快速的软件控制的高速缓冲存储器。
2. Architecture
2.1. MobileNet-v1存在的问题
结构问题:MobileNet-v1的结构非常简单,类似于VGGNet,是一个非常复古的直筒结构。这种结构的性价比其实不高,后续一系列的ResNet、DenseNet等结构已经证明通过复用图像特征,使用Concat / Elwise+等操作进行融合,能极大提升网络的性价比。
Depthwise convolution存在的问题:Depthwise convolution确实是大大降低了计算量 ,Depthwise + Pointwise的结构在性能上也能接近普通卷积。但是在实际应用时我们发现Depthwsie部分的kernel比较容易训废掉,训练完之后发现Depthwise训出来的kernel有不少是空的。因为depthwise每个kernel_dim相对于普通卷积要小得多,过小的kernel_dim加上ReLU的激活影响下,使得输出神经元很容易变为0,所以就学废了。ReLU对于0的输出梯度为0,所以一旦陷入0输出,就没法恢复了。
2.2. Structure
2.2.1. Depthwise Separable Convolutions
将标准卷积拆分为两个分卷积:第一层称为深度卷积(depthwise convolution),对每个输入通道应用单通道的轻量级滤波器;第二层称为逐点卷积(pointwise convolution),负责计算输入通道的线性组合构建新的特征。
具体计算可以参考上一篇博文:
CV-Model【2】:MobileNet v1
2.2.2. Inverted residual block
- Residual block
- 1 x 1 卷积降维
- 3 x 3 卷积
- 1 x 1 卷积升维
- 激活函数:ReLu
- Inverted residual block
- 1 x 1 卷积升维
- 3 x 3 卷积DW
- 1 x 1 卷积降维
- 激活函数:ReLu6
- ReLu6激活函数
- 普通的ReLu激活函数
- 当输入小于0的时候,默认置0
- 当输入大于0的时候,不做处理
- ReLu6激活函数
- 当输入小于0的时候,默认置0
- 当输入大于0、小于6的时候,不做处理
- 当输入大于6的时候,默认置6
- 普通的ReLu激活函数
2.2.3. Linear Bottlenecks
2.2.3.1. Manifold of Interest
考虑一个由n层 L i L_i Li组成的深度神经网络,每层 L i L_i Li的激活张量的维数为 h i × w i × d i h_i \times w_i \times d_i hi×wi×di( h i × w i h_i \times w_i hi×wi个像素, d i d_i di维)。 一个真实图像输入集,对每一层 L i L_i Li 而言,经过激活层集后形成了一个 manifold of interest 兴趣流形(manifold of interest), 即有用的信息,由一连串的卷积和激活层构成。
神经网络中的兴趣流形可以嵌入低维子空间中。即当我们查看深卷积层中所有单独的d通道像素时,这些值中编码的信息实际上在某些流形中,而这些流形又可以嵌入低维子空间中。也就是说为了得到 Feature Map 中有用的信息,兴趣流形(manifold of interest)必须要在其维数空间或者子空间中。
宽度因子允许我们降低激活空间维数,使得兴趣流形跨越整个空间,然而,深度卷积神经网络实际上具有每个坐标的非线性转换(如ReLU)时,这种作用失效了。
- 一般而言,如果由于一层变换ReLU (Bx) 有一个非零量,映射到内部S的点是通过输入的线性变换B得到的,表明与全维输出对应的输入空间的部分是有限的线性变换。换句话说,深度网络只在输出域的非零量部分具有线性分类器的能力。
- 另一方面,当ReLU折叠通道时,它不可避免地会丢失该通道中的信息。然而,如果有许多通道,并且在激活的流形中有一个结构,信息可能仍然保存在其他通道中。
本文给出的例子为:Input是一个2维的数据,而manifold of interest就是蓝色的螺纹线;本例使用矩阵 T T T 将数据嵌入到 n n n 维空间中,后接ReLU,再使用 T − 1 T^{-1} T−1 将其投影回2维平面。可以发现,当 n = 2 , 3... n = 2, 3... n=2,3... 等较小值的时候,信息丢失严重,中心点坍塌;而当 n = 15 , 30... n = 15, 30... n=15,30... 等较大值的时候,恢复的信息逐渐变多。
据此我们可以得出两条关键的的性质:
- 如果 manifold of interest 经过ReLU变换后得到非零的结果,这时ReLU对应着是一个线性变换
- 只有当 输入的manifold of interest 可包含在输入空间的低维子空间中,ReLU才能完整的保持 输入的manifold of interest 的信息
存在的问题: 我们想要 兴趣流行 存在低维空间中,即想要提升效果,维度是要低一点。但是维度如果低的话,激活变换ReLU函数可能会滤除很多有用信息,而ReLU对于没有滤除的部分,即非零的部分的作用是一个线性分类器。
论文针对这个问题使用 linear bottleneck(即不使用ReLU激活,做了线性变换)来代替原本的非线性激活变换。到此,优化网络架构的思路也出来了:通过在卷积模块中后插入 linear bottleneck 来捕获 manifold of interest。
2.2.3.2. Expansion factor
从linear bottleneck到深度卷积之间的的维度比称为 Expansion factor(扩展系数),该系数控制了整个block的通道数。
- a:普通模型架构使用标准卷积将空间和通道信息一起映射到下一层,参数和计算量会比较大
- b:MobileNetv1中将标准卷积拆分为深度卷积和逐点卷积,深度卷积负责逐通道的过滤空间信息,逐点卷积负责映射通道。
- 将空间和通道分开了
- c & d:MobileNetv2的结构(d是c的下一个连接状态),同样是将标准卷积拆分为深度卷积和逐点卷积,在逐点卷积后使用了接 1 × 1 1 \times 1 1×1 卷积,该卷积使用线性变换,总称为一层低维linear bottleneck,其作用是将输入映射回低维空间
2.2.4. Model Architecture
- 模型结构:
当 stride = 1 且输入特征矩阵与输出特征矩阵的 shape 相同时才有shortcut连接
- s = 1:保证了输入输出分辨率(H,W)相同
- 输入特征矩阵与输出特征矩阵的 shape 相同:特指channel k = k’
通道数从 k 转换到 k’ 的 bottleneck residual block ,stride s,expansion factor t
- 结构参数:
- t:扩展因子,卷积核的扩展倍率
- c:输出特征矩阵深度channel
- n:bottleneck(倒残差结构)的重复次数
- s:步长(针对第一层,其余层为1)
- 一个block由一系列bottleneck组成,此处针对的是第一层bottleneck的步长
同时,可以通过结构参数解释上述shortcut出现的条件:
假如选取 ( 1 4 2 × 64 , b o t t l e n e c k , 6 , 96 , 3 , 1 ) (14^2 \times 64, bottleneck, 6, 96, 3, 1) (142×64,bottleneck,6,96,3,1) ,此时的步长s = 1。
- 如果此时有shortcut,那么理论的输出的维度应该为64
- 但是通过一系列计算(1 x 1 conv)我们会发现,此时的输出维度为96,无法使用加法操作,所以不可能存在shortcut
- 所以此时第一维的bottleneck不存在shortcut
- 但是,对于第二维bottleneck,步长s = 1(特征矩阵的高和宽不会发生变化),同时输入、输出维度均为96,此时存在shortcut
对于最后一层,输出维度k即待分类的个数,此时的卷积层和全连接层的效果一样
2.2.5. Comparison:V1 & V2
- 相同点
- 都采用 Depth-wise (DW) 卷积搭配 Point-wise (PW) 卷积的方式来提特征。标准卷积的计算复杂度近似为 DW + PW 组合卷积的 K 2 K^2 K2 倍
- 都采用 Depth-wise (DW) 卷积搭配 Point-wise (PW) 卷积的方式来提特征。标准卷积的计算复杂度近似为 DW + PW 组合卷积的 K 2 K^2 K2 倍
- 不同点
- V2 在 DW 卷积之前新加了一个 PW 卷积
- 这么做的原因,是因为 DW 卷积由于本身的计算特性决定它自己没有改变通道数的能力,上一层给它多少通道,它就只能输出多少通道。所以如果上一层给的通道数本身很少的话,DW 在低维空间提特征,因此效果不够好。
- V2 为了改善这个问题,给每个 DW 之前都配备了一个 PW,专门用来升维
- V2 去掉了第二个 PW 的激活函数
- 即Linear Bottleneck
- V2 在 DW 卷积之前新加了一个 PW 卷积
总结
MobileNet v2网络是由google团队在2018年提出的,相比MobileNet V1网络,准确率更高,模型更小。
网络中的亮点 :
- Inverted Residuals (倒残差结构 )
- Linear Bottlenecks(结构的最后一层采用线性层)
边栏推荐
猜你喜欢
类似 MS Project 的项目管理工具有哪些
VSCode Plugin: Nested Comments
GCC Rust获批将被纳入主线代码库,或将于GCC 13中与大家见面
Are you still working hard on the limit of MySQL paging?
221. 最大正方形
无线模块的参数介绍和选型要点
The sword refers to offer17---print the n digits from 1 to the largest
观察者(observer)模式(一)
黄东旭:TiDB的优势是什么?
软件测试工作3年了,谈谈我是如何从刚入门进阶到自动化测试的?
随机推荐
【网络安全】文件上传靶场通关(1-11关)
221. 最大正方形
Interprocess communication study notes
有没有可以做副业可以日入300元方法?
TiKV主要内存结构和OOM排查总结
数字图像隐写术之卡方分布
计算S=a+aa+…+aa…a
Know what DTU is 4GDTU equipment
【Map与Set】之LeetCode&牛客练习
Centos 7.9 install PostgreSQL14.4 steps
力扣每日一题-第46天-704. 二分查找
1782. Count the number of point pairs Double pointer
Basic Parameters of RF Devices 2
《实战》基于情感词典的文本情感分析与LDA主题分析
rpm安装postgresql12
黄东旭:TiDB的优势是什么?
成为比开发硬气的测试人,我都经历了什么?
Programmer's debriefing report/summary
分布式.分布式锁
内网渗透——提权