yolact参数量和计算量FLOPs统计

一、使用的代码

import torch
from thop import profile
def model_info(model, verbose=False):
    #打印模型参数、计算量
    #train阶段会输出迭代数,等于param
    n_p = sum(x.numel() for x in model.parameters())  # number parameters
    n_g = sum(x.numel() for x in model.parameters() if x.requires_grad)  # number gradients
    if verbose:
        print(f"{'layer':>5} {'name':>40} {'gradient':>9} {'parameters':>12} {'shape':>20} {'mu':>10} {'sigma':>10}")
        for i, (name, p) in enumerate(model.named_parameters()):
            name = name.replace('module_list.', '')
            print('%5g %40s %9s %12g %20s %10.3g %10.3g' %
                  (i, name, p.requires_grad, p.numel(), list(p.shape), p.mean(), p.std()))
    name = 'yolact'
    print(f"{name} summary: {len(list(model.modules()))} layers, {n_p} parameters, {n_g} gradients")
    
def summary_params_flpos():
    net = Yolact()
    net.load_weights('weights/yolact_base_54_800000.pth')
    net.cuda().eval()
    model_info(net)
    img = cv2.imread('yolact-master/data/img.jpg')
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img = cv2.resize(img, (550, 550))
    img = torch.from_numpy(img).permute(2, 0, 1).unsqueeze(0).float().cuda()
    flops, params = thop.profile(net, inputs=(img, ))

    print('flops: ', flops, 'params: ', params)
    print('flops: %.2f M, params: %.2f M' % (flops / 1000000.0, params / 1000000.0))
summary_params_flpos()

二、问题记录

1. RuntimeError: Can’t add a new parameter after ScriptModule construction. Tried to add 'total_ops

在这里插入图片描述
问题描述:运行时错误:不能在ScriptModule构造后添加新参数。试图添加total_ops。
问题分析:由于我之前阅读过代码,知道ScriptModule在模型构造阶段用到了。

class FPN(ScriptModuleWrapper):

接着点进去看 yolact.py 里ScriptModuleWrapper的定义:

# As of March 10, 2019, Pytorch DataParallel still doesn't support JIT Script Modules
use_jit = torch.cuda.device_count() <= 1
if not use_jit:
    print('Multiple GPUs detected! Turning off JIT.')

ScriptModuleWrapper = torch.jit.ScriptModule if use_jit else nn.Module
script_method_wrapper = torch.jit.script_method if use_jit else lambda fn, _rcn=None: fn

模型use_jit参数设置为了True。不知道是什么东东,但是用到了JIT,感觉是trance一些东西,反正和nn.Module 不同。那么设置为False看看,问题解决了。

问题解决:将 torch.jit.ScriptModule 模型修改为 nn.Module。具体设置:在yolact.py中,以下位置添加一行代码 use_jit = False:

use_jit = torch.cuda.device_count() <= 1
use_jit = False  #在这里添加这行
if not use_jit:
    print('Multiple GPUs detected! Turning off JIT.')

ScriptModuleWrapper = torch.jit.ScriptModule if use_jit else nn.Module
script_method_wrapper = torch.jit.script_method if use_jit else lambda fn, _rcn=None: fn

2. RuntimeError: legacy constructor expects device type: cpu but device type: cuda was passed

在这里插入图片描述
问题解决:参考https://blog.csdn.net/dong_liuqi/article/details/120099335
用tensor创建而不是Tensor:

#self.priors = torch.Tensor(prior_data, device=device).view(-1, 4).detach()
self.priors = torch.tensor(prior_data, device=device).view(-1, 4).detach()

三、参数量和浮点数统计结果

yolact backbone=resnet101的FLOPs为 82.74GB,参数量为50.14MB
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Yolact是一种基于Mask-RCNN框架的目标检测模型,具有实时分割的能力。COCO评价指标是用来衡目标检测和分割模型性能的指标之一,常用于比较和评估不同模型的表现。 在Yolact代码中,计算COCO评价指标的主要步骤如下: 1. 首先,需要加载训练好的Yolact模型并设置好相应的数,包括类别数量、阈值等。 2. 接下来,需要准备COCO数据集的标注文件和预测结果文件。标注文件包含每个图像中的目标类别和边界框信息,预测结果文件则包括模型对图像的预测结果,包括类别、边界框和分割掩码等。 3. 使用COCOAPI工具包中的函数,可以将标注文件和预测结果文件转换成COCO数据结构。这样就可以方便地使用COCO评价指标进行计算。 4. 在计算评价指标之前,通常会对预测结果进行后处理,以去除一些低置信度或重叠度较大的检测框。常见的后处理方法包括非极大值抑制(NMS)和置信度阈值等。 5. 最后,使用COCOAPI提供的函数,可以根据标注文件和预测结果文件计算一系列COCO评价指标,包括检测精度(AP)、平均精度(mAP)和平均交并比(mIoU)等。 总之,Yolact代码计算COCO评价指标的过程包括准备数据、后处理和调用COCOAPI函数进行计算。通过评价指标的计算,可以了解Yolact模型在目标检测和分割任务上的表现,并与其他模型进行比较和评估。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城城城_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值