본문 바로가기
DL|ML

mAP(mean Average Precision)

by 이든Eden 2019. 9. 22.

mAP(mean Average Precision)

💡Object Detection 논문들을 보면 mAP를 사용해서 모델의 성능을 비교하는데, 정확하게 무엇인지 몰라서 찾아보게 되었다.


우선 mAP에 대해 알려면 PrecisionRecall에 대해서 알고 있어야 한다. Precision은 정밀도, Recall은 재현율이라고 하는데 소오오올직히 굳이 한국말로 몰라도 될 것 같다. 나는 단어뜻과 연결지어서 이해가 안되서 그냥 있는 그대로 받아들였다.

 

이해가 될 듯 말 듯 볼 때마다 알 듯 말 듯한 유명한 표

위의 표를 보며 Precision, Recall이 무엇이었는지 기억을 더듬어보자.

Precision

Precision은 모델이 True라고 예측한 것 중 정답도 True인 것의 비율

$ Precision = {TP \over TP+FP} $

 

Recall

Precision은 실제 정답이 True인 것 중에서 모델이 True라고 예측한 것의 비율

$ Recall = {TP \over TP+FN} $

 


자 이제는 Object Detection 문제라고 생각하고 Precision과 Recall을 구해보자. 아래와 같이 2019년 9월 23일 "Feel Special" 미니 8집으로 컴백하는 아름다운 트와이스의 앨범 C type 사진에서 오늘 생일인 나연이를 찾는다고(detecting) 해보자.

 

 

  Predicted Condition

True condition

 

  True False
True

모델이 제대로 나연이를 찾은 경우

모델이 나연이를 바운딩박스로 잡아놓고 다른 멤버라고 이상한 소리하는 경우
False 멍청한 모델이 나연이랍시고 바운딩 박스로 잡았는데 아닌경우 모델이 나연이가 아닌 다른 멤버나 다른 부분을 바운딩박스로 안잡았을 때 

 

 

오른쪽에 있는 이미지를 보시면 이해가 더 잘 될 것이라고 믿는다.

실제로 Object Detection 모델의 infernece 결과를 이런식으로 visualization 한다.

 

초록색 상자 : True Positive

노랑 상자 : Ground Truth

빨강 상자 : False Positive

 

False Negative는 이미지에서 표현하지 않았지만, 나연이를 바운딩박스로 잡은 다음 Detection 결과가 다른 멤버인 라벨이면 False Negative일 것이다.

 

아직도 헷갈린다면 참조의 2번째 링크를 보면 이해에 도움이 될 것이라고 믿는다.

 

 

이해로 잔뜩 고통받은 머리를 가지고 다음으로 넘어가보자. False Positive였던 멍청한 모델이 나연이랍시고 바운딩 박스로 잡았는데 아닌 경우는 어떻게 알아내는 것일까? 이것을 알아내는 방법이 IoU다.

 


IoU (Intersection over Union)

다행히도 이건 False Negative, True Negative 이런것 보단 훨씬 간단하다.

오늘은 나연이 생일이니 계속 나연이 사진으로 예를 들어 보겠다.

 

노란색 상자 : Ground Truth

초록색 상자 : Predicted Result

라고 했을 때 노랑 초록 부분의 면적을 모두 합친 것을 Union, 노랑과 초록이 겹친 부분을 Overlap이라고 부르자.

 

이 때 IoU는 아래와 같이 구한다.

 

$ IoU = {area\;of\;Overlap \over\;area\;of\;Union}$

 

 

이제 mAP까지 거의 다 왔다.

 


AP(Average Precision)

AP를 구하기 위해서 PrecisionRecall에 대해 어렵게 배워왔다. 참조에 사용한 첫 번째 글에 아주 좋은 예시가 있어서 그걸 가져와서 설명해보겠다. 물론 예시는 계속 트와이스다. 모든 데이터 셋이 5명의 나연이를 가지고 있다고 해보자. 우리는 Object Detection 모델로 나연이들을 predict한 confidence level의 내림차순 대로 데이터를 가지고 있다. 아래의 표가 바로 그 confidence level 내림차순 데이터이다. IoU가 0.5이상일 때 True로 하기로 했다.

 

Rank Correct Precision Recall
1 True 1.0 0.2
2 True 1.0 0.4
3 False 0.67 0.4
4 False 0.5 0.4
5 False 0.4 0.4
6 True 0.5 0.6
7 True 0.57 0.8
8 False 0.5 0.8
9 False 0.44 0.8
10 True 0.5 1.0

 

3위의 PrecisionRecall이 어떻게 계산되었는지 증명해보겠다.

Precision은 TP(True Positive)의 비율이므로 = 2/3 = 0.67

Recall은 모든 Positive중에서 TP의 비율이므로 = 2/5=0.4

표를 보면 Recall은 순위가 낮아질 때 같이 증가하고, Precision은 지그재그한 패턴이다. False Positive일 땐 증가했다가, True Positive일 때는 감소하고있다. 이제는 Recall에 따른 Precision을 Plot으로 그려보자. 이게 바로 Precision-Recall 그래프이다.

 

출처: mAP (mean Average Precision) for Object Detection, 첫번째 참조

 

AP(Average Precision)의 정의는 Precision-Recall curve의 아래쪽 면적을 구하는 것이다. Precision과 Recall은 항상 0~1사이의 값인데, 따라서 AP역시 항상 0~1사이의 값이다. AP를 구하기 전 지그재그 패턴이었던 그래프를 단조적으로 감소하는 그래프로 만들어주자.

 

 

이제 이 아래의 넓이를 구하면 그게 AP가 된다. 그렇다면 mAP(mean Average Precision)은 뭘까? 이것 때문에 여기까지 왔는데 이건 뭘까? mAP는 검출할 물체 클래스가 여러가지인 경우 각 클래스별 AP를 더한 후 클래스 개수로 나눠준 값이다.

여기까지 Object Detection에서 많이 쓰이는 평가 방법인 mAP를 알아보았다.

 

참조

https://medium.com/@jonathan_hui/map-mean-average-precision-for-object-detection-45c121a31173

https://bskyvision.com/465

https://stackoverflow.com/questions/16271603/how-to-categorize-true-negatives-in-sliding-window-object-detection

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/evaluation_protocols.md