Pytorch计算模型的参数量和GFLOPs

文章介绍了如何在Pytorch中利用thop包来计算模型的参数数量和GFLOPs,强调了thop相对于torchstat的优势,特别是在处理复杂模型和自定义模型时的适用性。通过示例展示了如何导入和使用thop对ResNet18模型进行分析。

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

Pytorch计算模型的参数量和GFLOPs

Pytorch计算模型的参数量和GFLOPs

最近在研究模型的压缩技术,使用Pytorch框架,为了计算模型的参数量和GFLOPs。

thop包

相较于torchstat,torchstat无法适用的模型某一个layer的输入为多个变量和Pytorch-0.4.1版本等情况,可以尝试使用thop工具包进行模型分析。此外,thop更加适用于自己定义的模型,在作者定义的各种模型中较为普适。

安装

pip install thop

thop使用

from thop import profile                            
from thop import clever_format
import torchvision.models as models

resnet18 = models.resnet18()

input = torch.randn(1, 3, 224, 224)                        
flops, params = profile(resnet18, inputs=(input, ))                   
print(flops,params) 
flops,params = clever_format([flops, params],"%.3f")
print(flops,params)   

关于YOLOv11模型的具体参数量计算复杂度以及FLOPs的信息尚未公开发布,因此无法提供确切数值。然而,可以基于已有的YOLO系列模型发展规律推测可能的设计方向及其特性。 ### 基于YOLOv10的发展趋势分析 #### 参数量计算复杂度 YOLOv10已经展示了在不同尺度下的高效性精确性[^2]。例如,YOLOv10-S相较于其他轻量级模型(如RT-DETR-R18),不仅保持了较高的AP值,还优化了推理时间。如果假设YOLOv11延续这一设计理念,则可能会进一步减少冗余操作并引入更高效的特征提取机制,从而降低整体参数量计算复杂度。 对于具体数值而言: - **小型版本 (S)** 的参数数量预计会维持在一个较低水平,大约几十万到几百万之间; - 中型及以上型号(M/L/X),则依据应用场景需求调整网络深度及宽度比例因子来控制资源消耗; 但需要注意的是,上述估计仅适用于常规情况,在特殊定制化场景中(比如针对特定硬件平台做了大量剪枝或者蒸馏处理后的实例),实际数字可能会有所差异. #### FLOPs结构分析 从历史演进来看,YOLO家族每一代都会尝试通过架构创新来改善性能指标(FPS vs Accuracy). 对于即将发布的YOLOv11来说,以下是几个潜在改进点: 1. 更加先进的注意力机制集成 - 这种方法可以帮助突出重要区域的同时抑制无关干扰项的影响; 2. 动态路由技术应用 - 根据输入图像的内容自适应地决定哪些部分需要更高分辨率表示; 3. 跨层连接增强 - 利用跳跃链接促进低层次语义信息向高层次传播以便更好地捕捉全局上下文关系 ; 4. 新型激活函数选用 - 如SiLU(Swish)替代传统ReLU以获得更好的梯度流动效果 . 这些改动都有助于提高单位时间内完成的有效运算次数即所谓的浮点运算率(Floating Point Operations Per Second,FLOP/S). 尽管如此,最终版设计方案还需等待官方文档确认才能知晓全部细节. ```python # 示例代码展示如何估算理论上的flops import torch.nn as nn from thop import profile class SimpleConvNet(nn.Module): def __init__(self): super().__init__() self.layers = nn.Sequential( nn.Conv2d(in_channels=3,out_channels=64,kernel_size=(3,3)), nn.ReLU(), nn.MaxPool2d(kernel_size=(2,2)) ) def count_flops(model,input_shape): input_tensor=torch.randn(input_shape) macs,params=profile(model,(input_tensor,)) flops=macs*2 # Multiply by 2 to convert MACs into actual floating point operations. return {"GFLOPs":round(flops/(1e9)),"Params(M)":round(params/(1e6))} model=SimpleConvNet() result=count_flops(model,[1,3,224,224]) print(result) ``` 以上脚本利用`thop`库快速评估了一个简单的卷积神经网络所需的giga-flop(gflops)以及million-parameter(mpars)大小。可以根据类似方式测量任意pytorch实现的deep learning model的各项统计属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值