目录

1. 定义

2. 实现方法

2.1. 计算参数量

2.2. 计算参数量和FLOPs

2.3. 计算推理时间(FPS)

3. 数据大小对参数量和FLOPs的影响

4. 参数量和FLOPs对于硬件要求

参考


1. 定义

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

Params

参数量是指模型训练中需要训练的参数总数。用来衡量模型的大小(计算空间复杂度)。

FLOPs(Floating-point Operations)

浮点运算次数,理解为计算量(计算时间复杂度),可以用来衡量算法的复杂度,常用做神经网络模型速度的间接衡量标准(虽然最近已经有文章证明靠FLOPs间接标准评价模型的速度是不靠谱的,因为模型的计算速度还跟内存的吞吐等因素相关,但此标准依然广泛用作模型速度的参考评价标准)。一个乘法或一个加法都是一个FLOPs。

FPS(Frames Per Second):每秒传输帧数,网络每秒可以处理(检测)多少帧(多少张图片),即每秒内可以处理的图片数量或者处理一张图片所需时间来评估检测速度,时间越短,速度越快。FPS简单来理解就是图像的刷新频率,假设目标网络处理1帧要0.02s,此时FPS就是1/0.02=50。

MACs, MAdds(Multiply–Accumulate Operations)

乘加累积操作数,常常与FLOPs概念混淆,实际上1MACs包含一个乘法操作与一个加法操作,通常MACs与FLOPs存在一个2倍的关系。MACs和MAdds相同。

MAC(memory access cost)

内存使用量,用来评价模型在运行时的内存占用情况。

FLOPS(Floating-point Operations Per Second):

每秒浮点运算次数,理解为计算速度,是一个衡量硬件性能的指标。它常被用来估算电脑的执行效能,尤其是在使用到大量浮点运算的科学计算领域中。正因为FLOPS字尾的那个S,代表秒,而不是复数,所以不能省略掉。在这里所谓的“浮点运算”,实际上包括了所有涉及小数的运算。这类运算在某类应用软件中常常出现,而它们也比整数运算更花时间。现今大部分的处理器中,都有一个专门用来处理浮点运算的“浮点运算器”(FPU)。也因此FLOPS所量测的,实际上就是FPU的执行速度。

GFLOPS (Giga Floating-point Operations Per Second)

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

2. 实现方法

2.1. 计算参数量

model = torchvision.models.alexnet(pretrained=False)
# nelement():统计Tensor的元素个数
#.parameters():生成器,迭代的返回模型所有可学习的参数,生成Tensor类型的数据
total = sum([param.nelement() for param in model.parameters()])
print("Number of parameter: %.2fM" % (total/1e6))

2.2. 计算参数量和FLOPs

方法1:thop

安装 :

pip install thop

调用:

计算模型参数总量和模型计算量,而且会打印每一层网络的具体信息。

import torch
import torchvision
from thop import profileprint('==> Building model..')
model = torchvision.models.alexnet(pretrained=False)input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, (input,))
print('flops: %.2f M, params: %.2f M' % (flops / 1e6, params / 1e6))

方法2:ptflops

安装:

pip install ptflops

调用:

计算模型参数总量和模型计算量,而且会打印每一层网络的具体信息。

import torchvision
from ptflops import get_model_complexity_infomodel = torchvision.models.alexnet(pretrained=False)
flops, params = get_model_complexity_info(model, (3, 224, 224), as_strings=True, print_per_layer_stat=True)
print('flops: ', flops, 'params: ', params)

方法3:torchstat

安装:

pip install torchstat

调用:计算模型参数总量和模型计算量,而且会打印每一层网络的具体信息。

import torch
import torchvision
from torchstat import statprint('==> Building model..')
model = torchvision.models.alexnet(pretrained=False)stat(model, (3, 224, 224))

2.3. 计算推理时间(FPS)

安装:

import time

调用:

torch.cuda.synchronize()
start = time.time()
result = model(img.to(device))
torch.cuda.synchronize()
end = time.time()
print('infer_time:', end-start)

3. 数据大小对参数量和FLOPs的影响

以thop法,为例:

import torch
import torchvision
from thop import profileprint('==> Building model..')
model = torchvision.models.alexnet(pretrained=False)input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, (input,))
print('flops: %.2f M, params: %.2f M' % (flops / 1e6, params / 1e6))
  • 输入数据:(1, 3, 224, 224),一张224*224的RGB图像,结果是:
flops: 714.21 M, params: 61.10 M
  • 输入数据:(2, 3, 224, 224),两张224*224的RGB图像,结果是:
flops: 1428.41 M, params: 61.10 M
  • 输入数据:(1, 3, 448, 448),一张448*448的RGB图像,结果是:
flops: 5665.76 M, params: 61.10 M

4. 参数量和FLOPs对于硬件要求

  • 计算量→GPU的运算能力
  • 参数量→显存大小

参考

深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结https://blog.csdn.net/qq_40507857/article/details/118764782

