【深度学习】常见评估指标Params、FLOPs、MACs
三个常见的评估指标:Params、FLOPs、MACs
Params (参数量)
定义:模型中所有可学习参数的总和
计算方式:
Params=∑l=1L(Cinl×Coutl×Khl×Kwl+Coutl)\text{Params} = \sum_{l=1}^{L} (C_{\text{in}}^l \times C_{\text{out}}^l \times K_h^l \times K_w^l + C_{\text{out}}^l)Params=∑l=1L(Cinl×Coutl×Khl×Kwl+Coutl)
其中:
• L:网络层数
• Cin/CoutC_{\text{in}}/C_{\text{out}}Cin/Cout:输入/输出通道数
• Kh×KwK_h \times K_wKh×Kw:卷积核尺寸
物理意义:
- 模型复杂度与记忆能力的直接体现
- 决定模型文件大小和内存占用
典型值域:
- 轻量级模型:<5M (如MobileNetV3-1.0x)
- 中等模型:5-50M (如ResNet50)
- 大型模型:>50M (如ViT-Large)
FLOPs (浮点运算次数)
定义:完成一次前向传播所需的浮点运算总量
计算方式:
FLOPs=∑l=1L(2×Cinl×Coutl×Khl×Kwl×Houtl×Woutl)\text{FLOPs} = \sum_{l=1}^{L} (2 \times C_{\text{in}}^l \times C_{\text{out}}^l \times K_h^l \times K_w^l \times H_{\text{out}}^l \times W_{\text{out}}^l)FLOPs=∑l=1L(2×Cinl×Coutl×Khl×Kwl×Houtl×Woutl)
物理意义:
- 计算复杂度的直接度量
- 决定推理速度和能耗
典型场景:
图像分类(224×224输入):各个模型 FLOPs
- MobileNetV2: 300M
- ResNet50: 4.1G
- ViT-Base: 17.6G
MACs (乘加运算次数)
定义:模型前向传播中乘法与加法运算的总和
计算方式:
MACs=∑l=1L(Cinl×Coutl×Khl×Kwl×Houtl×Woutl)\text{MACs} = \sum_{l=1}^{L} (C_{\text{in}}^l \times C_{\text{out}}^l \times K_h^l \times K_w^l \times H_{\text{out}}^l \times W_{\text{out}}^l)MACs=∑l=1L(Cinl×Coutl×Khl×Kwl×Houtl×Woutl)
• 与FLOPs关系:
FLOPs≈2×MACs\text{FLOPs} ≈ 2 \times \text{MACs}FLOPs≈2×MACs
原因:每个乘加运算包含1次乘法+1次加法
硬件意义:
• NPU/GPU等硬件性能的直接度量
• 芯片设计的关键指标
PyTorch测量示例
from ptflops import get_model_complexity_infomacs, params = get_model_complexity_info(model, (3, 352, 352), # 输入尺寸as_string=True,print_per_layer_stat=False
)
print(f"MACs={macs}, Params={params}")