이전 포스터에서 IoU(Intersection over Union)에 대해 알아보았다. bbox박스가 해당 객체를 얼마나 잘 검출했는지에 대한 지표로 사용이 되었다. Object Detection으로 예를 들면 bbox박스 뿐만 아니라 class도 잘 예측했는지에 대한 평가도 필요하다. 그렇다면 어떻게 저 두 가지 평가지표를 융합하여 Model의 성능을 하나의 지표로 평가할 수 있을까?


mAP(mean Average Precision)


class만 예측하는 것이 아니라 이미지속 객체의 위치까지 bbox로 예측하는 모델을 평가할 때는 mAP(mean Average Precision)를 사용한다.


아래는 사진은 IoU가 0.75일 때 모델 성능을 비교한 표이다.


사진1. SOTA of Object Detection Model(AP75)
출처 : https://paperswithcode.com/sota/object-detection-on-coco?metric=AP75


class를 평가할 때는 ‘Yes or No’ 방식으로 정확히 틀린 것에 대한 개수를 셀 수 있지만, bbox에 대한 정확도는 연속형 데이터이기 때문에 특별한 방법이 필요하다. 물론 ‘Yes or No’ 방식에서도 올바르게 예측한 수 / 예측한 수와 같이 단순히 Accuracy를 구하는 방법 말고 PrecisionRecall 등의 평가지표가 있다. mAP를 이해하기 위해서는 해당 평가지표를 모두 이해하고 있어야 하다.

  • IoU(Threshold)
  • Precision & Recall
  • Precision-Recall Curve(밑에 설명)

    아래에서는 3개의 개념을 간단하게 짚고 넘어갈 예정이다. 자세한 사항은 해당 링크를 참고!


IoU(Intersection over Union)

다른 포스트에 더욱 자세히 설명했지만, 간단히 얘기하면 정답 bbox와 예측 bbox의 합집합 중 교집합이 차지하는 비율을 말한다.


사진2. IoU(Intersection over Union)
출처 : https://paperswithcode.com/sota/object-detection-on-coco?metric=AP75


Classification 문제와 다르게 Object Detection의 경우 예측된 bbox가 정확히 해당 객체를 탐지했는지에 대한 기준이 필요하기 때문에 IoU 방식을 이용해 측정을 한다. 이때 IoU의 수치를 Threshold라고 칭하고 여러 Threshold값에 대한 평균을 구해 성능을 평가한다.


Precision & Recall

정확도(Accuracy)를 평가지표로 사용했을 때 발생할 수 있는 문제점을 해결하기 위해 사용되는 평가지표이다. 정확도가 A로 예측했을 때 실제 A인 경우 + A가 아니라고 예측했을 때 실제로도 A가 아닌 경우에 대한 척도라면, PrecisionRecall은 각각 반대의 경우 또한 고려를 한 수치이다.


사진3. Precision & Recall
출처 : AIFFEL


위 표를 참고하면 각각의 지표는 다음과 같이 표현될 수 있다.


\[Precision = \frac{TP}{TP + FP} \\ \text{ } \\ Recall = \frac{TP}{TP + FN}\]


PrecisionRecall은 반비례 관계를 갖는다. 만약 Precision의 값을 높이기 위해 FP를 줄이는 방향으로 학습을 하면 TP도 증가할 수 있지만 반대로 FN이 증가할 확률이 높아지기 때문에 그 영향으로 Recall의 값이 작아진다. 반대의 경우도 마찬가지다. 이러한 Trade-off 관계로 인해 두 수치를 동시에 봐야 정확한 평가가 가능한데, 두 관계를 시각적으로 나타낸 것이 Precision-Recall Curve이다.


Precision-Recall Curve

