zoukankan      html  css  js  c++  java
  • Non-maximum suppression(非极大值抑制算法)

    在RCNN系列目标检测中,有一个重要的算法,用于消除一些冗余的bounding box,这就是non-maximum suppression算法。

    这里有一篇博客写的挺好的:

      http://www.cnblogs.com/liekkas0626/p/5219244.html

    借用博客里的两张图,如有问题,请联系我删除。

    在目标检测中,这些bounding box都表示检测到了人脸,并且会给每一个bounding box一个score,最终我们需要只保留score最大的bounding box(记为bounding box1),將与bounding box1 overlap (重叠) 较大的一些bounding box消除,即只保留在这个局部区域score最高的一个bounding box。可能在一张图中有多个人脸,那么我们就需要保留各个局部区域score最大的bounding box,两个bounding box的重叠程度一般用IOU的值作为衡量,

    IOU = 两个bounding box的围成的区域的交集 / 两个bounding box围成区域的并集。

     1 function pick = nms(boxes, overlap)
     2 % top = nms(boxes, overlap)
     3 % Non-maximum suppression. (FAST VERSION)
     4 % Greedily select high-scoring detections and skip detections
     5 % that are significantly covered by a previously selected
     6 % detection.
     7 %################################################################
     8 % input   -----    boxes: object detection window
     9 %                         size(boxes) = (n,5)
    10 %                         n --- the number of window
    11 %                       (xMin, yMin, xMax, yMax, score)
    12 %                  overlap: suppression threshold
    13 %
    14 % output  -----    pick:the index of reserved window
    15 if isempty(boxes)
    16   pick = [];
    17   return;
    18 end
    19 
    20 x1 = boxes(:,1);
    21 y1 = boxes(:,2);
    22 x2 = boxes(:,3);
    23 y2 = boxes(:,4);
    24 s = boxes(:,end);
    25 
    26 % calculate the area of all detections
    27 area = (x2-x1+1) .* (y2-y1+1);
    28 % vals is the sorted elments in ascending order, I is the corresponding index
    29 [vals, I] = sort(s);
    30 
    31 pick = s*0;
    32 counter = 1;
    33 while ~isempty(I)
    34   last = length(I);
    35   i = I(last);  
    36   pick(counter) = i;
    37   counter = counter + 1;
    38   
    39   xx1 = max(x1(i), x1(I(1:last-1)));
    40   yy1 = max(y1(i), y1(I(1:last-1)));
    41   xx2 = min(x2(i), x2(I(1:last-1)));
    42   yy2 = min(y2(i), y2(I(1:last-1)));
    43   
    44   w = max(0.0, xx2-xx1+1);
    45   h = max(0.0, yy2-yy1+1);
    46   
    47   inter = w.*h;
    48   o = inter ./ (area(i) + area(I(1:last-1)) - inter);
    49   
    50   I = I(find(o<=overlap));
    51 end
    52 
    53 pick = pick(1:(counter-1));
  • 相关阅读:
    linux查看硬件信息的方法
    linux最常用命令
    研究php单例模式实现数据库类
    HTML5语义元素
    第一次博客作业
    2020系统综合实践 第7次实践作业 06组
    2020系统综合实践 第6次实践作业 06组
    2020系统综合实践 第5次实践作业
    2020系统综合实践 第4次实践作业
    2020系统综合实践 第3次实践作业
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/9014423.html
Copyright © 2011-2022 走看看