DY N DY

NMS (non-maximum-suppression) 본문

PARK/용어정리

NMS (non-maximum-suppression)

손세지 2017. 10. 30. 19:35

오래간만의 포스팅. 


요즘 딥러닝을 이용한 여러 Object Detection 알고리즘을 구경하는데, 대부분 NMS (non-maximum suppression)을 사용하여 연산량을 줄이고, mAP도 올리는 효과를 본다고 한다. 

물론 필수로 필요한 것은 아니나 확실히 성능향상에 도움이 되는 것 같다. 


사실 생각해보면 별건 아니었는데, 예전 영상처리에서 특히 canny edge detector같은데서 보았던 NMS와 헷갈려서... 이해하는데 시간이 꽤나 걸렸다. 


사실 비슷한? 거의 동일한 방법인데, 픽셀이나 바운딩박스냐에 따라 나뉘는 것 같다. 


일반적으로 영상에지를 찾기 위한 NMS는 현재 픽셀을 기준으로 주변의 픽셀과 비교했을 때 최대값인 경우 그대로 놔두고, 아닐 경우(비 최대) 억제(제거)하는 것이다. 


딥러닝을 이용한 Object Detection에서는 대부분 각종 boundingbox + 각 box에 object가 있을 확률 (class별 확률)들이 나오게 되는데, 이중 겹치는 부분 

(차 한대에 여러가지 boundingbox가 그려지는 경우와 같은)을 제거하기 위한 방법으로 사용된다. 


python code는 squeezedet github에서 구현을 잘 해놓은 것 같아 가져와봤다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def nms(boxes, probs, threshold):
  """Non-Maximum supression.
  Args:
    boxes: array of [cx, cy, w, h] (center format)
    probs: array of probabilities
    threshold: two boxes are considered overlapping if their IOU is largher than
        this threshold
    form: 'center' or 'diagonal'
  Returns:
    keep: array of True or False.
  """
 
  order = probs.argsort()[::-1]
  keep = [True]*len(order)
 
  for i in range(len(order)-1):
    ovps = batch_iou(boxes[order[i+1:]], boxes[order[i]])
    for j, ov in enumerate(ovps):
      if ov > threshold:
        keep[order[j+i+1]] = False
  return keep
cs

코드를 보면 알겠지만 우선 IOU가 필요하다. 

IOU는 intersection of union으로. 
나름 유명한 그림 한장이면 어느정도 설명이 될 것 같다.
Figure 2: Computing the Intersection of Union is as simple as dividing the area of overlap between the bounding boxes by the area of union (thank you to the excellent Pittsburg HW4 assignment for the inspiration for this figure).

결국 전체 박스 영역 중 겹치는 부분의 비율이다. 

NMS를 하려는 가장 큰 이유는 역시 중복제거이기 때문에 예측한 박스들 중 IOU가 일정이상인 것들에 대해서 수행하게 된다. 


코드만 봐도 어떻게 수행하는지 대략 감 잡을 수 있겠으나 간단히 설명하면 

1. 동일한 클래스에 대해 높은-낮은 confidence 순서로 정렬한다. (line 13)
2. 가장 confidence가 높은 boundingbox와 IOU가 일정 이상인 boundingbox는 동일한 물체를 detect했다고 판단하여 지운다.(16~20) 보통 50%(0.5)이상인 경우 지우는 경우를 종종 보았다.



NMS 수행하기 전의 예측된 bounding box 
image


NMS 수행한 후의 결과
image


추가로 러시아의 연구자가 YOLO(you look only once)에 대해 설명하는 슬라이드에서 nms또한 자세히 다뤄주어 이해하는데 도움이 많이 되었다.