MobileNet学习笔记

MobileNet v1

论文中提到,MobileNet的创新点在于使用深度可分离卷积代替传统卷积用于提取特征,达到减少计算资源损耗和减小模型大小的目的。

传统卷积中,G为下一层特征图,F为输入的特征图,K为kernel,M为输入通道数,N为输出通道数。

                                                              G_{k,l,n} = \sum _{i,j,k}\cdot K_{i,j,m,n}\cdot F_{k+i-1,l+j-1,m}

所需要的计算资源为:

                                                                      D_{K}\cdot D_{K}\cdot M\cdot N\cdot D_{F}\cdot D_{F}

D_{K}\cdot D_{K}为卷积核大小,D_{F}\cdot D_{F}为feature map大小。

传统卷积操作中,可以看做两步,一步为使用滤波提取特征以及组合特征来产生新的特征图。这两步操作可以使用深度可分离卷积来进行分离。

1. 深度卷积

使用单个卷积核对每一个输入通道进行卷积

2.逐点卷积

 

使用1x1卷积来创造一个线性组合器,用于组合深度卷积得到的输出。

                                                                     G_{k,l,n} = \sum _{i,j,k}\cdot \hat{K}_{i,j,m}\cdot F_{k+i-1,l+j-1,m}

计算资源为:

                                                                      D_{K}\cdot D_{K}\cdot M\cdot D_{F}\cdot D_{F}+M\cdot N\cdot D_{F}\cdot D_{F}

相比较传统卷积的计算资源:

                                                          \frac{D_{K}\cdot D_{K}\cdot M\cdot D_{F}\cdot D_{F}+M\cdot N\cdot D_{F}\cdot D_{F} }{D_{K}\cdot D_{K}\cdot M\cdot N\cdot D_{F}\cdot D_{F}} = \frac{1}{N} +\frac{1}{D_{K}^{2}}

当卷积核为3x3大小时,大约减少了8-9倍的计算量,并且仅仅降低了一点点准确率。

深度卷积仅仅只是滤波输入通道,而不组合他们产生新的特征。

 

MobileNet中,除了第一层使用完全卷积之外,其他层都使用深度可分离卷积。除了最后的全连接层外,深度卷积操作均使用了ReLU以及BN操作,把深度卷积和逐点卷积分开计算层数,MobileNet总共有28层。

GEMM

后补

 

MobileNet中使用了两个超参数分别用于降低输入输出通道数和输入分辨率。

最后的计算资源为:

                                                                 D_{K}\cdot D_{K}\cdot \alpha M\cdot \rho D_{F}\cdot \rho D_{F}+\alpha M\cdot \alpha N\cdot \rho D_{F}\cdot \rho D_{F}

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,可能会丢失更多信息。

https://blog.csdn.net/u011995719/article/details/79135818

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值