轻量级网络——MobileNetV1、v2详解

MobileNetV1

传统卷积

计算量

卷积核个数×卷积核宽×卷积核高×卷积核通道数×(输出高×输出宽)

N×Wk×Hk×C×Wo×Ho

输出的高和宽就代表了卷积核在输入图像上卷积的次数,括号前计算的是每次卷积所有参数量,括号内是卷积次数,相乘就是总的计算量。

以上图kernal=3 cannel=3,N=4为例

计算量 S1=4×3×3×3×Wo×Ho

深度可分离卷积

逐通道卷积(Depthwise Conv)

按通道提取的信息

nn.Conv2d(in_channel, out_channel, kernel_size, stride, padding, groups=groups, bias=False),

当传入的groups=in_channel时,表示逐通道卷积。

逐点卷积(Pointwise Convolution)

按点提取的信息

 将深度卷积的结果做拿来做逐点卷积就组成了深度可分离卷积

nn.Conv2d(hidden_channel, out_channel, kernel_size=1, bias=False)

逐点卷积实现时也就是卷积核大小为1的卷积

计算量

计算量是逐通道卷积加上逐点卷积

逐通道卷积:卷积核个数×卷积核宽×卷积核高×输出高×输出宽

逐点卷积:卷积核个数×卷积核深度×输出高×输出宽

与普通卷积的计算量之比=1/N+1/k*k

用上面普通卷积的例子来对比

计算量 S2=(3×3×3×Wo×Ho)+(4×3×1×1×Wo×Ho)

S2/S1 = 1/4+1/9≈0.36

相当于N取4时,参数是原来的0.36倍

V1网络结构

MobileNetV2

倒残差结构Bottleneck block

先进行一个映射将输入数据扩充维度,一般扩充三倍效果比较好

然后进行深度可分离卷积,再逐点卷积时降低维度,将输出值映射成较小的模块,携带更少的数据,从而解决在移动设备上显存不够的问题。

传统的残差结构,通过1×1卷积减少通道个数再进行3×3卷积后通过1×1升维。

倒残差,先通过1×1升维再计算3×3的逐通道卷积+逐点卷积,同时吧relu替换成了relu6

小于0时取0,大于6时取6,0-6取x

 v1与v2的比较

升维降维时的特征损失的解释

将输入映射成高纬,再降维后,会造成一定的特征损失

将n映射为2,3时损失特征最多,维度更高时损失特征少

 具体的映射方式,例如输入X是一组2*10的,有两个维度10组数据,要将其升到s维

通过一个矩阵T将其升维,再通过矩阵T的逆将其降维

降维

 

V2整体网络结构

t为膨胀系数,表示升维时要扩充多少倍

c为通道数

n表示每个模块重复次数

s为每个模块重复第一次的步长,第一次之后s全都为1

原文中给出的bottleneck有两种,只有当s为1切输入维度等于输出维度时才使用带有残差连接的bottleneck

 


 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值