【MobileNet v1&v2】论文笔记

论文地址:v1: https://arxiv.org/abs/1704.04861
v2: https://arxiv.org/abs/1801.04381
代码的话,可以去tensorflow的model中找,在slim里面。
个人认为理解论文最好将论文和代码结合,代码没有开源的另说(哈哈)。

MobileNetv1

核心思想:深度可分离卷积。将标准卷积分解为深度卷积和逐点卷积。
原来一个3×3×32×64的卷积层(输入32通道,输出64通道)分解为一个3×3×1×32的深度卷积层(输入32通道,输出32通道)和一个1×1×32×64的逐点卷积层(输入32通道,输出64通道)的卷积组合。

对于标准卷积而言,输入的第m个通道要分别与第n个卷积核的m个通道进行卷积,最后将所有的卷积结果相加,才能得到对应卷积输出的第n个通道。
对于深度卷积而言,输入的第m个通道只对应第m个卷积核,卷积之后结果只对应第m个通道的输出。如果输入为32个通道,那么输出必定也为32个通道。与标准卷积的计算区别在于,其首先将输入的通道划分为单个通道(即输入32通道,划分为32个1通道),再对这32个1通道单独进行卷积,得到32个通道的卷积结果,再将结果拼接为32通道,输入到逐点卷积中。
对于逐点卷积而言,其计算与标准卷积相同,只不过卷积核的大小全为1×1。
在这里插入图片描述
具体组合结构:
在这里插入图片描述
每层卷积之后都要接BN层和ReLU激活。
具体网络结构:dw代表深度卷积
在这里插入图片描述
两个参数:宽度因子α和分辨率因子β。
宽度因子α:控制输入和输出的通道数。输入通道从M变为αM,输出通道从N变为αN。
分辨率因子β:控制输入的图片尺寸。原始尺寸从M×M变为βM×βM。

MobileNetv2

核心思想:线性瓶颈和倒置残差。

线性瓶颈
作者将神经网络中的重要信息称为兴趣流形(manifold of interest)。一个兴趣流形是由多个带有激活的网络层组合产生的。同时实验证明这种兴趣流形可以嵌入到低维空间中(即更少的通道,MobileNetv1的宽度因子)。
由于深度神经网络通常使用非线性激活函数,ReLU这种,作者发现当使用ReLU激活时会出现以下问题:
1.ReLU激活可能会导致这种兴趣流形不可避免的丢失信息。(如下图)
2.如果经过ReLU变换输出是非零的,那ReLU只在输入和输出之间做了一个线性变换。
作者做了一个实验:将一个2维的数据嵌入到n维空间中,再接ReLU,再将数据投影回2D平面。结果发现,当n=2,3时,信息丢失严重;当n=15,30时,信息恢复较好。
在这里插入图片描述
结论:
1.ReLU能保留有关输入兴趣流形的完整信息,但前提是输入兴趣流形必须位于输入的低维子空间中。(即,输入通道数必须大于有用信息的通道数)
2.如果兴趣流行经过ReLU变换后得到非零结果,这时ReLU对应线性变换。
至此,第一个改进点:Linear Bottleneck
在MobileNetv1深度可分离卷积的基础上,添加了一个1×1的卷积层,这个卷积层使用的线性激活函数,用于捕捉兴趣流形。
图c中是一个完整的Linear Bottleneck,深度卷积(ReLU6激活)->逐点卷积(ReLU6激活)->1×1卷积(Linear激活)
图d是图c紧跟着的下一层,即一个循环结构。
扩展层(expansion layer)的解释部分在后面。
在这里插入图片描述
倒置残差
上面说到ReLU的2个问题,作者改进的Linear Bottleneck旨在解决线性激活的问题,但是对于多维度的问题没有解决。因此作者提出了倒置残差的概念。
作者设计网络结构在linear bottleneck的第一层和第二层之间设置了一个扩展系数(expansion factor),该系数用于增加整个linear bottleneck的通道数(即,增加输入的维度,便于兴趣流形的恢复)。同时借用残差网络的思想,使用shortcut连接输入和输出。结合构成了Bottleneck residual block。
Bottleneck residual block具体结构:
逐点卷积(ReLU6激活)->深度卷积(ReLU6激活)->1×1卷积(Linear激活),然后shortcut连接。

在这里插入图片描述
每一层的具体细节:t是扩展系数。具体升维的操作就是通过这个扩展系数完成的。
为什么叫倒置残差?
我们知道标准的残差结构是先降维后升维,但是我们可以根据下面的结构看到,Bottleneck residual block是一个先升维后降维的一个流程,与标准残差刚好相反,所以叫做倒置残差。

在这里插入图片描述
MobileNetv2中只有最后面用到了一个平均池化,和MobileNetv1比较像,中途池化的时候都是用到stride=2进行降维操作。
shortcut连接只在stride=1,输入输出维度相同的情况下才用到,其他情况都不会用到shortcut连接。(读代码可知,解决了我读模型结构时的困惑)
在这里插入图片描述

MobileNetv2的网络具体结构。t是扩展系数,c是输出通道数,n是该bottleneck的数量,s是stride的大小。当n大于1,即相同大小的bottleneck重复时,只有第一个的stride为2,后面的都是1.。在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值