0
点赞
收藏
分享

微信扫一扫

面经:MobileNetV123特点汇总

MobileNetV1

提出了 Depthwise Separable Convolutions(深度可分离卷积),上述过程被拆分成了两个部分:深度卷积(Depthwise Convolution)与逐点卷积层(Pointwise Convolution)。

总结一下,深度卷积每个卷积核只处理1个输入特征通道,而不是M个输入特征通道,这样大大减少了运算量。然而这里面有个问题,也就是通道与通道之间的联系被切断了,所以后面需要再用 1x1 大小的逐点卷积层来处理M个特征通道之间的信息。可以减少8—9倍的参数量。

img

MobileNetV2

主要谈的就是Inverted residual block(倒残差结构),普通残差是两头channel多,中间少,倒残差结构是中间大,两头少。维度小时使用非线性激活函数会损失信息,而维度越大越不容易损失。因此使用倒残差结构,在维度较大的中间部分使用ReLU6激活函数,减少信息损失。

ReLU激活函数会对低维特征造成大量损失,对高维特征几乎不造成损失。(同上)因此在网络最后一层使用线性激活函数Linear(因为最后一层已经是低维),以防止使用非线性激活函数造成的低维特征损失。

当stride = 1,且输入输出特征矩阵shape相同时才有shortcut残差连接。

在pytorch里,Conv2D里groups参数设置成输入特征通道数即为DW卷积。

因为使用BN层,偏置没有用,所以之前设置bias = False。

MobileNet V2中的bottleneck为什么先扩张通道数在压缩通道数呢?
  1. 因为MobileNet 网络结构的核心就是Depth-wise,此卷积方式可以减少计算量和参数量。而为了引入shortcut结构,若参照Resnet中先压缩特征图的方式,将使输入给Depth-wise的特征图大小太小,接下来可提取的特征信息少,所以在MobileNet V2中采用先扩张后压缩的策略。
  2. 激活函数的使用会对低维特征造成大量损失,因此在拓张通道数之后,对高维特征造成的损失较小。
MobileNet V2中的bottleneck为什么在1*1卷积之后使用Linear激活函数?

因为在激活函数之前,已经使用1*1卷积对特征图进行了压缩,而ReLu激活函数对于负的输入值,输出为0,会进一步造成信息的损失,所以使用Linear激活函数。

MobileNetV3

继承V1的dw pw卷积,减少参数量。继承V2的倒残差结构。

引入:SE注意力模型,h-swish代替swich激活函数。

举报

相关推荐

面试:面经

java面经

rabbitmq面经

Redis面经

面经 202231222

【面经】网络

0 条评论