神经网络的计算量(FLOPs)、参数量(Params)、推理时间(FPS)的定义及实现方法相关推荐

  1. 卷积神经网络参数量和计算量内存计算

    卷积神经网络参数量和计算量内存计算 参数量 计算量 内存 参数量 每一次卷积的参数量和特征图的大小无关,仅和卷积核的大小,偏置及BN有关. 1.每个卷积层的参数量,+1表示偏置: Co x (Kw x ...

  2. 【深度学习】深度学习中模型计算量(FLOPs)和参数量(Params)等的理解以及四种在python应用的计算方法总结

    接下来要分别概述以下内容: 1 首先什么是参数量,什么是计算量 2 如何计算 参数量,如何统计 计算量 3 换算参数量,把他换算成我们常用的单位,比如:mb 4 对于各个经典网络,论述他们是计算量大还 ...

  3. Lesson 16.1016.1116.1216.13 卷积层的参数量计算,1x1卷积核分组卷积与深度可分离卷积全连接层 nn.Sequential全局平均池化,NiN网络复现

    二 架构对参数量/计算量的影响 在自建架构的时候,除了模型效果之外,我们还需要关注模型整体的计算效率.深度学习模型天生就需要大量数据进行训练,因此每次训练中的参数量和计算量就格外关键,因此在设计卷积网 ...

  4. 模型的显存和参数量计算

    写在前面:以此记录关于模型显存和参数量的一些理解和计算. 首先是"运算量"和"参数量"两个概念: 参数量:这个比较好理解,例如卷积层中的卷积核c_i*k*k*n ...

  5. 深度学习中参数量与计算量的理解

    接下来要分别概述以下内容: 1 首先什么是参数量,什么是计算量 2 如何计算 参数量,如何统计 计算量 3 换算参数量,把他换算成我们常用的单位,比如:mb 4 对于各个经典网络,论述他们是计算量大还 ...

  6. 卷积核的参数量和计算量

    卷积核的参数量和计算量 1. 参数量计算 1.1 普通卷积 输入特征图尺寸 CxHxW 输出特征图尺寸 OxHxW 卷积核尺寸 kxkxC(O个kxkxC的卷积) 权重 kxkxCxO 偏置 O BN ...

  7. 动态卷积超进化!通道融合替换注意力,减少75%参数量且性能显著提升 ICLR 2021...

    导读 本文是微软&加大圣地亚哥分校的研究员在动态卷积方面的一次突破性的探索,针对现有动态卷积(如CondConv.DY-Conv)存在的参数量大.联合优化困难问题,提出了一种动态通道融合机制替 ...

  8. 动态卷积超进化!通道融合替换注意力,减少75%参数量且性能显著提升 | ICLR 2021

    还没开源 本文是微软&加大圣地亚哥分校的研究员在动态卷积方面的一次突破性的探索,针对现有动态卷积(如CondConv.DY-Conv)存在的参数量大.联合优化困难问题,提出了一种动态通道融合机 ...

  9. 动态卷积超进化!通道融合替换注意力,减少75%参数量且性能显著提升|ICLR 2021

    本文首发于极市平台公众号,作者Happy.转载需获得授权并标明出处. paper: https://arxiv.org/abs/2103.08756 code: https://github.com/ ...

  10. 【深度学习】参数量、模型大小、显存

    对于一个深度学习神经网络来说,其通常包含很多卷积层,用于不断提取目标的特征,或对目标进行最终定位或者分类. 1 数据存储精度与存储空间 在深度学习神经网络中,最常见的数据格式是float32,占4个字 ...

最新文章

  1. 小白重装系统教程_怎么一键重装系统:安装win10系统详细图文教程
  2. android 开启一个定时线程_Android异步、延迟和定时任务的简易用法
  3. Unity5x编辑器的视图一
  4. kdbg调试linux汇编,Ubuntu 16.04安装Kdbg替代Insight实现汇编的调试
  5. ad中电源插座怎么封装_您可以在房屋中安装的各种电源插座
  6. Papar Notes List
  7. 跳坑成功,手摸手带你使用PHP连接Oracle数据库
  8. pythoncsv数据类型_python – 从CSV文件行中的值确定数据类型
  9. 简单理解 unix (liunx)inode
  10. 运算符重载,输出流运算符重载
  11. python 字段_python字典查询
  12. python 字典改变值为2倍
  13. c++ MFC 根据屏幕分辨率变化自动调整控件位置和大小
  14. 随机生成中文名字的工具类
  15. Fluent的融化凝固模型介绍
  16. 人工智能风暴狂飙突进,极致创新的微鲸深掘大屏金矿
  17. Day036 《电影院售票系统》项目全码
  18. MATLAB二维图形绘制
  19. Limma | 三个组的差异分析怎么分析做呢!?~
  20. 蛋糕店会员卡充值方案有哪些?

热门文章

  1. python dask_《使用Python和Dask实现分布式并行计算》2. Introducing Dask(介绍Dask)
  2. repo 切换manifest
  3. SpringBoot使用MockMvc对Controller层进行单元测试
  4. SpringBoot读取properties文件中的值
  5. 银河麒麟下安装sshd服务(联网)
  6. C++ CSF地面点滤波(插件)
  7. 1、Ray Core
  8. 最详细SQL注入教程
  9. Fairseq 编译setup.py 报错“unrecognized command line option ‘-std=c++14“
  10. TinyHTTPd 编译及 HTTP 浅析