MobileNet V1
1、为什么要设计mobilenet?
为移动端和嵌入式端深度学习应用设计的网络,使得在cpu上也能达到理想的速度要求。
2、mobilenet的结构
3、mobilenet网络的特点。
轻量化
放弃pooling直接采用stride = 2进行卷积运算
4、创新点
1:depthwise separable convolutions
标准卷积:
图(a):特点是卷积核的通道数等于输入特征图的通道数
depthwise卷积:
图(b):特点是卷积核的通道数为1
1x1卷积:(pointwise卷积)
本质上就是1x1的卷积核,通道数等于输入特征图的通道数。
在设计网络是一个depthwise 和1x1卷积以及BN、relu的结构关系如图:
2:用两个超参数来控制网络计算速度与准确度之间的平衡。
宽度调节参数:
分辨率参数:
5、计算量分析
depthwise separable convolution 计算量分析为:
第一项表示的是DW3x3卷积部分的计算量,第二项是1x1卷积部分的计算量。
普通卷积计算量为:
两者的比值为(此处省略了宽度超参数和分辨率超参数):
N是feature maps的通道数,通常很大,一般会大于10,而DkxDk是卷积核的size,一般为9。所以该比值是小于1的数,因此depthwise separable convolution 相比于标准的卷积会减少计算量。
2、mobilenet v2
1、 为什么要提出mobilenet V2
为移动端和嵌入式端深度学习应用设计的网络,使得在cpu上也能达到理想的速度要求。是mobilenetV1的升级版。
2、mobilenetv2 与mobilenetV1 不同点:
1、引入了shortcut结构(残差网络)
2、在进行depthwise之前先进行1x1的卷积增加feature map的通道数,实现feature maps的扩张。(inverted residual block,一般的residual block是两头channel多总监featuremap的通道少(沙漏形态)。而inverted residual block是两头通道少,中间feature的通道多(梭子形态))
3、pointwise结束之后弃用relu激活函数,改用linear激活函数,来防止relu对特征的破坏。
3、扩张feature通道数之后的计算量分析
在inverted residual block中进行1x1卷积增大通道个数,目的是为了提高效果,但是这样计算量又增加了。这个确实,但是和mobilenet v1相比计算量增加了。如果是和标准卷积相比,由于增大通道数之后还是用的dw和pw,所以参数量和计算量都很小。
3、自己的感悟
第一次看mobilenet的时候认为其实就是将标准卷积换成了dw和pw,认为就是强行一损失精度为代价提升速度。但深入了解之后发现有很多细节:
4、关于relu6,其公式为
1、dw卷积并非标准卷积中的单核卷积,因为dw卷积没有让通道之间的数据产生信息交流。
2、pw卷积接在dw卷积之后使通道之间产生信息的交互。 同时pw卷积将feature嵌入到低维子空间,用更低通道的feature map存储信息。
3、在使用残差网络时使用 “扩张”-dw卷积-“降维”的结构,扩张的目的是提升网络模型的效果。
relu6一般在低精度运算中使用,在移动端设备中很受欢迎。和relu相比,relu6的输出被限制在了一个固定区间内。