MobileNet v1
亮点:
- Depthwise Separable Conv:使用DW+PW卷积代替传统卷积,极大减少计算量
- 超参数α和β,α用来调整网络中卷积核个数,β用来调整输入图片尺寸
缺点:
- DW卷积部分的卷积核容易废掉,即卷积核大部分参数为0
MobileNet v2
亮点:
- Inverted Residuals(倒残差结构)
- Linear Bottlenecks
倒残差结构
- 实验发现在MobileNetv1中,深度卷积核(DW卷积核)的参数较多为0,也就是其卷积核没有发挥提取特征作用。那么作者先通过1*1卷积将维度上升,再使用深度卷积,深度卷积的输入输出通道数更高,就能够提取更多的信息
- 原残差结构先降维后升维,倒残差结构先升维后降维
- 原残差结构中间采用3*3传统卷积,倒残差结构采用3*3DW卷积
- 原残差结构激活函数采用Relu,倒残差结构激活函数采用Relu6
- Relu6:
- 倒残差结构图:
- 当stride=1且输入输出特征矩阵shape相同时采用shortcut连接,否则不采用(如右侧结构)
- 倒残差结构表
- k为输入channel,k‘为输出channel,t即为α(调整卷积核个数的超参数),s为步距
Linear Bottlenecks
- 倒残差结构的最后一层不使用Relu6激活函数,而是使用线性激活函数
- 作者发现当信息从高维空间经过非线性映射到低维空间时,会发生信息丢失,所以在倒残差结构中,进行降维操作时,使用线性激活函数(实现时就是不使用激活函数)
MobileNet V2结构
- bottleneck指倒残差结构,t为扩展因子(控制卷积核个数,见上文),c为输出channel,n为bottleneck重复次数,s为步距(注意此处s若为bottleneck所在层的步距,则s指第一层(共n层)bottleneck的步距,后面的bottlneck的步距仍为1),k为分类个数
- 最后一层1*1*1280的卷积层和全连接层起到相同的作用
MobileNet V3
亮点
- 修改了block结构
- 使用NAS搜索参数
- 重新设计耗时层结构
bneck结构
- 加入SE模块(注意力)
- 更新了激活函数
SE(注意力机制)
- 将每个channel池化处理为一个值,形成一个一维向量,之后用两个全连接层得到一个一维的长度为原channel数的向量,此向量代表原特征矩阵各个channel的权重,因此权重与channel分别相乘再相加得到最后的特征矩阵
- 其中第一个全连接层输出特征数为channel数的1/4,第二个全连接层输出特征数为channel数
- 举例:
重新设计激活函数
- swish激活函数能提高准确率,但计算,求导复杂,且对量化过程不友好;
- h-swish与swish效果类似,但解决了上述问题,性能更好
重新设计耗时层结构
- 减少V2第一个卷积核个数32->16
- 精简LastStage(使用NAS搜索出的网络结构的最后一部分):
- 作者发现精简此部分结构几乎不会对准确率造成影响
MobileNet V3网络结构
- exp size:第一个1*1卷积升维操作中要升到的维度;#out:降维后的channel;bneck后的3*3表示DW卷积核尺寸为3*3;SE“是否使用注意力机制;NL为除SE和最后一层外的其他卷积层后的激活函数(SE有专门的结构,最后一层使用线性激活函数同V2);HS:hard-siwsh;RE:Relu;s:DW卷积的步距;NBN:表示后面不使用BN结构
- 注意第一个bneck的expsize与input的channel都为16,因此第一个bneck不要加入1*1卷积层进行升维
- 同V2,只有s=1且输入输出channel一致时才有shortcut连接
参考:https://blog.csdn.net/flyfish1986/article/details/97017017