显著性检测的评价指标代码

article/2025/10/12 8:40:31

包括MAE、Pre、Rec、F-measure、Auc、CC、Nss

MAE:

平均绝对误差MAE(mean absolute error),范围[0,+∞),当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

 Pre、Rec、F-measure

 行表示预测的label值,列表示真实label值。TP,FP,FN,TN分别表示如下意思:

  • TP(true positive):表示样本的真实类别为正,最后预测得到的结果也为正;
  • FP(false positive):表示样本的真实类别为负,最后预测得到的结果却为正;
  • FN(false negative):表示样本的真实类别为正,最后预测得到的结果却为负;
  • TN(true negative):表示样本的真实类别为负,最后预测得到的结果也为负.

 

 

  • Accuracy:表示预测结果的精确度,预测正确的样本数除以总样本数。
  • precision,准确率,表示预测结果中,预测为正样本的样本中,正确预测为正样本的概率;
  • recall,召回率,表示在原始样本的正样本中,最后被正确预测为正样本的概率;
  • specificity,常常称作特异性,它研究的样本集是原始样本中的负样本,表示的是在这些负样本中最后被正确预测为负样本的概率。

 F-Measure又称为F-Score,F-Measure是Precision和Recall加权调和平均

 

其中\beta是参数,P是精确率(Precision),R是召回率(Recall)。当参数\beta=1时,就是最常见的F1-Measure了:

 

 Auc

ROC曲线下方的面积(Area under the Curve of ROC (AUC ROC)),其意义是:

因为是在1x1的方格里求面积,AUC必在0~1之间。

假设阈值以上是阳性,以下是阴性;

若随机抽取一个阳性样本和一个阴性样本,分类器正确判断阳性样本的值高于阴性样本之机率=AUC

简单说:AUC值越大的分类器,正确率越高。

 CC

CC是指皮尔逊相关系数,用来评价预测的眼关注点显著图和参考图ground truth之间的线性相关性,CC越大说明该模型性能越好。

NSS

NSS是指标准化扫描路径显着性,用来评价两者之间的差异值,NSS越大说明模型性能越好。

 Python代码

import numpy as np
from sklearn.metrics import precision_score, recall_score, f1_score, roc_auc_score
from sklearn.preprocessing import Binarizer
from scipy.stats import pearsonrdef mask_normalize(mask):mask = (mask - np.min(mask))/(np.max(mask) - np.min(mask) + 1e-8)return maskdef compute_mae(mask,label):h, w = mask.shape[0], mask.shape[1]sumError = np.sum(np.absolute((mask.astype(float) - label.astype(float))))maeError = sumError/(float(h)*float(w)+1e-8)return maeErrordef compute_p_r_f(mask,label):pre = precision_score(mask, label, average='binary')rec = recall_score(mask, label, average='binary')f_1 = f1_score(mask, label, average='binary')return pre, rec, f_1def compute_auc(mask,label):auc = roc_auc_score(mask,label)return aucdef compute_cc(mask,label):mask = mask - np.mean(mask)label = label - np.mean(label)cov = np.sum(mask * label)d1 = np.sum(mask * mask)d2 = np.sum(label * label)cc = cov / (np.sqrt(d1) * np.sqrt(d2) + 1e-8)return ccdef compute_nss(mask,label):std=np.std(mask)u=np.mean(mask)mask=(mask-u)/stdnss=mask*labelnss=np.sum(nss)/np.sum(label)return nssdef evaluate(mask,label):if len(mask.shape)==3:mask = mask[0]if len(label.shape)==3:label = label[0]mask = mask_normalize(mask)label = mask_normalize(label)mae = compute_mae(mask,label)binarizer = Binarizer(threshold=0.5)mask_b = binarizer.transform(mask)label_b = binarizer.transform(label)mask_br = np.reshape(mask_b, newshape=(-1))label_br = np.reshape(label_b, newshape=(-1))pre, rec, f_1 = compute_p_r_f(mask_br,label_br)auc = compute_auc(mask_br,label_br)cc = compute_cc(mask,label)nss = compute_nss(mask,label_b)return mae, pre, rec, f_1, auc, cc, nss
from trans_evaluate import *
import glob
from skimage import io, transformdata_dir = '/data3/QHL/HSOD/output/SUDF/batch_bsal_result/'
gt_dir = '/data3/QHL/DATA/SOD/HL-SOD/ground_truth/'name_list = glob.glob(data_dir+'/'+'*.png')
img_num = len(name_list)mae, pre, rec, f_1, auc, cc, nss = 0, 0, 0, 0, 0, 0, 0
for i in range(img_num):name = name_list[i].split("/")[-1].split(".")[-2]image = io.imread(name_list[i])if len(image.shape) == 2:h,w = image.shape[0],image.shape[1]image = np.swapaxes(image, 1, 0)image = image.astype(np.float32)if len(image.shape) == 3:h,w,c = image.shape[0],image.shape[1],image.shape[2]image = np.swapaxes(image, 2, 0)image = image.astype(np.float32)label = io.imread(gt_dir + name + '.jpg')label = transform.resize(label, (h,w,3))label = np.swapaxes(label, 2, 0)label = label.astype(np.float32)mae_, pre_, rec_, f_1_, auc_, cc_, nss_ = evaluate(image, label)mae = mae + mae_pre = pre + pre_rec = rec + rec_f_1 = f_1 + f_1_auc = auc + auc_cc = cc + cc_nss = nss + nss_len = img_num
mae = mae / len
pre = pre / len
rec = rec / len
f_1 = f_1 / len
auc = auc / len
cc = cc / len
nss = nss / lenprint('pre, rec, f_1', pre, rec, f_1)
print('auc, cc, nss', auc, cc, nss)
print('mae',mae)


