测试方法介绍-计算模型复杂度(GMac)、模型大小(M)、计算速度(FPS)
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)相关推荐
- SuperMap BIM+GIS-Revit模型处理-第三节 Revit模型优化方法及模型缓存策略
在模型导入SuperMap平台之后,在应用过程中必然会遇到性能问题,随之而来的就是如何优化模型.本文将总结使用经验和理解,从实际出发介绍几种优化方法和缓存策略.以下操作均在SuperMap iDesk ...
- 利用协同过滤算法的皮尔逊系数:计算歌曲相似度
想要什么 数据已经足够多了,我现在想法就是单独维护一张歌曲相似度的表,每首歌曲有10首相似度歌曲,并且有相似度的程度,介于0到1之间. 首先来明确我有什么,我有3张表. user表:用户1.4万左右 ...
- DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应用+距离运算
在NLP领域,语义相似度的计算一直是个难题:搜索场景下query和Doc的语义相似度.feeds场景下Doc和Doc的语义相似度.机器翻译场景下A句子和B句子的语义相似度等等.本文通过介绍DSSM.C ...
- 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度
自然语言处理(NLP)之使用TF-IDF模型计算文本相似度 所用数据集:ChnSentiCorp_htl_all.csv 语料库即存放稀疏向量的列表. 要注意的是,搜索文本text与被检索的文档共用一 ...
- R语言使用randomForest包构建随机森林模型(Random forests)、使用importance函数查看特征重要度、使用table函数计算混淆矩阵评估分类模型性能、包外错误估计OOB
R语言使用randomForest包中的randomForest函数构建随机森林模型(Random forests).使用importance函数查看特征重要度.使用table函数计算混淆矩阵评估分类 ...
- R语言使用rpart包构建决策树模型、使用prune函数进行树的剪枝、交叉验证预防过拟合、plotcp可视化复杂度、rpart.plot包可视化决策树、使用table函数计算混淆矩阵评估分类模型性能
R语言使用rpart包构建决策树模型.使用prune函数进行树的剪枝.使用10折交叉验证选择预测误差最低的树来预防过拟合.plotcp可视化决策树复杂度.rpart.plot包可视化最终决策树.使用t ...
- 为多模型寻找模型最优参数、多模型交叉验证、可视化、指标计算、多模型对比可视化(系数图、误差图、混淆矩阵、校正曲线、ROC曲线、AUC、Accuracy、特异度、灵敏度、PPV、NPV)、结果数据保存
使用randomsearchcv为多个模型寻找模型最优参数.多模型交叉验证.可视化.指标计算.多模型对比可视化(系数图.误差图.classification_report.混淆矩阵.校正曲线.ROC曲 ...
- R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters)、计算特征重要度
R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters).计算特征重要度(feature importance) 目录
- (3)tesorflow 计算模型复杂度
目录 1. 计算模型复杂度的衡量 2 . 典型层的复杂性计算原理 2.1 全连接层的复杂性计算 2.2 卷积层的复杂性计算 3. 全连接Tensorflow实现 4. GraphDef 5. Free ...
最新文章
- 如何禁止用户连续点击一个按钮事件详细JS
- Oracle 数据库 Database Express Edition 11g Release 2 (11.2) 错误解决集锦(安装方面)
- FZU 1019猫捉老鼠
- 记一次vue 普通异步请求微信二进制二维码 乱码 问题解决然后渲染
- 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分
- 详解MQ消息队列及四大主流MQ的优缺点
- C++中内存泄漏的检测方法介绍
- [转载] 基于Python, Selenium, Phantomjs无头浏览器访问页面
- S5PV210-uboot移植-从三星官方uboot开始移植
- oracle imdmp方式导入dmp文件
- html实现百度换肤,百度换肤
- 国产操作系统之中兴新支点NewStartOS安装
- 2016年东莞市小学生信息学竞赛试题 17倍
- 计算机硬盘换,电脑硬盘可以随便换吗
- 少儿编程 电子学会图形化编程等级考试Scratch四级真题解析(判断题)2022年3月
- h3c无线认证服务器,H3C无线路由器配置样例之无认证接入
- Web3 | DID赛道之 Galxe(原 Project Galaxy)
- 【计算机科学基础】Unicode与UTF-8
- Apollo代码学习(二)—车辆运动学模型
- java爬网页图片到本地