轻量化网络系列 | 解读SqueezeNet、SqueezeNext

2021年3月25日 9点热度 0条评论 来源: 麻瓜1号

SqueezeNet 论文原文:SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size

SqueezeNext 论文原文:SqueezeNext: Hardware-Aware Neural Network Design

目录

1. SqueezeNet

文章标题:SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size

作者单位:DeepScale;UC Berkeley;Stanford University

数据集:ImageNet

网络精度:TOP-1 Accuracy 57.5%、TOP-5 Accuracy 80.3%(和 AlexNet 差不多),但模型仅为 0.47MB (比 AlexNet 小 510 倍)。【但是这里要注意的是,SqueezeNet 本身的实际模型大小为 4.8MB ,其自身并不具备将模型压缩至 0.47MB 的能力,是因为这里还利用了 Deep Compression 的技术对模型做进一步压缩,有标题党嫌疑】

1.1 核心思路

  1. 用1x1卷积替代3x3卷积:1x1卷积比3x3卷积少9倍的参数量;
  2. 减少3x3卷积的输入通道数:3×3卷积层的参数量=输入通道数×卷积核层数×(3×3),所以文章认为不仅需要减少3x3卷积的使用(第一条),在使用3x3卷积时也要减少输入通道数;
  3. 后置下采样层位置(3-4个Fire Module之后才接着一个池化层,不同于传统的卷积-池化-卷积-池化…):文章认为更大的特征图拥有更多的信息(我认为这或许也是精度和模型size之间的一种tradeoff,不可避免地,更大的特征图会让此特征图后的模型参数量和计算量增加,那么达到了增加网络精度的目的,但是同时模型size也跟着变大了)。

简而言之,核心思路第一、第二条主要为了减小模型的size,而第三条主要为了提高模型精度,但同时也增大了模型的size。

1.2 详解

1. Fire Module


注:上图 squeeze 和 expand 中的 1x1 卷积和 3x3 卷积的数量和比例并不是固定的,可进行调整。

Fire Module 由两部分组成:squeeze 和 expand。

squeeze 部分只包含 1x1 卷积(为什么这么设计?对应核心思路第一条);

expand 部分既有 1x1 卷积也有 3x3 卷积(前一层的特征图分别经过 1x1卷积和 3x3 卷积,将得到的新特征图按照通道进行拼接[这里借鉴了 Inception ,这里的3x3卷积进行了补零操作,所以整个 Fire Module 过程中的图像分辨率都保持不变,仅是通道数发生了变化)。

在实际使用 Fire Module 时,应该设置 squeeze 的 1x1 卷积个数小于 expand 中的卷积核个数之和(包括 1x1 卷积和 3x3 卷积),以保证 3x3 卷积的输入通道数比较小(对应核心思路第二条)。

2. 网络结构


注:left to right : SqueezeNet, SqueezeNet with simple bypass, SqueezeNet with complex bypass

其中,上图中间和最右侧结构借鉴了 ResNet 的思想。

其实,SqueezeNet 的架构也是借鉴了 VGG 的形式,对卷积(Fire Module)进行堆叠。这里最后一层的全连接层替换成了全局平均池化,也大大减少了参数量。

3. SqueezeNet的具体参数

4. SqueezeNet的性能表现

SqueezeNet 在 ImageNet 数据集上的 TOP-1 Accuracy 为 57.5%,TOP-5 Accuracy 为 80.3%,与 AlexNet 相似。

2. SqueezeNext

文章标题:SqueezeNext: Hardware-Aware Neural Network Design

作者单位:EECS;UC Berkeley

数据集:ImageNet

网络精度:TOP-1 Accuracy 59.24%(1.0 SqueezeNext 23v5)

2.1 核心思路

SqueezeNext 是基于 SqueezeNet 进行改进的“软硬兼并”的轻量化网络,以往的论文大多都只讲了网络如何设计,并没有涉及硬件,而 SqueezeNext还从硬件角度分析如何提速。基于 SqueezeNet 的改进:

  1. 将 SqueezeNet 中的 two-stage squeeze module(也就是Fire Module)并为一步,减少了通道数进而减少了参数;
  2. 将3x3卷积分解(low rank filters)为 3x1 卷积和 1x3 卷积,参数量由 k 2 k^2 k2 降为 2k,同时移除了 Fire Module 第二步中的 1x1 卷积分支;
  3. 引入 ResNet 的 shortcut 结构;
  4. 通过硬件实现的结果发现,前面层的 block 计算效率低,因而减少前面层的 block 数量,增加后面层的 block 数量。

另外,文章多次提及深度可分离卷积在硬件上的运行效果不好(计算密度差)。

2.2 详解

1. ShuffleNext的block(最右侧)

最后一个 1x1 卷积的作用是将通道数升回至初始输入通道数,以进行相加操作。

更为直观的 block 结构:

2. 网络结构

在硬件实现前的结构设计:

其中,不同颜色的 block 代表特征图的分辨率发生变化,绿色为平均池化层,黑色为全连接层。

作者在上述结构的基础上,进行不同网络结构 Inference 时间比较实验:

在硬件实现后的结构设计:

3. SqueezeNext的性能表现

不论是 SqueezeNet 还是 SqueezeNext ,其主要比较对象是 AlexNet,Squeeze 系列的精度都比 MobileNet 系列低。

    原文作者:麻瓜1号
    原文地址: https://blog.csdn.net/weixin_48249563/article/details/110222244
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。