顯著性目標檢測模型評價指標 之 PR曲線原理與實現代碼
目錄
一、PR曲線原理
在顯著目標提取中(關於視覺顯著性的簡要介紹點此處鏈接),PR曲線是用來評估模型性能的重要指標之一,PR曲線中的P(Precision)和R(Recall)分佈意爲“查準率”和“查全率”。以“查準率”爲縱座標,“查全率”爲橫座標所做的曲線即爲PR曲線(如下圖,來自南京大學周志華教授主編的《機器學習》第二章,p31)。
計算方法
我們將模型所提的顯著性目標圖譜S進行二值化得到M,然後通過下面公式逐像素對比M與Ground-truth來計算Precision值與Recall值[1]:
如下圖所示,模型輸出的顯著性圖片與Ground-truth圖在一般情況下都不會完全相同,即我們模型所提取出的顯著性圖mask出了正確被分類的目標(TP)與背景(TN)外,會將一部分本應該是背景的區域劃到目標區域(FP),將一部分本應該是目標的區域劃爲背景區域(FN)。
通過統計我們獲得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.