📌

Object Detection에서의 Precision, Recall

Date
2020/10/12
Tags
Tutorial
Comp. Vision
Object Detection
Created by
Precision, Recall 개념을 Object Detection에 적용하여 알아보자. 궁극적으로는 mAP를 이해하기 위해 필요하다.
Precision, Recall을 포함한 5가지 성능 평가 지표를 별도의 글로 작성하였습니다!
Table of Contents

Prerequisite

IoU 개념을 미리 알고 있으면 좋다.

Precision(정밀도), Recall(재현율)

PrecisionRecall은 주로 이진분류에서 사용되는 성능 지표이다.
Precision: 예측을 Positive로 한 애들 중에서, 예측과 실제 값이 일치하는 데이터의 비율.
즉, Detection에서는, 박스 친 애들 중 제대로 클래스 예측한 애들의 비율.
"Detection한 결과가 실제 Object들과 얼마나 일치하는가?"
Recall: 실제 값이 Positive인 대상들 중에서, 예측과 실제 값이 Positive로 일치하는 데이터의 비율.
즉, Detection에서는, 실제 Object들 중 박스를 제대로 친 애들의 비율.
"실제 Object들을 빠뜨리지 않고 얼마나 정확히 Detection했는가?"
두 개념이 문맥상 비슷해서 많이 헷갈릴 수 있는데, 주의하자! 보는 기준, 보는 관점이 다르다고 생각하면 쉽다. Precision예측을 한, 예측 데이터가 기준이고, Recall실제 Object가 기준이다.
좋은 모델이라면 (당연히) Precision과 Recall 둘 다 좋아야 한다. 어느 한 쪽으로 치우쳐서는 안 된다.

간단한 예시

Precison: 박스 친 애들을 기준으로, 1개 쳤는데 그 중 1개가 클래스 예측까지 정확히 했다. 100%.
Recall: 실제 Object들을 기준으로, Object는 2개인데 박스 예측은 1개밖에 못 했다. 50%.

Confusion Matrix(오차 행렬)

Precision과 Recall을 수식으로 나타내기 위해, 이 개념을 알 필요가 있다.
Confusion Matrix이진 분류에서의 예측 오류를 유형별로 나눠본 것이다.
True/False: 실제와 예측이 일치하는가? Positive/Negative: 뭘로 예측했는가?
TN(True Negative, Negative Negative): 실제는 Negative인데, Negative로 예측함.
FP(False Positive, Negative Positive): 실제는 Negative인데, Positive로 예측함.
FN(False Negative, Positive Negative): 실제는 Positive인데, Negative로 예측함.
TP(True Positive, Positive Positive): 실제는 Positive인데, Positive로 예측함.

Object Detection에서의 FP, FN, TP

TN은 지표에 쓰이지 않는다.
FP: 실제는 Neg인데, 예측은 Pos. 실제로는 없는 것에다가 박스를 치거나 클래스 예측을 한 것.
클래스를 잘못 예측했거나, IoU가 특정값 이하인 케이스(박스를 엉뚱한 곳에 친 것).
FN: 실제를 Pos인데, 예측은 Neg. 있는 Object에 대해 박스를 안 친 것.
예측을 해야 하는데 안 한 케이스.
TP: 실제로 Pos이고 예측도 Pos. 박스 잘 쳤고, 클래스 예측도 잘 함.

Precision과 Recall의 수식 표현

위의 개념을 응용해보면, Precision과 Recall을 다음 식으로 나타낼 수 있다.
Precision=TPFP+TP=Pos로 예측해서 클래스까지 맞은 것들Pos로 예측한 것들Precision=\frac{TP}{FP+TP}=\frac{\text{Pos로 예측해서 클래스까지 맞은 것들}}{\text{Pos로 예측한 것들}}
Recall=TPFN+TP=Pos로 잘 예측한 것들실제 Object들Recall=\frac{TP}{FN+TP}=\frac{\text{Pos로 잘 예측한 것들}}{\text{실제 Object들}}

Task에 따른 Precision, Recall의 상대적 중요도

암 검출, 금융사기 검출 같은 Task에서는 실제로 Pos인 얘들을 Neg로 예측하면 큰일 난다.
Recall이 중요한 케이스.
스팸 검출 같은 Task에서는 실제로 Neg인 얘들을 Pos로 예측하면 큰일 난다.
Precision이 중요한 케이스.

숫자만 믿으면 안 돼!

이 두 수치만으로는 충분히 숫자놀음이 될 수 있다.
Precision 100% 만들기!
"확실한 놈만 팬다" → 확실한 경우에만 Pos로 예측하면 된다.
그냥 진짜 확실한 거 하나만 박스 치고, 나머지는 배경으로 처리하면? 예측한 건 하나인데 그 클래스 맞으니까 Precision은 100%가 나온다.
Recall 100% 만들기!
"난사" → 그냥 후보들 다 Pos로 예측하면 된다.
박스를 다 쳐놨으니 FN이 0이 되니까, Recall 수식에 따라 100%가 나온다.
Confidence Threshold에 따른 Precision과 Recall의 변화와, 이를 응용해서 Detection의 대표적인 성능 지표인 mAP를 구하는 방법은 별도의 글에서 다룬다.