- 视频链接:7.1 MobileNet网络详解_哔哩哔哩_bilibili
- MobileNet(v1) https://arxiv.org/abs/1704.04861
- MobileNet(v2) https://arxiv.org/abs/1801.04381
- MobileNet(v3) https://arxiv.org/abs/1905.02244
- SE模块详解:SE (Squeeze Excitation)模块_se模块_JoannaJuanCV的博客-优快云博客
传统的卷积神经网络,内容需求大,运算量大,无法再移动设备以及嵌入式设备上运行,因此为了解决这一问题我们采用了MobileNet网络。
MobileNetV1
- MobileNet网络主要由DW卷积核PW卷积代替传统卷积组成。
与传统卷积不同,DW卷积计算中,每一个卷积核每次只对一个通道数进行卷积运算,形成的特征图通道数也是一个 。因此输入特征举证的通道数等于卷积核的个数,也等于输出特征矩阵的通道数。
PW卷积,和普通卷积操作一致,只是此时的卷积大小为1,相当于对每一个通道数进行合并运算。
MobileNetV2
- 增加了倒残差结构
- 采用了Linear Bottlenecks
传统的残差结构,首先采用1x1的卷积进行降维,在采用3x3的卷积操作,最后使用1x1的卷积进行升维。是两头维度大,中间维度小。呈沙漏型。
而倒残差结构先采用1x1的卷积升维,采用3X3DW 卷积,最后采用1X1的卷积降维。两边的维度小,中间的维度大。 倒残差结构中,前两个采用的是Relu6激活函数,最后一个采用线性激活函数。呈梭形。
由图片可以发现,当采用relu激活函数在维度较低的时候可能会导致信息丢失,在高维的时候丢失的信息较少,而我们采用倒残差结构在最后一层输出的时候维度较低,因此采用线性激活函数。 瓶颈结构是指从高维空间映射到低维空间,缩减通道数。
MobileNetV3
- 更新Block(bneck)
- 使用NAS搜索参数
- 重新设计耗时层结构
如图所示是MobileNetV3网络更新得到的bneck结构,其中NL意味着 采用非线性激活函数,如果不含有NL则采用普通的激活函数。SE模块显式地建模特征通道之间的相互依赖关系,通过学习的方式获得每一个通道的重要程度,然后依照这个重要程度对各个通道上的特征进行加权,从而突出后重要特征,抑制不重要的特征。
与MobileNetV2相比MobileNetV3网络结构只是增加了一个SE模块。SE模块针对每一个channel进行池化处理,得到channel个数的元素,通过两个全连接层得到输出向量,其中第一个全连接层的节点个数等于通道数地1/4(为了简化计算),第二个全连接层地节点个数和通道数保持一致。这个得到的输出相当于原始的特征矩阵的每个通道对应的重要程度,越重要的赋予越大的权重,反之则赋予较小地权重。
如图所示,我们首先采用平均池化将每一个 channel 变为一个值,然后经过两个全连接层之后得到通道权重的输出,值得注意的是第二个全连接层使用 Hard-Sigmoid 激活函数。然后将通道的权重乘回原来的特征矩阵就得到了新的特征矩阵 。