[Object Detection] 객체 탐지 정확도 평가 지표 mAP(mean Average Precision)
이번 포스팅에서는 객체 검출(Object Detection)의 성능을 어떻게 평가하는지에 대해서 다루고자 한다. 먼저 "정확도"라는 개념은 주로 정답(Ground Truth, 이하 GT)과 모델이 예측한 결과(Prediction) 간의 비교를 통해 이루어진다.
객체 탐지 정확도 평가 지표인 mAP(mean Average Precision) 를 다루기 전에 이미지 분류(Image Classification)에서는 어떻게 정확도 평가를 수행하는지 알아볼 필요가 있다. 이미지 분류는 GT가 이미지의 클래스이기 때문에 이미지가 딱 주어졌을 때 이 이미지가 GT의 클래스와 일치하는지 불일치하는지를 비교하게 된다.
반면 객체 검출에서는 이미지를 분류하는 문제와 달리 여러 객체들이 존재하는 이미지 내에서 객체가 어디에 위치하는지 바운딩 박스(Bounding box)로 찾고, 찾은 위치에 해당하는 박스 내부의 객체가 실제 GT에 있는 클래스와 일치하는지의 여부를 비교한다. 객체 검출은 클래스를 제대로 예측하였는지 부터 판단하여 예측하지 못하면 실패로 간주한다. 클래스를 올바르게 예측하였다면 바운딩 박서의 정확도를 기준으로 정확도를 측정하게 된다. 이 때 정확도를 어떻게 측정하는지 설명하겠다.
IoU (Intersection Over Union)
IoU란 두 경계 상자간의 겹침을 평가하는 Jaccard Index 를 기반으로 하는 측정 기법이다. 여기서 두 경계 상자간이라 함은 GT 박스와 검출된(예측된) 박스를 뜻한다. IoU 를 적용하면 탐지 결과가 유효한지 아닌지를 알 수 있으며 식으로 표현하면 아래와 같다.
객체 검출에서 바운딩 박스를 얼마나 잘 예측했는지는 IoU 지표를 통해 측정하게 된다. 이는 객체 검출 문제 뿐만 아니라 이미지 분할(Image Segmentation)문제에서도 사용된다. 즉 객체 검출에서는 GT 와 예측 값 간의 교집합과 합집합을 통해 IoU를 측정하게 된다.
이 때 사용되는 몇 가지 기본 개념이 있다.
- True Positive (TP) : 맞다고 추측하고 실제로 맞음. IOU >= Threshold
- False Positive (FP) : 맞다고 추측하고 실제로는 틀림. IOU < Threshold
- False Negative (FN) : 아니라고 추측하고 실제로는 맞음. Ground Truth를 아예 detect 못함
- True Negative (TN) : 아니라고 추측하고 실제로 아님.
여기서 Threshold 는 일반적으로 50%, 75%, 95%로 설정된다.
정밀도(Precision)
정밀도는 주로 재현율(Recall)과 같이 사용된다. 예측된 결과가 얼마나 정확한지를 나타낼 수 있는 지표이다. 즉 검출된 것들 중에서 정답을 맞춘 것들의 비율이 어느정도인지를 알 수 있기에 검출 결과가 얼마나 정확한지를 알 수 있다.
재현율(Recall)
재현율은 GT 중에서 얼마나 정답을 맞추었는지를 나타낸다. 즉 검출되어야 할 객체들 중에서 제대로 검출된 것의 비율을 뜻한다.
정밀도와 재현율은 반비례 관계!
정밀도만으로 객체 검출 알고리즘의 성능을 평가하는 것은 적절치 않으며 재현율만으로 객체 검출 알고리즘 성능을 평가하는 것도 적절치 않다. 정밀도와 재현율은 반비례 관계를 갖기 때문에 이 두 값을 모두 고려하여 정확도를 평가하는 것이 좋다. 그래서 나온 것이 precision-recall 곡선 및 AP(Average Precision) 개념이다.
아래는 recall 과 precision 간의 관계를 보여주는 그래프이다.
아래는 recall 과 IOU threshold 간의 관계를 보여주는 그래프이다.
AP (Average Precision) 와 mAP (mean Average Precision)
Average Precision의 계산은 Recall 을 0부터 0.1 단위로 증가시켜서 1까지 (총 11개의 값) 증가 시킬 때 필연적으로 Precision 이 감소하게 되는데 각 단위 마다 Precision 값을 계산하여 평균을 내어 계산한다. 즉 11가지의 Recall 값에 따른 Precision 값들의 평균을 AP라고 한다. 하나의 클래스 마다 AP 값을 계산 할 수 있으며 전체 클래스 갯수에 대해 AP를 계산하여 평균을 낸 값이 바로 mAP 이다.
AP는 Precision-Recall 그래프에서 그래프 선 아래쪽의 면적으로 계산되는데 보통 계산 전에 PR 곡선 을 살짝 보정해준다. PR 곡선을 단조적으로 감소하는 그래프가 되게 하기 위해 다음과 같이 바꿔주는 것인데, 곡선에서 흔들림의 영향을 줄이는 것이라고 보면 된다. 이 때 AP를 측정하기 위해 보간하는 방법에는 2가지 방식이 있다.
1. 11개 포인트 보간 (주로 사용하는 보간법)
11개 포인트인 0, 0.1, 0.2, ... , 1 의 세트에서 정밀도를 평균화하여 보간하는 것이다.
이와 같은 방식을 사용하면 아래와 같은 값이 산출된다.
2. 모든 포인트에서 수행된 보간
위 예시에서 총 면적은 아래와 같이 계산 할 수 있다.
두 가지 방법을 적용한 결과는 각각 다르게 나타난다. (11개 포인트를 이용하여 보간하는 것이 더 좋은 성능을 보임)
mAP 계산하기
github.com/rafaelpadilla/Object-Detection-Metrics
위 깃에 mAP 를 계산하는 방법에 대해 아주 자세히 나와 있으며, 대략적인 방법은 다음과 같다.
1. GT 파일들을 만들기
2. 검출된 결과들을 담은 파일 만들기
3. pascalvoc.py 실행 (VOC 데이터 세트에서의 메트릭을 사용한 것)
참고로 각 COCO 데이터 세트와 VOC 데이터 세트에서의 메트릭은 아래 링크를 참조하기를 바란다.
COCO 데이터 세트에서의 Metrics : cocodataset.org/#detection-eval
VOC 데이터 세트에서의 Metrics : host.robots.ox.ac.uk/pascal/VOC/voc2012/htmldoc/devkit_doc.html
또한 Miss rate 와 FPPI(Fals-positives per image) 개념에 대해서도 다루고 있다.
그리고 또한 검출된 결과들을 담은 파일을 만들 때 즉 검출 결과를 산출할 때는 사용하고 있는 객체 검출기의 임계값을 사용하여 산출하면 된다. darknet 같은 경우 기본 임계값은 0.24를 사용하며 VOC PASCAL 은 0.5 를 사용한다. 또한 NMS 도 0.45 값을 이용하여 사용하고 있다. (관련 이슈)
참고자료 1 : bskyvision.com/465
참고자료 3 : blog.zenggyu.com/en/post/2018-12-16/an-introduction-to-evaluation-metrics-for-object-detection/
참고자료 4 : github.com/Cartucho/mAP/issues/43
'AI Research Topic > Object Detection' 카테고리의 다른 글
[Object Detection] Object Detection 분야에서 신경망의 입력 해상도 값을 제한하는 이유 (e.g. ~ [1333,800] or ~ [1000, 600]) (3) | 2021.08.13 |
---|---|
[Object Detection ] What does mlvl mean? (2) | 2021.07.28 |
[Object Detction] 3D Object Detection, Google Objectron (3) | 2020.05.27 |
[Object Detection] Soft NMS (0) | 2020.03.08 |
[Object Detection] Deformable Convolutional Networks (0) | 2020.03.08 |