MobileNetV1/V2 阅读整理

Mobile Net V1

MobileNet结构
Depthwise Separable Convolution

这个结构是整个MobileNetV1的精髓所在了,之后借鉴的论文大多数把这个结构称之为DWconv。
该结构的图示如下:
DWconv
下述的 D k D_k Dk表示核的大小; D F D_F DF表示输入特征图的Size(一般都是正方形,非正方形的计算方式是一样的);M表示输入的通道数;N表示输出的通道数;同时,我们假定卷积层的stride=1,padding=1。

  1. 对于正常的卷积层而言,我们指定输入层的通道数M和输出层的通道数N,则会产生一个 D k × D k × M × N D_k×D_k×M×N Dk×Dk×M×N个参数,即M×N个卷积核,运算的总量为
    D k × D k × M × N × D F × D F D_k×D_k×M×N×D_F×D_F Dk×Dk×M×N×DF×DF
  2. 对于DWconv,首先使用M个一通道的卷积核( S i z e = D K × D K Size=D_K×D_K Size=DK×DK)对M个特征图进行1v1的卷积,至此原先的M个特征图会变为M个新的特征图作为输入X;随后使用N个Pointwise(核为11,通道数为M)的卷积层对输入X进行卷积操作得到N个新的特征图,至此完成通道数M->N的变化,以及图像尺寸的变化(由M个33卷积核负责)。
    所以上述操作的产生的参数数量为 M × D K × D K + M × N M×D_K×D_K+M×N M×DK×DK+M×N,运算总量为
    D k × D k × M × D F × D F + N × M × D F × D F D_k×D_k×M×D_F×D_F+N×M×D_F×D_F Dk×Dk×M×DF×DF+N×M×DF×DF

上述的内容通过表格可能更容易对比出来

Standard convDepthwise Separable conv
paramters D k × D k × M × N D_k×D_k×M×N Dk×Dk×M×N M × D K × D K + M × N M×D_K×D_K+M×N M×DK×DK+M×N
computational cost D k × D k × M × N × D F × D F D_k×D_k×M×N×D_F×D_F Dk×Dk×M×N×DF×DF D k × D k × M × D F × D F + N × M × D F × D F D_k×D_k×M×D_F×D_F+N×M×D_F×D_F Dk×Dk×M×DF×DF+N×M×DF×DF

从计算速度上,该操作的提升速度为
D k × D k × M × D F × D F + N × M × D F × D F D k × D k × M × N × D F × D F = 1 N + 1 D K 2 \frac{D_k×D_k×M×D_F×D_F+N×M×D_F×D_F}{D_k×D_k×M×N×D_F×D_F} = \frac{1}{N}+\frac{1}{D_K^2} Dk×Dk×M×N×DF×DFDk×Dk×M×DF×DF+N×M×DF×DF=N1+DK21
可以看到,如果使用3*3的DWconv操作,那么计算效率将会比正常的卷积操作快出8~9倍,而我们比较关注的精确度损失是很小的,下面会有数据支撑。


MobileNetV1的结构和训练
  1. 上面的Dw操作仅仅是把传统的卷积操作给改善了,那么对于卷积操作后续的操作,作者也一并把他们引入进来作为一部分,如下图所示:
    在这里插入图片描述
    即相对于传统的卷积操作,这里的参数仅仅增加了BN的参数(BN参数就是4倍的通道数,相比来说很小啦)。
  2. MobileNetV1的结构如下:
    在这里插入图片描述
    可以看到整个网络中基本都是Dwconv的形式,连max pooling都用Dwconv做了。
    作者统计的计算资源如下
    在这里插入图片描述
    可以看到,整个网络的算力和参数居然都集中在了1*1的卷积上!对于正常的情况,卷积操作都是使用GEMM操作进行的(不理解的可以参考这里),对于核不为1的情况,需要在GEMM操作之前使用一些操作把图像的patch与权重对应起来(caffe中的im2col操作),之后进行GEMM操作,但是由于这里核为1,所以无需初始操作就可以直接进行GEMM操作,可以说又节省了运行的时间。

对通道进行缩放

MobileNetV1还对整个网络的通道数进行了不同的尝试,即对输入通道数M和输出通道数N同时进行缩放 α ( α ∈ ( 0 , 1 ] ) \alpha(\alpha \in (0,1]) α(α(0,1])倍,所以上述的所有的M和N前面加一个 α \alpha α就是缩放后的各项参数,因此整个网络的运行速度又提升了一些。


对分辨率进行缩放

该操作对输入的图像的大小缩放了 ρ \rho ρ倍,以进一步提升整个网络的速度和减小网络的大小。


MobileNet 小结

整体来看,MobileNetV1提出了一种很好加速方法,同时网络的精准度并没有下降太多。
在这里插入图片描述


MobileNet V2

MobileNet V2的主要研究点在激活函数上,同时根据作者的研究结果,对ResNet中的bottleneck进行了实质性的改进,并给出了理论依据。

Relu激活函数的信息损失

