% An example script to compute the BF measure desrcribed in:% SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation. PAMI, 2017.% Vijay Badrinarayanan, Alex Kendall and Roberto Cipolla, University of Cambridge% Please download benchmark BSDS code from https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/%% Ground truthgtroot = '/home/sunrgb_360x480/testannot_480x360/'; %In Index format i.e each pixel takes a value between 1:N classesgt = dir(gtroot);%% predictionspredroot = '/pa/adv_dev/DeepSegmentation/pami_submission/Dropout/sunrgb_enc_4x_Expdilation_80K/';pp = dir(predroot);numImages = numel(gt) - 2;numClasses = 37;%SUNRGBD segmentation classesmaxDist = 0.0075; %Threshold for BF measure% parallel computecntR = zeros(numImages,numClasses,1);sumR = zeros(numImages,numClasses,1);cntP = zeros(numImages,numClasses,1);sumP = zeros(numImages,numClasses,1);precision = zeros(numImages,numClasses,1);recall = zeros(numImages,numClasses,1);F1_measure = zeros(numImages,numClasses,1);F1_measure_im = zeros(numImages,numClasses);avg_BF_measure = 0;BF_measure = zeros(numImages,1);%See "What is a good evaluation measure for semantic segmentation?", Csurka & Perronin's BMVC 2013classcount = zeros(numImages,numClasses,1);%% Boundary evaluation using BSDS code to compute F-measureparfor i = 3:numel(gt)% Need parallel programming toolbox to speed up computationdisplay(num2str(i));%g = [gtroot gt(i).name];p = [predroot pp(i).name];gim = imread(g);pim = imread(p);pim = imresize(pim,[360 480],'nearest');%compute accuracy in appropriate resfor n = 1:numClasses%for each classIn = gim == n;bmap_gim = logical(seg2bdry(In,'imageSize'));% Warning! This function which produces a binary edge map from each classes segment seems outdated and replaced by seg2bmap (not tested here). See https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/In = pim == n;bmap_pim = logical(seg2bdry(In,'imageSize'));%% compute the correspondence[match1,match2] = correspondPixels(double(bmap_pim),double(bmap_gim), maxDist); %See https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/% compute recallsumR(i-2,n) = sum(bmap_gim(:));cntR(i-2,n) = sum(match2(:)>0); %pixels in the ground truth which have a correspondence in the predicted contourif sumR(i-2,n) > 0classcount(i-2,n) = 1;recall(i-2,n) = cntR(i-2,n)/sumR(i-2,n);end% compute precisionsumP(i-2,n) = sum(bmap_pim(:));cntP(i-2,n) = sum(match1(:)>0); %pixels in the contour which have a correspondence in the ground truth boundaryif sumP(i-2,n) > 0classcount(i-2,n) = 1;precision(i-2,n) = cntP(i-2,n)/sumP(i-2,n);end%Compute F1 measure of boundary delineation qualityif precision(i-2,n)+recall(i-2,n) > 0F1_measure(i-2,n) = 2*precision(i-2,n)*recall(i-2,n)/(precision(i-2,n)+recall(i-2,n)); %Berkeley contour metric%F1_measure_im(i-2,n) = 2*precision(i-2,n)*recall(i-2,n)/(precision(i-2,n)+recall(i-2,n)); %Berkeley contour metric for each imageendendend%Compute for full datasetfor i = 3:numel(gt)sumc = 0;sumf = 0;for n = 1:numClassessumc = sumc + classcount(i-2,n); %only classes which are present in that ground truth image (see Csurka & Perronin's BMVC 2013)sumf = sumf + F1_measure(i-2,n);endif sumc > 0BF_measure(i-2) = sumf/sumc;avg_BF_measure = avg_BF_measure + BF_measure(i-2);endenddisplay('Avg F1 measure = ');display(num2str(avg_BF_measure./(numel(gt)-2)));
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。