Parameters参数量、FLOPs浮点运算次数、FPS每秒传输帧数等计算量衡量指标解析

文章指出只用FLOPs衡量模型速度并不全面,网络运行时间还受数据I/O等操作影响。介绍了目标检测算法的多个指标,如AP、参数量、GFLOPs、Latency、FPS等,分析了指标间的关系,并阐述网络运算速度与显卡、网络结构、并行度、层数及框架版本等因素有关。

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

网络的运算时组成

目前大部分的轻量级模型在对比模型速度时用的指标是FLOPs,这个指标主要衡量的就是卷积层的乘法操作。

但是实际运用中会发现,同一个FLOPS的网络运算速度却不同,只用FLOPS去进行衡量的话并不能完全代表模型速度。

这是ShuffleNetV2论文里的一张图,网络的运行时间分解不同的组成部分。由图可以得出虽然卷积占用了大部分时间,但其他操作,包括数据I/O和Element-wise(AddTensor、ReLU等)也占用了大量时间。

因此,单单优化网络在执行卷积时所花费的时间有一定的效果,但仍然要关注运行时间的其它组成部分。

我们要关注网络的什么指标

来看一下这幅图,这是YoloX中的消融实验图,它给出了五个指标,各位同学自己在写论文的时候,一般这么多指标就够了。毕竟YOLOX这样的SOTA论文才这么多指标。

该图里包含了几个指标:

指标    含义
AP(%)    这个代表了目标检测算法的检测精度。
Parameters    参数量,指模型含有多少参数。
GFLOPs    FLOPs 是浮点运算次数,可以用来衡量算法/模型复杂度GFLOPs。为十亿(1e9)次的浮点运算。
Latency    网络前向传播的时间,1 ms=1e-3 s,10.5ms=0.0105s
FPS    每秒传输帧数,FPS=1/Latency,1/0.0105=95.2
1、Parameters参数量
Parameters 参数量。参数量指的是模型所包含的参数的数量,比如我们模型中使用到的卷积、全连接里面的权值矩阵对应的每一个数字,都是参数量的组成。以YoloV3算法为例,其参数量为62,001,757。一般被缩写为62.00M。

以YoloV3算法为例,其参数量为62,001,757。一般被缩写为62.00M。需要注意的是,模型的参数量并不等于存储空间大小,存储空间的单位是MB(或者KB)而不是M。


2、FLOPs 浮点运算次数
再来看一下FLOPs参数,需要注意的是FLOPS和FLOPs是不一样的。

FLOPS是处理器性能的衡量指标,是“每秒所执行的浮点运算次数”的缩写。
FLOPs是算法复杂度的衡量指标,是“浮点运算次数”的缩写,s代表的是复数。

在很多论文里面呢,FLOPs是用来衡量算法复杂度的指标,但算法复杂度往往不等同于算法的运算速度。Efficientdet就是非常典型的例子,FLOPs很小,但速度慢,占用显存大。


3、Latency 延迟

Latency指一般是网络预测一张图片所用的时间,按照上图YoloX所示,应该是不包括后处理(without post processing)的。也就是单单包含了网络前传部分的时间。

4、FPS 每秒传输帧数
FPS指的是每秒传输帧数。FPS=1/Latency。在求得上述的Latency 延迟后可以很容易的求出FPS,求个倒数即可。

指标间的关系
Parameters低 ≈ FLOPs低。( FLOPs基本和Parameters成正关系,不过FLOPs还和输入进来的图片大小有关,输入图片越大,FLOPs 越大)
FLOPs低 ≠ Latency低。( FLOPs低 ≠ FPS高,最典型的例子就是EfficientNet,EfficientNet使用了大量的低FLOPs、高数据读写量的操作,即深度可分离卷积操作。这些具有高数据读写量的操作,受到了GPU带宽的限制,算法浪费了大量时间在读写数据上,GPU算力也自然没有得到良好的应用)
Parameters低 ≠ Latency低。( Parameters低 ≠ FPS高,同FLOPs,最典型的例子就是EfficientNet。)
网络的运算速度与什么有关?
网络的运算速度和各种各样的因素有关。主要有关于以下几点:

