【FLOPS】各种模型统计FLOPs

本文介绍如何使用PyTorch-OpCounter工具计算神经网络模型的浮点运算次数(FLOPs)和参数数量,通过具体实例演示了如何在ResNet18模型上应用该工具。

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

简介:

FLOPs : FLOATING-POINT OPERATIONS PER SECOND

1、Pytorch:

pytorch有PyTorch-OpCounter:

github: https://github.com/Lyken17/pytorch-OpCounter

安装:pip install thop

from torchvision.models import resnet18
from thop import profile
import torch

model = resnet18()
input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, inputs=(input, ))

print(flops)

 

### 计算并打印 mmsegmentation 中模型FLOPs 为了在 `mmsegmentation` 框架中计算并打印模型FLOPs,可以利用第三方库如 `thop` 或者使用内置工具来实现这一目标。下面提供了一种通过 `thop` 库的方法。 #### 安装依赖项 首先需要安装 `thop` 库用于分析神经网络中的参数量和FLOPs: ```bash pip install thop ``` #### 修改配置文件或脚本以支持FLOPs统计 接着可以在测试或者验证阶段加入如下代码片段以便于获取所需信息: ```python from mmseg.apis import init_segmentor, inference_segmentor import torch from thop import profile config_file = 'path/to/your/config.py' checkpoint_file = 'path/to/your/checkpoint.pth' model = init_segmentor(config_file, checkpoint_file, device='cuda:0') input_shape = (1, 3, 512, 512) # 输入张量形状调整为实际使用的尺寸 dummy_input = torch.randn(input_shape).to('cuda') flops, params = profile(model, inputs=(dummy_input,), verbose=False) print(f"FLOPs: {flops / 1e9:.2f} G") # 将结果转换成十亿单位表示 print(f"Parameters: {params / 1e6:.2f} M") ``` 这段代码初始化了一个分割模型实例,并创建了适当大小的虚拟输入数据来进行前向传播操作;之后调用了 `profile()` 函数来评估整个过程中涉及了多少次浮点数运算以及有多少可训练参数[^1]。 #### 注意事项 当执行上述过程时需要注意几点: - 确认所选输入图像分辨率与训练期间保持一致; - 如果模型中有条件分支逻辑,则可能会影响最终得到的结果准确性; - 对某些特殊层(比如动态卷积)的支持程度可能会有所不同,具体取决于版本更新情况。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值