news 2026/9/13 16:37:12

如何用 Detectron2 analyze_model.py 分析模型的 FLOPs、参数量和激活量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 Detectron2 analyze_model.py 分析模型的 FLOPs、参数量和激活量

如何用 Detectron2 analyze_model.py 分析模型的 FLOPs、参数量和激活量

【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2

当你需要评估一个 detectron2 检测模型的计算开销——FLOPs、参数量、激活量——时,项目自带的 analyze_model.py 可以直接完成这项分析,无需自己写统计脚本。本文以mask_rcnn_R_50_FPN_1x.yaml为例,说明三种统计任务的执行方式和输出含义。

适用前提(来自 INSTALL.md):Linux 或 macOS、Python ≥ 3.7、PyTorch ≥ 1.8;脚本本身还要求单 GPU 运行(代码中有assert args.num_gpus == 1),且flopactivation任务依赖测试数据集。

准备环境

按 INSTALL.md 安装 detectron2 即可,本地克隆方式:

git clone https://github.com/facebookresearch/detectron2.git python -m pip install -e detectron2

从源码构建需要 gcc & g++ ≥ 5.4。如果你刚重装过 PyTorch,需要先清掉旧的build/**/*.so再重新构建,否则可能遇到TH..at::Tensor等符号缺失或段错误(INSTALL.md 列出的常见问题)。

flopactivation任务会从配置的DATASETS.TEST[0]构建测试数据加载器。以本文用的 mask_rcnn_R_50_FPN_1x.yaml 为例,它继承的 Base-RCNN-FPN.yaml 中DATASETS.TEST("coco_2017_val",),所以你需要先准备好该数据集,并可通过环境变量指定内置数据集位置:

export DETECTRON2_DATASETS=/path/to/datasets

其中/path/to/datasets替换为你的数据集根目录(见 datasets/README.md)。

统计参数量:不需要数据集和权重

四种任务中parameter最轻量,只需要配置文件。脚本 epilog 给出的官方示例:

cd tools/ ./analyze_model.py --tasks parameter \ --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml

脚本会构建模型并输出Parameter Count:加一张按模块分层的参数统计表(源码中parameter_count_table(model, max_depth=5),即最多展开 5 层)。看到这张分层参数表即表示任务完成。

统计 FLOPs:需要准备测试数据

FLOPs 是数据相关的——detectron2/utils/analysis.py 的文档明确说明:检测模型的 FLOPs 取决于输入,box & mask head 的开销取决于 proposal 数量和检测到的目标数量,因此单个样本的统计可能不能准确反映计算成本,建议在多个输入上取平均。

命令(来自 tools/analyze_model.py 的官方示例,注意MODEL.WEIGHTS后面的路径需替换为你自己的模型权重文件):

cd tools/ ./analyze_model.py --num-inputs 100 --tasks flop \ --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml \ MODEL.WEIGHTS /path/to/model.pkl
  • --num-inputs(默认 100)控制用于统计的输入数量,FLOPs 和激活量都依赖它;
  • MODEL.WEIGHTS /path/to/model.pkl中的.pkl路径替换为实际权重文件。不传时,脚本会使用配置文件里的默认权重地址(本例是detectron2://ImageNetPretrained/MSRA/R-50.pkl),由 detectron2 自行下载。

脚本运行后通过日志给出三部分结果(均为文档中的输出格式,数值随模型和数据而定):

  1. Flops table computed from only one input sample——仅基于单个输入样本的按算子 FLOPs 表(来自 fvcore 的flop_count_table);
  2. Average GFlops for each type of operators——各类型算子的平均 GFlops;
  3. Total GFlops: 均值±标准差——在--num-inputs个输入上的总 GFlops 统计量。

统计激活量:与 FLOPs 相同的数据依赖

activation任务的输入要求与flop完全相同(测试数据集 + 模型权重),可复用上面同一条命令,只把任务换成activation

cd tools/ ./analyze_model.py --num-inputs 100 --tasks activation \ --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml \ MODEL.WEIGHTS /path/to/model.pkl

输出同样是文档中定义的两段:(Million) Activations for Each Type of Operators(各算子类型的百万激活量)和Total (Million) Activations: 均值±标准差

四个任务(flopactivationparameterstructure)也可以一次指定多个,--tasks接受多个值。structure任务打印完整模型结构,适合在统计前先确认构建出的模型是否符合预期。

理解统计口径与局限

  • 被忽略的算子:analysis.py 中的FlopCountAnalysis会跳过一组逐元素和归约类算子(_IGNORED_OPS,如aten::addaten::batch_normaten::sigmoid等),并且torchvision::nms目前不做 FLOPs 估计。所以统计值反映的是卷积等主体算子的开销,不是网络的全部逐算子计算量。
  • 数据依赖性:单次输入的 FLOPs/激活量只作单样本参考;脚本最终报告的是多输入上的均值±标准差,跨模型比较时应使用同一--num-inputs和同一测试集。
  • 单 GPU 限制:脚本断言num_gpus == 1且不能带--eval-only,多卡场景下直接用单卡跑统计即可。

完成一次flop任务后,如果你还想继续测量训练/推理/数据加载的速度,可以参考同目录的 benchmark.py(用法见 tools/README.md)。

【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 16:36:26

电商导购返利小程序实战:淘宝京东拼多多联盟API对接与uniapp开发

简介:首席省钱赚钱专家v1.9.18小程序源码,面向个人创业者、电商运营与小程序开发者,基于拼多多优惠商品接口,实现购物返利、推广分销、团队奖励等典型电商小程序功能,帮助快速搭建“自购省钱分享赚钱”的应用场景。资源…

作者头像 李华
网站建设 2026/9/13 16:36:17

基于JSP的银行预约管理系统:从Servlet原理到并发排错实战

简介:这是一份基于JSPSQLServerTomcat技术栈的银行预约管理系统毕业设计源码包,面向Java Web方向的毕业生或需要快速搭建预约类管理系统的开发者,解决银行业务预约、客户信息管理、后台审核等环节的一体化实现问题。资源共499个文件&#xff…

作者头像 李华
网站建设 2026/9/13 16:35:46

基于Simulink的OFDM瑞利信道估计与同步仿真指南

简介:OFDM系统在瑞利衰落信道下的信道估计,是无线通信领域的典型问题。这套Simulink仿真资源提供了完整的导频辅助估计实现方案,适合通信专业本科生、研究生以及进行课程设计、毕业设计的开发者,既能帮助理解导频插入与信道估计原…

作者头像 李华
网站建设 2026/9/13 16:35:23

浙江科技新小龙企业评选标准与创新趋势分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 16:32:14

中心对齐PWM下FOC电流采样:单/双/三电阻方案与调试实战

做FOC的都知道,电流采样是整个环路里最容易被忽视、又最容易出事的环节。很多人画板子时觉得“不就是电阻加运放嘛”,结果一上电就过流报警,或者波形乱七八糟,严重一点直接炸管子。我这些年调过不少无感FOC驱动板,也算…

作者头像 李华