zoukankan      html  css  js  c++  java
  • 轻量化模型:MobileNet v2

    MobileNet v2 论文链接:https://arxiv.org/abs/1801.04381

    MobileNet v2是对MobileNet v1的改进,也是一个轻量化模型。

    关于MobileNet v1的介绍,请看这篇:对MobileNet网络结构的解读

    MobileNet v1遗留下的问题

    1)结构问题

    MobileNet v1的结构非常简单,是一个直筒结构,这种结构的性价比其实不高,后续一系列的ResNet,DenseNet等结构已经证明通过复用图像特征,使用Concat/Eltwise+等操作进行特征融合,能极大提升网络的性价比。

    Concat(张量拼接):比如26*26*128,26*26*256经过拼接(Concat)之后得到(26*26*384)

    Eltwise有三个操作:product(点乘),sum(相加减)和max(取最大值),其中sum是默认操作

    2)Depthwise Convolution的潜在问题

    Depthwise Convolution确实是降低了计算量,而在NxN Depthwise + 1x1 Pointwise的结构在性能上也接近NxN Conv。在实际使用中发现,Depthwise的部分kernel比较容易训废掉:训练完之后发现Depthwise训出来的kernel有不少是空的。当时我们认为,Depthwise每个kernel dim相对于普通Conv要小得多,过小的kernel_dim,加上ReLU的激活影响下,使得神经元输出很容易变为0,所以学废了。ReLU对于0的输出梯度为0,所以一旦陷入0输出,就没法恢复了。我们还发现,这个问题在定点化低精度的时候会进一步放大。

    MobileNet v2的创新点

    1. Inverted residuals,通常的residuals block(残差块)是先经过1*1的Conv layer,把feature map的通道数"压"下来,再经过3*3Conv layer,最后经过一个1*1的Conv layer,将feature map通道数再"扩展"回去。即先"压缩",最后"扩张"回去。

    而Inverted residuals就是先"扩张",最后"压缩",后面会有介绍。

    2. Linear bottlenecks,为了避免ReLU对特征的破坏。

    MobileNet v2和v1之间的区别

    主要是两点:

    1. Depthwise convolution之前多了一个1*1的"扩张"层,目的是为了提升通道数,获得更多特征

    2. 最后不采用ReLU,而是linear,目的是防止ReLU破坏特征

    MobileNet v2的网络结构

    其中: t 表示"扩张倍数",c 表示输出通道数,表示重复次数,s 表示步长stride

    有两点错误:

    1. 第五行,也就是第7~10个bottleneck,stride = 2,分辨率应该从28降低到14,如果不是分辨率出错,那就应该是stride=1

    2. 文中提到共计采用19个bottleneck,但是这里只有17个

    一个bottleneck有如下三个部分组成:

    stride = 1和stride = 2,在结构上稍微有点不同。在stride=2时,不采用shortcut。我们对MobileNet v1和MobileNet v2进行比较如下图:

       

     注意:除了最后的avgpool,整个网络并没有采用pooling进行下采样,而是采用stride=2来下采样。

     

  • 相关阅读:
    Windows上git输错一次密码不在提示输入密码
    JSON Web Token 简介
    Springboot+Shiro+Jwt实现权限管理
    Springboot配置外部容器使用JNDI读取数据源
    Springboot解决Main方法启动无法注入JNDI
    Springboot2.1.6版本部署resin4.0.62
    Java解决多线程无法@Autowired注入,手动获取Bean对象
    Linux设置Vim显示行号
    Linux使用wget后台下载
    排查生产环境CPU过高的问题
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/11007978.html
Copyright © 2011-2022 走看看