이 게시물은 권철민님의 강의 "[개정판] 딥러닝 컴퓨터 비전 완벽 가이드"를 공부하며 작성한 게시물입니다.
Object Detection을 수행하면 이 결과가 과연 어느정도 정확하게 맞췄는지 알려줄 지표가 필요하다.
마치 clasiffication에서 정확도(accuracy)처럼!
IOU는 Object Detection을 했을 때 Bounding Box가 GT(Ground Truth)와 비교했을 때 얼마나 겹쳐있냐에 의해 알려주는 지표다.
공식은 다음과 같다.

IOU = 교차된 영역의 넓이/두 영역의 합집합 넓이
즉, 교차된 영역의 넓이가 클수록 IOU는 1에 근사한다.
IOU가 1에 가까울수록 GT와 근접함
NMS는 이런 IOU를 이용한다.
NMS란, Selective Search된 Bounding Box를 조건에 맞는 Box만 남겨주는 알고리즘이다.
NMS의 수행 로직은 다음과 같다.
아래 그림처럼 특정 Image에 Bounding Box를 Selective Search해준다.
이때 Confidence threshold = 0.5로 했다고 가정하고 두 Box가 나왔다고 가정했다.
이렇게 나온 Box를 Confidence Score가 높은 순서대로 정렬한다.
즉, 빨간색 0.9, 파란색 0.9, 파란색 0.7, 빨간색 0.6 순서로 정렬한다.

IOU threshold = 0.5라고 가정했다.
이때 다음처럼 IOU가 나온다고 가정하면 모두 IOU threshold보다 큰 값이므로 제거된다.
각각 빨간색 0.9, 파란색 0.9를 기준으로 겹쳐진 IOU가 IOU threshold보다 큰 경우를 나타낸 것이다.

최종적으로는 다음과 같은 Bounding Box만 남게된다.

mAP란, 실제 Object가 Detected된 재현율(Recall)의 변화에 따른 정밀도(Presion)의 값을 평균한 성능 수치다.
한마디로 AP를 평균(mean)한 수치다.
Precision(정밀도)와 Recall(재현율)을 재현율의 변화에 따라 그래프에 나타낸 것을 PR curve라고 한다.

그리고 이런 PR curve 그래프를 선으로 연결한 밑넓이를 AP라고 한다.

즉, AP는 한 Object에 대해서 평가가 가능하다.
한 Image에 대해 Object가 여러개인 경우 이런 AP를 각 Object마다 구해 평균을 낸 값이 mAP이다.
Recall/Precision값을 어떻게 변경시킬까?
앞서 NMS에서 Confidence threshold값을 변경시켜가면서 각 object마다 recall, precision값을 추출해내면 된다.