ShuffleNet v2-精简CNN模型论文学习

摘要

图像分类的准确度是衡量CNN网络模型优劣的一个重要的指标。除了准确度,模型的计算复杂度也是衡量CNN网络的重要指标。若模型的准确度很高,却要花很长时间去计算,我们很难说这是一个好的网络。同时在一些对延迟很敏感的场景,如无人驾驶、流水线实时检测,速度慢的网络可能不能很好的满足我们的要求。因此我们需要一些轻量级的CNN网络,来平衡速度和准确度。ShuffleNetv2,是旷视最近提出的ShuffleNet升级版本,并被ECCV2018收录。在同等复杂度下,ShuffleNetv2比ShuffleNet和MobileNetv2更准确。
论文:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

背景

目前衡量模型复杂度的一个通用指标是FLOPs,具体指的是multiply-add数量,但是这却是一个间接指标,因为它不完全等同于速度。FLOPs相同的两个模型的速度可能不同。这是因为,首先内存的使用量(memory access cost,MAC)不能忽略。模型的并行度也影响速度,高并行度的模型速度更快。另一个是因为,模型在不同的平台上的运算速度也是有差异的,如GPU和ARM,采用不同的库也会影响速度。
论文在特定的平台下研究了ShuffleNetv1和MobileNetv2的运行时间,并结合理论与实验得到了4条实用的指导原则:

  • G1 相同通道宽度可以最小化内存访问成本MAC
  • G2过多的群卷积会增加内存访问成本MAC
  • G3 网络内部碎片操作会降低并行度
  • G4 Element-wise操作不容忽视

G1相同通道宽度可以最小化内存访问成本MAC

考虑无bias的 1 ∗ 1 1*1 11 卷积。如果输入的通道数为 c 1 c_1 c1 , 卷积后输出通道数为 c 2 c_2 c2 . 让 h , w h,w h,w分别表示feature map的高和宽。假设cache足够大。
那么普通卷积的Flops数为 B = h w c 1 c 2 B=hwc_1c_2 B=hwc1c2,则 M A C = h w ( c 1 + c 2 ) + c 1 c 2 MAC=hw(c_1+c_2)+c_1c_2 MAC=hw(c1+c2)+c1c2

hw(c_1+c_2)这两层各自的输出值(activate),c_1c_2为两层间卷积核的参数量。

可得: M A C ≥ 2 h w B + B h w MAC\geq2\sqrt{hwB}+\frac{B}{hw} MAC2hwB +hwB
因此在同FLOPs时,如果相邻两层它们的通道数相等时,MAC将达到最小值。文中采用简单两层卷积网络,实验验证了这结果。
但是实际情况下的前提条件“cache足够大”不一定满足。设备缓存不够大时很多计算库会采用复杂的缓存机制,这会导致MAC值和理论值有偏差。

G2过多的组卷积会增加内存访问成本MAC

组卷积能够大量减少FLOPs,也成功被应用于多种优秀网络。

延续上一部分中的符号定义及公式,此处的FLOPs为 B = h w c 1 c 2 g B=\frac{hwc_1c_2}{g} B=ghwc1c2 ,则
M A C = h w ( c 1 + c 2 ) + c 1 c 2 g = h w c 1 + B g c 1 + B h w MAC=hw(c_1+c_2)+\frac{c_1c_2}{g} =hwc_1+\frac{Bg}{c_1}+\frac{B}{hw} MAC=hw(c1+c2)+gc1c2=hwc1+c1Bg+hwB
因此若群卷积的组数g增加,则MAC也会增大。故太多的群卷积会增加内存访问成本。

G3网络内部碎片操作会降低并行度

碎片(Fragmentation)是指多分支上,每条分支上的小卷积或pooling等(如外面的一次大的卷积操作,被拆分到每个分支上分别进行小的卷积操作)。
文章用控制变量证明了这一点。

G4Element-wise操作不容忽视

Element-wise操作指的是 ReLU、AddTensor、AddBias等等。虽然这些操作只增加了一点点FLOPs,但是会带来很高的MAC,尤其是Depthwise Convolution深度卷积。
文中采用‘bottleneck’单元,进行了一系列对比实验,验证了这准则。

ShuffleNet V2 架构

ShuffleNet V2 是在ShuffleNet V1的基础上改进的。
如图1所示,ShuffleNetV1是在给定的计算预算(FLOP)下,为了增加准确率,选择采用了 逐点群卷积 和 类似瓶颈的结构,且还引入了 channel shuffle操作. 如图的1(a)、(b)所示。
Alt

图1 DWConv:深度卷积 (depthwise convolution), GConv:群卷积 (group convolution)

huffleNetV2 引入通道分割(channel split)操作, 将输入的feature maps分为两部分, c − c ′ c-c^{'} cc c ′ c^{'} c。根据G3,一个分支为shortcut流,另一个分支含三个卷积(且三个分支的通道数一样,满足G1)。 满足G2: 两个 1 ∗ 1 1*1 11 卷积不采用组卷积操作,因为前面的通道分割已经做了分组,降低了组数。
之后分支合并采用拼接(concat),让前后的channel数一样(满足G1). 然后再进行Channel Shuffle(完成和ShuffleNetV1一样的功能)。
shuffle后,以往的ShuffleNetV1是再接一个ReLu(Element-wise)操作,此处将其移到卷积分支中。 另外三个连续的Element-wise操作:通道分割、concat、shuffle合并成一个Element-wise操作,这满足了G4. 具体看图1©。
ShuffleNetV2 的空间下采样模块经过些修改,去掉了通道分割,输出的通道数翻倍。详情看图1(d) 。

启发

这篇文章给出了设计高效网络的4条准则,给我们以后的模型设计和简化提供了很好的参考思路。G1准则大部分网络都默认遵循了,可大多网络都违背了G2准则。群卷积能够提供准确率,但群卷积会使速度变慢。文章指出,group conv的方式能够增加filter之间的对角相关性,而且能够减少训练参数,不容易过拟合,这类似于正则的效果。违背G4准则(Element-wise操作)是必不可免的。毕竟基于优秀网络上的改进,很多是增加一些Element-wise操作,从而获得准确率的提升。 但ShuffleNetV2告诉了我们,Element-wise操作可以简化(如relu的移位)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值