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。输出的维度会变为原来的两倍(因为两个分支输入维度与输出维度是一致的)。