ShuffleNet论文学习笔记

简介

ShuffleNet是Face++(旷视)在2017年发布的一个高效率可以运行在手机等移动设备的网络结构,论文发表在CVRP2018上。

原文链接:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

GitHub地址:

  1. PyTorch + 实现过程
  2. Mxnet + 实现过程

摘要

CNN架构ShuffleNet是专门为计算能力有限的移动设备而设计。这里的计算能力有限是指10-150 MFLOPs(每秒百万个浮点操作)。

ShuffleNet利用两种新的运算方法:1)分组逐点卷积(pointwise group convolution) 2)通道重排(channel shuffle)。

优势:ImageNet分类和MS COCO目标检测实验,在40MFLOPs计算预算下,ShuffleNet的性能优于其他结构。

介绍

目标:在所需计算范围内,设计一个高效的基础架构。

:现在最先进的基础架构:Xception和ResNeXt,由于含有代价高昂的1×1卷积(逐点卷积),在极小的网络中效率变得很低。

:ShuffleNet建议使用分组逐点卷积来降低1×1卷积的计算复杂度。

: 分组卷积有副作用:阻塞通道之间的信息流并削弱表征能力。

:ShuffleNet提出使用通道重排操作来帮助信息在特征通道间流动。

基于分组逐点卷积通道重排,构建了名为ShuffleNet的高效架构。

效果
1)与MobileNet相比,在40 MFLOPs级别上,ImageNet top-1错误率降低了7.8%
2)对于实际硬件加速,基于ARM,比AlexNet速度快13倍(理论加速18倍),同时保持相当的精度

相关工作

高效模型设计:

1)GoogleNet更低的复杂度,增加了网络深度
2)SqueezeNet(伯克利和斯坦福)保持精度,降低参数和计算量
3)ResNet利用瓶颈结构实现高性能
4)SENet(Momenta)引入一种架构单元实现高性能
5)NasNet(谷歌)利用强化学习和模型搜索,与ShuffleNet性能相当

但是NasNet没有报告小模型(小于150MFLOPs)的结果

分组卷积:

1)概念最早出现在AlexNet上,将模型分布在两个GPU上
2)Xception中提出的深度可分离卷积概括了Inception系列中可分离卷积的思想
3)MobileNet(谷歌)采用了深度可分离卷积

通道重排操作:

CNN库cuda-convnet支持“随机稀疏卷积”层,这相当于随机通道重排后接一分组卷积层

但是通道重排操作的思想在之前的工作中很少被提及

模型加速:

目的:保持预训练模型精度的同时,加速推理

1)剪枝:减少模型的冗余连接
2)量化和因式分解:减少计算的冗余
3)FFT(快速傅里叶变换):降低了时间消耗
4)蒸馏:将知识从大模型转移到小模型,训练小模型更容易

方法

用于分组卷积的通道重排

现代CNN通常由相同结构的重复构建块组成。

Xception和ResNeXt,在构建块中引入了高效的深度可分卷积或组卷积,从而在表示能力和计算成本之间取得了很好的权衡。

但是这两种设计没有完全考虑到1×1卷积。

例如:ResNeXt,只有3×3层具有分组卷积,在每个残差单元,逐点卷积占用93.4%的乘法-加法

劣势:在微型网络中,逐点卷积导致用有限通道来满足约束复杂度,严重损害精度

简单解决方案:1×1层上应用通道稀疏连接,例如分组卷积

效果:确保每个卷积只对对应的输入通道组进行运算,从而降低计算成本

图1:
在这里插入图片描述a) 两个具有相同组数的叠加卷积层
b) 第二个分组卷积是从第一个分组卷积里不同的组里拿数据(b是一种思想)
c) 利用通道重排产生与 b) 等效的实现(c是一种实现)

a) 的弊端就是分组卷积的副作用:阻塞通道之间的信息并削弱表征能力

c)的实现:卷积层有g组,输出有g×n个通道,先将输出通道维数reshape为(g,n),转置,展平,作为下一层的输入(即使两个卷积的组数不同,操作依然有效)

图解释:

在这里插入图片描述左图为论文原图,两个卷积的组数相同,均为3;
右图为个人设计图,两个卷积的组数不同,一个为3,一个为2,但对通道重排操作无影响。

:通道重排是可微的
:可以嵌入到网络结构中进行端到端的训练

ShuffleNet单元

图示:
在这里插入图片描述a) b) c)均为残差块,a)是RestNet所提出

b) 对于3×3层,应用3×3深度卷积;将1×1替换为分组逐点卷积+通道重排;深度卷积后没有再使用ReLu(请注意红色方框内的区别);第二个分组逐点卷积目的是恢复通道维数;匹配shortcut路径;不再用通道重排;

c) 对 b)的修改,为了使 stride=2:

  1. 在shortcut上添加了3×3平均池化;
  2. 用通道级联代替元素相加 (目的:扩大通道尺寸,无需额外计算成本)

元素相加:

residual + data

通道级联:

concat(residual, data)

在ShuffleNet中,深度卷积只在瓶颈特征图上执行。

计算量与ResNet和ResNeXt相比:

给定输入大小 c×h×w(通道数×高×宽),瓶颈通道数 m,卷积组数 g

ResNet:hw(2cm+9m² ) FLOPs
ResNext: hw(2cm+9m² /g) FLOPs
ShuffleNet: hw(2cm/g+9m) FLOPs

结论:给定计算预算,ShuffleNet可以使用更广的特征图

网络架构

表1表1. ShuffleNet架构

复杂度用FLOPs来计算,即浮点乘法加法的数目

:第二阶段的输入通道数相对较小
:不在第一个逐点卷积层上应用分组卷积

实验

数据集:ImageNet 2012分类

在训练设置和超参数上有两个例外:
1)将权重衰减设置为4e-5而不是1e-5,采用线性衰减学习率策略(由0.5降至0)
2)使用稍微不那么激进的规模扩大(scale augmentation)来进行数据预处理

标准:比较在ImageNet验证集上的single-crop top-1性能

消融实验

消融实验定义:为了验证所提出的结构是否有效而设计的实验

分组逐点卷积

在这里插入图片描述表2. 分类误差VS组数g(数值越小代表性能越好)

通道重排 VS 不重排

在这里插入图片描述表3. 具有/不具有通道重排的ShuffleNet(数值越小表示性能越好)

与其他结构单元比较

在这里插入图片描述表4. 类误差vs各种结构(%,数值越小表示性能越好)。不会在较小的网络上报告VGG-like结构,因为精度明显较差
在这里插入图片描述表6. 复杂度比较。*由BVLC实现

与MobileNets和其他框架比较

在这里插入图片描述ShuffleNet vs. MobileNet (在ImageNet分类任务上)

泛化能力

在这里插入图片描述表7. MS COCO上的目标检测结果(数值越大表示性能越好)。对于MobileNets,比较了两个结果:1)由[MobileNets]报告的COCO检测分数;2)对重新实现的MobileNets进行微调,其训练和微调设置与ShuffleNets完全相同

实际加速评估

在这里插入图片描述表8. 移动设备上的实际推理时间(数值越小表示性能越好)。该平台基于单个高通公司Snapdragon 820处理器。所有结果都用单线程进行评估。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值