NMS 알고리즘
NMS(non - maximum suppresssion)을 사용하여 연산량을 줄이고, aAP도 올리는 효과를 본다고 한다.
일반적으로 영상엣지를 찾기 위한 NMS는 현재 픽셀을 기준으로 주변의 픽셀과 비교했을 때 최대값인 경우 그래도 놔두고, 아닐 경우(비 최대) 억제(제거)하는 것이다.
(차 한대에 여러가지 bounding box가 그려지는 경우와 같은)을 제거하기 위한 방법으로 사용된다.
def nms(boxes, probs, threshold):
"""Non-Maximum suppression.
Args:
boxes : array of [cx, cy, w, h] (center formet)
prob : 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 jm ov in enumerate(ovps):
if ov > threshold:
keep[order[j+i+1]] = False
return keep
IoU = Area of overlap / Area of Union
결국 전체 박스 영역 중 겹치는 부분의 비율이다.
NMS를 하려는 가장 큰 이유는 역시 중복제거이기 때문에 예측한 박스들 중 IOU가 일정 이상인 것들에 대해서 수행하게 된다. 코드만 봐도 어떻게 수행하는지 대략 감을 잡을 수 있겠으나 간단히 설명하면
1. 동일한 클래스에 대해 높은-낮은 confidence순서로 정렬한다.(line 13)
2. 가장 confidence가 높은 boundingBox와 IOU가 일정 이상인 bounding box는 동일한 물체를 detect했다고 판단하여 기준다.(16-20) 보통 50%(0.5)이상인 경우 지우는 경우를 종종 보았다.
추가로 러시아의 연구자가 YOLO(you look only once)에 대해 설명하는 슬라이드에서 nms또한 자세히 다뤄주어 이해하는데 도움이 많이 되었다.
YOLO
YOLO You Only Look Once: Unified, Real-Time Object Detection Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi
docs.google.com
본 글은 아래의 글을 개인적 공부를 위해 필사하였습니다.
NMS (non-maximum-suppression)
오래간만의 포스팅. 요즘 딥러닝을 이용한 여러 Object Detection 알고리즘을 구경하는데, 대부분 NMS (non-maximum suppression)을 사용하여 연산량을 줄이고, mAP도 올리는 효과를 본다고 한다. 물론 필수로 필..
dyndy.tistory.com