显著性目标检测模型评价指标(二)——PR曲线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/StupidAutofan/article/details/79583531

显著性目标检测模型评价指标 之 PR曲线原理与实现代码

目录


一、PR曲线原理

在显著目标提取中(关于视觉显著性的简要介绍点此处链接),PR曲线是用来评估模型性能的重要指标之一,PR曲线中的P(Precision)和R(Recall)分布意为“查准率”和“查全率”。以“查准率”为纵坐标,“查全率”为横坐标所做的曲线即为PR曲线(如下图,来自南京大学周志华教授主编的《机器学习》第二章,p31)。
PR曲线示意图

计算方法

我们将模型所提的显著性目标图谱S进行二值化得到M,然后通过下面公式逐像素对比M与Ground-truth来计算Precision值与Recall值[1]:
这里写图片描述
如下图所示,模型输出的显著性图片与Ground-truth图在一般情况下都不会完全相同,即我们模型所提取出的显著性图mask出了正确被分类的目标(TP)与背景(TN)外,会将一部分本应该是背景的区域划到目标区域(FP),将一部分本应该是目标的区域划为背景区域(FN)。
PR曲线示意图
通过统计我们获得TP、TN、FP、FN的数目,然后利用下式来计算Precision值与Recall值。
这里写图片描述

阈值选取

将输出图片S进行二值化时,阈值选择为从0到255,每取一个阈值,即可对所有输出图S算得一组相对应的Precision值与Recall值。最后将所有图像在该阈值下的Precision值与Recall值分别求平均,最后将会得到256对P,R值,以Recall为横坐标,Precision为纵坐标绘制曲线图即可得到precision-recall (PR)曲线。

二、Matlab代码

代码块语法遵循标准markdown代码,例如:

function PRcurveHanle
%本程序的功能是对显著性特征提取的结果绘制PR曲线。
%by [email protected]
clc
clear
close all
%读取数据库
imnames=dir(path_output);  
imnames2=dir(path_target);  
num=length(imnames);
Precision=zeros(256,num);
Recall=zeros(256,num);
TP=zeros(256,num);
FP=zeros(256,num);
FN=zeros(256,num);
MAES=zeros(num,1);
for j=1:num
    Target=imread(imnames2(j).name);%读图
    Output=imread(imnames(j).name);
    target=rgb2gray(Target);        %二值化ground-truth
    target0=(target)>0;
    for i=0:255
        %以i为阈值二值化Output
        output0=(Output)>i;
        output1=output0*2;
        TFNP=zeros(256,256);
        x=1;
        TFNP(:,:)=output1(:,:,x)-target0;
        TP(i+1,j)=length(find(TFNP==1));
        FP(i+1,j)=length(find(TFNP==2));
        FN(i+1,j)=length(find(TFNP==-1));
        Precision(i+1,j)=TP(i+1,j)/(TP(i+1,j)+FP(i+1,j));
        Recall(i+1,j)=TP(i+1,j)/(TP(i+1,j)+FN(i+1,j));
    end
    j
end
P=mean(Precision,2);
R=mean(Recall,2);
figure,plot(R,P)  

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

参考文献

[1]: A. Borji, M.-M. Cheng, H. Jiang, and J. Li. Salient object detection: A benchmark. IEEE TIP, 24(12):5706–5722, 2015.

猜你喜欢

转载自blog.csdn.net/StupidAutofan/article/details/79583531
今日推荐