mAP(Mean Average Precision) [1]
mAP(Mean Average Precision)는 Object Detection분야에서 사용되는 성능평가 지표이다. mAP를 알기 위해서는 AP(Average Precision)를 알아야 하고 AP를 알기 위해서는 precision(정밀도)과 recall(재현율)에 대한 지식이 있어야 한다. 천천히 알아보자.
Precision & Recall
precision : 정밀도라고 부르며 모델이 검출한 모든 결과중에 옳게 검출한 비율을 의미한다. Recall : 재현율이라고 부르며 모델이 검출해내야하는 결과중에 옳게 검출한 비율을 의미한다.
Precision과 Recall 둘중 하나만 가지고 성능을 평가하기엔 무리가 있다. 예를들어 사진에서 10명의 사람을 검출해 내야 하는데 모델이 검출해낸 사람은 5명이고 그 중 4명이 맞다고 가정해보자. 그렇게되면 Precision = 4/5 = 0.8 이고 Recall = 4/10 = 0.4로 Precision만 보면 성능이 좋아 보이지만 Recall로 보면 성능이 그리 좋아보이지 않는다.
중요한것은 Precision과 Recall은 항상 0과 1사이의 값으로 나오는데 Precision이 높으면 Recall이 낮은 경향이 있고, Precision이 낮으면 Recall이 높은 경향이 있다는 것이다. 따라서 어느 하나의 지표로 모델의 성능을 판단하는것은 거의 불가능하며 결국 이 두 값을 종합해서 모델의 성능을 평가해야 한다. 그래서 필요한것이 precision-recall 곡선 및 AP이다.
참고로 Object Detection에서 TP(옳은검출)와 FP(틀린검출)를 결정하는 기준은 IOU(intersection over union)를 사용한다.
Precision-Recall 곡선
PR곡선은 confidence 레벨에 대한 threshold값의 변화에 의한 물체 검출기의 성능을 평가하는 방법이다. 여기서 confidence란 검출한 것에 대해 모델이 얼마나 확신을 가지고 있는지 알려주는 값이다.
보통 confidence 레벨에 대해 threshold값을 부여해서 특정한 값 이상이 되어야 검출된 것으로 인정한다. threshold 값이 0.4라면 confidence 레벨이 0.1~0.4 인 검출은 무시하는 것이다.
15개의 얼굴이 존재하는 데이터 셋에서 한 얼굴 검출 알고리즘에서 총 10개의 얼굴이 검출(confidence 레벨 0부터 100%까지 모두 고려했을때)되었다고 가정해보자.
10개중 7개가 제대로 검출되었고, 3개는 잘못 검출되었다. 이때 Precision = 7/10 = 0.7이 되고, Recall = 7/15 = 0.47이 된다. 여기서 생각해야 될 것이 모든 confidence 레벨을 취합했을때의 결과이다.
이번에는 threshold 값을 매우높게 90%로 잡으면 Precision = 2/2 = 1이 되고, Recall = 2/15 = 0.13이 된다. threshold를 낮추면서 값을 전부 구해보면 아래 그림과 같이 나타낼 수 있다.
PR 곡선에서 x축은 recall 값이고, y축은 precision 값이다. 즉, PR곡선에서는 recall 값의 변화에 따른 precision값을 확인할 수 있다.
Average Precision(AP)
AP는 PR 곡선의 아래쪽 면적을 의미한다. 면적이 1이라는 것은 precision과 recall이 1이라는 의미가 되고 이것은 모델이 물체 검출을 완벽하게 해냈다는 것을 의미한다. 즉 AP가 높을수록 모델의 성능이 높다라는것을 알 수 있다.
그런데 위 의 그림에서 AP아래의 면적을 보면 알 수 있듯이 면적을 구하기가 쉽지 않아 보인다. 그렇기 때문에 AP를 구할때는 PR곡선을 단조적으로 감소하는 그래프가 되게 하기 위해 다음과 같이 바꿔준다.
이렇게 파란색 선에서 빨간선으로 근사시켜주어서 왼쪽 빨간사각형 넓이 + 오른쪽 빨간사각형 넓이를 해주어서 AP를 구하게 된다.
컴퓨터 비전 분야에서 Object Detection 및 Image Clasification 모델 성능은 대부분 이 AP로 평가한다. 물체 클래스가 여러개인 경우 각 클래스당 AP를 구한 다음에 그것을 모두 합한 것을 클래스의 갯수로 나눠주어 성능을 평가하는것이 바로 MAP(Mean Average Precision)이다.
댓글남기기