MobileNet v1
论文中提到,MobileNet的创新点在于使用深度可分离卷积代替传统卷积用于提取特征,达到减少计算资源损耗和减小模型大小的目的。
传统卷积中,G为下一层特征图,F为输入的特征图,K为kernel,M为输入通道数,N为输出通道数。
所需要的计算资源为:
为卷积核大小,为feature map大小。
传统卷积操作中,可以看做两步,一步为使用滤波提取特征以及组合特征来产生新的特征图。这两步操作可以使用深度可分离卷积来进行分离。
1. 深度卷积
使用单个卷积核对每一个输入通道进行卷积
2.逐点卷积
使用1x1卷积来创造一个线性组合器,用于组合深度卷积得到的输出。
计算资源为:
相比较传统卷积的计算资源:
当卷积核为3x3大小时,大约减少了8-9倍的计算量,并且仅仅降低了一点点准确率。
深度卷积仅仅只是滤波输入通道,而不组合他们产生新的特征。
MobileNet中,除了第一层使用完全卷积之外,其他层都使用深度可分离卷积。除了最后的全连接层外,深度卷积操作均使用了ReLU以及BN操作,把深度卷积和逐点卷积分开计算层数,MobileNet总共有28层。
GEMM
后补
MobileNet中使用了两个超参数分别用于降低输入输出通道数和输入分辨率。
最后的计算资源为:
caffe 中没有相应的超参数,所以需要自己根据输入输出调整beta。
MobileNet v2
相比于MobileNet v1,v2在v1的基础上添加了残差输入。
传统残差网络的block结构如下:
MobileNet v2中的残差块相对于ResNet来说,在通道数变换上有区别,
https://zhuanlan.zhihu.com/p/33075914
ResNet采用 缩小-》特征提取-》放大
MobileNet v2采用 放大-》特征提取-》缩小
缩小和放大的操作,都是采用pointwise来实现的,MobileNet中,这种结构称为 inversed residual block。
作者希望通过扩大卷积通道的方式,在更高维度上提取特征。
除了残差,另一个不同于v1的创新点,是在 Linear Bottleneck
https://zhuanlan.zhihu.com/p/33075914
作者将新增的pointwise后面添加了relu激活函数,在depthwise后跟着的pointwise后添加的是linear激活函数,这个结构作者称为Linear Bottleneck。之所以用linear替换relu是因为作者认为,relu在高维特征图上使用,可以起到增加非线性的作用,而在低位特征图上使用,会导致丢失重要信息,而v2中,采用先扩张再缩小的操作,在block输出前,通道数再次降低了,这里已经会去除一些信息,如果再次使用relu,可能会丢失更多信息。