资讯动态

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

发布时间:2026/9/13 16:37:22 来源:尧图企业网站定制
如何用 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.mdLinux 或 macOS、Python ≥ 3.7、PyTorch ≥ 1.8脚本本身还要求单 GPU 运行代码中有assert args.num_gpus 1且flop与activation任务依赖测试数据集。准备环境按 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 列出的常见问题。flop和activation任务会从配置的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_depth5)即最多展开 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 自行下载。脚本运行后通过日志给出三部分结果均为文档中的输出格式数值随模型和数据而定Flops table computed from only one input sample——仅基于单个输入样本的按算子 FLOPs 表来自 fvcore 的flop_count_tableAverage GFlops for each type of operators——各类型算子的平均 GFlopsTotal GFlops: 均值±标准差——在--num-inputs个输入上的总 GFlops 统计量。统计激活量与 FLOPs 相同的数据依赖activation任务的输入要求与flop完全相同测试数据集 模型权重可复用上面同一条命令只把任务换成activationcd 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: 均值±标准差。四个任务flop、activation、parameter、structure也可以一次指定多个--tasks接受多个值。structure任务打印完整模型结构适合在统计前先确认构建出的模型是否符合预期。理解统计口径与局限被忽略的算子analysis.py 中的FlopCountAnalysis会跳过一组逐元素和归约类算子_IGNORED_OPS如aten::add、aten::batch_norm、aten::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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价