pytorch-OpCounter
pytorch-OpCounter(又名 THOP)是一款专为 PyTorch 框架设计的轻量级工具,旨在帮助开发者快速统计深度学习模型的计算复杂度。在模型优化和部署过程中,研究人员往往需要精确了解模型的参数量(Params)以及乘加运算量(MACs/FLOPs),以评估其在特定硬件上的运行效率与资源消耗。手动计算这些指标不仅繁琐且容易出错,而 pytorch-OpCounter 通过自动化分析模型结构,一键即可输出准确的统计数据,有效解决了这一痛点。
该工具特别适合 AI 算法工程师、学术研究人员以及需要进行模型压缩或边缘端部署的开发者使用。其核心亮点在于极高的易用性与灵活性:用户只需几行代码即可完成对 ResNet、VGG 等主流模型的评估;同时,它还支持自定义规则,允许用户为第三方或自研的特殊网络模块定义计数逻辑,确保统计结果的全面性。此外,pytorch-OpCounter 内置了友好的格式化输出功能,能让数据展示更加清晰直观。无论是进行架构选型对比,还是撰写论文时的性能汇报,它都是不可或缺的辅助利器。
使用场景
某自动驾驶初创团队的算法工程师正在为嵌入式设备优化目标检测模型,需要在保证精度的前提下严格限制计算量。
没有 pytorch-OpCounter 时
- 工程师只能凭经验估算模型复杂度,经常选错骨干网络,导致模型在部署阶段因算力不足而崩溃。
- 手动推导卷积层和全连接层的 FLOPs 公式极其繁琐,一旦修改网络结构(如调整通道数),就需要重新计算,效率极低且容易出错。
- 缺乏统一的量化标准,团队成员对“轻量级”定义模糊,沟通成本高,难以快速筛选出适合边缘端运行的候选模型。
- 无法针对自定义的第三方算子进行统计,遇到特殊图层时只能盲目跳过,导致最终评估结果与实际硬件负载存在巨大偏差。
使用 pytorch-OpCounter 后
- 只需几行代码即可自动获取 ResNet 或 MobileNet 等模型的精确 MACs 和参数量,瞬间验证模型是否满足嵌入式芯片的算力阈值。
- 迭代速度显著提升,修改网络配置后立即运行
profile函数,实时反馈计算量变化,彻底告别手工推导公式的历史。 - 团队建立了基于具体数值(如 MACs < 4G)的选型标准,利用内置的知名模型基准数据表,快速锁定最适合的车载检测架构。
- 通过定义
custom_ops规则,轻松支持团队自研的特殊注意力模块,确保整体复杂度评估覆盖全图,消除了性能盲区。
pytorch-OpCounter 将模糊的模型复杂度评估转化为精准的量化数据,让深度学习模型在资源受限设备上的落地变得可控且高效。
运行环境要求
未说明
未说明

快速开始
THOP:PyTorch-OpCounter
如何安装
pip install thop(现已在 GitHub Actions 上持续集成)
或者
pip install --upgrade git+https://github.com/Lyken17/pytorch-OpCounter.git
如何使用
基本用法
from torchvision.models import resnet50 from thop import profile model = resnet50() input = torch.randn(1, 3, 224, 224) macs, params = profile(model, inputs=(input, ))定义第三方模块的规则。
class YourModule(nn.Module): # 您的定义 def count_your_model(model, x, y): # 您的规则在此处 input = torch.randn(1, 3, 224, 224) macs, params = profile(model, inputs=(input, ), custom_ops={YourModule: count_your_model})提升输出的可读性
调用
thop.clever_format,以提供更清晰、更易读的输出格式。from thop import clever_format macs, params = clever_format([macs, params], "%.3f")
近期模型的性能表现
本实现基于 torchvision 进行优化。以下结果可通过 benchmark/evaluate_famous_models.py 获取。