http://chatgpt.dhexx.cn/article/Dq2NuEMH.shtml

相关文章

2023年显著性检测论文及代码汇总

AAAI LeNo: Adversarial Robust Salient Object Detection Networks with Learnable Noise Abstacrt:目前很少有SOD模型对人类视觉注意力难以察觉的对抗性攻击具有鲁棒性。先前的鲁棒显著性ROSA对预分割的超像素进行重组,通过密集连接的条件随机场CRF对…

【显著性检测】Matlab实现Itti显著性检测

目录 理论知识代码步骤读取图像得到金字塔图像提取底层特征计算显著图显著图综合 运行结果展示 理论知识 显著性检测 是指按照人类的视觉注意机制,判断出图像中的显著区域,并为该区域分配较高的显著值,通常认为显著区域更有可能包含目标&…

Opencv之谱残差显著性检测

学习资料参考: 张平.《OpenCV算法精解:基于Python与C》.[Z].北京.电子工业出版社.2017. 前言 在使用谱残差进行显著性检测之前,我们需要理解两个概念,分别是幅度谱和相位谱。 幅度谱和相位谱是将图片进行傅里叶正向变换之后得到的…

显著性检测——GR模型

显著性检测——GR模型 1. Introduction2. Saliency Model2.1 Initial Saliency Map2.2 Saliency Map Refining With Graph Regularization 3. Experiments4. Conclusion参考文献 本人最近在做视觉显著性检测相关的工作,决定把自己的学习经历形成文字,希望…

视频显著性检测----《Flow Guided Recurrent Neural Encoder for Video Salient Object Detection》

本文将重点与大家探讨和分享发表于CVPR2018上的视频显著性检测文章–《Flow Guided Recurrent Neural Encoder for Video Salient Object Detection》,在讨论之前,先带领大家简单回顾一下什么是显著性检测,目前图片显著性检测的常用方法&…

计算机视觉——图像视觉显著性检测

目录 系列文章目录 零、问题描述 一、图像显著性检测 1.定义 2.难点 二、常用评价标准和计算方法 1.综述 2.ROS曲线详述 2.1 混淆矩阵 2.2 ROC曲线简介 2.3 ROC曲线绘制及其判别标准 2.4 ROC曲线补充 三、Fast and Efficient Saliency (FES) 1.算法简介 2.项目导…

显著性检测后处理

