实现了让深度学习网络在移动设备和嵌入式设备中运行
亮点L:
a. DW卷积,大大减小了运算量和参数量
b .增加了超参数(人为自己设计的):
阿尔法:控制卷积层卷积核个数的超参数
阿尔法越小,计算量越小,参数越小,准确率越低
被他:控制输入图像大小
被他越小,准确率越低,计算量越小,参数不变
DW卷积:
特点:
每个卷积核深度都是1
每个卷积核只与输入特征矩阵的一个channel进行计算
矩阵深度1不会发生变化
DS卷积(深度可分的卷积操作)
由两部分组成:DW卷积和PW卷积
pw卷积实际就是卷积核大小为1的普通卷积
计算量=卷积核的高度 * 卷积核的宽度 * 卷积核的通道个数 * 卷积核个数 * 输入特征矩阵的高度 * 输入特征矩阵的宽度(前提是步距为1)
MobileNet v1
第一层卷积层:步距是2,卷积核大小是3*3,输入特征矩阵深度是3(rgb图像),卷积核个数是32
第二层:DW卷积层(卷积核深度为1),步距为1,卷积核大小3*3,卷积核个数是32
v1在使用过程中,很多人发现dw卷积的部分卷积核在训练完后会废掉,dw卷积核大部分参数等于0
v2网络(比v1准确率更高,模型更小)
亮点:
a.倒残差结构
b.Linear Bottlenecks
倒残差结构
残差结构中:
先降维,在卷积处理,再升维(两头大中间小)
使用relu激活函数
倒残差结构:
先升维,再dw卷积处理,再降维
使用relu6(relu函数的改进版)激活函数
Linear Bottlenecks
倒残差结构的最后一个1*1卷积层使用了线性激活函数,而不是relu激活函数
(relu对低维特征信息会造成从比较大的损失,而对高维特征信息造成的损失很小)
左图过程如右表
a.第一层卷积核个数为tk
b.第二层步距为s,矩阵高和宽缩小为1/s倍
在v2中,并不是每个倒残差结构都有捷径分支的(当s=1且输入特征矩阵与输出特征矩阵的shape相同时,才有捷径分支,上图表示有误)
网络结构
t:扩展倍率
c:输出特征矩阵的深度
n:倒残差结构的重复次数
s:步距(针对一系列倒残差结构第一层,其他均为1)
t=1的那个倒残差结构,没有使用升维的那个卷积层,因为他没有升维作用
最后一层是卷积层,而实际上就是一个全连接层,k是分类的类别个数