神经网络运算量&参数量估计——FLOPS和FLOPs辨析

一、概念明晰

首先要明确“运算量”“参数量”两个概念:

参数量:这个比较好理解,例如卷积层中的卷积核c_i*k*k*n_o,其参数量就是相乘的结果。而且,无论输入图像的尺寸怎么变(YOLO实现中的multi scale训练策略),只要模型结构确定,参数量就固定。还需要注意,参数都是FP32(4字节)存放,所以模型大小是参数量*4。

运算量:使用FLOPs衡量,代表浮点运算次数,这个可以衡量算法/模型的复杂度。

 还要区分两个容易混淆的量:FLOPSFLOPs

FLOPS:Floating point Opreations Per Second,每秒浮点运算次数,理解为计算速度,是一个衡量硬件的标准。GPU算力[Nvidia官网查询]描述的就是这个,这些数值的单位为MM=10^12次。

FLOPs:Floating point Opreations,s是复数,为浮点数操作数。理解为算法的计算量。paper中通常使用的是GFLOPs,即10亿次浮点运算。

二、网络分析

 分析一个Conv层,核大小为k,输入通道为C_i,输出通道为C_o,输出的Feature Map尺寸为H*W。

 不考虑bias[C_{i}*k*k+(C_{i}*k*k-1)]*H*W*C_{o},其中有C_i*k*k次乘法 + (C_i*k*k-1)次加法运算,最后合起来乘以H*W*C_o。

考虑bias[2*C_{i}*k*k]*H*W*C_{o},其中的2可以视为一个MAC有两个操作。

 上面的计算方式精确地计算了卷积层所需要的opreation数,但是也有一种计算方法直接给出了conv的FLOPs,例如CVPR2020的GhostNet中对卷积层的直接计算:

C_{i}*k*k*H*W*C_{o}

 

参考博文:

FLOPS理解:https://blog.csdn.net/smallhujiu/article/details/80876875

MAC:https://www.mobibrw.com/2019/17864

知乎算力和参数:https://www.zhihu.com/question/65305385/answer/451060549

FLOPS和FLOPs辨析:https://www.cnblogs.com/king-lps/p/10904552.html

你可能感兴趣的:(神经网络)