excel记录wFm数值(推理过程)

news/2024/7/21 4:57:25 标签: excel, java, linux

1 导入计算wfm库2 实例化具体的指标

3 列表循环之前,设置空list

4 单图评测-将图号、图片名、数值记录
列表里面存储dict

5 将excel列表结果逐个存入excel.xlsx文件

完整代码
test_CPD.py

### test_CPD.py ###
import torch
import torch.nn.functional as F

import numpy as np
import imageio
import pdb, os, argparse
from scipy import misc

from model.CPD_models import CPD_VGG
from model.CPD_ResNet_models import CPD_ResNet
from data import test_dataset
import py_sod_metrics_new  ### dis

gpu = "9"
print('\n', '===> GPU num: ', gpu)
os.environ["CUDA_VISIBLE_DEVICES"] = gpu  # todo 用于评测

parser = argparse.ArgumentParser()
parser.add_argument('--testsize', type=int, default=352, help='testing size')
parser.add_argument('--is_ResNet', type=bool, default=False, help='VGG or ResNet backbone')
opt = parser.parse_args()

dataset_path = '/cluster/home3/zjc/Dataset/COD/COD-TE/'


# val-1-读入
WFM = py_sod_metrics_new.WeightedFmeasure()  ### dis todo  1实例化
SM = py_sod_metrics_new.Smeasure()
EM = py_sod_metrics_new.Emeasure()
MAE = py_sod_metrics_new.MAE()


# SOD
# 'official_cpd/CPD-R.pth'
# 'official_cpd/CPD.pth'

# COD
# 'CPD_ResNet/CPD-99.pth'
# 'CPD_VGG/CPD-99.pth'
model_name_res = 'CPD_Resnet/'
model_name_vgg = 'CPD_VGG/'
if opt.is_ResNet:
    model = CPD_ResNet()
    model.load_state_dict(torch.load('/cluster/home3/zjc/Code/COD/CPD_My/CPD-master/models/'+  model_name_res + 'CPD-99.pth'))
else:
    model = CPD_VGG()
    model.load_state_dict(torch.load('/cluster/home3/zjc/Code/COD/CPD_My/CPD-master/models/'+  model_name_vgg + 'CPD-99.pth'))

model.cuda()
model.eval()

# test_datasets = ['PASCAL', 'ECSSD', 'DUT-OMRON', 'DUTS-TEST', 'HKUIS']
test_datasets = ['COD10K-TE']  #  'COD10K-TE'  'Less'

for dataset in test_datasets:
    if opt.is_ResNet:
        save_path = './results/'+model_name_res + dataset + '/'
    else:
        save_path = './results/'+model_name_vgg + dataset + '/'
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    image_root = dataset_path + dataset + '/image/'
    gt_root = dataset_path + dataset + '/mask/'
    test_loader = test_dataset(image_root, gt_root, opt.testsize)
    
    excel = []  ### dis
    for i in range(test_loader.size):
        image, gt, name = test_loader.load_data()
        gt = np.asarray(gt, np.float32)
        gt /= (gt.max() + 1e-8)
        image = image.cuda()
        _, res = model(image)
        res = F.upsample(res, size=gt.shape, mode='bilinear', align_corners=False)
        res = res.sigmoid().data.cpu().numpy().squeeze()
        res = (res - res.min()) / (res.max() - res.min() + 1e-8)
        # misc.imsave(save_path+name, res)
        imageio.imwrite(save_path+name, (res*255).astype(np.uint8))
                
        ### dis
        # val-2-单图评测  ### todo
        SM.step(pred=res, gt=gt)
        EM.step(pred=res, gt=gt)
        MAE.step(pred=res, gt=gt)
        xwfm = WFM.step(pred=res, gt=gt)
        
        print('--->num:', i, '<---')
        print('->name:', name)
        print('->per_fm:', xwfm)
        
        per_dict=dict([("num",i),("name", name.split('.')[0]),("per_fm",xwfm)])  ###
        excel.append(per_dict)  ###
        
###生成表格###  ### dis
from openpyxl import Workbook  # 读取excel库
workbook = Workbook() # 实例化
if opt.is_ResNet:  # 自动切换res
    # 默认sheet
    sheet = workbook.active # 激活sheet
    sheet.title = "openpyxl_CPD_" + model_name_res # 命名sheet
    sheet.append(["num", "name", "wfm"])  # 插入标题
    for data in excel:  # 列表循环读取dict
        sheet.append(list(data.values()))
    workbook.save("openpyxl_CPD_" + model_name_res + ".xlsx")
