SqueezeNet/SqueezeNext简述 | 轻量级网络
SqueezeNet系列是比较早期且经典的轻量级网络,SqueezeNet使用Fire模块进行参数压缩,而SqueezeNext则在此基础上加入分离卷积进行改进。虽然SqueezeNet系列不如MobieNet使用广泛,但其架构思想和实验结论还是可以值得借鉴的。
来源:晓飞的算法工程笔记 公众号
SqueezeNet
论文: SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size

Introduction
在深度学习崭露头角时候,很多研究都关注如何提高网络的准确率,而SqueezeNet则是早期开始关注轻量化网络的研究之一。论文的初衷是通过优化网络的结构,在与当前流行网络的准确率相差不大的情况下,大幅减少模型的参数。
SqueezeNet: Preserving Accuracy with Few Parameters
Architectural Design Strategies
论文的轻量级网络设计主要包含以下策略:
- 替换$3\times 3$卷积为$1\times 1$卷积,由于$1\times 1$卷积比$3\times 3$卷积有9倍的参数减少。
- 减少$3\times 3$卷积的输入维度,$3\times 3$卷积的总参数量为(number of input channels)(number of filters)(3*3),使用squeeze layers降低输入维度,能够降低整体的计算量。
- 下采样操作尽量安排在网络较后的阶段,这样卷积层能够有较大的特征图,保存更多的信息,从而提高准确率。
策略1和策略2主要为了减少网络的参数但保持准确率,策略3则是为了在有限的参数下最大化准确率。
The Fire Module

SqueezeNet的核心模块为Fire模块,结构如图1所示,输入层先通过squeeze卷积层($1\times 1$卷积)进行维度压缩,然后通过expand卷积层($1\times 1$卷积和$3\times 3$卷积混合)进行维度扩展。Fire模块包含3个参数,分别为squeeze层的$1\times 1$卷积核数$s_{1x1}$、expand层的$1\times 1$卷积核数$e_{1x1}$和expand层的$3\times 3$卷积核数$e_{3x3}$,一般$s_{1x1}<(e_{1x1}+e_{3x3})$
The SqueezeNet Architecture

SqueezeNet的结构如表1所示,在conv1、fire4、fire8和conv10后添加池化层进行池化操作,网络中逐步提高输出维度。每个squeeze层和expand层的输出都通过ReLU激活,而fire9模块后面会接50%的Dropout。
Evaluation of SqueezeNet

与AlexNet相比,相同准确率下,SqueezeNet仅需要1/50的参数量,量化后,最多可以缩小到1/510的参数量。
CNN Microarchitecture Design Space Exploration

论文对Fire模块的设定进行了探索实验,主要对比squeeze层的压缩比例以及expand层中的$3\times 3$卷积占比。
CNN Macroarchitecture Design Space Exploration


论文对网络的微架构进行了探索实验,主要是研究短路连接对网络的影响,对比的网络结构如图2所示。
Conclusion
SqueezeNet作为早期的轻量级网络研究工作,虽然准确率对比的是AlexNet,但其网络压缩比是相当可观的,Fire模块的设计也十分新颖。
SqueezeNext
论文: SqueezeNext: Hardware-Aware Neural Network Design

Introduction
SqueezeNext是SqueezeNet实战版升级,直接和MobileNet对比性能。SqueezeNext全部使用标准卷积,分析实际推理速度,优化的手段集中在网络整体结构的优化。
SqueezeNext Design

SqueezeNext的设计沿用残差结构,没有使用当时流行的深度卷积,而是直接使用了分离卷积,设计主要基于以下策略:
Low Rank Filters
低秩分解的核心思想就是将大矩阵分解成多个小矩阵,这里使用CP分解(Canonical Polyadic Decomposition),将$K\times K$卷积分解成$K\times 1$和$1\times K$的分离卷积,参数量能从$K^2$降为$2K$。Bottleneck Module
参数量与输入输出维度有关,虽然可以使用深度卷积来减少计算量,但是深度卷积在终端系统的计算并不高效。因此采用SqueezeNet的squeeze层进行输入维度的压缩,每个block的开头使用连续两个squeeze层,每层降低1/2维度。Fully Connected Layers
在AlexNet中,全连接层的参数占总模型的96%,SqueezeNext使用bottleneck层来降低全连接层的输入维度,从而降低网络参数量。

基础的1.0-SqNxt-23结构如图3所示,中间的block均为SqueezeNext block,第一个block为正常的卷积,最后两个block分别为bottleneck模块以及全连接层。
Result

论文对比了不同网络以及不同版本的SqueezeNext,包括不同的网络长度,以及加入不同的结构。表中的1.0代表基础的层维度设置,G代表卷积的group size设置为2,后面的数字为总层数,IDA代表使用Iterative Deep Aggregation,融合多层进行输出。

