非極大值抑制(NMS)


一. 引入NMS

       在R-CNN中對於2000多個region proposals得到特征向量(4096維)后,輸入到SVM中進行打分(score)。除了背景以外VOC數據集共有20類。那么2000*4096維特征矩陣與20個SVM組成的權重矩陣4096*20相乘得到結果為2000*20維矩陣。這個矩陣2000行表示有2000個框。20列為每一個框屬於這20個類的score(置信度)。也就是說每一列即每一類有2000個不同的分值。那么每一類有這么多候選框肯定大多冗余。所以需要利用非極大值抑制方法進行刪除重疊候選框。

       NMS算法的輸入:2000個候選框的位置坐標(兩個頂點的x,y坐標,共4個值)、score分數值(置信度)。

       NMS算法的輸出:所有滿足篩選條件的建議框(可能不止一個)。

       NMS算法的大致思想:對於有重疊的候選框:若大於規定閾值(某一提前設定的置信度)則刪除,低於閾值的保留。

                                            對於無重疊的候選框:都保留。

 

二. 算法實現

nms.m

function pick = nms(boxes, overlap) % pick = nms(boxes, overlap) 輸入: boxes為所有候選框的左下角和右上角x,y坐標。overlap為事先人為設定的閾值。 % Non-maximum suppression. 輸出: pick,即所有保留下來的框 % Greedily select high-scoring detections and skip detections % that are significantly covered by a previously selected detection. if isempty(boxes) pick = []; else x1 = boxes(:,1);          %所有候選框的左下角頂點x y1 = boxes(:,2);          %所有候選框的左下角頂點y x2 = boxes(:,3);          %所有候選框的右上角頂點x y2 = boxes(:,4);          %所有候選框的右上角頂點y s = boxes(:,end);         %所有候選框的置信度,可以包含1列或者多列,用於表示不同准則的置信度 area = (x2-x1+1) .* (y2-y1+1);   %所有候選框的面積 [vals, I] = sort(s);      %將所有候選框進行從小到大排序,vals為排序后結果,I為排序后標簽 pick = []; while ~isempty(I) last = length(I);       %last代表標簽I的長度,即最后一個元素的位置,(matlab矩陣從1開始計數) i = I(last);            %所有候選框的中置信度最高的那個的標簽賦值給i pick = [pick; i];       %將i存入pick中,pick保存輸出的NMS處理后的box的序號,即保存最后結果 suppress = [last];      %將I中最大置信度的標簽在I中位置賦值給suppress,suppress作用為類似打標志, for pos = 1:last-1      %從1到倒數第二個進行循環 j = I(pos);           %得到pos位置的標簽,賦值給j xx1 = max(x1(i), x1(j));%左上角最大的x(求兩個方框的公共區域) yy1 = max(y1(i), y1(j));%左上角最大的y xx2 = min(x2(i), x2(j));%右下角最小的x yy2 = min(y2(i), y2(j));%右下角最小的y w = xx2-xx1+1;          %公共區域的寬度 h = yy2-yy1+1;          %公共區域的高度 if w > 0 && h > 0     %w,h全部>0,證明2個候選框相交 o = w * h / area(j);%計算overlap比值,即交集占候選框j的面積比例 if o > overlap      %如果大於設置的閾值就去掉候選框j,因為候選框i的置信度最高 suppress = [suppress; pos];   %大於規定閾值就加入到suppress,即待刪除的框 end end end I(suppress) = [];%將待刪除的框刪除,I中剩余未處理的框。當I為空結束循環 end end 

 

nms_draw.m

boxes=[200,200,400,400,0.99;  
        220,220,420,420,0.9;  
        100,100,150,150,0.82;  
        200,240,400,440,0.5;
        150,250,300,400,0.88];  
overlap=0.8;     # 設置好的閾值
pick = nms(boxes, overlap);  
figure;  
for i=1:size(boxes,1)
    rectangle('Position',[boxes(i,1),boxes(i,2),boxes(i,3)-boxes(i,1),boxes(i,4)-boxes(i,2)],'EdgeColor','y','LineWidth',6);  
    text(boxes(i,1),boxes(i,2),num2str(boxes(i,5)),'FontSize',14,'color','b');  
end  
for i=1:size(pick,1)
    rectangle('Position',[boxes(pick(i),1),boxes(pick(i),2),boxes(pick(i),3)-boxes(pick(i),1),boxes(pick(i),4)-boxes(pick(i),2)],'EdgeColor','r','LineWidth',2);  
end  
axis([0 600 0 600]);  

 

結果:

可以看到:置信度為0.99的框保留下來是因為其置信度最高。第一次迭代時就已經存入了pick數組中。

                  置信度為0.88的框保留下來是因為其與0.99的框交並比IOU < overlap = 0.8

                  置信度為0.82的框保留下來是因為其與任何框都無重疊。

 

注意此時經過NMS后,每類別還可能會剩余不止一個的候選框。而對於圖像中的每個類別我們只需一個候選框即可。所以還有后續處理。

后續:R-CNN分別用20個回歸器對上述20個類別中剩余的候選框進行回歸操作。最終得到每個類別修正后的得分最高的bounding box。

 

 

Reference:

非極大值抑制(nonMaximumSuppression)

非極大值抑制(Non-maximum suppression)在物體檢測領域的應用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM