轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)
写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确。详细内容可以参考文中帖的链接,比较好!!!
最近看的轻量化神经网络:SqueezeNet、Xception、MobileNet、ShuffleNet
时间轴
- 2016.02 伯克利&斯坦福提出 SqueezeNet
- 2016.10 google提出 Xception
- 2017.04 google提出 MobileNet
- 2017.07 face++提出 ShuffleNet
模型轻量化的方法
- 卷积核分解:使用1xN和NX1卷积核代替NXN卷积核;
- 使用深度压缩deep compression方法:网络剪枝、量化、哈弗曼编码;
- 奇异值分解;
- 硬件加速器;
- 低精度浮点数保存;
小模型的好处:
- 在分布式训练中,与服务器通信需求小;
- 参数少,从云端下载模型的数量少;
- 更适合在嵌入式、移动设备上部署;
几种模型小结:
- SqueezeNet,提出了fire module【使用 1x1 卷积核替换部分 3x3 卷积核,减少参数量;同时在squeeze阶段,限制 input feature map的channel数,又一次减少参数】。在整体网络模型中减少pooling,平均每3个fire module后有一个max pooling,分类前的全连接层替换成average pooling。
- Xception,参差结构+可分离卷积(Separable Convolution)【对每一个通道先进行 1x1 卷积,再进行 3x3 卷积】。在Inception v3模型上改进, 参数量没减少,精度提高。
- MobileNetv1,宽度\分辨率因子 + 深度可分离卷积(Depthwise Separable Convolution)【对每一个通道先进行 3x3 卷积,再进行 1x1 卷积】。参数量下降
- MobileNetv2,倒残差结构+深度可分离卷积+relu6。发现relu对低维特征损失较严重,1)提出反残差模块【先升维:增加信息量,再降维度:较少参数】;2)较少block最后的Relu改为lineat,减少信息破坏。移动部署float16,所以换成relu6
- MobileNetv3,倒残差结构+深度可分离卷积+se注意力机制+h-swish激活。使用堆积木手段和nas搜索出一个small结构、一个large结构
- ShuffleNet,深度可分离卷积+分组卷积+shuffle机制 。借鉴Resnext的分组卷积思想,不过全部只用1x1卷积核,减少参数量;加入了shuffle机制(通道清洗),加强了通道间的信息流通,一定程度上缓解了由于分组卷积导致的通道关系损失。
1. SqueezeNet
设计原则
- 替换3x3的卷积kernel为1x1的卷积kernel
- 减少输入3x3卷积的input feature map数量
- 减少pooling
Fire Module
Fire Module是本文的核心构件,思想非常简单,就是将原来简单的一层conv层变成两层:squeeze层+expand层,各自带上Relu激活层。在squeeze层里面全是1x1的卷积kernel,数量记为S11;在expand层里面有1x1和3x3的卷积kernel,数量分别记为E11和E33,要求S11 < input map number即满足上面的设计原则(2)。expand层之后将1x1和3x3的卷积output feature maps在channel维度拼接起来。
总体模型
总共有9层fire module,中间穿插一些max pooling,最后是global avg pooling代替了fc层(参数大大减少)。在开始和最后还有两层最简单的单层conv层,保证输入输出大小可掌握。
SqueezeNet参考
2. Xception
设计原则
- 提出Separable Convolution (可分离卷积)【与 MobileNet的不同】
- 参差思想
Separable Convolution Module
先进行普通卷积操作,再对 1×11×1 卷积后的每个channel分别进行 3×33×3 卷积操作,最后将结果 concat:
总体模型
Xception 的结构基于 ResNet,但是将其中的卷积层换成了Separable Convolution Module。如下图所示。整个网络被分为了三个部分:Entry,Middle和Exit。
Xception 在 ImageNet 上,比 Inception-v3 的准确率稍高, 同时参数量有所下降,在 Xception 中加入的类似 ResNet 的残差连接机制也显著加快了Xception的收敛过程并获得了显著更高的准确率。但由于其计算过程较为零散,现有的卷积神经网络实现中它的效率都不够高,此网络旨在提高精度、不在挺高速度。
Xception参考
深度可分离卷积理解
3. MobileNet
设计原则
- 采用depthwise separable convolution,就是分离卷积核,减少参数量
- 设置宽度因子width multipler【在channel上】和分辨率因子resolution multiplier【在feature map的长、宽上】,减小参数量
Depthwise Separable Convolution
depthwise separable convolution
总体模型
MobileNet参考
MobeileNetv1与v2的区别:
参考1:详解MobileNetV2
参考2:MobileNet v1 和 MobileNet v2
- v1使用了Depthwise Separable Convolution,通过将跨通道的3 x 3卷积换成单通道的3 x 3卷积 + 跨通道的1 x 1卷积来达到减少参数的目的【3 x 3卷积核约变为原理的1/8】
- v2在v1的基础上加入了残差结构,同时发现relu对低维通道的feature map映射到高维再映射回低维具有非常严重的信息损失。针对这个问题,两个办法,1.使用Inverted residuals【因为relu对于高维特征影响较小,所以扩展成高维经过relu再压缩】;2.使用Linear Bottleneck【因为高维映射到低维,使用relu会滤掉有用信息,直接换成线性激活函数】
- Q:为什么低维特征效果不好?
A:因为低维特征对应的卷积核也少,卷积核少学到图片内的特征就很有限,所以效果不好
模块结构:
4. ShuffleNet
设计原则
- 借鉴resnext分组卷积思想,但不同的是采用1x1卷积核;
- 进行通道清洗,加强通道间的信息流通,提高信息表示能力;
- 采用mobilenet的Depthwise Separable Convolution方法;
分组卷积
借鉴resnext的分组卷积,全部使用1x1卷积核
channel shuffle机制
什么是通道shuffle,就是在分组卷积后得到的feature map不直接进行concat,先将每组feature map按通道打乱,重新concat,如下图所示:
对于一个卷积层分为g组,
- 分组卷积后一共得到g×n个输出通道的feature map;
- 将feature map 进行 reshape为(g,n);
- 进行转置为(n,g);
- 对转置结果flatten,再分回g组作为下一层的输入。
shuffle unit
a是标准的残差结构,不过是3x3卷积核使用了mobilenet中的depthwise convolution操作;
b是在a的基础上加了本文的通道shuffle操作,先对1x1卷积进行分组卷积操作,然后进行channel shuffle;
c是在旁路加了一步长为2的3x3的平均池化,并将前两者残差相加的操作改为了通道concat,增加了通道数量。
总体模型
参考链接:
- https://blog.csdn.net/liuxiao214/article/details/81875251
轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)相关推荐
- 轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
一 引言 二 轻量化模型 2.1 SqueezeNet 2.2 MobileNet 2.3 ShuffleNet 2.4 Xception 三 网络对比 一 引言 自2012年AlexNet以来,卷积 ...
- 轻量化神经网络总结:SqueezeNet、Xception、MobileNet v1、MobileNet v2、ShuffleNet v1、ShuffleNet v2
2016.02 伯克利&斯坦福提出 SqueezeNet 在ImageNet上实现了与Alexnet相似的效果,参数只有其1/50 核心点: 1x1卷积核代替3x3卷积核 Squeeze La ...
- 深度学习与计算机视觉教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)(CV通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/37 本文地址:https://www.showmeai.tech/article-d ...
- 纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
https://zhuanlan.zhihu.com/p/32746221 https://zhuanlan.zhihu.com/p/35405071 一.简介 虽然网络性能得到了提高,但随之而来的就 ...
- 目标检测YOLO实战应用案例100讲-基于轻量化神经网络的目标检测算法研究与应用
目录 基于轻量化深度神经网络的目标检测方法研究 基于深度学习的目标检测方法
- 轻量化网络:SqueezeNet
SqueezeNet 发表于ICLR-2017,作者分别来自Berkeley和Stanford,SqueezeNet不是模型压缩技术,而是 "design strategies for CN ...
- 轻量化神经网络模型总结:SqueezeNet、Xception、MobileNet、ShuffleNet
总结今年来的几个轻量化模型:SqueezeNet.Xception.MobileNet.ShuffleNet 下面给出时间轴: 2016.02 伯克利&斯坦福提出 SqueezeNet 201 ...
- 轻量化网络—ShuffleNet V1 V2理解
轻量化网络-ShuffleNetV2理解 ShuffleNetV2原始论文:https://openaccess.thecvf.com/content_ECCV_2018/html/Ningning_ ...
- 【深度学习】轻量化CNN网络MobileNet系列详解
深度学习100问 Author:louwill Machine Learning Lab MobileNet系列作为轻量级网络的代表,使得CNN轻量化和移动端的部署成为可能.MobileNet系列目前 ...
最新文章
- Centos下MongoDB的安装与配置
- php 字符串 中文位置,怎样查找中文字符的位置呢
- 用户NT AUTHORITYNETWORK SERVICE登录失败解决方法
- java发邮件_使用MATLAB自动发邮件
- Java反射之内部类
- Python学习笔记--函数
- 谷歌本地不支持websocket_django开发-websocket的实现
- sql server 2005 COUNT_BIG (Transact-SQL)
- 求100~200间的所有素数
- 《北京IT报道》你可以成为下一个《万万没有想到》?
- spring整合cxf,轻松编写webService客户端、服务端
- python接口调用把执行结果追加到测试用例中
- macOS版本大升级,这几项的细节值得你关注
- LCD1602显示中文汉字
- win10系统Jmeter下载安装详解
- matlab相关系数的显著性检验
- 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视(mp4 格式)
- windows server 2003 IE升级方法
- ts找不到primeng/primeng
- Python 3基础语法知识点都在这里了,如果还不能入门就不能怪我了