精华内容
下载资源
问答
  • 提出一种基于YOLOv3的简化版网络,与YOLOv3不同的是,在保留了对特征提取有较大帮助的FCN、FPN以及ResNet的同时,尽可能减少每层的参数和残差层数,并尝试加入了密集连接网络空间金字塔池化。实验结果表明,该网络的...
  • 轻量化神经网络架构

    千次阅读 2019-06-21 11:09:41
    本文就近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet、MobileNet、ShuffleNet、Xception。...二、轻量化模型     2.1 SqueezeNet    2.2 Mobi...

    转自:https://www.jiqizhixin.com/articles/2018-01-08-6


    本文就近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet、MobileNet、ShuffleNet、Xception。

    目录

    一、引言 

    二、轻量化模型 

        2.1 SqueezeNet

        2.2 MobileNet

        2.3 ShuffleNet

        2.4 Xception

    三、网络对比 

    一、引言

    自 2012 年 AlexNet 以来,卷积神经网络(简称 CNN)在图像分类、图像分割、目标检测等领域获得广泛应用。随着性能要求越来越高,AlexNet 已经无法满足大家的需求,于是乎各路大牛纷纷提出性能更优越的 CNN 网络,如 VGG、GoogLeNet、ResNet、DenseNet 等。由于神经网络的性质,为了获得更好的性能,网络层数不断增加,从 7 层 AlexNet 到 16 层 VGG,再从 16 层 VGG 到 GoogLeNet 的 22 层,再到 152 层 ResNet,更有上千层的 ResNet 和 DenseNet。虽然网络性能得到了提高,但随之而来的就是效率问题。

    效率问题主要是模型的存储问题和模型进行预测的速度问题(以下简称速度问题)

    • 第一,存储问题。数百层网络有着大量的权值参数,保存大量权值参数对设备的内存要求很高;
    • 第二,速度问题。在实际应用中,往往是毫秒级别,为了达到实际应用标准,要么提高处理器性能(看英特尔的提高速度就知道了,这点暂时不指望),要么就减少计算量。

    只有解决 CNN 效率问题,才能让 CNN 走出实验室,更广泛的应用于移动端。对于效率问题,通常的方法是进行模型压缩(Model Compression),即在已经训练好的模型上进行压缩,使得网络携带更少的网络参数,从而解决内存问题,同时可以解决速度问题。

    相比于在已经训练好的模型上进行处理,轻量化模型模型设计则是另辟蹊径。轻量化模型设计主要思想在于设计更高效的「网络计算方式」(主要针对卷积方式),从而使网络参数减少的同时,不损失网络性能。

    本文就近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet、MobileNet、ShuffleNet、Xception。

    (PS: 以上四种均不是模型压缩方法!!)

    以下是四个模型的作者团队及发表时间

    其中 ShuffleNet 论文中引用了 SqueezeNet;Xception 论文中引用了 MobileNet

    二、轻量化模型

    由于这四种轻量化模型仅是在卷积方式上做了改变,因此本文仅对轻量化模型的创新点进行详细描述,对实验以及实现的细节感兴趣的朋友,请到论文中详细阅读。

    2.1 SqueezeNet

    SqueezeNet 由伯克利&斯坦福的研究人员合作发表于 ICLR-2017,论文标题:

    《SqueezeNet:AlexNet-level accuracy with 50x fewer parameters and <0.5MB》

    命名:

    从名字——SqueezeNet 就知道,本文的新意是 squeeze,squeeze 在 SqueezeNet 中表示一个 squeeze 层,该层采用 1*1 卷积核对上一层 feature map 进行卷积,主要目的是减少 feature map 的维数(维数即通道数,就是一个立方体的 feature map,切成一片一片的,一共有几片)。

    创新点:

    1. 采用不同于传统的卷积方式,提出 fire module;fire module 包含两部分:squeeze 层+expand 层

    创新点与 inception 系列的思想非常接近!首先 squeeze 层,就是 1*1 卷积,其卷积核数要少于上一层 feature map 数,这个操作从 inception 系列开始就有了,并美其名曰压缩,个人觉得「压缩」更为妥当。

    Expand 层分别用 1*1 和 3*3 卷积,然后 concat,这个操作在 inception 系列里面也有。

    SqueezeNet 的核心在于 Fire module,Fire module 由两层构成,分别是 squeeze 层+expand 层,如下图 1 所示,squeeze 层是一个 1*1 卷积核的卷积层,expand 层是 1*1 和 3*3 卷积核的卷积层,expand 层中,把 1*1 和 3*3 得到的 feature map 进行 concat。

    具体操作情况如下图所示:

    Fire module 输入的 feature map 为 H*W*M 的,输出的 feature map 为 H*M*(e1+e3),可以看到 feature map 的分辨率是不变的,变的仅是维数,也就是通道数,这一点和 VGG 的思想一致。

    首先,H*W*M 的 feature map 经过 Squeeze 层,得到 S1 个 feature map,这里的 S1 均是小于 M 的,以达到「压缩」的目的,详细思想可参考 Google 的 Inception 系列。

    其次,H*W*S1 的特征图输入到 Expand 层,分别经过 1*1 卷积层和 3*3 卷积层进行卷积,再将结果进行 concat,得到 Fire module 的输出,为 H*M*(e1+e3) 的 feature map。

    fire 模块有三个可调参数:S1,e1,e3,分别代表卷积核的个数,同时也表示对应输出 feature map 的维数,在文中提出的 SqueezeNet 结构中,e1=e3=4s1。

    讲完 SqueezeNet 的核心——Fire module,看看 SqueezeNet 的网络结构,如下图所示:

     

    网络结构设计思想,同样与 VGG 的类似,堆叠的使用卷积操作,只不过这里堆叠的使用本文提出的 Fire module(图中用红框部分)。

    看看 Squezeenet 的参数数量以及性能:

    在这里可以看到,论文题目中提到的小于 0.5M,是采用了 Deep Compression 进行模型压缩之后的结果!!

    看了上图再回头看一看论文题目: 

    SqueezeNet :AlexNet-level accuracy with 50x fewer parameters and <0.5MB

    标!题!党!SqueezeNet < 0.5MB, 这个是用了别的模型压缩技术获得的,很容易让人误以为 SqueezeNet 可以压缩模型!! 

    SqueezeNet 小结:

    • 1 Fire module 与 GoogLeNet 思想类似,采用 1*1 卷积对 feature map 的维数进行「压缩」,从而达到减少权值参数的目的;
    • 2 采用与 VGG 类似的思想——堆叠的使用卷积,这里堆叠的使用 Fire module

    SqueezeNet 与 GoogLeNet 和 VGG 的关系很大!

    2.2 MobileNet

    MobileNet 由 Google 团队提出,发表于 CVPR-2017,论文标题:

    《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》

    命名:

    MobileNet 的命名是从它的应用场景考虑的,顾名思义就是能够在移动端使用的网络模型。

    创新点:

    1. 采用名为 depth-wise separable convolution 的卷积方式代替传统卷积方式,以达到减少网络权值参数的目的。

    通过采用 depth-wise convolution 的卷积方式,达到:1. 减少参数数量 2. 提升运算速度。(这两点是要区别开的,参数少的不一定运算速度快!还要看计算方式!)

    depth-wise convolution 不是 MobileNet 提出来的,也是借鉴,文中给的参考文献是 2014 年的博士论文——《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》

    depth-wise convolution 和 group convolution 是类似的,depth-wise convolution 是一个卷积核负责一部分 feature map,每个 feature map 只被一个卷积核卷积;group convolution 是一组卷积核负责一组 feature map,每组 feature map 只被一组卷积核卷积。Depth-wise convolution 可以看成是特殊的 group convolution,即每一个通道是一组。

    MobileNets 精华在于卷积方式——depth-wise separable convolution;采用 depth-wise separable convolution,会涉及两个超参:Width Multiplier 和 Resolution Multiplier 这两个超参只是方便于设置要网络要设计为多小,方便于量化模型大小。

    MobileNet 将标准卷积分成两步:

    • 第一步 Depth-wise convolution, 即逐通道的卷积,一个卷积核负责一个通道,一个通道只被一个卷积核「滤波」;
    • 第二步,Pointwise convolution,将 depth-wise convolution 得到的 feature map 再「串」起来,注意这个「串」是很重要的。「串」作何解?为什么还需要 pointwise convolution?作者说:However it only filters input channels, it does not combine them to create new features. Soan additional layer that computes a linear combination ofthe output of depth-wise convolution via 1 × 1 convolutionis needed in order to generate these new features。

    从另外一个角度考虑,其实就是:输出的每一个 feature map 要包含输入层所有 feature map 的信息。然而仅采用 depth-wise convolution,是没办法做到这点,因此需要 pointwise convolution 的辅助。

    「输出的每一个 feature map 要包含输入层所有 feature map 的信息」这个是所有采用 depth-wise convolution 操作的网络都要去解决的问题,ShuffleNet 中的命名就和这个有关!详细请看 2.3。

    Standard convolution、depth-wise convolution 和 pointwise convolution 示意图如下:

     

    其中输入的 feature map 有 M 个,输出的 feature map 有 N 个。

    对 Standard convolution 而言,是采用 N 个大小为 DK*DK 的卷积核进行操作(注意卷积核大小是 DK*DK, DK*DK*M 是具体运算时一个卷积核的大小!)。

    而 depth-wise convolution + pointwise convolution 需要的卷积核呢?

    Depth-wise convolution :一个卷积核负责一个通道,一个通道只被一个卷积核卷积;则这里有 M 个 DK*DK 的卷积核; 

    Pointwise convolution:为了达到输出 N 个 feature map 的操作,所以采用 N 个 1*1 的卷积核进行卷积,这里的卷积方式和传统的卷积方式是一样的,只不过采用了 1*1 的卷积核;其目的就是让新的每一个 feature map 包含有上一层各个 feature map 的信息!在此理解为将 depth-wise convolution 的输出进行「串」起来。

    下面举例讲解 Standard convolution、depth-wise convolution 和 pointwise convolution。

    假设输入的 feature map 是两个 5*5 的,即 5*5*2;输出 feature map 数量为 3,大小是 3*3(因为这里采用 3*3 卷积核)即 3*3*3。

    标准卷积是将一个卷积核(3*3)复制 M 份(M=2), 让二维的卷积核(面包片)拓展到与输入 feature map 一样的面包块形状。

    Standard 过程如下图,X 表示卷积,+表示对应像素点相加,可以看到对于 O1 来说,其与输入的每一个 feature map 都「发生关系」,包含输入的各个 feature map 的信息。

    Depth-wise 过程如下图,可以看到 depth-wise convolution 得出的两个 feature map——fd1 和 fd2 分别只与 i1 和 i2「发生关系」,这就导致违背上面所承认的观点「输出的每一个 feature map 要包含输入层所有 feature map 的信息」,因而要引入 pointwise convolution。

    那么计算量减少了多少呢?通过如下公式计算: 

     

    其中 DK 为标准卷积核大小,M 是输入 feature map 通道数,DF 为输入 feature map 大小,N 是输出 feature map 大小。本例中,DK=3,M=2,DF=5,N=3,参数的减少量主要就与卷积核大小 DK 有关。在本文 MobileNet 的卷积核采用 DK=3,则大约减少了 8~9 倍计算量。

    看看 MobileNet 的网络结构,MobileNet 共 28 层,可以发现这里下采样的方式没有采用池化层,而是利用 depth-wise convolution 的时候将步长设置为 2,达到下采样的目的。

    1.0 MobileNet-224 与 GoogLeNet 及 VGG-16 的对比:

    可以发现,相较于 GoogLeNet,虽然参数差不多,都是一个量级的,但是在运算量上却小于 GoogLeNet 一个量级,这就得益于 depth-wise convolution!

    MobileNet 小结:

    • 1. 核心思想是采用 depth-wise convolution 操作,在相同的权值参数数量的情况下,相较于 standard convolution 操作,可以减少数倍的计算量,从而达到提升网络运算速度的目的。
    • 2. depth-wise convolution 的思想非首创,借鉴于 2014 年一篇博士论文:《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》
    • 3. 采用 depth-wise convolution 会有一个问题,就是导致「信息流通不畅」,即输出的 feature map 仅包含输入的 feature map 的一部分,在这里,MobileNet 采用了 point-wise convolution 解决这个问题。在后来,ShuffleNet 采用同样的思想对网络进行改进,只不过把 point-wise convolution 换成了 channel shuffle,然后给网络美其名曰 ShuffleNet,欲知后事如何,请看 2.3 ShuffleNet

    2.3 ShuffleNet

    ShuffleNet 是 Face++团队提出的,与 MobileNet 一样,发表于 CVPR-2017,但晚于 MobileNet 两个月才在 arXiv 上公开。论文标题:

    《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices》

    命名:

    一看名字 ShuffleNet,就知道 shuffle 是本文的重点,那么 shuffle 是什么?为什么要进行 shuffle?

    shuffle 具体来说是 channel shuffle,是将各部分的 feature map 的 channel 进行有序的打乱,构成新的 feature map,以解决 group convolution 带来的「信息流通不畅」问题。(MobileNet 是用 point-wise convolution 解决的这个问题)

    因此可知道 shuffle 不是什么网络都需要用的,是有一个前提,就是采用了 group convolution,才有可能需要 shuffle!!为什么说是有可能呢?因为可以用 point-wise convolution 来解决这个问题。

    创新点:

    1. 利用 group convolution 和 channel shuffle 这两个操作来设计卷积神经网络模型, 以减少模型使用的参数数量。

    其中 group convolutiosn 非原创,而 channel shuffle 是原创。channel shuffle 因 group convolution 而起,正如论文中 3.1 标题: . Channel Shuffle for Group Convolution; 

    采用 group convolution 会导致信息流通不当,因此提出 channel shuffle,所以 channel shuffle 是有前提的,使用的话要注意!

    对比一下 MobileNet,采用 shuffle 替换掉 1*1 卷积,这样可以减少权值参数,而且是减少大量权值参数,因为在 MobileNet 中,1*1 卷积层有较多的卷积核,并且计算量巨大,MobileNet 每层的参数量和运算量如下图所示:

    ShuffleNet 的创新点在于利用了 group convolution 和 channel shuffle,那么有必要看看 group convolution 和 channel shuffle。

    Group convolution 

    Group convolution 自 Alexnet 就有,当时因为硬件限制而采用分组卷积;之后在 2016 年的 ResNeXt 中,表明采用 group convolution 可获得高效的网络;再有 Xception 和 MobileNet 均采用 depth-wise convolution, 这些都是最近出来的一系列轻量化网络模型。depth-wise convolution 具体操作可见 2.2 MobileNet 里边有简介。

    如下图 (a) 所示, 为了提升模型效率,采用 group convolution,但会有一个副作用,即:「outputs from a certain channel are only derived from a small fraction of input channels.」

    于是采用 channel shuffle 来改善各组间「信息流通不畅」问题,如下图 (b) 所示。

    具体方法为:把各组的 channel 平均分为 g(下图 g=3)份,然后依次序的重新构成 feature map。

    Channel shuffle 的操作非常简单,接下来看看 ShuffleNet,ShuffleNet 借鉴了 Resnet 的思想,从基本的 resnet 的 bottleneck unit 逐步演变得到 ShuffleNet 的 bottleneck unit,然后堆叠的使用 ShuffleNet bottleneck unit 获得 ShuffleNet;

    下图展示了 ShuffleNet unit 的演化过程 

    • 图 (a):是一个带有 depth-wise convolution 的 bottleneck unit;
    • 图 (b):作者在 (a) 的基础上进行变化,对 1*1 conv 换成 1*1 Gconv,并在第一个 1*1 Gconv 之后增加一个 channel shuffle 操作; 
    • 图 (c): 在旁路增加了 AVG pool,目的是为了减小 feature map 的分辨率;因为分辨率小了,于是乎最后不采用 Add,而是 concat,从而「弥补」了分辨率减小而带来的信息损失。

    文中提到两次,对于小型网络,多多使用通道,会比较好。

    「this is critical for small networks, as tiny networks usually have an insufficient number of channels to process the information」

    所以,以后若涉及小型网络,可考虑如何提升通道使用效率。

    至于实验比较,并没有给出模型参数量的大小比较,而是采用了 Complexity (MFLOPs) 指标,在相同的 Complexity (MFLOPs) 下,比较 ShuffleNet 和各个网络,还专门和 MobileNet 进行对比,由于 ShuffleNet 相较于 MobileNet 少了 1*1 卷积层,所以效率大大提高了嘛,贴个对比图随意感受一下好了。

    ShuffleNet 小结:

    • 1. 与 MobileNet 一样采用了 depth-wise convolution,但是针对 depth-wise convolution 带来的副作用——「信息流通不畅」,ShuffleNet 采用了一个 channel shuffle 操作来解决。
    • 2. 在网络拓扑方面,ShuffleNet 采用的是 resnet 的思想,而 mobielnet 采用的是 VGG 的思想,2.1 SqueezeNet 也是采用 VGG 的堆叠思想。

    2.4 Xception

    Xception 并不是真正意义上的轻量化模型,只是其借鉴 depth-wise convolution,而 depth-wise convolution 又是上述几个轻量化模型的关键点,所以在此一并介绍,其思想非常值得借鉴。

    Xception 是 Google 提出的,arXiv 的 V1 版本 于 2016 年 10 月公开。论文标题:

    《Xception: Deep Learning with Depth-wise Separable Convolutions》

    命名:

    Xception 是基于 Inception-V3 的,而 X 表示 Extreme,为什么是 Extreme 呢?因为 Xception 做了一个加强的假设,这个假设就是: 

    we make the following hypothesis: that the mapping of cross-channels correlations and spatial correlations in the feature maps of convolutional neural networks can be entirely decoupled

    创新点:

    1. 借鉴(非采用)depth-wise convolution 改进 Inception V3。

    既然是改进了 Inception v3,那就得提一提关于 inception 的一下假设(思想)了。

    「the fundamental hypothesis behind Inception is that cross-channel correlations and spatial correlations are sufficiently decoupled that it is preferable not to map them jointly」

    简单理解就是说,卷积的时候要将通道的卷积与空间的卷积进行分离,这样会比较好。(没有理论证明,只有实验证明,就当它是定理,接受就好了,现在大多数神经网络的论文都这样。

    既然是在 Inception V3 上进行改进的,那么 Xception 是如何一步一步的从 Inception V3 演变而来。

    下图 1 是 Inception module,图 2 是作者简化了的 inception module(就是只保留 1*1 的那条「路」,如果带着 avg pool,后面怎么进一步假设嘛~) 。

    假设出一个简化版 inception module 之后,再进一步假设,把第一部分的 3 个 1*1 卷积核统一起来,变成一个 1*1 的,后面的 3 个 3*3 的分别「负责」一部分通道,如图 3 所示; 最后提出「extreme」version of an Inception,module Xception 登场,,先用 1*1 卷积核对各通道之间(cross-channel)进行卷积,如图 4 所示,

    作者说了,这种卷积方式和 depth-wise convolution 几乎一样。Depth-wise convolution 较早用于网络设计是来自:Rigid-Motion Scatteringfor Image Classification,但是具体是哪一年提出,不得而知;至少 2012 年就有相关研究,再比如说 AlexNet,由于内存原因,AlexNet 分成两组卷积 ;想深入了解 Depth-wise convolution 的可以查阅本论文 2.Prior work,里面有详细介绍。

    Xception 是借鉴 Rigid-Motion Scatteringfor Image Classification 的 Depth-wise convolution,是因为 Xception 与原版的 Depth-wise convolution 有两个不同之处 :

    • 第一个:原版 Depth-wise convolution,先逐通道卷积,再 1*1 卷积; 而 Xception 是反过来,先 1*1 卷积,再逐通道卷积; 
    • 第二个:原版 Depth-wise convolution 的两个卷积之间是不带激活函数的,而 Xception 在经过 1*1 卷积之后会带上一个 Relu 的非线性激活函数;

    Xception 结构如上图所示,共计 36 层分为 Entry flow;Middle flow;Exit flow。

    Entry flow 包含 8 个 conv;Middle flow 包含 3*8 =24 个 conv;Exit flow 包含 4 个 conv,所以 Xception 共计 36 层。

    文中 Xception 实验部分是非常详细的,实现细节可参见论文。

    Xception 小结:

    Xception 是基于 Inception-V3,并结合了 depth-wise convolution,这样做的好处是提高网络效率,以及在同等参数量的情况下,在大规模数据集上,效果要优于 Inception-V3。这也提供了另外一种「轻量化」的思路:在硬件资源给定的情况下,尽可能的增加网络效率和性能,也可以理解为充分利用硬件资源。

    三、网络对比

    本文简单介绍了四个轻量化网络模型,分别是 SqueezeNet、 MobileNet、 ShuffleNet 和 Xception,前三个是真正意义上的轻量化网络,而 Xception 是为提升网络效率,在同等参数数量条件下获得更高的性能。

    在此列出表格,对比四种网络是如何达到网络轻量化的。

    实现轻量化技巧

    这么一看就发现,轻量化主要得益于 depth-wise convolution,因此大家可以考虑采用 depth-wise convolution 来设计自己的轻量化网络,但是要注意「信息流通不畅问题」。

    解决「信息流通不畅」的问题,MobileNet 采用了 point-wise convolution,ShuffleNet 采用的是 channel shuffle。MobileNet 相较于 ShuffleNet 使用了更多的卷积,计算量和参数量上是劣势,但是增加了非线性层数,理论上特征更抽象,更高级了;ShuffleNet 则省去 point-wise convolution,采用 channel shuffle,简单明了,省去卷积步骤,减少了参数量。

    学习了几个轻量化网络的设计思想,可以看到,并没有突破性的进展,都是借鉴或直接使用前几年的研究成果。希望广大研究人员可以设计出更实在的轻量化网络。

    通过这几篇论文的创新点,得出以下可认为是发 (Shui) 论文的 idea:

    • 1. 采用 depth-wise convolution,再设计一个方法解决「信息流通不畅」问题,然后冠以美名 XX-Net。(看看 ShuffleNet 就是)
    • 2. 针对 depth-wise convolution 作文章,卷积方式不是千奇百怪么?各种卷积方式可参考 Github(https://github.com/vdumoulin/conv_arithmetic),挑一个或者几个,结合起来,只要参数量少,实验效果好,就可以发 (Shui) 论文。
    • 3. 接着第 2,如果设计出来一个新的卷积方式,如果也存在一些「副作用」,再想一个方法解决这个副作用,再美其名曰 XX-Net。就是自己「挖」个坑,自己再填上去。
    个人介绍: 余霆嵩,广东工业大学研三学生,研究方向:深度学习,目标检测,图像分类,模型压缩
    展开全文
  • 轻量化卷积神经网络

    千次阅读 2019-09-25 12:03:39
    轻量化卷积神经网络

      自从深度卷积神经网络出现以来,大多数人都在考虑怎样能提升网络的性能,却忽略了网络的实用性。在实际情况下,计算性能和存储空间的限制和速度的要求,使得网络在精度的基础上尽量达到轻量化。
      如果想了解各种卷积神经网络的性能及参数可以访问:[所有卷积神经网络的性能对比]。下图是我在此项目中摘取的部分网络的性能,要求是网络的参数量小于30M,这些结果都是项目作者实验得到的。网络的实用性并不只有参数量决定,还有深度等问题,这些在接下来的内容中会进行讨论。

      从上图可以看出,轻量化的网络的性能与普通网络在Top-1上会相差15个点,但是这些都是满座实际要求的。接下来将讨论几种有名的轻量化网络,之后总结以下它们的创新点。

    [SqueezeNet (2017)]

    ? - [SQUEEZENET:ALEXNET-LEVEL ACCURACY WITH50X FEWER PARAMETERS AND<0.5MBMODEL SIZE]
    ? - [SqueezeNet代码]

    [创新点]

    [Fire Module]

      SqueezeNet最大的创新点就是提出了一个Fire Module的结构,一种新的卷积方式,而这个创新点主要来源于Inception。下图是Fire Module的结构图,其分为两部分:squeeze和expand。在squeeze中,上层的featuremap经过1×1的卷积核,用来改变featuremap的通道数。在expand中,用两种卷积核,大小为1×1和3×3,所以通过expand后生成featuremap的通道数为两种卷积核的总通道数。总的来说,Fire Module就是用来改变featuremap的通道数,并不会改变大小。

    [SqueezeNet]

      另一个创新点就是提出了SqueezeNet,结构如下图所示。作者并没有用普通的卷积操作,而是全部使用了Fire Module。SqueezeNet有三种版本,左边的是普通的SqueezeNet,中间是由简单旁路的SqueezeNet,右边是复杂旁路的SqueezeNet。

      下表所示为普通的SqueezeNet的结构和参数,每一个Fire Module都有三个参数,squeeze中1×1的通道数 S 1 × 1 S_{1×1} S1×1,expand中的1×1卷积核通道数 e 1 × 1 e_{1×1} e1×1和3×3卷积核通道数 e 3 × 3 e_{3×3} e3×3。例如,fire2中输入为55×55×96的featuremap,先进入16层的1×1卷积层,这里是多通道卷积,16曾每层都是1×1×96,所以这一层的参数量为: ( 1 × 1 × 96 + 1 ) × 16 + ( 1 × 1 × 16 + 1 ) × 64 + ( 3 × 3 × 16 + 1 ) × 64 = 11920 (1×1×96+1)×16+(1×1×16+1)×64+(3×3×16+1)×64=11920 (1×1×96+1)×16+(1×1×16+1)×64+(3×3×16+1)×64=11920  之后作者对网络进行剪枝,后面的百分比代表作者保留的通道数的比例,因为3×3的卷积核包含大量的参数,所以作者主要对3×3进行剪枝。

    [MobileNet]

    ? - [MobileNets: Efficient Convolutional Neural Networks for Mobile VisionApplications]
    ? - [Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation]
    ? - [Searching for MobileNetV3]

    [MobileNet v1]

    [创新点]

    [深度可分离卷积和逐点卷积]

      为了减小参数量提升运算速度,作者抛弃了传统的卷积方法,采用了深度可分离卷积。这种卷积的特点就是逐通道卷积,并且为了使所有通道的featuremap都包含所有信息,作者又加了一层逐点卷积,如下图所示:

      当输入featuremap通道数为 M M M,输出为通道数为 N N N的featuremap时,对于标准卷积操作,其需要 N N N D K × D K × M D_K×D_K×M DK×DK×M通道的卷积核。利用作者提出的深度可分离卷积和逐点卷积,首先经过通道数相同 D K × D K × M × 1 D_K×D_K×M×1 DK×DK×M×1的卷积核,逐通道卷积,生成 M M M维的featuremap,之后接一个1×1的卷积层,维数为 N N N,就能够生成通道数为 N N N的featuremap,这样参数量大大减少。下面就计算了参数量较少的倍数,分子是作者提出新的卷积方式,分母是标准卷积: D K ⋅ D K ⋅ M + M ⋅ N D K ⋅ D K ⋅ M ⋅ N = 1 N + 1 D K 2 \begin{aligned} & \frac{D_{K} \cdot D_{K} \cdot M +M \cdot N}{D_{K} \cdot D_{K} \cdot M \cdot N} \\=& \frac{1}{N}+\frac{1}{D_{K}^{2}} \end{aligned} =DKDKMNDKDKM+MNN1+DK21

    [无池化层结构]

      作者在MobileNet v1中没有采用池化层,而是采用了步长为2的深度可分离卷积进行下采样,如下图所示:

    [MobileNet v2]

    [创新点]

    [倒残差模块]

      残差模块在ResNet中大放异彩,其过程就是先用1×1的卷积核对通道进行降维,之后3×3的卷积层进行特征提取,最后用1×1的卷积核升维。但是在MobileNet v2中,作者引入了残差模块,但是是倒残差模块。先升维再降维。这是因为深度可分离卷积本身的通道数很少了,在减少对提取特征不利,如下图左侧所示。同样作者没有采用池化层,仍然采用了步长为2的深度可分离卷积进行下采样,这里没有残差形式,但是由先升维再降维的操作。

    [ReLU6和Linear]

      作者没有采用普通的ReLU函数,而是采用用了ReLU6,特点就是,限制输出的最大值为6。作者认为不断的经过ReLU函数会丢失很多的特征,所以最后采用了Linear函数。下图就是一个模块的结构,其中 t t t为通道上扩张的倍数,一般为6。

    [MobileNet v3]

    [创新点]

    [引入轻量级注意力模型]

      作者在MobileNet v2的基础上,继续使用倒残差模块,又结合了MnasNet模型的基于squeeze and excitation结构,如下图所示为新的模块结构。作者通过减小升维的通道数来弥补引入squeeze and excitation所带来的延时。[SENet]

    [h-swish激活函数]

      原先作者设计的激活函数是  swish  x = x ⋅ σ ( x ) \text { swish } x=x \cdot \sigma(x)  swish x=xσ(x)但是 σ ( x ) \sigma(x) σ(x)计算量很大,所以作者设计了: h  -swish  [ x ] = x ReLU ⁡ 6 ( x + 3 ) 6 h \text { -swish }[x]=x \frac{\operatorname{ReLU} 6(x+3)}{6} h -swish [x]=x6ReLU6(x+3)

    [尾部结构改进]

      在平均池化之前,作者利用1×1的卷积层提高维度,导致了巨大的计算量。作者取消了后面的卷积层,先利用平均池化将featuremap的大小从7×7降到1×1再通过1×1的卷积层升维,经过作者实验证明,这样对精度没有影响,反而降低了15ms的运行时间。

    [ShuffleNet (2017)]

    ? - [ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices]

    [创新点]

    [组卷积和通道重组]

    [重组单元]

    [Xception (2017)]

    ? - [Xception: Deep Learning with Depth-wise Separable Convolutions]

    [创新点]

    [Inception v3改进]

      再Inception v3中,如下图第一张所示,结构较为复杂;作者先去除了平均池化层如下图第二张所示;之后有融合了所有的1×1卷积层的输出结果,如下图第三张所示,这里会拿出多个通道分别送入3×3的卷积层中;最终作者设计了下图第四张的结构,1×1卷积层的输出结果每一层分别输入3×3的卷积层中。

      奇妙的是,其他网络采用的深度可分离卷积是先将进行3×3的卷积层再接1×1的卷积层,而Xception正好相反,先1×1后3×3。由于这些结构都是再同一年发出的,并没有人做两种结构的对比试验。

    [Xception结构]

      作者基于ResNet设计了三种网络结构Entry,Middle和Exit,三个结构相连组成了Xception网络的结构。由下图看来,Xception比较深并不能说是真正意义上的轻量化网络,但是它改进的Inception v3值得借鉴。

    [MixNet (2019)]

    ? - [MixConv: Mixed Depthwise Convolutional Kernels]
    ? - [MixNet代码]
    ? - [参考博文:MixNet学习笔记]

    [创新点]

    [MDConv模块]

      前面提到的所有网络都是采用的1×1和3×3的卷积核尺寸,本文作者就对卷积核尺寸进行研究,探索究竟什么尺寸的卷积核更有利于提高模型的精度和速度。下图是作者在MobileNet上进行的实验:

      从上图可以得出,更大的卷积核并不能带来更好的精度,随着尺寸的增加,精度先上升后下降。另外大家都知道,低分辨率的图片适合使用小卷积核,高分辨率的图片适合用大卷积核。所以作者提出MDConv模块:

      左边是普通的深度可分离卷积,每一个通道都是和相同的卷积核卷积。而再右边的MDConv中,将通道分组,不同组的featuremap和不同大小的卷积核卷积,于是这里又产生了新的问题,分成多少组合适?每组多少通道数?卷积核的尺寸范围是多少?
      作者针对这些问题也做了很多实验。首先,当分组数为1时或者每组的卷积核相同时,都等价于深度可分离卷积。于是作者从分组数为2开始,卷积核大小为3×3开始,按奇数取值不断增加。最后作者,采用的是平分通道的方式进行MDConv。

    [MixNet]

      作者设计了MDConv,并利用AutoML设计了三种合适的网络结构MixNet-S、MixNet-M和MixNet-L
    ,结构图如下图所示:

      下图为MixNet与其他网络的对比图:

    [EfficientNet (2019)]

    ? - [EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks]
    ? - [EfficientNet代码]

    [创新点]

    [深度、宽度、分辨率的自动缩放]

      作者利用AutoML的方法对模型的深度、宽度、分辨率进行自适应调整。首先作者提出一个Baseline模型,如下图最左侧,第二到第四张是对模型宽度、深度和分辨率进行调整,最后一张是组合调整。

      作者将卷积层的运算定义为 Y i = F i ( X i ) Y_{i}=F_{i}\left(X_{i}\right) Yi=Fi(Xi)  其中 F i F_{i} Fi是卷积运算, X i X_{i} Xi是输入featuremap, Y i Y_{i} Yi是输出featuremap。 < H i , W i , C i > <H_{i}, W_{i}, C_{i}> <Hi,Wi,Ci>是featuremap的尺寸,那么卷积神经网络可以表示为: N = F k ⊙ … ⊙ F 2 ⊙ F 1 ( X 1 ) = ⨀ j = 1 … k F j ( X 1 ) \mathcal{N}=\mathcal{F}_{k} \odot \ldots \odot \mathcal{F}_{2} \odot \mathcal{F}_{1}\left(X_{1}\right)=\bigodot_{j=1 \ldots k} \mathcal{F}_{j}\left(X_{1}\right) N=FkF2F1(X1)=j=1kFj(X1)
      如果网络可以划分多个模块,那么相同的模块定义为 F L i ( X i ) \mathcal{F}^{L_{i}}\left(X_{i}\right) FLi(Xi),那么s个模块的卷积神经网络可以定义为: N = ⨀ i = 1 … s F i L i ( X ⟨ H i , W i , C i ⟩ ) \mathcal{N}=\bigodot_{i=1 \ldots s} \mathcal{F}_{i}^{L_{i}}\left(X_{\left\langle H_{i}, W_{i}, C_{i}\right\rangle}\right) N=i=1sFiLi(XHi,Wi,Ci)

      AutoML的优化目标: max ⁡ d , w , r Accuracy ⁡ ( N ( d , w , r ) ) s.t. N ( d , w , r ) = ⨀ i = 1 … s F ^ i d ⋅ L ^ i ( X ⟨ r ⋅ H ^ i , r ⋅ W ^ i , w ⋅ C ^ i ) )  Memory  ( N ) ≤ target ⁡  memory   FLOPS  ( N ) ≤  target. flops  \begin{array}{ll}{\max _{d, w, r}} & {\operatorname{Accuracy}(\mathcal{N}(d, w, r))} \\ {\text {s.t.}} & {\mathcal{N}(d, w, r)=\bigodot_{i=1 \ldots s} \hat{\mathcal{F}}_{i}^{d \cdot \hat{L}_{i}}\left(X_{\left\langle r\cdot\hat{H}_{i}, r \cdot \hat{W}_{i}, w \cdot \hat{C}_{i}\right)}\right)} \\ {} & {\text { Memory }(\mathcal{N}) \leq \operatorname{target} \text { memory }} \\ {} & {\text { FLOPS }(\mathcal{N}) \leq \text { target. flops }}\end{array} maxd,w,rs.t.Accuracy(N(d,w,r))N(d,w,r)=i=1sF^idL^i(XrH^i,rW^i,wC^i)) Memory (N)target memory  FLOPS (N) target. flops 
    其中 w , d , r w, d, r w,d,r是缩放系数, F ^ i \hat{F}_{i} F^i是卷积操作, L ^ i \hat{L}_{i} L^i是网络深度, H ^ i \hat{H}_{i} H^i W ^ i \hat{W}_{i} W^i是分辨率大小, C ^ i \hat{C}_{i} C^i是网络宽度,都是baseline模型预先训练好的参数。但是,在缩放过程中作者定义一个符合参数 ϕ \phi ϕ来统一缩放:  depth:  d = α ϕ  width:  w = β ϕ  resolution:  r = γ ϕ  s.t.  α ⋅ β 2 ⋅ γ 2 ≈ 2 α ≥ 1 , β ≥ 1 , γ ≥ 1 \begin{array}{c}{\text { depth: } d=\alpha^{\phi}} \\ {\text { width: } w=\beta^{\phi}} \\ {\text { resolution: } r=\gamma^{\phi}} \\ {\text { s.t. } \alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2} \\ {\alpha \geq 1, \beta \geq 1, \gamma \geq 1}\end{array}  depth: d=αϕ width: w=βϕ resolution: r=γϕ s.t. αβ2γ22α1,β1,γ1其中 α , β , γ \alpha, \beta, \gamma α,β,γ都是通过约束条件,在范围内找到的常数。当 w , d , r w, d, r w,d,r分别增加一倍时,网络的FLOPS分别增加 w , d 2 , r 2 w, d^2, r^2 w,d2,r2倍,所以当变化 ϕ \phi ϕ时,网络的计算量变化 ( α ⋅ β 2 ⋅ γ 2 ) ϕ \left(\alpha \cdot \beta^{2} \cdot \gamma^{2}\right)^{\phi} (αβ2γ2)ϕ倍也就约等于 2 ϕ 2^{\phi} 2ϕ
      下图是网络调整对网络性能影响:

    [EfficientNet结构]

      模型的缩放不会改变 F i {F}_{i} Fi,所以要找个好的卷积策略,作者利用了MnasNet,同样也是通过AutoML方法生成网络结构,如下图所示:

      作者并没有直接使用这种结构,而是生成一种类似的网络,取名叫EfficientNet-B0。以EfficientNet-B0为baseline,对模型进行调整:
    ①固定 ϕ = 1 \phi=1 ϕ=1,计算量相比之前会有2倍增加,进行小范围搜索,最终得到 α = 1.2 , β = 1.1 , γ = 1.15 \alpha=1.2, \beta=1.1, \gamma=1.15 α=1.2,β=1.1,γ=1.15
    ②固定 α = 1.2 , β = 1.1 , γ = 1.15 \alpha=1.2, \beta=1.1, \gamma=1.15 α=1.2,β=1.1,γ=1.15,调整 ϕ \phi ϕ,获得Efficient-B1到Efficient-B7。

      网络性能对比:

    轻量化总结

    [卷积策略]

    [网络重构]

    [AutoML]

    展开全文
  • 轻量化网络综述

    2018-05-22 15:18:06
    包含自己做的一个presentation,和相关的参考文献,shuffleNet,MobileNet v1 Mobilev2,等
  • SqueezeNet是轻量化网络的代表结构之一,其针对ImageNet数据集分类任务的模型大小只有4.8M,这还包括了最后512*1000分类的全连接层。 An Analysis of Deep Neural Network Models for Practical Applications ...

    SqueezeNet是轻量化网络的代表结构之一,不太严格的说,在轻量化模型这个范畴中,Squeezenet是最早的一个,其针对ImageNet数据集分类任务的模型大小只有4.8M,这还包括了最后512*1000分类的全连接层。
    论文如下:SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
    这个论文刚刚出现的时候,是非常惊艳的,因为16年时,一个模型动不动就有大几十兆,而一个不到0.5M的模型可以得到alxnet相似的准确率是很难得的,这使得模型向移动端部署成为可能。

    网络结构

    首先把caffe关于SqueezeNet的结构定义deploy.prototxt中的内容复制到该链接中,就可以看到网络的整体结构。
    SqueezeNet中核心的构成是Fire module,整个网络是通过一个个的Fire module连接组合而成。
    Fire module结构如下:
    fire module

    首先上一层的特征图会经过11的卷积核进行降维,这一点和bottleneck版的resnet是很像的,经过压缩的特征图会分别送入的11卷积核和3*3的卷积核中进行升维,让网络具有宽度,最后这两部分的特征图会进行通道串接,注意是串接操作,而不是resnet中的相加,而这种串接操作和inception很像。
    整个Squeezenet模型,Fire moudel模块一共有8个,随着网络的加深,特征图的通道数量也依次变多,分别为128,128,256,256,384,384,512,512,通道上升的很有规律。

    为什么模型小?

    Squeezenet模型为什么小呢,没别的,因为参数少,Squeezenet全部采用常规的空间卷积操作,在参数数量上和其他模型计算方法是一样的,所以它的模型体量小就是因为卷积核用的少,但是它并没有像论文题目中写的那样小的不超过0.5M,而是4.8M。从4.8到0.5是因为采用了模型压缩方法,但是Squeezenet本身和模型压缩是没有关系的,注意一个细节是,这个论文的二作者是song han,也就是deep compression的作者,这也就可以解释,为什么song han的deep compression和DSD算法的基础模型都用的squeezenet。
    其实如果不是squeezenet模型结构,我们即便把resnet的参数控制的足够好,也是可以得到体量很小,并且准确率不错的网络结构的。

    创新点

    SqueezeNet模型单从结构上来说其实并没有什么太出彩的点,提出的Fire module结构其实也是在借鉴Inception网络,然后模型的体积很小,但是也不是论文名字所说的0.5M,而应该是4.8M左右,整体网络结构设计也有一些残差网络和Inception网络中bottleneck的影子,所以说仔细一看,网络的本身不像论文的名字一样惊艳。
    但是,很重要的一点,深度学习再以非常快的速度发展,我们站在2018年去看2016年的模型结构本身就是不公平的,个人觉得,Squeezenet被人熟知的一个很重要的原因是它真正意义上在探索模型的体量和准确率之间的平衡,它最开始关注模型的大小的问题,而不是提高准确率。这是因为这篇论文的团队是UC Berkeley大学中专注嵌入式设备部署的一个课题组。

    SqueezeNet变体

    Squeezenet到现在已经出现了2年多了,已经出现了有很多以它为基础模型的变体网络,比如:
    在Squeezenet上加入残差直连
    在Squeezenet上进行Deep Compression
    Squeezenet用于目标检测和语义分割
    最后,如果你对Squeezenet模型有兴趣的话,强烈建议去看一看上面第三个链接,这是UC Berkeley的Squeezenet课题组在分享他们自己的工作。

    展开全文
  • 轻量化神经网络综述

    万次阅读 2018-09-28 10:33:28
    陈泰红 研究方向:机器学习、图像处理 其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学...然而,由于存储空间和功耗的限制,神经网络模型在嵌入式设备上的存储与计算...

    陈泰红

     研究方向:机器学习、图像处理

    其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

     

    导言

    深度神经网络模型被广泛应用在图像分类、物体检测等机器视觉任务中,并取得了巨大成功。然而,由于存储空间和功耗的限制,神经网络模型在嵌入式设备上的存储与计算仍然是一个巨大的挑战。

     

    目前工业级和学术界设计轻量化神经网络模型主要有4个方向:

    (1)人工设计轻量化神经网络模型;

    (2)基于神经网络架构搜索(Neural Architecture Search,NAS)的自动化设计神经网络;

    (3)CNN模型压缩;

    (4)基于AutoML的自动模型压缩。

     

    本文首先介绍基本卷积计算单元,并基于这些单元介绍MobileNet V1&V2,ShuffleNet V1&V2的设计思路。其次,最后介绍自动化设计神经网络的主流方法和基本思路。最后概述CNN模型压缩的主要方法,详细说明基于AutoML的自动模型压缩的相关算法:AMC、PockFlow以及TensorFlow lite的代码实现。

     

    1、基本卷积运算

    手工设计轻量化模型主要思想在于设计更高效的“网络计算方式”(主要针对卷积方式),从而使网络参数减少,并且不损失网络性能。本节概述了CNN模型(如MobileNet及其变体)中使用的基本卷积运算单元,并基于空间维度和通道维度,解释计算效率的复杂度。

    1.1 标准卷积

     

    图1标准卷积计算图

    图1标准卷积计算图

    HxW表示输入特征图空间尺寸(如图1所示,H和W代表特征图的宽度和高度,输入和输出特征图尺寸不变),N是输入特征通道数,KxK表示卷积核尺寸,M表示输出卷积通道数,则标准卷积计算量是HWNK²M。

    图2标准卷积计算过程

    如图3所示标准卷积在空间维度和通道维度直观说明(以下示意图省略“spatial“,”channel“,”Input“,”Output“),输入特征图和输出特征图之间连接线表示输入和输出之间的依赖关系。以conv3x3为例子,输入和输出空间“spatial”维度密集连接表示局部连接;而通道维度是全连接,卷积运算都是每个通道卷积操作之后的求和(图2),和每个通道特征都有关,所以“channel”是互相连接的关系。

    图3标准卷积:空间维度和通道维度示意图

     

    1.2 Grouped Convolution

    分组卷积是标准卷积的变体,其中输入特征通道被为G组(图4),并且对于每个分组的信道独立地执行卷积,则分组卷积计算量是HWNK²M/G,为标准卷积计算量的1/G。

    图 4分组卷积:空间维度和通道维度示意图

     

    Grouped Convlution最早源于AlexNet。AlexNet在ImageNet LSVRC-2012挑战赛上大显神威,以绝对优势夺得冠军,是卷积神经网络的开山之作,引领了人工智能的新一轮发展。但是AlexNet训练时所用GPU GTX 580显存太小,无法对整个模型训练,所以Alex采用Group convolution将整个网络分成两组后,分别放入一张GPU卡进行训练(如图5所示)。

    图5 AlexNet网络架构

     

    1.3 Depthwise convolution

    Depthwise convolution[7]最早是由Google提出,是指将NxHxWxC输入特征图分为group=C组(既Depthwise 是Grouped Convlution的特殊简化形式),然后每一组做k*k卷积,计算量为HWK²M(是普通卷积计算量的1/N,通过忽略通道维度的卷积显著降低计算量)。Depthwise相当于单独收集每个Channel的空间特征。

     

    图6 depthwise卷积

     

    图7 Depthwise卷积:空间维度和通道维度示意图

     

    1.4 pointwise convolution

    Pointwise是指对NxHxWxC的输入做 k个普通的 1x1卷积,如图8,主要用于改变输出通道特征维度。Pointwise计算量为HWNM。

    Pointwise卷积相当于在通道之间“混合”信息。

    图8 Pointwise卷积

     

    图9 Pointwise卷积:空间维度和通道维度示意图

     

    1.5 Channel Shuffle

    Grouped Convlution导致模型的信息流限制在各个group内,组与组之间没有信息交换,这会影响模型的表示能力。因此,需要引入group之间信息交换的机制,即Channel Shuffle操作。

    Channel shuffle是ShuffleNet提出的(如图 5 AlexNet也有Channel shuffle机制),通过张量的reshape 和transpose,实现改变通道之间顺序。

     

    图10 Channel shuffle:空间维度和通道维度示意图

    如图10所示Channel shuffle G=2示意图,Channel shuffle没有卷积计算,仅简单改变通道的顺序。

    2、人工设计神经网络

    MobileNet V1&V2,ShuffleNet V1&V2有一个共同的特点,其神经网络架构都是由基本Block单元堆叠,所以本章节首先分析基本Block架构的异同点,再分析整个神经网络的优缺点。

    2.1MobileNet V1

    MobileNet V1是Google第一个提出体积小,计算量少,适用于移动设备的卷积神经网络。MobileNet V1之所以如此轻量,背后的思想是用深度可分离卷积(Depthwise separable convolution)代替标准的卷积,并使用宽度因子(width multiply)减少参数量。

    深度可分离卷积把标准的卷积因式分解成一个深度卷积(depthwise convolution)和一个逐点卷积(pointwise convolution)。如1.1标准卷积的计算量是HWNK²M,深度可分离卷积总计算量是:

    一般网络架构中M(输出特征通道数)>>K²(卷积核尺寸) (e.g. K=3 and M ≥ 32),既深度可分离卷积计算量可显著降低标准卷积计算量的1/8–1/9。

    深度可分离卷积思想是channel相关性和spatial相关性解耦图12。

    图11 Channel shuffle:标准卷积和深度和分离卷积架构对比

     

    图12深度可分离卷积:空间维度和通道维度示意图

    为了进一步降低Mobilenet v1计算量,对输入输出特征通道数M和N乘以宽度因子α(α∈(0,1),d典型值0.25,0.5和0.75),深度可分离卷积总计算量可以进一降低为:

     

    2.2 ShuffleNet V1

    ShuffleNet是Face++提出的一种轻量化网络结构,主要思路是使用Group convolution和Channel shuffle改进ResNet,可以看作是ResNet的压缩版本。

    图13展示了ShuffleNet的结构,其中(a)就是加入BatchNorm的ResNet bottleneck结构,而(b)和(c)是加入Group convolution和Channel Shuffle的ShuffleNet的结构。

    图13 shuffle V1 Block架构

     

    图14 ShuffleNet V1 Block:空间维度和通道维度示意图

    如所示,ShuffleNet block最重要的操作是channel shuffle layer,在两个分组卷积之间改变通道的顺序,channel shuffle实现分组卷积的信息交换机制。

    ResNet bottleneck计算量:

    ShuffleNet stride=1计算量:

    对比可知,ShuffleNet和ResNet结构可知,ShuffleNet计算量降低主要是通过分组卷积实现。ShuffleNet虽然降低了计算量,但是引入两个新的问题:

    1、channel shuffle在工程实现占用大量内存和指针跳转,这部分很耗时。

    2、channel shuffle的规则是人工设计,分组之间信息交流存在随意性,没有理论指导。

     

    2.3 MobileNet V2

    MobileNet V1设计时参考传统的VGGNet等链式架构,既传统的“提拉米苏”式卷积神经网络模型,都以层叠卷积层的方式提高网络深度,从而提高识别精度。但层叠过多的卷积层会出现一个问题,就是梯度弥散(Vanishing)。残差网络使信息更容易在各层之间流动,包括在前向传播时提供特征重用,在反向传播时缓解梯度信号消失。于是改进版的MobileNet V2[3]增加skip connection,并且对ResNet和Mobilenet V1基本Block如下改进:

    ● 继续使用Mobilenet V1的深度可分离卷积降低卷积计算量。

    ● 增加skip connection,使前向传播时提供特征复用。

    ● 采用Inverted residual block结构。该结构使用Point wise convolution先对feature map进行升维,再在升维后的特征接ReLU,减少ReLU对特征的破坏。

    图15 Mobile V1, Mobile V2,ResNet架构对比

     

    2.4 ShuffleNet V2

    Mobile V1&V2,shuffle Net V1 在评价维度的共同特征是:使用FLOPS作为模型的评价标准,但是在移动终端设备时需要满足各个条件:参数少、速度快和精度高,单一的参数少并不一定实现速度快和精度高。

    Face++提出的ShuffeNet V2,实现使用直接指标(运算速度)代替间接评价指标(例如FLOPS),并在ARM等移动终端进行评估。并且基于减少计算量提出四个原则:

    (1)使用输入和输出通道宽度不同增加卷积的计算量;

    (2)组卷积增加MAC;

    (3)多分支降低运算效率;

    (4)元素级运算增加计算量。

    如图16所示

    (a)ShuffleNet 基本单元;

    (b)用于空间下采样 (2×) 的 ShuffleNet 单元;

    (c)ShuffleNet V2 的基本单元;

    (d)用于空间下采样 (2×) 的 ShuffleNet V2 单元。

    ShuffleNet V2 引入通道分割(channel split)操作, 将输入的feature maps分为两部分:一个分支为shortcut流,另一个分支含三个卷积(且三个分支的通道数一样)。分支合并采用拼接(concat),让前后的channel数相同,最后进行Channel Shuffle(完成和ShuffleNet V1一样的功能)。元素级的三个运算channel split、concat、Channel Shuffle合并一个Element-wise,显著降低计算复杂度。

     

    图16 ShuffeNet V1 VS ShuffeNet V2架构

    ShuffleNet V2虽然提出减少计算量的四个原则,基本卷积单元仍采用Depthwise和Pointwise降低计算量,但是没有提出如何实现提高准确率,推断延迟等评价指标。

    对比MobileNet V1&V2,ShuffleNet V1&V2模型(图17),手工设计轻量化模型主要得益于depth-wise convolution减少计算量,而解决信息不流畅的问题,MobileNet 系列采用了 point-wise convolution,ShuffleNet 采用的是 channel shuffle。

    图17 卷积运算汇总参考图

     

    3、NAS与神经网络架构搜索

    卷积神经网络(CNN)已被广泛用于图像分类、人脸识别、目标检测和其他领域。然而,为移动设备设计 CNN 是一项具有挑战性的工作,因为移动端模型需要体积小、速度快,还要保持精准。尽管人们已经做了大量努力来设计和改进移动端模型,第二章所总结MobileNet系列、ShuffleNet系列。但手动设计高效模型仍然是一项挑战,因为要考虑的因素太多。AutoML神经架构搜索的发展促进移动端 CNN 模型的自动化设计。

    NAS的算法综述可参看本人之前写的一篇综述文章《让算法解放算法工程师----NAS综述》[10]。在综述文章中有关NAS的搜索空间,搜索策略,性能评估策略均已经做了总结,而且NAS的复现比较耗费GPU资源(NasNet做实验时间使用500块GPUx4天,一般项目组的资源难以望其项背),本章节主要是比较NAS设计的网络与传统手工设计神经网络异同,以及NAS的发展方向。

    3.1 NasNet

    NasNet是基于AutoML方法,首先在CIFAR-10这种小数据集上进行神经网络架构搜索,以便 AutoML 找到最佳卷积层并灵活进行多次堆叠来创建最终网络,并将学到的最好架构迁移到ImageNet图像分类和 COCO 对象检测中。NAS在搜索时使用的基本运算如下,包括常用的depthwise-separable,pool,3x3卷积等,使得block运行时对输入尺寸没有要求(例如卷积,pooling等操作)。这样图像由cifar的32 x32到imagenet的大尺寸图片均可实现分类任务。

     

    NasNet设计基于人类的经验,设计设计两类 Cells:Normal cell 和Reduction cell(图 19) 。Normal cell不改变输入feature map的大小的卷积, 而reduction cell将输入feature map的长宽各减少为原来的一半的卷积,是通过增加stride的大小来降低size。通过NasNet构建堆叠模块(cells)的深度实现架构的设计。

    图18 NasNet基本Cell

     

     

    NasNet首先基于人类的一些先验知识:卷积运算类型、Cell连接方式,Cell内的多分支拓扑结构,这些是积木。NasNet的搜索算法就是搭积木的过程,不断尝试各种可行的架构,通过代理评价指标确定模型的性能,实现全局最优搜索。

    图19 NasNet分类任务基本架构

     

    NasNet虽然实现准确率state-of-art水平,但是推断延时较大,在移动端对实时性苛刻场景难以大规模运用。

     

    3.2 MnasNet

    MnasNet是Google提出的探索了一种使用强化学习设计移动端模型的自动化神经架构搜索方法,并且实现准确率和运算速率突破。MnasNet 能够找到运行速度比 MobileNet V2快 1.5 倍、比 NASNet 快 2.4 倍的模型,同时达到同样的 ImageNet top-1 准确率。

     

    图20 MnasNet搜索空间

    MnasNet的搜索空间与NasNet类似,但是搜索目标函数同时考虑准确率和速率:

    m 表示模型,ACC(m) 表示目标模型的准确率,LAT(m) 表示耗时,T 表示目标耗时。而论文提出一种策略,基于梯度的强化学习方法寻找帕雷托最优,同时对 ACC(m) 和 LAT(m) 帕雷托改善。

    图21 MnasNet基本架构

    如图21显示了 MnasNet 算法的神经网络架构,包含一系列线性连接 blocks,每个 block 虽然包含不同类别的卷积层,每一卷积层都包含 depthwise convolution 卷积操作,最大化模型的计算效率。但是和 MobileNet V1&V2 等算法有明显不同:

    1、模型使用更多 5x5 depthwise convolutions。

    2、层分级的重要性。很多轻量化模型重复 block 架构,只改变滤波器尺寸和空间维度。论文提出的层级搜索空间允许模型的各个 block 包括不同的卷积层。

    3、论文使用强化学习的思路,首先确定了 block 的连接方式,在每个 block 使用层级搜索空间,确定每个卷积层的卷积类型,卷积核、跳跃层连接方式,滤波器的尺寸等。其基本策略还是延续人工设计神经网络思路。

     

    3.3 NAS发展方向

    1、NAS的搜索空间有很大的局限性。目前NAS算法仍然使用手工设计的结构和blocks,NAS仅仅是将这些blocks堆叠。人工痕迹太过明显,NAS还不能自行设计网络架构。NAS的一个发展方向是更广泛的搜索空间,寻找真正有效率的架构,当然对搜索策略和性能评估策略提出更高的要求。

    2、以google的NAS为基础,很多模型专注于优化模型的准确率而忽视底层硬件和设备,仅考虑准确率高的模型难以在移动终端部署。研究针对多任务和多目标问题的 NAS,基于移动端的多目标神经网络搜索算法,评价指标从准确率扩展到功耗、推断延时、计算复杂度、内存占用、FLOPs等指标,解决移动端实际应用问题。

    3、目前的NAS发展是以分类任务为主,在分类任务设计的模型迁移到目标检测语义分割模型中。

    Google在Cloud AutoML不断发力,相比较而言之前的工作只是在图像分类领域精耕细作,如今在图像语义分割开疆扩土,在arxiv提交第一篇基于NAS(Neural network architecture)的语义分割模型[12](DPC,dense prediction cell),已经被NIPS2018接收,并且在Cityscapes,PASCAL-Person-Part,PASCAL VOC 2012取得state-of-art的性能(mIOU超过DeepLabv3+),和更高的计算效率(模型参数少,计算量减少)。

    如果让强化学习自己选择模型的架构,比如 Encoder-Decoder,U-Net,FPN等,相信在目标检测、实体分割等领域会有更好的表现。

     

    4、AutoML自动模型压缩

    CNN模型替代了传统人工设计(hand-crafted)特征和分类器,不仅提供了一种端到端的处理方法,不断逼近计算机视觉任务的精度极限的同时,其深度和尺寸也在成倍增长。工业界不仅在设计轻量化模型(MobileNet V1&V2,ShuffleNet V1&V2系列),也在不断实践如何进一步压缩模型,在便携式终端设备实现准确率、计算速率、设备功耗、内存占用的小型化。

    CNN模型压缩是在计算资源有限、能耗预算紧张的移动设备上有效部署神经网络模型的关键技术。本文简介概述CNN模型压缩主流算法,重点介绍如何实现基于AutoML的模型压缩算法。

    4.1 CNN模型压缩概述

    CNN模型压缩是从压缩模型参数的角度降低模型的计算量。

    在第2节介绍的人工设计轻量型神经网络结构,多是依赖Grouped Convlution、Depthwise、Pointwise、Channel Shuffle这些基本单元组成的Block,但是这些设计方法存在偶然性,不是搜索空间的最优解。

    韩松提出的Deep compression[5]获得 ICLR2016年的best paper,也是CNN模型压缩领域经典之作。论文提出三种方法:剪枝、权值共享和权值量化、哈夫曼编码。剪枝就是去掉一些不必要的网络权值,只保留对网络重要的权值参数;权值共享就是多个神经元见的连接采用同一个权值,权值量化就是用更少的比特数来表示一个权值。对权值进行哈夫曼编码能进一步的减少冗余。 作者在经典的机器学习算法,AlexNet和VGG-16上运用上面这些模型压缩的方法,在没有精度损失的情况下,把AlexNet模型参数压缩了35倍,把VGG模型参数压缩了49倍,并且在网络速度和网络能耗方面也取得了很好的提升。

    CNN模型压缩沿着Deep compression的思路,压缩算法可分为四类:参数修剪和共享、低秩分解、迁移/压缩卷积滤波器和知识蒸馏等。基于参数修剪(parameter pruning)和共享的方法关注于探索模型参数中冗余的部分,并尝试去除冗余和不重要的参数。基于低秩分解(Low-rank factorization)技术的方法使用矩阵/张量分解以估计深层 CNN 中最具信息量的参数。基于迁移/压缩卷积滤波器(transferred/compact convolutional filters)的方法设计了特殊结构的卷积滤波器以减少存储和计算的复杂度。而知识精炼(knowledge distillation)则学习了一个精炼模型,即训练一个更加紧凑的神经网络以再现大型网络的输出结果。

    4.2 AMC

    传统的模型压缩技术依赖手工设计的启发式和基于规则的策略,需要算法设计者探索较大的设计空间,在模型大小、速度和准确率之间作出权衡,而这通常是次优且耗时的。西安交通大学与Google提出了适用于模型压缩的AMC[8](AutoML for Model Compres- sion,AMC),利用强化学习提供模型压缩策略。
    这种基于学习的压缩策略性能优于传统的基于规则的压缩策略,具有更高的压缩比,在更好地保持准确性的同时节省了人力成本。

    1、Problem Definition

    模型压缩在维度上可分为Fine-grained pruning和Coarse-grained/structured pruning。Fine-grained pruning主要实现剪枝权重的非重要张量,实现非常高的压缩率同时保持准确率。Coarse-grained pruning旨在剪枝权重张量的整个规则区域(例如,通道,行,列,块等),例如在MobileNet V1&V2均存在宽度因子α对通道特征进行瘦身,但是宽度因子α对每一层的通道特征都固定比率压缩。

    假设权重张量是n x c x k x k,c,n分别是输入输出通道数,k是卷积核尺寸。对于fine-grained pruning,稀疏度定义为零元素的数量除以总元素的数量既zeros/(n x c x k x h),而channel pruning,权重张量缩小为n x c’ x k x k,既稀疏度为c’/c。

    但是压缩模型的精度对每层的稀疏性非常敏感,需要细粒度的动作空间。因此,论文在一个离散的空间上搜索,而是通过 DDPG agent 提出连续压缩比控制策略(图 20),通过反复试验来学习:在精度损失时惩罚,在模型缩小和加速时鼓励。actor-critic 的结构也有助于减少差异,促进更稳定的训练。

    图 20 AMC引擎示意图

     

     

    2、搜索空间

    AMC对每一层t定义了11个特征表示st的状态:

    t是层序号,卷积核尺寸是n x c x k x k,输入特征尺寸是c x h x w,FLOPs[t]是Lt层的FLOPs,Reduced是上一层减少的FLOPs,Rest表示下一层的FLOPs,这些特征全部归一化到[0, 1]。

     

    3、搜索评估策略

    通过限制动作空间既每一卷积层层的稀疏率(sparsity ratio),论文提出分别针对latency-critical和quality-critical应用提出两种损失函数:

    对于latency-critical的AI应用(例如,手机APP,自动驾驶汽车和广告排名),AMC采用资源受限的压缩(resource-constrained compression),在最大硬件资源(例如,FLOP,延迟和模型大小)下实现最佳精度;

    对于quality-critical的AI应用(例如Google Photos),AMC提出精度保证的压缩(accuracy-guaranteed compression),在实现最小尺寸模型的同时不损失精度。

     

    3、结论

    本文提出AutoML模型压缩(AMC),利用增强学习自动搜索设计空间,大大提高了模型压缩质量。我们还设计了两种新的奖励方案来执行资源受限压缩和精度保证压缩。在Cifar和ImageNet上采用AMC方法对MobileNet、MobileNet-v2、ResNet和VGG等模型进行压缩,取得了令人信服的结果。在谷歌Pixel1手机上,我们将MobileNet的推理速度从8.1fps提升到16.0 fps。AMC促进了移动设备上的高效深度神经网络设计。

    论文提出的压缩方法,仅仅从通道特征的稀疏度考虑,压缩算法粗放,没有全局考虑模型的其他能力,另外论文目前没有公布源码,论文的复现还需要一些细节需要商榷。

     

    4.3 PocketFlow

    腾讯AI Lab机器学习中心近日宣布成功研发出世界上首款自动化深度学习模型压缩框架——PocketFlow,但是截止笔记成稿时仍未公布源码。

    PocketFlow框架主要由两部分组件构成,分别是模型压缩/加速算法组件和超参数优化组件,具体结构如所示。

    图21 PocketFlow框架示意图

    开发者将未压缩的原始模型作为PocketFlow框架的输入,同时指定期望的性能指标,例如模型的压缩和/或加速倍数;在每一轮迭代过程中,超参数优化组件选取一组超参数取值组合,之后模型压缩/加速算法组件基于该超参数取值组合,对原始模型进行压缩,得到一个压缩后的候选模型;基于对候选模型进行性能评估的结果,超参数优化组件调整自身的模型参数,并选取一组新的超参数取值组合,以开始下一轮迭代过程;当迭代终止时,PocketFlow选取最优的超参数取值组合以及对应的候选模型,作为最终输出,返回给开发者用作移动端的模型部署。

    4.4 TensorFlow Lite

    TensorFlow Lite近日发布了一个新的优化工具包,引入post-training模型量化技术[9], 将模型大小缩小了4倍,执行速度提升了3倍!通过量化模型,开发人员还将获得降低功耗的额外好处。这对于将模型部署到手机之外的终端设备是非常有用的(注:目前无参考文献论述TensorFlow Lite 的post-training模型量化原理,但是从源代码可见压缩方式是采用Int8)。

    实验环境需要卸载tensorflow并安装tf-nightly。

    pip uninstall -y tensorflow
    pip install -U tf-nightly

    量化压缩模型实现很简单,一下程序完成下载resnet_v2_101.tgz模型并解压,设置converter.post_training_quantize = True,即可自动化实现,如所示, 作者在GPU M40实验,量化输出resnet_v2_101_quantized.tflite,仅用时3.76秒实现模型resnet_v2_101的量化压缩,模型尺寸从179MB压缩到45MB(图22),优化后的模型在ImageNet  top-1 准确率是76.8,与压缩前模型准确率相同。

     

     

     

     

    图22 post-training模型量化实验目录

     

    以上仅为个人阅读论文后的理解,总结和一些思考,观点难免偏差,望读者以怀疑的态度阅读,欢迎交流指正。

    [1]      Chollet, F.: Xception: Deep learning with depthwise separable convolutions. arXiv preprint (2016)

    [2]      Howard, A.G., Zhu, M., Chen, B., Kalenichenko, D., Wang, W., Weyand, T., An- dreetto, M., Adam, H.: Mobilenets: Efficient convolutional neural networks for mobile vision applications. arXiv preprint arXiv:1704.04861 (2017)

    [3]      Sandler, M., Howard, A., Zhu, M., Zhmoginov, A., Chen, L.C.: Inverted residuals and linear bottlenecks: Mobile networks for classification, detection and segmenta- tion. arXiv preprint arXiv:1801.04381 (2018)

    [4]      Zhang, X., Zhou, X., Lin, M., Sun, J.: Shufflenet: An extremely efficient convolu- tional neural network for mobile devices. arXiv preprint arXiv:1707.01083 (2017)

    [5]      Han, S., Mao, H., Dally, W.J., 2015a. Deep compression:Compressing deep neural networks with pruning,trained quantization and huffman coding. arXiv preprint arXiv:1510.00149(2015)

    [6]      Z. Qin, Z. Zhang, X. Chen, and Y. Peng, “FD-MobileNet: Improved MobileNet with a Fast Downsampling Strategy,” in arXiv:1802.03750, 2018.

    [7]      F. Chollet, “Xception: Deep Learning with Depthwise Separable Convolutions,” in Proc. of CVPR, 2017.

    [8]      Yihui He, Ji Lin, Zhijian Liu, Hanrui Wang, Li-Jia Li, and Song Han. AMC: AutoML for Model Compression and Acceleration on Mobile Devices. arXiv preprint arXiv: 1802.03494 (2018)

    [9]  https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/tutorials/

    [10]   让算法解放算法工程师----NAS综述,https://zhuanlan.zhihu.com/p/44576620

    [11]   Mingxing Tan, Bo Chen, Ruoming Pang, Vijay Vasudevan, and Quoc V Le. Mnasnet: Platform-aware neural architecture search for mobile. arXiv preprint arXiv:1807.11626, 2018.

    [12]   Liang-Chieh Chen,Maxwell D. Collins,Yukun Zhu,George Papandreou: Searching for Efficient Multi-Scale Architectures for Dense Image Prediction .arXiv preprint arXiv:1809.04184 (2018)

    展开全文
  • 轻量化网络结构——SqueezeNet

    千次阅读 2018-09-12 22:53:03
    amp;lt;0.5MB model size》 UC Berkely 和 Stanford ...1.相同准确率下,更少参数的模型有几点好处: 1)更加高效的分布式训练 2)向客户端提供新模型的开销更小 3)FPGA和嵌入式设备部署更便利 ...
  • 轻量化网络:MobileNets

    万次阅读 多人点赞 2017-12-20 10:25:55
    MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications(MobileNets paper)是CVPR-2017一篇paper,作者均来之Google,其提出一种“新”的卷积方式来设计网络,主要针对移动端设备所...
  • 写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确。...模型轻量化方法 卷积核分解:使用1xN和NX1卷积核代替NXN卷积核; 使用深度压缩deep compression方法网络剪枝、量化、哈弗曼编码; 奇
  • 深度学习,尤其是深度卷积网络的迅猛发展,使得其在存储和算力奢侈的GPU(多GPU)上的部属趋于成熟。然而,将基于深度CNN的方法有效移植到存储和算力有限的...为解决这一核心挑战,我们就需要研究网络轻量化,具体...
  • 轻量化网络:MobileNet v3解析

    千次阅读 2020-04-13 22:46:16
    原文:Searching for ...MobileNet v3发表于2019年,该v3版本结合了v1的深度可分离卷积、v2的Inverted Residuals和Linear Bottleneck、SE模块,利用NAS(神经结构搜索)来搜索网络的配置和参数。 mobilenet-...
  • 总结今年来的几个轻量化模型:SqueezeNet、Xception、MobileNet、ShuffleNet 下面给出时间轴: 2016.02 伯克利&amp;amp;斯坦福提出 SqueezeNet 2016.10 google提出 Xception 2017.04 google提出 MobileNet ...
  • 概述 深度神经网络模型被广泛应用在图像分类、物体检测等机器视觉任务中,并取得了巨大成功。然而,由于存储空间和功耗的限制,神经网络...轻量化神经网络牵涉到的基础知识(如分组卷积、1x1点卷积、深度卷积(dep...
  • 轻量化网络:PeleeNet及其Pelee-SSD解析

    千次阅读 2019-02-19 23:10:43
    基于上述改进,Pelee分类网络的总体结构如下: Pelee-SSD目标检测网络 以PeleeNet为主干(backbone)的SSD目标检测网络,具备轻量化的特点,非常适合移动端的部署。具体结构改进包括以下三点: 1)Feature Map ...
  • VCollab—大数据轻量化、可视化工具

    千次阅读 2020-03-03 11:28:51
    VCollab是全球首屈一指的CAD/CAE仿真数据轻量化、可视化和共享技术开发者,可以成功地帮助制造企业的设计人员、仿真人员、优化人员、产品经理在不需要复杂的架构或昂贵的CAD/CAE软件前提下直接读取仿真结果、实现...
  • 轻量化ViewController的几个小技巧

    千次阅读 2015-10-11 22:47:10
    轻量化ViewControllerMVC最令人头疼的问题可能就是随着项目愈发复杂,ViewController的代码也会变得越来越冗长。阅读了objc的《Lighter View Controllers》和《Clean Table View Code》这两篇文章之后,总结了一些...
  • 引言 自2012年AlexNet以来,卷积神经网络(简称CNN)在图像分类、图像分割、目标检测等领域获得广泛应用。...由于神经网络的性质,为了获取更好的性能,网络的层数不断增加,从7层 AlexNet 到16层 VGG,再从...
  • 如何轻量化深度学习模型

    千次阅读 2020-05-25 10:33:37
    概述卷积神经网络依靠神经网络中数以千万计的网络参数共同参与计算,存在网络结构复杂,运算大,速度慢的缺点,并且很难移植到嵌入式设备中。随着网络模型层数越来越深,参数越来越多,减少他们的大小和计算损耗至...
  • 轻量好用的神经网络模型可视工具netron

    万次阅读 多人点赞 2019-01-08 08:43:22
    轻量好用的神经网络模型可视化工具netron简介支持的框架安装方法测试 ...相比tensorflow它更加轻量化,而且支持各种框架。 支持的框架 support for: ONNX (.onnx, .pb, .pbtxt), Keras ...
  • 前言 最近在面试,每天会被考到很多知识点,这些知识点有些我已经看了十几遍...1.1 轻量化网络 网络名称 记忆点 备注 MobileNetV1 深度可分离卷积替换传统卷积 计算量和参数量下降为原来的1/Dk^2(Dk为
  • DeLighT :深度和轻量化的Transformer

    千次阅读 2021-04-18 09:51:17
    然而,这样的缩放显著增加了网络参数的数量(例如,T5和GPT-3分别有110亿个和1750亿个参数),并使学习复杂,也就是说,这些模型要么需要非常大的训练库或特定的的正则。 在本篇文章中介绍一篇论文,该论文引入了...
  • 伴随着互联网的发展,越来越多的BIM用户希望在Web端直接浏览三维模型。传统的BIM应用程序都基于桌面客户端,且需要较高的计算机配置:高频CPU、大内存、独立显卡。...三维模型轻量化主要包括两个方面:模型轻量化
  • 轻量网络 - PVANet & SuffleNet

    千次阅读 2017-07-28 23:56:22
    PVANet 论文:PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection 【点击下载】 Caffe代码:【Github】 设计了一种轻量级的网络,取名叫 PVANet,特点是 Channel少、Layer多,在 ...
  • 在这里,我们将使用经典的倒立摆gym环境来构建一个标准的深度Q网络(DQN)模型,以说明如何开始使用Lightning来构建RL模型。 在本文中,我们将讨论: 什么是lighting以及为什么要将它应用于RL 标准DQN模型简介 使用...
  • 轻量级深度学习网络——ESPNet v2

    千次阅读 2019-07-03 18:33:29
    作者介绍了一种轻量、效率高、通用的卷积神经网络ESPNet v2,用于对可视数据和顺序数据进行建模。相比前一代网络,v2使用逐点群卷积和深度空洞可分离卷积。作者在四个不同的任务上使用该网络进行测试包括对象分类...
  • 作者的项目地址:代码 论文作者:Zheng Hui 西安电子科技大学 一、简单介绍 受IDN(CVPR2018)的的启发,文章提出了Multi-distillation模块,实现...1、提出了轻量化的Multi-distillation网络,来快速和准确的做...
  • 轻量级神经网络架构综述

    千次阅读 2020-10-07 10:09:55
    分别是人工设计轻量级神经网络、神经网络模型压缩算法和基于神经网络架构搜索的自动神经网络架构设计,同时简要总结和分析了每种方法的特点,并重点介绍了典型的构建轻量级神经网络的算法.最后,总结现有的方法,并给...
  • 这篇文章呢主要讲的是轻量化网络,我们主要是介绍两种主要的网络,一个是MobileNet,另一个是ShuffleNet。此外,我们还会分享一些轻量化模型的方法和知识。(如果有不周到的地方还请父老乡亲们多多指出,跪谢!) ...
  • MobileNet轻量网络

    千次阅读 2018-01-13 19:43:28
    基于移动端(手机或者...MobileNet网络是谷歌的研究团队有针对的开发的轻量级、小型的深度网络;可以使用在IOS或Android平台; 苹果的机器学习框架集成了目前主流的大多深度学习的应用,其中就有MobileNet的实现 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,906
精华内容 62,362
关键字:

网络轻量化的方法