深度学习模型计算量评价指标FLOPs, MACs, MAdds关系

人工智能80

在评价深度学习模型的大小和计算量时,经常使用的参数有:parameters, FLOPs, MACs, MAdds。除此以外,我们还经常见到MAC, FLOPS, GFLOPS, TFLOPS,其中,后三个参数其实并非用来评价模型的计算量,而是用来评价计算机硬件的计算能力。下面分别介绍一下以上几个参数:

此参数表示模型中的参数总数,并用于测量模型的大小。例如,3到3的卷积层包含10个参数,它们是卷积运算的9个参数和偏置运算的1个参数。

[En]

This parameter represents the total number of parameters within the model and is used to measure the size of the model. For example, a convolution layer of 3 to 3 contains 10 parameters, which are 9 parameters of convolution operation and 1 parameter of bias operation.

(Floating Point Operations) 即浮点运算次数,用来衡量模型计算复杂度,常用来做神经网络模型速度的间接衡量标准(虽然最近已经有文章证明靠FLOPs间接标准评价模型的速度是不靠谱的,因为模型的计算速度还跟内存的吞吐等因素相关,但此标准依然广泛用作模型速度的参考评价标准)。对于卷积层而言,FLOPs的计算公式如下:

FLOPs = 2 * H * W * ( Cin * K * K ) * Cout

其中,Cin是指卷积层输入tensor的通道数,Cout是指卷积层输出tensor的通道数,K是指卷积核大小,其中乘以2是因为在卷积操作中,加法次数与乘法次数相同,在卷积乘法中加法次数比乘法次数少一次,但是还需要多考虑一个卷积加法,所以总的乘法次数与加法次数相同。

(Multiply–Accumulate Operations) 即乘加累积操作数,常常与FLOPs概念混淆,实际上1MACs包含一个乘法操作与一个加法操作,大约包含2FLOPs。通常MACs与FLOPs存在一个2倍的关系。 MACsMAdds说的是一个东西。

(memory access cost)即内存使用量,用来评价模型在运行时的内存占用情况。1x1卷积的FLOPs为 2 * H * W * Cin * Cout。对应的MAC为H * W * (Cin + Cout) + Cin * Cout(这里假定内存足够)。

(Floating Point Operations Per Second) 即每秒浮点运算次数,它常被用来估算电脑的执行效能,尤其是在使用到大量浮点运算的科学计算领域中。正因为FLOPS字尾的那个S,代表秒,而不是复数,所以不能省略掉。

在这里所谓的"浮点运算",实际上包括了所有涉及小数的运算。这类运算在某类应用软件中常常出现,而它们也比整数运算更花时间。现今大部分的处理器中,都有一个专门用来处理浮点运算的"浮点运算器"(FPU)。也因此FLOPS所量测的,实际上就是FPU的执行速度。

GFLOPS 就是 Giga Floating-point Operations Per Second,即每秒10亿次的浮点运算数,常作为GPU性能参数但不一定代表GPU的实际表现,因为还要考虑具体如何拆分多边形和像素、以及纹理填充,理论上该数值越高越好。1GFlops = 1,000MFlops。

在建立模型后,如何获取上述参数。这里常用的工具包括:

[En]

After we build the model, how to get the above parameters. The tools commonly used here are:

针对tensorflow

针对torch

有第三方工具torchstat和thop

from torchstat import stat
import torchvision.models as models

model = model.densenet121()
stat(model, (3, 224, 224))
from torchvision.models import densenet121
from thop import profile
model = densenet121()
input = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input, ))

Original: https://blog.csdn.net/BIT_Legend/article/details/123805898
Author: BIT_Legend
Title: 深度学习模型计算量评价指标FLOPs, MACs, MAdds关系