PRNet-V

计算复杂度为 48.76GMac
参数数量为34.73M (PRNet测试结果)(IEO在12345层)
参数数量为27.57M (PRNet测试结果)(IEO在345层)

计算图片读入和写出的时间
若batch=1,在ECSSD数据集上的测试结果为39FPS
不计算图片读入和写出的时间

若batch=1,在ECSSD数据集上的测试结果为74FPS

PRNet-V-GLF(含冗余IEO12)

PRNet-V-GLF(不含冗余IEO12)

参数  39.46M

计算复杂度  54.81GMac

PRNet-R

计算复杂度为 21.0GMac
参数数量为35.85M (这是我利用MINet网络架构设计的自己的网络的测试结果)
不计算图片读入和写出的时间

若batch=1,在ECSSD数据集上的测试结果为53FPS

ResNet+FPN的网络
16.19GMac
25.94M

简单总结PRNet

首先梳理算法结构

1 主文件main.py

里面有solver = Solver(exp_name, arg_config, path_config)
这个文件来自于 # from utils.solver import Solver

2 utils里面的solver.py文件

里面有
if hasattr(network_lib, self.arg_dict["model"]): 
      self.net = getattr(network_lib, self.arg_dict["model"])().to(self.dev)
这个文件来自于
network_lib的由来 => import network as network_lib
model的由来 main.py => "model": "MINet_VGG16",

3 添加计算复杂度的语句get_model_complexity_info()

这些不重要,重要的是
self.net就是可以用于测试计算复杂度(GMac)、模型大小(M)的文件
写成如下格式即可:
注意调整(3,320,320),也就是输入图片的通道数、H、W

        with torch.cuda.device(0):  # todo 1# net = self.net  # Network(self.cfg)macs, params = get_model_complexity_info(self.net, (3, 320, 320), as_strings=True,print_per_layer_stat=True,verbose=True)print('{:<30}  {:<8}'.format('Computational complexity: ', macs))print('{:<30}  {:<8}'.format('Number of parameters: ', params))

4 此时get_model_complexity_info一定不要忘了import对应的库文件

如下即可

# 计算模型Flops
from ptflops import get_model_complexity_info

5 运行程序就可以得到得到对应参数  Efficiency

计算复杂度为 48.76GMac
参数数量为34.73M (这是我利用MINet网络架构设计的自己的网络的测试结果)

在ECSSD数据集上的测试结果为16FPS

下面来计算速度 FPS

1 注释掉评测部分,这会导致测试速度慢

由于MINet的测试代码main.py->solver.py里面的def test(self):里面是测试的同时进行评测
因此需要注释掉
A原文件

B注释掉文件

 2 测试PFS需要做5件事(其中ABC需要放在for循环外面DE放在里面)

=>A import time

=>B idx = 0

=>C time_spent = []

=>D start_time = time.time()

