MobileNet V2 论文笔记

论文:Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation

文章在residual net和MobileNet V1的基础上,提出MobileNet V2模型,一方面保证准确性,另一方面大幅的减少multiply-adds(MAdd)的计算量,从而减少模型的参数量,降低内存占用,又提高模型的计算速度,以适应移动端应用。

Block 基本结构

文章的主要贡献:提出一种颠倒的、bottleneck为线性变换的resdual 结构。这中结构的一个block如下:
输入:一个低维 k(通道)的、经压缩的数据
然后经过:
step 1, point wise卷积扩展维度(通道),扩展因子为t;
step 2, depthwise separable 卷积,stride为 s;
step 3, linear conv把特征再映射的低维,输出维度为 k’;
输出作为下一个block的输入,堆叠block。
具体结构如表:
MobileNet V2 论文笔记_第1张图片

1. Depthwise separable conv

这种卷积方式早已被广泛使用,实现方法是把常规卷积层分为两个独立的层。第一层称为depthwise convolution,对输入的每个通道做单独的卷积,第二层称为pointwise convolution,使用1x1的卷积核做常规卷积。
如果使用的是kxk的卷积核,这种卷积几乎能减少k2的计算量。

2. Linear bottlenecks

用线性变换层替换channel数较少的层中的ReLU,这样做的理由是ReLU会对channel数低的张量造成较大的信息损耗。ReLU会使负值置零,channel数较低时会有相对高的概率使某一维度的张量值全为0,即张量的维度减小了,而且这一过程无法恢复。张量维度的减小即意味着特征描述容量的下降。因而,在需要使用ReLU的卷积层中,将channel数扩张到足够大,再进行激活,被认为可以降低激活层的信息损失。文中举了这样的例子:
这里写图片描述
上图中,利用nxm的矩阵B将张量(2D,即m=2)变换到n维的空间中,通过ReLU后(y=ReLU(Bx)),再用此矩阵之逆恢复原来的张量。可以看到,当n较小时,恢复后的张量坍缩严重,n较大时则恢复较好。

3. inverted residual sturcture

MobileNet V2 论文笔记_第2张图片
原residual structure 出自Deep Residual Learning for Image Recognition. 这种结构解决了深度神经网络随着网络层数的加深带来的梯度消失/爆炸,模型不收敛的问题,使DNN可以有上百甚至更多的层,提高准确率。
从图中可以看出,这种结构使用一个快捷链接(shortcut)链接了block的输入与输出(实际做的是element wise add),block内部是常规conv,一般block内部数据的维度低于block边缘–即bottleneck的数据维度。
论文的题目,inverted residual,颠倒的正是block 内数据维度与bottleneck数据维度的大小,这从上图的中数据块的深度情况可以看出。
这种颠倒基于作者的直觉:bottleneck层包含了所有的必要信息,扩展的层做的仅仅是非线性变换的细节实现。
实际上,这中翻转能节省内存,分析见后。

MobileNet V2网络结构

网络机构如下:
MobileNet V2 论文笔记_第3张图片
上图中,t代表单元的扩张系数,c代表channel数,n为单元重复个数,s为stride数。注意,shortcut只在s==1时才使用。

实验

文章从classification、detection、segmentation三个应用方面测试了该模型的效果。

1. classification

直接使用MobileNetV2的结构,输入图像size为224x224,在Imagenet上的分类表现
MobileNet V2 论文笔记_第4张图片

2.detection

使用预训练的MobileNetV2卷积层特征+SSD的检测网络,输入图像size为320x320,在mscoco上的表现如下表:
MobileNet V2 论文笔记_第5张图片

3.segementation

使用预训练的MobileNetV2卷积层特征+DeepLabv3分割网络,
MobileNet V2 论文笔记_第6张图片

结论

社区对MobileNetV2的评价还是很高的,而且简单易实现,可以作为基本层用到detection和segmentation等领域。这里有一个Tensorflow实现的版本,欢迎交流。github

你可能感兴趣的:(深度学习,CNN)