Mean Average Precision

ph
이동: 둘러보기, 검색

mAP

한방에 이해가는 그림

Map eg.png

출처


말 그대로 AP의 평균이 mAP.

AP도 말 그대로 P의 Average. 단, correct query에 대해서만 계산한다. 위 그림의 Ranking #1에서 \(1 + 1/2 + 2/3 + 2/4 + 2/5 + 3/6 + \cdots\)이 아니고, \(1 + 2/3 + 3/6 + \cdots\)인 이유.

다음과 같이 나타내기도 하는데, $$\begin{equation} \sum \text{precision} \cdot \Delta \text{recall} \end{equation}$$ AP@k까지 일반적으로 적용되는 식은 아니어서[1] 혼동의 여지가 있다.

AP@k는 query를 k번째까지 잘랐을 때[2], 그때까지의 AP이다. actual(=answer)의 길이보다 k가 더 큰 경우(=query의 길이가 더 긴 경우) query에는 필연적으로 오답이 있을수밖에 없으므로[3], AP를 계산할 때 actual의 길이로 나눈다. 위 그림에서 보면 마치 correct query의 개수로 나누는 듯이 보이지만, min(len(actual), k), 즉 auctual의 길이로 나누는 것임에 주의한다. 반대의 경우는 k로 나눈다.[4]

가장 정확한 이해는 역시 코드를 보는 것인데, Ben Hamner라는 사람이 만든 테스트코드를 보면 된다. [5]

mAP@ 뒤에 정수가 아니라 소수가 오는 경우는 다른 뜻이다. image detection에서 IoU(intersection over union)의 면적에 따라 precision이 바뀌는데, 이때 IoU의 기준값을 나타낸 것이다. 예를들어, mAP@0.5라고 하면, \(\text{IoU} \ge 0.5\) 인 것들을 맞다고 하고 precision을 계산한 후 그 평균을 낸 것. [6]

참고: CMC


  1. recall을 아래와 같이 조금 더 섬세하게(?) 정의하는 수도 있다. $$ \text{recall} = \frac{| \{\text{relavant}\} \cap \{\text{retrieved}\} |}{ \min(|\{\text{relavant}\}|, k) } $$
  2. k는 당연히 prediction(=query)의 길이보다 작거나 같아야 한다.
  3. 중복답안이 가능한 경우, 즉 \([1, 1, 1]\)등으로 답을 낼 수 있는 경우, 계산할 때는 처음의 \(1\)만 맞았다고 보고 계산한다. 식 \((1)\)에 \(\Delta\text{recall}\)은 이 맥락에서 맞다.
  4. 예를들어, 답이 \([1, 2, 3, 4, 5]\)이고 query가 \([1,6,2,7,8,3,9,10,4,5]\)일 때, AP@\(3\)을 계산하면, \(1 + 2/3\)를 \(2\)로 나누는 것이 아니고 \(3\)으로 나누는 것이다.
  5. python코드
  6. 실 사용 예는 이 논문의 4.2를 보라. MS COCO는 mAP@[0.5, 0.95]두가지를 쓰고 PASCAL VOC는 mAP@0.5를 쓴다고 한다.