mobilenetv2深度解析

今天下午仔细review了mobilenetv2的论文,有了新的感觉,在这里留个记录,也跟大家分享一下。论文原文《MobileNetV2: Inverted Residuals and Linear Bottlenecks》

论文里面提出了下面几个结构,深度卷积就不说了,正常卷积可以分解为depthwise和pointwise两个卷积,减小运算量和参数数量。如下面,a是正常的卷积形式,b是深度卷积,c是引入了linear bottleneck(bottlenect 指的就是瓶颈,网络中通道数很小的那一层),d是bottleneck后面引入膨胀层。那么,做么做深层次的原因纠结是什么呢?

1 Linear Bottlenecks

 

论文里面做了这么一个实验,如下图,输入是一个二维的圆形数据,经过线性变换乘Tx,维数变成n,再经过relu,再T‘x变回来,第二到最后是得到的图,可以看见,n=2和n=3,数据有比较大的损失,n越大,损失越少。这说明了什么?图像经过正常的卷积+relu不就是这种形式,如果输入维度2,conv+relu出来维度100,这100维真的是有必要吗,我可不可以再线性变换一下转到2维呢?这样信息也没有怎么丢失,因此我们在后面接入一个bottlenecks,来捕获这种真实的维度。这种捕获是一个线性变换,因此到bottenecks层的前面不要加relu,这种非线性激活或造成精度下降。(图画的有点问题,参考代码验证)

普遍意义上来说,非线性激活单元会造成信息的丢失,要缓解这种丢失,非线性单元输入维度应尽可能的高。

2 Inverted residuals

反转残差单元,正常的残差单元如a,将输入收缩,再卷积,再膨胀,而反转残差是将输入扩张,再卷积,再收缩。灵感其实和上面是一样的,不能在bottleneck层直接卷积非线性,这样会造成信息损失,先将他维度扩张,再卷积非线性,此次有用信息只是位于输出的子空间里,再收缩,shortcut直接连接两个bottleneck层就好了。切记第二个bottleneck前面不用非线性单元,否者就没用了。(图画的有点问题)


3网络结构

这个没什么好说的了,参考实现就好了。

结构块如下,最后一个conv1*1出来是linear,没有接非线性单元,即到第二个botlleneck层是线性变换。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值