统计模型参数量、计算复杂度ptflops

一、安装ptflops

https://pypi.org/project/ptflops/
pip install ptflops

二、计算模型参数量和复杂度 get_model_complexity_info

from ptflops import get_model_complexity_info
model = MyModel()
macs, params = get_model_complexity_info(model, (2,3,64,64), print_per_layer_stat=True)
print('{:<30}  {:<8}'.format('Computational complexity: ', macs))
print('{:<30}  {:<8}'.format('Number of parameters: ', params))

下面是我测试的模型输出

Computational complexity:       1471.32 GMac
Number of parameters:           111.61 M

关于GMac是什么,我觉得下面的链接讲得比较好:
FLOPS,FLOPs,GMac

三、其他计算方法profile,stat

使用了profile来计算过,from thop import profile
出现warning, cannot find relu...
而且计算出来模型的参数量也少了很多,所以后面用了ptflops
在这里插入图片描述
stat


from torchstat import stat
model = MyModel()
stat(model, (3,128,128))
Total params: 39,815,151
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total memory: 750.35MB
Total MAdd: 168.22GMAdd
Total Flops: 91.54GFlops
Total MemR+W: 2.01GB


### 如何计算或查看 YOLOv5 模型的总参数量及可训练参数数量 在 PyTorch 中,可以使用多种方法来统计模型参数量以及计算量。以下是具体的方法: #### 方法一:手动统计参数量 可以直接通过遍历模型中的 `parameters` 来获取总的参数量和可训练参数的数量。 ```python import torch # 假设已经加载了YOLOv5模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # 使用预定义模型作为例子 # 统计总参数量 total_params = sum(p.numel() for p in model.parameters()) print(f"Total Parameters: {total_params}") # 统计可训练参数量 trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad) print(f"Trainable Parameters: {trainable_params}") ``` 这种方法简单高效,适用于任何基于 PyTorch 的模型[^2]。 --- #### 方法二:使用第三方库 `ptflops` 如果还需要进一步了解模型的具体 FLOPs(浮点运算次数),可以借助 `ptflops` 库完成这一任务。 安装依赖: ```bash pip install ptflops ``` 代码示例: ```python from ptflops import get_model_complexity_info import torch # 加载YOLOv5模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s') with torch.cuda.device(0): # 如果有GPU可用,则指定设备 macs, params = get_model_complexity_info(model, (3, 640, 640), as_strings=True, print_per_layer_stat=False, verbose=False) print(f"FLOPs: {macs}, Params: {params}") ``` 此方法不仅可以提供参数量,还可以给出每秒所需的 MACs 数量(乘加操作数)。注意输入尺寸 `(3, 640, 640)` 需要与实际使用的图像分辨率一致[^1]。 --- #### 方法三:使用 `thop` 进行更详细的分析 对于更加细致的逐层分析,推荐使用 `thop` 工具包。 安装依赖: ```bash pip install thop ``` 代码示例: ```python import torch from thop import profile # 加载YOLOv5模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s') input_tensor = torch.randn(1, 3, 640, 640) # 输入张量形状需匹配网络需求 flops, params = profile(model, inputs=(input_tensor,), verbose=False) print(f"FLOPs: {flops / 1e9:.2f} G, Params: {params / 1e6:.2f} M") ``` 该工具能够打印出每一层的操作复杂度,并支持自定义输入数据格式[^3]。 --- ### 总结 上述三种方法各有优劣,可以根据实际需求选择适合的方式。如果仅关注参数规模,可以选择最简单的第一种方案;而当需要深入理解性能瓶颈时,建议采用第二种或第三种方法进行综合评估。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值