轻量级网络 - PVANet & SuffleNet
一. PVANet
论文:PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection 【点击下载】
Caffe代码:【Github】
设计了一种轻量级的网络,取名叫 PVANet,特点是 Channel少、Layer多,在 VOC2007 和 VOC2012 精确度分别达到了 84.9% 和 84.2%,但计算量不到采用 ResNet-101 网络的 10%。
论文的核心要点:
1)改进的 C.ReLU
前面几层 用到了 CReLU,Concatenated Rectified Linear Units。
CReLU 来源于在 AlexNet 上的一个有趣的实验(参考论文【CReLU】):低层的卷积层中的一些滤波器核存在着负相关程度很高的滤波器核,而层次越高的卷积层,这一现象越不明显。作者把这一现象称为 pairing phenomenon。
根据这种特性,通过 Negation 实现 Concatenation,在不损失精度的情况下可以减少一半计算量。
作者基于 CReLU 进行了改进,添加了 Scale/Bias 层(见下图左),允许每个channel(通道)的斜率和激活阈值与其相反的 Channel 不同。
![]()
2)使用 Inception Net
“Inception 没有广泛应用在现有网络中”,目前来看使用的确实也不少了,不纠结这个,Inception 的优点是通过不同尺度的卷积核 对应不同大小的感受野,从而适应不同大小的目标。
上图右侧是 Inception 的网络结构,作者用两个 3*3 的 Conv 替代 5*5 的 Conv,其中 1*1 的 Conv保留特征尺度,直接连接定义 残差。
3)深度网络训练
a)使用了 Residual Net 和 BN(Batch Norm),ResNet 与 Inception Layer 连接;
b)通过自定义策略 “Plateu” 动态调整学习率,如果 moving average of loss 在迭代周期内低于一个预设值,触发 “on-plateau”,将学习率动态减少一个常量。
从一般意义上来说,动态调整学习率 可以有效避免震荡,提高训练精度。
4)整体设计
以表的形式给出各层的 Detail:
5)Hyper-feature concatenation
多尺度的特征组合在很多文献中都有大量应用,文中用在目标检测上,能够对多尺度的目标进行有效检测。
如下图所示,采用了三个不同 Scale 进行 Feature 联合。
PVA 是个轻量级网络,基本能够达到实时(Titan X),对于实时系统应用的童鞋可以考虑。
二. SuffleNet
论文:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 【点击下载】
这篇文章出自 Face++ 的孙剑大神组,主要目的是通过减少网络计算量,达到在移动端应用的目的。文章比较 MobileNet (State-of-the-art),在同样计算量的情况下有 6.7% 的提升。
SuffleNet 是属于模型优化的范畴,对于模型优化有很多种方法,这里先大致列一下,后面会有专门的总结介绍。
> Efficient Model Designs(高效的模型设计)
这里主要强调两种加速计算的方法,Group Convolution 和 Depthwise Convolution,也正是本文所采用的模型优化设计思路。
Group Convolution 最早来自于 AlexNet,经典的拓扑图展示了把 Channel 划分到不同 Group 进行卷积,原文是为了在两个 GPU 计算,这是最早的通道拆分概念;
Depthwise Separable Convolution 将 标准的Conv操作 分解成一个 Depthwise Conv(独立通道) 和一个 PointWise Conv(1*1的卷积),以此减少计算量;
Depthwise 每个卷积核(Filter)只对一个 Channel 进行卷积计算,Pointwise Conv 执行通道合并,可以理解为:
Depthwise Separable Convolution = Depthwise Convolution + Pointwise Convolution
基于该思路设计的框架如 Xception,ResNeXt,我傻傻的分不太清, MobileNet 也是这个思路。
> Model Acceleration(模型加速)
Pruning(剪枝) 是最直观的一种加速方法,思路比较简单,即去除权值较小的 Connection,或者减少 Channel 数量,得到稀疏的网络连接。
Quantization(量化) 用于参数压缩,包括下面两个方向:
a)将 Float32 量化为 8bit 定点数或更少,减少模型计算量 和 参数存储大小(缺点是精度下降),同时借助 SIMD 等策略实现批量计算;二值化网络是参数量化的一个极端情况,比较典型的是 BinaryNet 和 Xnor-net。
b)权值共享 -通过对权值进行压缩来得到共享权值,共享信息一般通过聚类来得到。
Factorization(因式分解) 主要用于降低全连接层的计算。
Distilling(知识迁移)将大模型训练的知识 迁移到 小模型。可以看一下 Hinton 的蒸馏模型 - Distilling the knowledge in a neural network。
● Channel Shuffle
Shuffle 是本文的核心概念,引入 Shuffle 是为了解决 Group Convolution 的问题:
(a)只用 GConv 来做的话,卷积只在 Group Channel 内部计算,Group 之间(下图颜色区分)相互独立;
问题在于不同 Group 之间没有信息Flow,缺乏 inter 信息,模型精度会比较差。
(b)不同 Group 之间的 Channel 重新分配,增加 Group 之间的信息 Flow;
重新分配与 原始的 Conv 一样,都加入了 inter 信息,但计算量降低很多。
(c)作者加入的 Channel Shuffle,实现与(b)一样的功能;
专门提到通过 Shuffle 方式,两个 GConv(GConv1 & GConv2) 之间的 Group 是可以不同的。
● ShuffleNet Unit
ShuffleNet 单元引入了上面的 Shuffle 层,先来看图:
图(a)是原始的 Bottle Neck Units,引入了 3*3 的 DepthWise Conv(比较重要),这里 Depthwise 是指在每个独立的通道进行计算,通道之间不交叠,Depthwise Conv 最大层度上减少计算量。前面讲过,采用这总结构的网络包括:ResNet、Xception 和 MobileNet。
可以看到,图(a)中的 1x1 Conv 并未做优化,可以认为全部计算的(full connection),根据作者统计这部分计算量占比达到 93.4%,这个比例相当惊人,不优化不足以平民愤,于是该 Channel Shuffle 出场了,参考上图(b)来看作者的改进包括哪些:
1)通过 1x1 的 GConv+Shuffle 替代原来的 1x1部分,在不降低计算精度的情况下大大减少计算量;
2)去掉了 DWConv后面的 ReLU部分,这个可以自己看论证;
上图(c)给出了另一种结构:
1)在 ShortCut 添加了 Avg Pool 实现降采样,同时将 DWConv Stride 改为2,与之匹配;
2)用 Concat 替换原来的 Add,增加 Channel 数量;
● 网络架构
ShuffleNet 网络结构也比较清晰,如下图:
另外 Group 的 size 数量影响分类误差,对于固定计算量的情况,Group越多,对应的channel 通过也就越多,通常精度会提升,当然不会无限提升,在和 Filter 数量达到一定比例的情况下(可以理解为混淆比较均匀),精度最高。
作者通过 Scale 来控制 Filter 数量,Filter越少,计算量相应也就越少。
来看下图:
● 实验对比
采用ResNeXt 的方法进行训练,只做了两个小的改动:
1)将权值衰减从1e-4 减少为 4e-5;
2)只用了简单的 Scale 做数据增强;
这样做的依据是 小网络通常容易欠拟合 而不是过拟合,类似的 MobileNet 也采用了同样的策略进行训练。
Table3 对比了 Channel Shuffle 带来的作用:
下面给出了 ShuffleNet 与 经典网络、轻量级MobileNet 之间的对比:
与经典网络的复杂度比较(在同样准确度的情况下):
在 MS COCO 上测试 ShuffleNet 的泛化性能:
最后给出实测数据,相对于 AlexNet 有 13倍的提高:
轻量级网络 - PVANet & SuffleNet的更多相关文章
- 图像分类丨浅析轻量级网络「SqueezeNet、MobileNet、ShuffleNet」
前言 深度卷积网络除了准确度,计算复杂度也是考虑的重要指标.本文列出了近年主流的轻量级网络,简单地阐述了它们的思想.由于本人水平有限,对这部分的理解还不够深入,还需要继续学习和完善. 最后我参考部分列 ...
- SqueezeNet/SqueezeNext简述 | 轻量级网络
SqueezeNet系列是比较早期且经典的轻量级网络,SqueezeNet使用Fire模块进行参数压缩,而SqueezeNext则在此基础上加入分离卷积进行改进.虽然SqueezeNet系列不如Mob ...
- ShuffleNetV1/V2简述 | 轻量级网络
ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大 ...
- MobileNetV1/V2/V3简述 | 轻量级网络
MobileNet系列很重要的轻量级网络家族,出自谷歌,MobileNetV1使用深度可分离卷积来构建轻量级网络,MobileNetV2提出创新的inverted residual with line ...
- 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 ...
- 轻量级网络库libevent概况
Libevent is a library for writing fast portable nonblocking IO. libevent是一个为编写快速可移植的非阻塞IO程序而设计的. lib ...
- 『高性能模型』轻量级网络MobileNet_v2
论文地址:MobileNetV2: Inverted Residuals and Linear Bottlenecks 前文链接:『高性能模型』深度可分离卷积和MobileNet_v1 一.Mobil ...
随机推荐
- 索引原理-btree索引与hash索引的区别
btree索引与hash索引的区别,之前不清楚,mark一下. Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree索引需要从根节点到枝节点,最后才能访问到页节点这样多 ...
- 20145307JAVA学习期末总结
20145307<Java程序设计>课程总结 每周读书笔记链接汇总 20145307 <Java程序设计>第一周学习总结:http://www.cnblogs.com/Jcle ...
- 资源 | TensorFlow推出新工具Seedbank:即刻使用的预训练模型库【转】
本文转载自:http://tech.ifeng.com/a/20180713/45062331_0.shtml 选自TensorFlow 作者:Michael Tyka 机器之心编译 参与:路.王淑婷 ...
- 推荐一个快速了解移植uboot以及linux到新板子上的ppt教程
链接地址在此: https://elinux.org/images/2/2a/Schulz-how-to-support-new-board-u-boot-linux.pdf
- [BZOJ4010]菜肴制作
Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号 ...
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-A banana·
2017-09-09 16:41:28 writer:pprp 题意很好理解就不说了,实现比较清晰,选择邻接表来做 但是我用的是链表来实现的,所以导致出现了很多问题,最后卡的最长时间的一个问题是 应该 ...
- 解题报告:poj1083 Moving tables
2017-09-02 19:49:59 writer:pprp 题意说明: 比较简单的题,一开始被吓到了,后来才发现,其实可以用很简单的方法就可以解决: 就是在这样的房间中如果在i 和 j 中之后的1 ...
- Maven的继承和聚合
Maven的继承和聚合子项目的pom文件里通过<parent>节点来继承父项目 <parent> <groupId>com.tykj</groupId> ...
- imagemagick在windows下安装(转,有改动)
原文地址:http://blog.csdn.net/royal_coffee/article/details/1602933 注意:本補述僅提供 Windows 下安裝建議. 1. 到 http:// ...
- Codeforces gym 100971 D. Laying Cables 单调栈
D. Laying Cables time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...