mmdetection添加计算参数量params和浮点计算数FLOPs的方法

在mmdetection的官方文档中,计算参数量和浮点计算数可以使用命令行

python tools/analysis_tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}]

但是在最新版本的实际使用中发现,get_flops.py中并没有--shape这个参数了,想要更改输入图片的size我是在代码的95行和99行更改resize后的图片形状为640但是在运行命令行的时候,发现还是会报错 

assert isinstance(name, str), AssertionError: type of name should be str, but got <class 'mmengine.utils.manager.ManagerMeta'>

这是因为少了配置文件config中少了参数default_scope,可以直接在你使用的配置文件中加上这个参数,同时注意使用的config是最原始设置的文件,不是运行之后生成在你设置的文件夹里面的配置文件,因为生成的配置文件不完整.

default_scope = 'mmdet'

 以我的命令行为例,之后运行

python tools/analysis_tools/get_flops.py E:/GoogleDownload/mmdetection-main/mmdet/configs/detr/detr_r18_8xb2_500e_coco.py

会得到参数量和浮点计算数的结果.

但是注意最后一句: !!!Please be cautious if you use the results in papers. You may need to check if all ops are supported and verify that the flops computation is correct.这个结果不保证完全正确,写进论文的话还要谨慎!!!!!

这里可以引入一个库calflops,我在使用后发现这个计算的较为准确

首先pip安装两个库

pip install calflops
pip install transformers

然后在get_flops.py中直接添加代码并将结果加入到result中,为了避免变量重名可以稍微修改加个后缀:

    imageshape = (1, 3, 640, 640)
    flops1, macs1, params1 = calculate_flops(model=model, input_shape=imageshape, output_as_string=True,
                                          output_precision=4, print_detailed=False)
    result['flops1'] = flops1
    result['macs1'] = macs1
    result['params1'] = params1

最后在main函数中加入以下代码就能输出准确的结果了

    flops1 = result['flops1']
    macs1 = result['macs1']
    params1 = result['params1']
    print("Model FLOPs:%s   MACs:%s   Params:%s \n" % (flops1, macs1, params1))

重新运行命令行得到结果

 可以看到计算的结果并不一样,在对照论文中的参数量之后,发现新加入的包计算较为准确.

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Params计算公式可以使用parameters法,即计算模型中所有的总和。具体公式如下: Params = I × O 其中I为一次乘法,O为一次加法后的结果。 而FLOPs浮点操作)的计算公式可以根据不同的情况而有所不同。一般情况下,可以使用以下公式进行计算FLOPs = H × W × Ci 其中H和W分别表示特征图(feature map)的高度和宽度,Ci表示输入的通道。这个公式适用于计算包含乘法和加法操作的情况。 综上所述,Params计算公式为Params = I × O,而FLOPs计算公式可以根据具体情况选择使用公式FLOPs = H × W × Ci或者FLOPs = 2 × I × O。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【数量Params)与计算量(FLOPs)的计算】](https://blog.csdn.net/MadXiaoTian/article/details/124232605)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [如何用Pytorch计算模型数量Params计算Flops查看框架结构等](https://blog.csdn.net/qq_41573860/article/details/116767639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值