首先作者认为由于Relu函数的特点,经过该激活函数的数据必然会伴随着信息的损失,因为在网络的训练过程中,特征图的某些单元必然会输出0以下的值,那么这些值经过激活函数之后,一是对于后续的特征没有了贡献,二是对于该卷积核的更新量 δ W \delta W δW也失去了贡献。这里笔者是这么理解的,第一个特点无可厚非,当特征图的一个像素为0的话,那么其对于下面特征图的贡献确实就没有了;对于第二点是要分情况的(下述纯属瞎扯),比如对于提取图像纹理的卷积核而言,如果输入特征图X上的部分是本来就是没有纹理的,那么经过Relu之后再反向传播,这块区域对于权重 δ W \delta W δW的更新贡献为0(注意对于一个卷积核,更新量是很多patch的贡献之和)是完全正确的;但是另一种情况,由于权重W并不是最优的,导致这块区域激活之后为0从而导致反向传播时对于 δ W \delta W δW贡献也为0,这样的情况看起来就有些问题了,也就是出现了信息的损失。
在这里插入图片描述
当然仅仅是这么想是不能服众(发论文)的,作者紧接着就给出了自己的论据,如下图:
在这里插入图片描述
作者是这么论证的,对于一个2维的输入,经过变换 T T T将维度拉高为n,之后经过Relu对进行激活得到输出y,随后将y经过 T − 1 T^{-1} T1重新映射回原本的2为空间中,发现:额,一点儿原来的形状都没有了。特别的,我们可以看到拉高的维度越低,转回去的话变化的就越大,亦即丢失的信息就越多,且这个信息的丢失看起来很难被恢复回来了(Relu的话是不是根本就恢复不回来了?)。
当然,并不是说丢失信息就是不对的,就像上面说的那样,如果本身信息是没有用的,那么丢失了也无所谓,但是如果信息是有用的,丢弃了当然就会对网络的表现产生一些影响。
就此作者说道:

  1. 如果特征图在经过Relu前后感兴趣的流型(the manifold of interest)都是不为0的,那么该Relu可以认为是一个线性的变换,对网络没有什么影响。
  2. Relu激活函数是有能力完整保留输入流型(注意这里不是输入维度)的信息的,只要输入流型是输入维度的低维子空间。

那么依据这个发现,作者开始对于ResNet中爆红的Bottlenecks进行了改进。


Inverted residuals

针对以上的分析,作者就自然而然的想到,为了减少信息的损失,我们只能在对输入的特征图进行操作之前,先进行维度的扩张,把有用的信息尽量的塞在高纬度的特征图中,之后再进行Relu操作,以此来减少信息流失的概率(注意这里也并不能完全阻止,只能说是减小流失的概率)。
整个过程如下图:注意的是后面使用的是DWconv的方式
在这里插入图片描述
过程如下表所示:
在这里插入图片描述


从信息流的角度解释Bottleneck layer

我们知道,Bottleneck layer是由两个1×1的卷积层夹着一个3×3的卷积层,而该论文提出的结构与传统的结构不同的地方在于:传统的Bottleneck先将维度通过1×1卷积层拉低,随后再拉高,而MobileNetV2的操作是先用1×1的卷积层拉高,再拉低。
作者认为,前一个1×1卷积层操作可以看做是改善了每一层的容量(capacity),而后一个卷积层操作可以看作是改善了每一层的表达能力(expressiveness),大佬总结的确实很到位。所以不多说,当然是扩大了好啦。


模型的结构

模型的结构如下如:
在这里插入图片描述
值得注意的是,整个网络中的输入的维度都很小!这也是mobileNetV2的一个坚持初心的一点儿,就是虽然我的逆瓶颈操作增加了不少参数,但是我输入的维度小啊,扩张之后也没多多少参数。


Bottleneck Residual Block

这部分算是作者提出的 Inverted residuals结构的一个附加品,颇有种1×1卷积帮助加速GEMM操作一样。
简而言之就是由于我们是先进性维度的扩张,然后进行维度的缩减,那么我们可以把这个操作变为多个小的操作的和,如下图:
在这里插入图片描述


关于Relu可逆性的论证

说实话这块地方没有看的特别明白,原文如下:

Consider an opera- tor ReLU(Bx), where B is an m × n matrix and x ∈ Rn. Let y0 = ReLU(Bx0) for some x0 ∈ Rn, then equation y0 = ReLU(Bx) has a unique solution with respect to x if and only if y0 has at least n non-zero values and there are n linearly independent rows of B that correspond to non-zero coordinates of y0

私以为作者是想说,对于一个x0,我们经过Relu(Bx0)之后得到y0;那么我们想通过y0逆操作回去得到x0(唯一解),如果可以,那么就说明Relu操作是可逆的了,那么条件就是y0至少有n个不为零的值同时y0不为0的值对应的B的行向量有n个线性无关的向量。具体的证明没有特别的看明白。


总结

总体而言,MobileV1/V2都是很有创造性的,特别是MobileNetV2对Relu的研究,其实是让我们对于神经网络的内部机理有了更深入的认识。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值