深度可分离卷积(Depthwise Seperable Convolution)与Mobilenet

一、标准卷积流程:

一次性完成,输入为DF \times DF \times M, 过滤器为DK \times DK \times M(个数为N),输出为DG \times DG \times N

计算量为:DK \times DK \times M \times DG \times DG \times N

 

图1.1 卷积示意
图1.2 计算量

 


 

 

二、深度可分离卷积(Depthwise Seperable Convolution)流程:

分两步完成,分别为Depthwise Conv 和 Pointwise Conv

1. Depthwise Conv:filtering stage

    输入为DF \times DF \times M, 过滤器为DK \times DK \times 1(个数为M),输出为DG \times DG \times M

    计算量为: DK^{2} \times 1 \times DG^{2} \times M

图2.1 Depthwise Conv

 

 

2. Pointwise Conv:combination stage

               输入为DG \times DG \times M, 过滤器为1 \times 1\times M(个数为N),输出为DG \times DG \times N

               计算量为:1\times 1 \times M \times DG \times DG \times N

图2.2 Pointwise Conv

 

 

总计算量为:DK^{2} \times DG^{2} \times M + M\times DG^{2}\times N

图2.3 计算量

 


 

 

三、Depthwise Seperable Conv  和 Std.Conv 对比

1. 计算量对比

\frac{Depthwise Seperable Conv}{Std.Conv} = \frac{DK^{2} \times DG^{2} \times M + M \times DG^{2} \times N}{DK^{2} \times M \times DG^{2} \times N} = \frac{1}{N} + \frac{1}{DK^{2}}

图3.1 计算量对比

 

 

2. Depthwise Seperable Conv 比Std.Conv 的参数、计算时间少;同时对同一个模型架构,精度略低一点;

3. Depthwise Seperable Conv 分两步完成卷积: Depthwise Conv 和 Pointwise Conv


 

 

四、两个参数再次缩小模型

相对于基准模型,mobilenet可以提供两个参数:width multiplier 和 resolution multiplier。

1. width multiplier(宽度乘子):更薄的模型,按比例减少通道数,即深度,该参数记为 \alpha ,其取值范围为(0,1]。那么输入与输出通道数将变成\alpha M 和\alpha N,计算量变为:DK^{2} \times DG^{2} \times \alpha M + \alpha M\times DG^{2}\times \alpha N; 结果是参数量减少,计算量也减少。

2. resolution multiplier(分辨率乘子):分辨率更低的模型,按比例降低图的大小,记为 \rho;例如输入特征图是224x224,可以减少为192x192;计算量为:DK^{2} \times (\rho DG)^{2} \times \alpha M + \alpha M\times (\rho DG)^{2}\times \alpha N;结果是参数量不变,计算量减少。

 

 

五、Mobilenet

采用深度可分离卷积,主要目的是降低模型参数量和计算量。

1. MobilenetV1特点:

    (1)采用深度可分离卷积,并且可调宽度乘子\alpha和分辨率乘子\rho

    (2)采用Batch Normalization

    (3)采用Relu6激活函数

 

2. MobilenetV1的问题:

    (1)没有利用残差块

    (2)Relu6激活函数的存在,导致效果不好

 

 

3. MobilenetV2特点:

   (1)增加Inverted residuals:通常的residuals block是先1*1的Conv layer,减少通道数下来,再3*3 Conv layer,最后经过一个1*1 的Conv layer,将通道数再“扩张”回去。即先“压缩”,最后“扩张”回去。

           而 inverted residuals就是 先“扩张”,最后“压缩”,Depth-wise convolution之前多了一个1*1的“扩张”层,目的是为了提升通道数,获得更多特征;

    (2)Linear bottlenecks:为了避免Relu对特征的破坏,在residual block的Eltwise sum之前的那个 1*1 Conv 不再采用Relu,而采用Linear,目的是防止Relu破坏特征。

 

(完)

 

参考:https://www.youtube.com/watch?v=T7o3xvJLuHk&t=639s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值