=>E  time_spent.append(time.time() - start_time)
                if idx % 100 == 0:
                    time_spent = []
                if idx % 99 == 0:
                    print('time/FPS', np.mean(time_spent), 1 * 1 // np.mean(time_spent))
                idx = idx + 1

这个E步骤的计算逻辑是每循环99次统计一下平均时间,每循环100次做一次清空。
值得注意的是我们在测试的时候把batch设置为4(因为训练时候就是4),此时没循环一次是4张图片,直接用计算FPS结果x4即可.

若,把batch设置为1,此时没循环一次是一张图片,直接用计算FPS结果即可.
但是网络模型设置的是batch=4,这与这个训练架构有关,需要设置为1。

然后会生成一个BS1的文件里面的pth是空的,把右边BS4的模型放进BS1文件夹里面就可以以batch=1的方式运行测试程序了。

# => A
import time# => Bidx = 0  # => Ctime_spent = []  for test_batch_id, test_data in tqdm_iter:# => Dstart_time = time.time() xxxxxxxxxxxxxxxxxx# => Etime_spent.append(time.time() - start_time)if idx % 100 == 0:time_spent = []if idx % 99 == 0:print('time/FPS', np.mean(time_spent), 1 * 1 // np.mean(time_spent))idx = idx + 1 

实际情况如下
A

BCD

E

具体全部代码如下

        # => Bidx = 0# => Ctime_spent = []for test_batch_id, test_data in tqdm_iter:# => Dstart_time = time.time()tqdm_iter.set_description(f"{self.exp_name}: te=>{test_batch_id + 1}")with torch.no_grad():in_imgs, in_mask_paths, in_names = test_datain_imgs = in_imgs.to(self.dev, non_blocking=True)outputs = self.net(in_imgs)outputs_np = outputs.sigmoid().cpu().detach()for item_id, out_item in enumerate(outputs_np):gimg_path = os.path.join(in_mask_paths[item_id])gt_img = Image.open(gimg_path).convert("L")out_img = self.to_pil(out_item).resize(gt_img.size, resample=Image.NEAREST)if save_pre:oimg_path = os.path.join(self.save_path, in_names[item_id] + ".png")out_img.save(oimg_path)# => Etime_spent.append(time.time() - start_time)if idx % 100 == 0:time_spent = []if idx % 99 == 0:print('time/FPS', np.mean(time_spent), 1 * 1 // np.mean(time_spent))idx = idx + 1# 下面是为了计算Fmax\Favg\MAE设置因此可以注释掉# gt_img = np.asarray(gt_img)# out_img = np.array(out_img)# ps, rs, mae, meanf = cal_pr_mae_meanf(out_img, gt_img)# for pidx, pdata in enumerate(zip(ps, rs)):#     p, r = pdata#     pres[pidx].update(p)#     recs[pidx].update(r)# maes.update(mae)# meanfs.update(meanf)# maxf = cal_maxf([pre.avg for pre in pres], [rec.avg for rec in recs])# results = {"MAXF": maxf, "MEANF": meanfs.avg, "MAE": maes.avg}results = {}return results

测试结果(计算读入和写出时间)
若batch=4
在ECSSD数据集上的测试结果为16X4FPS=64FPS(并行计算了这个测试不准确不采纳)

若batch=1
在ECSSD数据集上的测试结果为39FPS

测试结果(不计算读入和写出时间)
若batch=4 torch.Size([4, 3, 320, 320])
在ECSSD数据集上的测试结果为68X4FPS (并行计算了这个测试不准确不采纳)

若batch=1 torch.Size([1, 3, 320, 320])
在ECSSD数据集上的测试结果为74FPS

测试方法介绍-计算模型复杂度(GMac)、模型大小(M)、计算速度(FPS)相关推荐

  1. SuperMap BIM+GIS-Revit模型处理-第三节 Revit模型优化方法及模型缓存策略

    在模型导入SuperMap平台之后,在应用过程中必然会遇到性能问题,随之而来的就是如何优化模型.本文将总结使用经验和理解,从实际出发介绍几种优化方法和缓存策略.以下操作均在SuperMap iDesk ...

  2. 利用协同过滤算法的皮尔逊系数:计算歌曲相似度

    想要什么 数据已经足够多了,我现在想法就是单独维护一张歌曲相似度的表,每首歌曲有10首相似度歌曲,并且有相似度的程度,介于0到1之间. 首先来明确我有什么,我有3张表. user表:用户1.4万左右 ...

  3. DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应用+距离运算

    在NLP领域,语义相似度的计算一直是个难题:搜索场景下query和Doc的语义相似度.feeds场景下Doc和Doc的语义相似度.机器翻译场景下A句子和B句子的语义相似度等等.本文通过介绍DSSM.C ...

  4. 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度

    自然语言处理(NLP)之使用TF-IDF模型计算文本相似度 所用数据集:ChnSentiCorp_htl_all.csv 语料库即存放稀疏向量的列表. 要注意的是,搜索文本text与被检索的文档共用一 ...

  5. R语言使用randomForest包构建随机森林模型(Random forests)、使用importance函数查看特征重要度、使用table函数计算混淆矩阵评估分类模型性能、包外错误估计OOB

    R语言使用randomForest包中的randomForest函数构建随机森林模型(Random forests).使用importance函数查看特征重要度.使用table函数计算混淆矩阵评估分类 ...

  6. R语言使用rpart包构建决策树模型、使用prune函数进行树的剪枝、交叉验证预防过拟合、plotcp可视化复杂度、rpart.plot包可视化决策树、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用rpart包构建决策树模型.使用prune函数进行树的剪枝.使用10折交叉验证选择预测误差最低的树来预防过拟合.plotcp可视化决策树复杂度.rpart.plot包可视化最终决策树.使用t ...

  7. 为多模型寻找模型最优参数、多模型交叉验证、可视化、指标计算、多模型对比可视化(系数图、误差图、混淆矩阵、校正曲线、ROC曲线、AUC、Accuracy、特异度、灵敏度、PPV、NPV)、结果数据保存

    使用randomsearchcv为多个模型寻找模型最优参数.多模型交叉验证.可视化.指标计算.多模型对比可视化(系数图.误差图.classification_report.混淆矩阵.校正曲线.ROC曲 ...

  8. R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters)、计算特征重要度

    R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters).计算特征重要度(feature importance) 目录

  9. (3)tesorflow 计算模型复杂度

    目录 1. 计算模型复杂度的衡量 2 . 典型层的复杂性计算原理 2.1 全连接层的复杂性计算 2.2 卷积层的复杂性计算 3. 全连接Tensorflow实现 4. GraphDef 5. Free ...

最新文章

  1. 如何禁止用户连续点击一个按钮事件详细JS
  2. Oracle 数据库 Database Express Edition 11g Release 2 (11.2) 错误解决集锦(安装方面)
  3. FZU 1019猫捉老鼠
  4. 记一次vue 普通异步请求微信二进制二维码 乱码 问题解决然后渲染
  5. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分
  6. 详解MQ消息队列及四大主流MQ的优缺点
  7. C++中内存泄漏的检测方法介绍
  8. [转载] 基于Python, Selenium, Phantomjs无头浏览器访问页面
  9. S5PV210-uboot移植-从三星官方uboot开始移植
  10. oracle imdmp方式导入dmp文件
  11. html实现百度换肤,百度换肤
  12. 国产操作系统之中兴新支点NewStartOS安装
  13. 2016年东莞市小学生信息学竞赛试题 17倍
  14. 计算机硬盘换,电脑硬盘可以随便换吗
  15. 少儿编程 电子学会图形化编程等级考试Scratch四级真题解析(判断题)2022年3月
  16. h3c无线认证服务器,H3C无线路由器配置样例之无认证接入
  17. Web3 | DID赛道之 Galxe(原 Project Galaxy)
  18. 【计算机科学基础】Unicode与UTF-8
  19. Apollo代码学习(二)—车辆运动学模型
  20. java爬网页图片到本地

热门文章

  1. 云计算-华为虚拟化平台FusionCompute
  2. Maven 入门学习.md
  3. 小知识:软件开发的权限控制和权限验证
  4. 20220624 登录和代理ip
  5. 计算机是如何进行计算的?(二)
  6. #loj3124. 「CTS2019 | CTSC2019」氪金手游
  7. PHP strtoupper函数解析
  8. Unity3D基本知识 构造函数 this用法
  9. 十大券商:“推土机行情”再现
  10. 第六周作业--需求建模