mobilenet的理解

mobilenet的特点在于inference的速度非常快。拿ssd为例,如果mobilenet作为backbone的速度大概是vgg作为backnobe的3倍,因此它是可以在移动端落地的网络。但是凡事都有两面性,在相同的数据集下,比如今年公开的open image 数据集下,很多类别在100-200个epoch后,mobilenet的map通常要比vgg低20个点左右。

接下来就详细说一下mobilenet快的原因。

1)首先mobilenet做的一个工作相当于把卷积核拆分。
例如如果在某一层需要的是256个通道的33的卷积核,那么作者的思路就是把它拆分成1个通道的33的卷积核以及256个通道的11的卷积核。经过这样的拆分,可以将参数量变为原来的九分之一。这也就是为什么参数量,也就是模型大小变小的原因。
2)逐点卷积
逐点卷积也就是1)中说的1
1的卷积,因为在神经网络中,通道数通常可以达到64或者256,因此基本上所有的参数都集中在了逐点卷积中,当然计算量也基本上都集中在这了这一部分,计算量大概占了总体的百分之九十四,参数大概占了总体的百分之七十五。
3)精度
作者在imagenet上的测试显示,这样分解网络后,准确率只从百分之70降到百分之六十九。在检测任务中,以mibilenet作为backbone比起vgg来说,faster rcnn在coco数据集上也只下降6个点左右。
4)mobilenet v2
针对mobilenet v1,作者进一步提出了改进方案,作者发现在通道数少的情况下不应该接relu这个激活函数,会造成大量节点变0的情况,因此作者提出了类似于resnet的残差概念,将前面还没有置零的部分直接加和到下一层。除此之外,在通道数较少的层仅仅采用线性函数,而取消了非线性的relu激活。
除此之外,为了进一步将少参数,加快速度,作者还设计了bottleneck的概念,即在入口和出口处,用少通道的方法,在瓶子内部采用多通道增大映射空间。经过了这两点改进,作者让mobilenet v2在cpu上也可以运行。

你可能感兴趣的:(深度学习相关(cs231n))