显卡:大多数SOTA算法用的都是V100或者A100。
网络结构:不是参数量越低速度越快,不是加两个深度可分离卷积,网络的速度就越快。有一个MAC的概念( Memory Access Cost ),在ShuffleNet V2的论文里提到了。深度可分离卷积便是一个高MAC,低参数量的操作。深度可分离卷积在CPU中表现更好。在一些特别高端的GPU上,深度可分离卷积甚至不如普通卷积。
网络的并行度:Inception是一个不断增加网络宽度的模型,它使用不同卷积核大小的卷积进行特征提取。但它的工作速度不是特别快。分多次就要算多次。
网络的层数:额外的操作如Relu,ADD都是没有参数量,但需要运算时间的操作。
CUDA、CUDNN、深度学习算法框架版本影响:在1660ti显卡的机子上,YOLOX-S的FPS在torch1.7里为50多,在torch1.2里为20多。
————————————————
版权声明:本文为优快云博主「Bubbliiiing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_44791964/article/details/124320564

### 卷积神经网络参数量的单位表示 在卷积神经网络(CNN)的设计过程中,参数量是一个重要的考量因素。它直接影响到模型所需的存储空间以及计算资源的需求[^3]。 #### 参数量的定义 参数量是指模型中可学习参数的数量总。对于 CNN 来说,主要由卷积层、全连接层、批量归一化(Batch Normalization, BN)层等构成。每种类型的层都有其特定的参数数量计算方式: 1. **卷积层** 对于一个标准的二维卷积层,假设输入通道数为 \(C_{in}\),输出通道数为 \(C_{out}\),卷积核大小为 \(K \times K\),则该层的参数量可以表示为: \[ C_{out} \cdot (C_{in} \cdot K^2 + 1) \] 这里额外加上偏置项(bias),如果未启用 bias,则忽略最后一部分的 "+1"。 2. **全连接层** 假设某一层有 \(N_{input}\) 输入节点 \(N_{output}\) 输出节点,则对应的参数量为: \[ N_{input} \cdot N_{output} + N_{output} \] 3. **BN 层** 批量归一化层的学习参数主要包括缩放因子 (\(\gamma\)) 平移因子 (\(\beta\)),因此对于具有 \(C_o\) 个特征图的 BN 层来说,参数量为: \[ 2 \cdot C_o \][^4] #### 参数量的单位 参数量通常以单个数值的形式给出,代表的是整个模型中的独立权重或偏差变量总数。它的单位通常是“个”,即指代具体的参数数目。例如,当提到某个模型拥有 10M 的参数时,意味着此模型共有约 10 百万个独立的可训练参数。 为了进一步评估内存需求,在实际应用中还需要考虑数据精度的影响。常见的浮点数格式包括 FP32(32-bit 浮点数)、FP16(16-bit 浮点数)。若采用 FP32 格式保存每个参数,则所需内存可以通过如下公式估算: \[ \text{Memory Usage (Bytes)} = \text{Parameter Count} \times \text{Bits per Parameter} / 8 \] 例如,对于含有 10M 参数且使用 FP32 数据类型的模型而言,其理论上的显存占用大约为: ```python memory_usage_bytes = 10 * 1e6 * 4 # 10 million parameters with 4 bytes each print(f'Memory usage: {memory_usage_bytes / (1024**2):.2f} MB') ``` 上述代码会打印出相应的内存消耗情况。 --- ### 示例代码:计算简单 CNN 模型的参数量 下面提供一段 Python 代码用于演示如何统计 PyTorch 中构建的一个小型 CNN 模型的参数总量。 ```python import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1) self.bn1 = nn.BatchNorm2d(num_features=64) def forward(self, x): pass # Omitted for simplicity. net = SimpleCNN() total_params = sum(p.numel() for p in net.parameters()) print(f'Total number of parameters: {total_params}') ``` 运行以上脚本后将会得到该网络总的参数计数结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值