另外论文也对比了更宽的网络的性能,对维度进行了倍数放大。

v5的结构如图9,在模拟硬件性能实验结果中发现,维度越低,计算性能也越低效,于是将更多的层操作集中在维度较高的block。
Conclusion
SqueezeNext在SqueezeNet的压缩思想上,结合分离卷积进行参数压缩改进,文中的模拟硬件推理性能的实验做的很精彩,可以看到作者如何一步一步地改进网络的整体结构,有兴趣的可以去看看原文。
CONCLUSION
SqueezeNet系列是比较早期且经典的轻量级网络,SqueezeNet使用Fire模块进行参数压缩,而SqueezeNext则在此基础上加入分离卷积进行改进。虽然SqueezeNet系列不如MobieNet使用广泛,但其架构思想和实验结论还是可以值得借鉴的。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

SqueezeNet/SqueezeNext简述 | 轻量级网络的更多相关文章
- ShuffleNetV1/V2简述 | 轻量级网络
ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大 ...
- MobileNetV1/V2/V3简述 | 轻量级网络
MobileNet系列很重要的轻量级网络家族,出自谷歌,MobileNetV1使用深度可分离卷积来构建轻量级网络,MobileNetV2提出创新的inverted residual with line ...
- 图像分类丨浅析轻量级网络「SqueezeNet、MobileNet、ShuffleNet」
前言 深度卷积网络除了准确度,计算复杂度也是考虑的重要指标.本文列出了近年主流的轻量级网络,简单地阐述了它们的思想.由于本人水平有限,对这部分的理解还不够深入,还需要继续学习和完善. 最后我参考部分列 ...
- 轻量级网络 - PVANet & SuffleNet
一. PVANet 论文:PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection [点击下载] C ...
- ESPNet/ESPNetV2:空洞卷积金字塔 | 轻量级网络
ESPNet系列的核心在于空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相对于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高.另外,HFF的 ...
- 轻量级网络库libevent初探
本文是关于libevent库第一篇博文,主要由例子来说明如何利用该库.后续博文再深入研究该库原理. libevent库简介 就如libevent官网上所写的“libevent - an event n ...
- 『高性能模型』轻量级网络ShuffleNet_v1及v2
项目实现:GitHub 参考博客:CNN模型之ShuffleNet v1论文:ShuffleNet: An Extremely Efficient Convolutional Neural Netwo ...
- GhostNet: 使用简单的线性变换生成特征图,超越MobileNetV3的轻量级网络 | CVPR 2020
为了减少神经网络的计算消耗,论文提出Ghost模块来构建高效的网络结果.该模块将原始的卷积层分成两部分,先使用更少的卷积核来生成少量内在特征图,然后通过简单的线性变化操作来进一步高效地生成ghost特 ...
- 简述TCP网络编程本质
基于事件的非阻塞网络编程是编写高性能并发网络服务程序的主流模式,头一次使用这种模式编程需要转换思维模式 .把原来的"主动调用recv()来接收数据,主动调用accept()来接受连接,主动调 ...
随机推荐
- 如何在本地搭建微信小程序服务器
现在开发需要购买服务器,价格还是有点贵的,可以花费小代价就可以搭建一个服务器,可以用来开发小程序,博客等. 1.域名(备案过的) 2.阿里云注册免费的https证书 3.配置本地的nginx 4.内网 ...
- SpringBoot设置mysql的ssl连接
因工作需要,mysql连接需要开启ssl认证,本文主要讲述客户端如何配置ssl连接. 开发环境信息: SpringBoot: 2.0.5.RELEASE mysql-connector-java: 8 ...
- Linux 安装 MySql5.7
首先在官网下载对应版本的Linux安装包.一般来说应用 community 版本就可以. mysql community version download addr 1. 将文件上传至 Linux 并 ...
- pip超时问题解决
阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban ...
- 文本溢出后,隐藏显示"..."和margin边距重叠
一.隐藏加省略 单行文本: overflow: hidden; white-space: nowrap; text-overflow: ellipsis; 多行文本: overflow: hidden ...
- 带你学够浪:Go语言基础系列 - 8分钟学复合类型
★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...
- go 项目目录结构
网上有很多误人子弟的教程, 说项目下必须要有src, 傻逼玩意. 正确的路径应该是这样的: 所有go项目路径 src 项目1 项目2 项目N pkg bin 不是所有项目下必须建src, pk ...
- 【Flutter实战】六大布局组件及半圆菜单案例
老孟导读:Flutter中布局组件有水平 / 垂直布局组件( Row 和 Column ).叠加布局组件( Stack 和 IndexedStack ).流式布局组件( Wrap )和 自定义布局组件 ...
- Sharding-JDBC 快速入门第一课
1. 概述 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Sharding-Sidecar(计划中)这 ...
- 09.DRF-ModelSerializer
四.模型类序列化器ModelSerializer 如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serial ...