1. 程式人生 > >計算AP值的兩種方式

計算AP值的兩種方式

第一種,query結果的第一個不包括在內

MAP = [];
for i =1:query_frame
    old_recall = 0;
    old_precision = 1.0;
    ap = 0;
    intersect_size = 0;
    j = 0;    

    ngood = length(gnd{i});
    good_now = 0;
    ngood = ngood - 1;

    for n = 2:return_num
        if ~isempty(find(gnd{i} == query_result(i,n)))
            flag = 1
; % good image good_now = good_now+1; else flag = 0; % bad image end if flag == 1%good intersect_size = intersect_size + 1; end recall = intersect_size/ngood; precision = intersect_size/(j + 1); ap = ap + (recall - old_recall)*((old_precision+precision)/2
); old_recall = recall; old_precision = precision; j = j+1; if good_now == ngood break; end end MAP = [MAP,ap]; end final_MAP = mean(MAP); fprintf('CNN final_MAP %6.4f \n',final_MAP);

第二種,query結果的第一個計算在內,這樣計算出來的AP值要比第一種高

 MAP = [];
 for
i = 1:query_frame double map; map = 0; up = 0; gnd_num = length(gnd{i}); for j =1:return_num if( find(gnd{i}==query_result(i,j))) up = up+1; map = map + up/j; end if up == gnd_num break; end end map = map / gnd_num; MAP(i) = map; end final_MAP = mean(MAP);