ShuffleNetv2 自学笔记

本文是作者自学ShuffleNetv2的笔记,深入探讨了为何FLOPs并非衡量网络效率的唯一标准,提出了内存访问成本、并行度等因素的影响。文章遵循了四个设计高效网络的准则,包括保持输入输出通道一致、关注组卷积的计算成本、减少网络分支和降低Element-wise操作。最后,详细介绍了ShuffleNetv2的网络结构变化,包括c和d两种块的设计,通过改变步距和操作方式提升网络性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

v2是对v1的进一步改进,作者提出网络的计算复杂度不能只看FLOPs,并提出了4条设计高效网络的准则,依据这几条准则提出了新的block设计。

原因分析

FLOPs知识衡量模型速度一个间接指标,speed才是直接的指标。作者认为除了FLOPs还有一些需要考虑的因素,MAC(memory access cost)(内存访问的时间) 、并行等级(在相同FLOPs下并行度高的网络速度更快)、相同的FLOPs在不同的平台上执行消耗时间也不同。

如何设计一个高效的网络

G1:当卷积层的输入特征矩阵与输出特征矩阵channel相同时MAC最小(保持FLOPs不变时)。

G2:当GConv的groups增大时(保持FLOPs不变时),MAC也增大。

G3::网络碎片化(分支)程度越高,速度越慢。虽然碎片化会提高网络的效果,但是会降低网络的速度。

G4:Element-wise操作(对元素操作,例如add,relu)带来的影响是不可忽视的。他们通常FLOPs很小,但是MAC很大。

总结:1.尽可能的使输入输出特征矩阵相同。2.注意组卷积的计算成本。3.降低网络的分支。4.尽可能的减少Element-wise操作。

网络结构

 

如上图,a(步距为1),b(步距为2)是v1的结构。c(步距为1),d(步距为2)是v2的结构。

对于C。先将输入划分为两个部分(一般是对半分)。左边没有进行操作,右边经过了三个卷积层(输入与输出维度相等)。1*1的卷积不再使用组卷积,add换为concat拼接,relu只在右分支存在。

对于D。输出的维度会变为原来的两倍(因为两个分支输入维度与输出维度是一致的)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值