将显著性检测图像后处理,绘出一个矩形框,方便使用 先通过边缘检测,然后通过opencv接口实现 结果如下: # --coding:utf # -8-*- import osimport cv2 as cv import numpy as np# canny边缘检测 def canny_demo(image):t 50cann…

基于深度学习的视频显著性检测学习(入门)

一、传统的视频显著性检测 什么是视频显著性检测呢? 我的理解是检测某一段视频的每一帧图片的显著性区域,那这样理解的话就相当于多个图片的显著性检测,所以他是依赖于输入视频帧的对比度、梯度以及纹理来进行相关计算。但既然是视频显著性检…

显著性检测—学习笔记

视觉显著性旨在模仿人类视觉系统选择视觉场景的某个子集的能力。而显著性物体检测(SOD)则侧重于检测场景中吸引最多注意力的物体,然后逐像素的提取物体的轮廓。SOD的优点在于它在许多计算机视觉任务中均有广泛的应用,包括&#xf…

显著性检测

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_32493539/article/details/79530118 转载请附链接,注明出处。 显著性对象检测综述…

在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具

最近发现一个超好用的“在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具”。 链接在此奉上:在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具 很好的一点就是我们只要QQ登录后,就可以记住请求地址,包括请求参数,包括请求co…

https协议的接口测试

用jmeter测试https接口: 和传统的http协议套路不太一样. 注意细节: 1、取样器正常选择http请求,端口号:为443(具体根据接口文档我刚开始用的80端口所以错了) 2、请求方法,一定一句接口文档&…

接口测试HTTP请求

一、Get请求与Post请求的区别 1.get请求没有请求体,post请求有请求体 2.get请求的参数(需要传递的数据)要放在URL中发送。大小有限制 post请求的参数可以放在URL后传递,也可以放在请求体中(大小不受限制&#xff09…

Jmeter进行http接口测试,这一篇就搞定

jmeter-http接口测试脚本 jmeter进行http接口测试的主要步骤 (1.添加线程组 2.添加http请求 3.在http请求中写入接口的URL,路径,请求方式,参数 4.添加查看结果树 5.调用接口,查看返回值) 针对接口添加…

http接口测试——Jmeter接口测试实例讲解

一、测试需求描述 1、 本次测试的接口为http服务端接口 2、 接口的主要分成两类,一类提供给查询功能接口,一类提供保存数据功能接口,这里我们举例2个保存数据的接口,因为这两个接口有关联性,比较有代表性;…

http接口测试工具-Advanced-REST-client

非常好用的http接口测试工具 相信作为一个java开发人员,大家或多或少的要写或者接触一些http接口。而当我们需要本地调试接口常常会因为没有一款好用的工具而烦恼。今天要给大家介绍一款非常好用、实用且方便的http接口测试工具。本人认为这是目前我用过的最好http…

http接口测试:了解协议、请求方法、响应状态码

http接口测试:了解协议、请求方法、响应状态码 接口在各个系统间的重要性无需重申,主要体现在外部系统与系统之间以及内部各子系统之间的交互点。通过这些特定的交互点和一些特殊的规则标准(协议)来进行系统数据之间的交互&#…

如何用postman进行http接口测试?好好看好好学

目录 优点: 1、什么是POSTMAN 2、新建一个项目 2、新增一个用例 3、添加请求信息 4、post请求参数 5、添加头信息 6、预处理和结果检查 7、全局变量与环境变量 8、导出用例为代码 9、批量执行用例 HTTP的接口测试工具有很多,可以进行http请求…

如何用postman进行http接口测试,这篇文章绝对会颠覆你的认知

目录 前言 优点: 1、什么是POSTMAN 2、新建一个项目 2、新增一个用例 3、添加请求信息 4、post请求参数 5、添加头信息 6、预处理和结果检查 7、全局变量与环境变量 8、导出用例为代码 9、批量执行用例 前言 HTTP的接口测试工具有很多,可以进…

http接口测试工具

http接口测试工具 工具图形界面特点postmanY图形界面,功能齐全curlN可用于下载,但更侧重于模拟各种http请求,与网站API的交互wgetN专注于下载,支持断点,支持递归(可用于全站下载)httpieN采用Pt…