else:  # 自动切换vgg
    # 默认sheet
    sheet = workbook.active # 激活sheet
    sheet.title = "openpyxl_CPD_" + model_name_vgg # 命名sheet
    sheet.append(["num", "name", "wfm"])  # 插入标题
    for data in excel:  # 列表循环读取dict
        sheet.append(list(data.values()))
    workbook.save("openpyxl_CPD_" + model_name_vgg + ".xlsx")

       
### val-3-数据集求均值
wfm = WFM.get_results()["wfm"]  # todo
sm = SM.get_results()["sm"]
em = EM.get_results()["em"]
mae = MAE.get_results()["mae"]
# maelist = MAE.get_results()[1]
# print("mae:{}".format(mae))  # todo
print("wfm:{} sm:{} mae:{}".format(wfm, sm, mae))  # todo
# print("wfm:{} sm:{}  em:{}  mae:{}".format(wfm, sm,em,mae))  # todo


http://www.niftyadmin.cn/n/5175665.html

相关文章

Qt 之元对象

元对象&#xff08;meta object&#xff09;意思是描述另一个对象结构的对象&#xff0c;比如获得一个对象有多少成员函数&#xff0c;有哪些属性。在Qt中&#xff0c;我们将要用到的是QMetaObject这个类。 元对象系统基于以下3点&#xff1a; 以QObject作为基类&#xff1b;…

jsonp方案需要服务端怎么配合?

在使用 JSONP 方案时&#xff0c;需要服务端进行相应的配合。下面是 JSONP 方案的一般配合步骤&#xff1a; 1&#xff1a;前端发送 JSONP 请求&#xff1a;前端通过创建一个 <script>标签&#xff0c;并将请求的 URL 设置为带有回调函数名的特殊形式&#xff0c;以发起…

Kotlin Multiplatform稳定版本发布:加速跨平台开发的新里程碑

Kotlin Multiplatform稳定版本发布&#xff1a;加速跨平台开发的新里程碑 引言 在最新的消息中&#xff0c;JetBrains团队宣布Kotlin Multiplatform&#xff08;KMP&#xff09;将于2023年10月稳定发布。这一消息对于广大开发者来说毫无疑问是一个令人振奋的消息。KMP的正式生…

Java: 实现电影信息管理系统 (javaBean)

文章目录 电影信息系统1. 将JavaBean数据类封装好2.业务逻辑类3.测试类&#xff08;main函数类&#xff09; 电影信息系统 需求&#xff1a; 展示系统中的全部电影&#xff08;每部电影展示、名称、平分&#xff09;。允许用户根据电影编号&#xff08;id&#xff09;查询出某…

【ATTCK】MITRE Caldera-插件

CALDERA是一个由python语言编写的红蓝对抗工具&#xff08;攻击模拟工具&#xff09;。它是MITRE公司发起的一个研究项目&#xff0c;该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的&#xff0c;能够较真实地APT攻击行为模式。 通过CALDERA工具&#xff0c;安全…

C //例 7.9 输入10个数,要求输出其中值最大的元素和该数是第几个数。

C程序设计 &#xff08;第四版&#xff09; 谭浩强 例 7.9 例 7.9 输入10个数&#xff0c;要求输出其中值最大的元素和该数是第几个数。 IDE工具&#xff1a;VS2010 Note: 使用不同的IDE工具可能有部分差异。 代码块 方法1&#xff1a;使用数组 #include <stdio.h> …

SpringBoot配置文件 —— 超详细全方位教程

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您也对这篇博客也感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f9f8;祝诸君前程似锦&#xff0c;归来仍初心不忘&#xff01; &#x1f4dc;Spring&#xff0c;SpringBoot和SpringMVC的关系以及区别 —— 超准确…

postman连接数据库

参考&#xff1a;https://blog.csdn.net/qq_45572452/article/details/126620210 1、安装node.js 2、配置环境变量 3、安装xmysql连接数据库cmd窗口输入"npm install -g xmysql"后回车cmd窗口输入"xmysql"后回车,验证xmysql是否安装成功(下图代表安装成功)…