Precision-Recall Curve를 구하기 전에 Object Detection의 결과인 output의 구성요소를 알고 있어야 한다. 보통 $[idx, confidence, class, bbox(4)]$와 같이 구성되어 있고, confidence는 특정 bbox가 어느정도 신빙성을 갖는지에 대한 지표이다. 즉, confidence가 1이라는 건 bbox에 해당하는 객체가 100% 확률로 해당 class와 일치한다는 뜻이다. 따라서 특정 confidence의 Threshold에 따라 검출의 유무가 결정된다. IoU의 Threshold에 따라 예측 bbox의 TP, FP, FN, TN이 결정된다면, confidence의 Threshold에 따라 Precision과 Recall에 적용할 TP, FP, FN, TN의 개수가 결정된다.


다음 사진을 예시로 Precision-Recall Curve를 구해보자.


사진4. Example Image
출처 : https://www.youtube.com/watch?v=FppOzcDvaDI&list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vz&index=46
  • 초록색 : 정답 bbox(총 4개)
  • 빨간색 : 예측 bbox(총 7개)


위 사진에서 예측 bbox(빨간색)와 각각의 Confidence를 표시하면 다음과 같다. IoU의 Threshold를 0.5로 설정했을 때 예측 bbox들의 결과는 다음과 같다. TP, FP의 경우 IoU의 Threshold에 의해 결정되었다.(정답 bbox와 예측 bbox의 IoU가 0.5보다 크면 TP, 작으면 FP이다.)


사진5. Confidence Table
출처 : https://www.youtube.com/watch?v=FppOzcDvaDI&list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vz&index=46


이 테이블을 Confidence가 큰 순서대로 재배열한 후 Precision과 Recall을 구하면 다음과 같다.


사진6. Confidence Table Rearrange
출처 : https://www.youtube.com/watch?v=FppOzcDvaDI&list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vz&index=46


이제 사진(6) 테이블에서 Confidence값이 큰 경우부터 Precision과 Recall을 차례대로 구해나간다.

  • Confidence = 0.9인 경우, Precision = (TP1 / TP1 + FP0), Recall = (TP1 / TP4 + FN0)
  • Confidence = 0.8인 경우, Precision = (TP1 / TP1 + FP1), Recall = (TP1 / TP4 + FN0)
  • Confidecne = 0.7인 경우, Precision = (TP2 / TP2 + FP1), Recall = (TP2 / TP4 + FN0)
  • ……….
  • Confidecne = 0.2인 경우, Precision = (TP3 / TP3 + FP4), Recall = (TP3 / TP4 + FN0)


위 테이블에서 나온 결과를 이용해 Precision-Recall Curve를 그려보면 다음과 같다.


사진7. Precision-Recall Curve
출처 : https://www.youtube.com/watch?v=FppOzcDvaDI&list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vz&index=46


AP(Average Precision)


Curve그래프를 보고 성능을 측정하려면 어떤 값을 사용해야하는지 의문이 든다. 그래서 한 가지 지표로 나타내기 위해 Ap(Average Precision)가 생겨났다. 이제 마지막 단계인 AP(Average Precision)값을 구해주는 작업이다. AP는 단순히 Precision-Recall Curve에서 그래프가 차지하는 넓이를 말한다. 하지만 계산의 편리함을 위해 지그재그 모양으로 생긴 부분은 Precision의 Max값으로 smooth하게 바꿔준다. 따라서 직사각형의 넓이들을 계산하면 해당 class에 대한 AP값이 나온다.


사진7. Average Precision
출처 : https://www.youtube.com/watch?v=FppOzcDvaDI&list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vz&index=46


최종적으로 우리가 원하던 mAP(mean Average Precision)은 모든 class에 대해 AP를 구해준 후에 class의 개수로 나눠준 값이 된다.


mAP@0.5:0.05:0.95

대부분의 논문에서 이와 같은 표현이 자주 등장하는데, 이것은 bbox의 IoU값을 0.5부터 0.05씩 증가시켜 0.95까지 측정한 모든 결과를 평균낸 값을 나타낸다. 이것이 Object Detection 모델을 측정할 때 사용되는 평가지표이다.


지금까지 mAP에 대해 알아보았다. 사실 mAP를 알기 위해서는 세부적으로 많은 개념들을 숙지한 상태여야 하는데, 포스팅을 하면서 확실히 이해가 되었고