7.1 MobileNet网络详解

# MobileNet v1网络详解
传统卷积神经网络,内存需求大、运算量大导致无法在移动设备以及嵌入式设备上运行;所以提出了MobileNet应用到实际生活中

2017年提出的轻量级CNN网络MobileNet专注于移动端或嵌入式设备,在准确率小幅降低的前提下减少了模型参数和运算量
### MobileNet v1网络中主要有两个两点:
- Depthwise Convolution(减少参数和运算量)
- 增加超参数α(控制卷积层、核数量)、β(控制输入图像尺寸),这两个超参数是人为设定的

### DW卷积详解
我的理解:
- 传统卷积如下图左上角所示,输入3通道的图像,4个卷积核,每个卷积核都是3通道,每个通道图像和每个通道的卷积核都做卷积操作,最后得到的特征图通道和卷积核个数一样(有特征融合的感觉);
- DW卷积如下图右下角所示,输入3通道图像,3个卷积核,每个通道和各自的卷积核进行卷积

### Depthwise Separable Conv详解
Depthwise Separable卷积由两部分组成:
- DW卷积(Depthwise Conv), 如下图左上角所示,不做赘述
- PW卷积(Pointwise Conv),如下图右下角所示,其实就是在传统卷积的基础上,将卷积核的大小设置为1×1

### 对比普通卷积和Depthwise Separable卷积的计算量

### MobileNet网络架构及超参数α、β
table1是MobileNet网络架构;
table8是Mobile Net和当时其他主流模型的对比(包括在ImageNet上的准确率,模型计算量Multiply-Add以及模型参数Parameters);
table6和table7对应的是MobileNet的两个超参数α(Width Multiplier)、β(Resolution Multiplier):
- α代表的是卷积核个数的倍率因子,控制卷积核个数。比如table6第一行当α取1.0时,准确率为70.6%
- β代表的是分辨率的倍率因子,输入不同尺寸的图像会有不同的准确率。比如table7第一行输入图像为224×224,准确率为70.6%

# MobileNet v1网络存在的问题
depthwise部分的卷积核容易废掉,即卷积核参数大部分为0
# MobileNet v2网络详解
2018年提出的MobileNet v2比v1版本更好。网络主要两个两点:
- Inverted Residual(倒残差结构)
- Linear Bottlenecks
### Inverted Residual(倒残差)结构详解
残差结构就是两头大,中间小。先用1×1卷积降维,然后使用3×3卷积,再使用1×1卷积升维;(使用Relu激活函数)
倒残差结构就是两头小,中间大。先用1×1卷积升维,再使用3×3DW卷积,最后使用1×1降维;(使用Relu6激活函数)

### Linear Bottlenecks详解
针对倒残差结构中最后1×1卷积层,使用了线性激活函数,而不是relu激活函数。因为relu激活函数对于低纬度特征信息会造成大量损失。Figure1给出了example,Input经过random matrix T、RuLU、T的逆矩阵,在低纬度的情况下还原的很差。

而倒残差结构是“两头小,中间大”,所以在输出的时候就是高维到低维度的情况,所以不建议使用ReLU激活函数,这里使用了线性激活函数来替代。
### 何时有shortcut
当stride=1时就会有shortcut连接,我觉得论文是默认了输入特征矩阵和输出特征矩阵shape相同,不然也没办法相加

### 具体网络架构
根据下图表格,可以搭建出网络。需要注意的是:
- s代表的是步距,有的bottleneck需要重复两次,两次中只有第一次s是为2的,这个根据Input的特征图大小也能判断出来
- t代表是扩展因子。这个在上图中的表格也可以看到
- 下图表格中最后一行k代表的就是分类类别个数,比如使用Imagenet数据集,对应就是该数据集的类别个数

### MobileNetV2在视觉任务的效果
MobileNetV2在classification任务上,当超参数α=1.4时,Top1准确率为74.7;
MobileNetV2在object detection任务上,结合SSDLite之后mAP可以达到22.1