如何计算torchvision预训练FasterRCNNFPN的模型复杂度及正确输入尺寸?
关于FasterRCNN_ResNet50_FPN复杂度计算的输入尺寸说明
官方报告对应的标准输入尺寸
torchvision官方在报告该模型的复杂度指标时,采用的是**(1333, 800)**的输入尺寸(宽×高,通道数固定为3)。这个尺寸是模型在COCO数据集上训练/评估时的默认输入规格:训练阶段会将图像短边缩放到800,长边限制在1333以内以保持比例;官方计算FLOPs时则直接使用固定的(1333, 800)尺寸来统一基准。
224×224输入导致FLOPs不稳定的原因
FasterRCNN包含RPN(区域提议网络)和RoI Head模块,这两部分的计算量会随输入图像尺寸、生成的提议框数量波动。用224×224这类小尺寸输入时,生成的提议框数量少且随机性强,再加上FPN的多尺度特征计算,会直接导致ptflops输出的FLOPs结果不稳定。而1333×800是模型设计时的标准输入尺寸,能保证计算结果和官方报告对齐。
正确计算复杂度的步骤(以ptflops为例)
- 导入依赖模块:
import torch from torchvision.models.detection import fasterrcnn_resnet50_fpn from ptflops import get_model_complexity_info
- 初始化预训练模型并设置为评估模式:
model = fasterrcnn_resnet50_fpn(pretrained=True) model.eval()
- 用官方标准尺寸计算复杂度:
# 输入格式为 (通道数, 高, 宽) flops, params = get_model_complexity_info(model, (3, 800, 1333), as_strings=True, print_per_layer_stat=True) print(f"FLOPs: {flops}") print(f"Params: {params}")
注意:必须将模型设为eval模式,避免训练阶段的随机操作(如随机采样提议框)干扰计算结果的稳定性。
补充说明
- 参数数量是模型固有属性,与输入尺寸无关,工具计算的参数值应与官方一致(约41M)。
- 若需验证FLOPs,可直接对比torchvision官方文档给出的数值,确保输入尺寸匹配后结果对齐。
内容的提问来源于stack exchange,提问作者vantienpham
相关产品推荐
相关产品推荐

