아래의 결과는 YOLOv5의 Pretrained된 모델을 이용해서 transfer learning 시킨 후 validation한 결과이다. 여기에서 당신은 어떤 정보를 얻을 수 있는가? Object detection 결과를 읽어낼 수 있는 핵심 요소인 AP에 대해서 정리해 보자. 간단히 정리하자면 Average Precision은 0에서 1사이의 recall value에 대한 average precision(평균 정밀도)를 의미한다.
* 결과 해석
1. Class = Object class
2. Images = No. of images for validation
3. Instances = No. of class in validation dataset images
4. P = Precision
5. R = Recall
6. mAP50 = IoU 0.5이상 값을 가지는 prediction을 True Positive로 설정한 클래스 별 AP값
7. mAP50-95 = IoU 0.5부터 0.05 간격으로 0.95까지 설정 된 값 이상의 데이터에 대해서 prediction을 True Positive로 설정하고 각각 독립적으로 수행한 후(AP50, AP55, ...AP95) 이를 평균한 클래스 별 AP값
Object detection은 image classfication과는 다르게 이미지에 나타나고 있는 사물의 label이 무엇인지에 대해 예측하는 단순한 문제를 뛰어넘어 현재 사물의 이미지 내의 위치를 bounding box로 제대로 나타낼 수 있는지를 테스트한다. 그렇다면 Label(정답)과 내가 예측한 bounding box가 얼마나 잘 일치하는지는 어떻게 평가할 수 있을까? 이를 위해서는 Precision과 Recall 그리고, IoU(Intersection over Union)의 개념이 필요하다.
Precision(정밀도) 와 Recall(재현율)을 정의해 보자.
$$Precision ={TP \over TP+FP}$$
$$Recall = {TP\over TP+FN}$$
* TP = True positive, TN = True negative, FP = False positive, FN = False Negative
수식에 내포되어 있는 의미를 따져보자.
Precision(정밀도)는 양성라고 예측한 수(TP+FP) 중에 실제로 양성인 수(TP)의 비율을 의미한다. 독감을 예로 들자면 독감에 걸린 것을 독감이라고 정확히 예측한(TP) 수치에 독감이 아닌데 독감이라고 예측한(FP) 수치를 더한 수인 독감 양성 예측자(TP+FP) 중에서 독감에 걸린 것을 독감이라고 정확히 예측한(TP) 비율이다.
Recall(재현율)은 실제로 샘플내에 존재하는 양성(TP+FN) 중에 실제 양성인 수(TP)의 비율의 의미한다. 마찬가지로 독감을 예로 들면 실제로 독감에 걸려있는 수(TP+FN) 중에 실제로 독감에 걸린 수(TP)의 비율이다.
따라서, 재현율이 높다고 한다면 실제로 독감에 걸린 사람의 검출율이 높은 것이고, 정밀도가 높다고 하면 양성이라고 예측한 사람중에 양성의 비율이 높은 것을 의미한다.
IoU(Intersection over Union)의 개념을 상당히 간단하다. 정답 Bounding box(아래 그림 빨간 Box)와 예측 Bounding box(아래 그림 파란 Box)의 Area를 기준으로 값을 계산한다. 두 개의 Area 면적을 합한 것과 두 개의 Area 교차 면적의 비율로 정의된다. 수식으로 나타내면 다음과 같다.
$$IoU = {area of Intersection \over area of Union}$$
본격적으로 AP로 들어가기 앞서서 Precision-Recall Curve에 대해서 이야기 해보자. Precision-Recall Curve에서 쓰이는 중요 개념중 하나는 Confidence level로, 학습 모델 예측 결과물의 threshold 역할을 한다. 이해를 쉽게 하기 위해 분류(classification) 모델 이야기를 해보자. 분류 모델은 ML/ DL을 통해서 data를 통한 규칙을 학습하여 들어오는 input에 대해서 category별 분류로 구분하는 결과를 도출하는데, 다중 분류에서 사용하는 softmax가 각 class category 별로 예상 확률을 도출해 준다. 예를 들자면, 모델이 강아지:0.7, 새:0.2, 고양이:0.1의 확률 분포를 뽑아준다면 현재 input이 강아지일 확률은 0.7로, 새일 확률은 0.2로 고양이일 확률은 0.1로 예측한다는 의미이다. 이 값이 크다면 학습 모델이 더 강하게 현재 분류를 확신한다는 의미다.
그렇다면 이 분류 모형에서 threshold를 0.5로 준다면 어떻게 될까? 이 모델은 현재의 input을 강아지로 예측할 것이다. 그럼 threshold를 0.8로 주게 된다면? 이 모델은 현재의 input에 대해서 예측을 수행할 수 없다. 즉, 최대 확률인 0.7이threshold인 0.8보다 작게 되어 예측을 수행할 수 없다는 의미가 된다. 이 이야기는 Precision과 Recall로 연결될 수 있는데 threshold 역할을 하는 confidence level이 높아지게 된다면 모델은 강한 확신에서만 분류를 수행하므로 정밀도(Precision)이 커지게 되고, 재현율(Recall)은 작아질 수 밖에 없다. 반대로, confidence level이 낮아지게 된다면 모델은 잘못된 예측을 할 확률이 높아지게 되고, 정밀도(Precision)는 작아지게 되고, 재현율(Recall)은 커지게 된다. Confience level에 따른 정밀도와 재현율은 상호 trade-off 관계에 있다.
Object detection에도 마찬가지 이야기가 적용된다. 본격적으로 Confidence level에 따른 정밀도(Precision)을 이야기하기 전에 Object Detection에서 TP(True positive) / FP(False positive) 이야기를 먼저 해보자.
현재 Object detection을 위한 dataset에는 총 20개의 object가 있고 그중에 10개의 detection data가 위와 같이 들어왔다고 가정해 보자. 여기에서 Target은 True label이고, predict는 학습 모델이 도출한 분류 결과이다. Target과 predict 마지막 숫자는 해당 레이블의 현재 물체 번호이다. 'apple'로 예를 들자면 한 데이터셋 내부에 여러가지 'apple'이 있을 수 있지만, 그 중에 1번째 등장하는 'apple'을 의미하며, 등장 횟수가 많아질 수록 숫자는 증가한다. 이해를 위해 편의상 도입한 내용이니 큰 의미는 두지 말자.
results는 예측 결과가 맞았다 틀렸다를 의미한다. 분류 문제였다면, Target label과 predict label만 비교해서 명확하게 구분할 수 있을 것이다.(label뒤의 번호도 필요없다. 단순히 어떤 class인지만 도출하면 되니까.) 그런데, Object detection 모델은 조금 복잡하다. 같은 class의 object라도 현재 처리되는 이미지에 같은 클래스가 2개 이상일 수 있고, object의 boundary area가 맞았는지를 확인해야 하기 때문이다.
여기서 약간은 혼동될 수 있는 results의 TP / FP 중에서 results가 FP로 결정되는 3가지 경우를 먼저 살펴보자. 아래 3개의 경우에 해당하지 않으면 TP라고 볼 수 있다.
1. 목표 레이블과 타겟 레이블이 다른 경우 (Target label != predict label)
: 2번 데이터는 Target label이 'beef1'인데 Predict label은 'bread1'으로 인식했다. 인식한 물체 자체가 다르면 bounding box자체의 비교는 필요 없이 FP가 된다.
2. IoU 기준이하일 경우
: 위에서 설명한 것과 같이 True bounding box과 Predict bounding box의 면적으로 계산되는 수치인 IoU값의 기준으로 기준 이하의 데이터는 FP로 처리된다. 예를 들어 IoU가 0.5라고 한다면, 0.5이하의 IoU 값을 가지는 detection은 모두 FP로 처리된다.
3. 동일한 객체에 대한 1번 이상의 예측에서 confidence level이 더 낮은 경우
: 0번과 5번 데이터는 1번, 2번 기준을 모두 만족한다고 해보자. 그럼 5번 데이터는 왜 FP일까? 이유는 동일한 객체에 대해서 2번 이상 예측된 경우는 예측 결과 confidence level을 비교해서 낮은 것을 FP 처리하는데 있다. 동일한 Object에 대해서 2번 이상의 동일한 예측이 여러번 가중될 경우 모두다 TP로 처리한다면 해석에 문제가 있지 않을까?
" Multiple detections of the same object in an image were considered false detections e.g. 5 detections of a single object counted as 1 correct detection and 4 false detections — Source: PASCAL VOC 2012 paper "
자 이제 우리는 Confidence level에 따른 정밀도(Precision)를 이야기 할 준비가 되었다. 본격적으로 이야기 해보자. Confidence level에 따른 정밀도를 계산하기 위해서 dataset을 confidence level 기준으로 정렬하는 것이 이해하기 편하다. 아래 데이터 셋을 보자.
Confidence level을 95% 기준으로 잡았다고 해 보자. 이를 만족하는 데이터는 1개 밖에 없고, 이때의 Precision은 1.0, Recall은 0.05 다.
$$ Precision = {TP \over TP+FP} = {1 \over 1+0} = 1.0 $$
$$ Recall = {TP \over TP+FN} = {1 \over 20} = 0.05 $$
Confidence level이 73%라고 한다면? 이를 만족하는 데이터는 5개이고, 계산해 보면 이때의 Precision은 0.8, Recall은 0.2다.
$$ Precision = {TP \over TP+FP} = {4 \over 4+1} = 0.8 $$
$$ Recall = {TP \over TP+FN} = {4 \over 20} = 0.2 $$
이를 Confidence level별로 정리하면 하기와 같고, 이를 이용해서 Precision-Recall Curve를 그려보자.
Precision - Recall Curve를 보면, ZigZag 패턴을 보이게 된다. 보통 AP를 계산하기에 앞서서 하기와 같이 Zigzag 패턴을 아래와 같이 smoothing 하게 된다. 왜 이런 작업을 하게되는 걸까?
이런 작업을 수행하고 나면 Recall이 증가함에 따라 Precision이 단조감소하게 되는 것을 확인할 수 있다. 이런 작업을 하게 되면 Confidence level의 작은 변화에 결과의 Precision이 왔다갔다 출렁이는 경향이 줄어들게 된다. 위의 예제에서 Recall 0.25와 Recall 0.2의 Confidence level차이는 3밖에 되지 않는다. 만약 3이 아니라 1이라면, 아니 0.1이라면? Confidence level의 작은 변화에 Precision이 흔들리는 것은 좋은 경향이 아니다. 또한 이전에 말한 것과 같이 Precision과 Recall은 trade off 관계라고 했다. 즉 Recall이 증가하면 Precision은 감소하는 경향이라는 말이다. 위의 zigzag 패턴은 trade off 관계에 위배된다. 따라서, 일반적인 경우에 smoothing을 진행하게 되며, 이를 수식으로 표현하면 아래와 같다.
$$ p_{interp}(r) = \displaystyle\max_{\tilde{r} \geq r}p(\tilde{r}) $$
본격적인 AP 계산에 대해서 이야기 해보자. 크게 2가지 방법으로 분류할 수 있다. 하나는 Interpolated AP이고 다른 하나는 AUC(Area Under Cover)이다.
<Interpolated AP>
PASCAL VOC는 Object detection을 위한 유명한 데이터 셋이다. Pascal VOC2008 대회에서 11개의 Point에 대한 평균값을 사용하는 interpolated AP 방법을 사용했다. 아래 그래프에서 처럼, recall값을 기준으로 0.0, 0.1, 0.2, ... 0.9, 1.0의 11개 recall값에 대한 precision값을 단순하게 평균을 이용해서 구하는 방법이다.
이를 수식으로 표현하면 다음과 같다.
$$ AP = {1 \over 11} \sum_{r \in \{0.0,...,1.0\}} AP_r = {1 \over 11} \sum_{r \in \{0.0,...,1.0\}} p_{interp}(r) $$
where
$$ p_{interp}(r) = \displaystyle\max_{\tilde{r} \geq r}p(\tilde{r}) $$
수식 그대로 값을 계산하되, 만약 Object class가 10개라고 하면 클래스 별로 10개의 AP결과를 얻을 수 있고, 클래스를 구분하지 않고 모든 Object의 AP를 구할수도 있으면 이는 흔히 mAP(mean Average Precision)이라고 부른다. 만약 특정 recall값에서의 precision값이 매우 작아지게 되면 precision-recall curve가 단조감소 하므로, 그 이후의 recall값에 대해서는 0으로 간주하고 더는 계산하지 않는다.
이러한 방식은 2가지 단점이 있는데 첫 번째는 정확한 precision값을 계산하기 어렵다는 것이고, 다른하나는 AP값이 작은 dataset에 대해서는 차이점을 구분하기 어렵다는데 있다. 이를 보완하기 위한 방법으로 PASCAL VOC2008이후 부터는 AUC 방법을 이용하여 AP 계산을 수행하게 된다.
<AUC(Area Under Cover)>
해석 그대로 Precision-Recall graph의 그래프 직선 아래 면적을 더한것을 의미한다. Precision의 값과 Recall 값 모두 Max값이 1이기 때문에 면적은 항상 0~1사이로 주어지게 된다. 아래 그래프의 면적을 구해보자.
$$ AP = \sum_{(r_{n+1} - r_{n})}p_{interp}(r_{n+1})$$
where
$$ p_{interp}(r_{n+1}) = \displaystyle\max_{\tilde{r} \geq r_{n+1}}p(\tilde{r}) $$
위의 공식대로 면적을 구해보면 AP = (0.2*1.0) + (0.83*0.05) + (0.75*0.05)+(0.70*0.05) = 0.314 가 도출된다.
<COCO dataset>
Pascal VOC 데이터는 정말 오래된 데이터셋이고, 근래의 Object detection은 주로 COCO dataset으로 이루어진다. COCO dataset은 아래와 같이 12개의 평가 metric이 주어진다. Precision과 Recall중에 보통은 Precision을 많이 사용한다. 아래의 Metric에서 AP의 값은 다음과 같이 설명되어 있다.
AP at IoU=.50:.05:.95, 해석은 IoU 0.5에서부터 0.05간격으로 늘려서 0.95까지 설정한 AP값의 평균이라는 의미다. 보통 PASCAL VOC에서 사용한 IoU = 0.50 뿐만 아니라 0.95까지 0.05씩 늘려가며 평가하고 평균한 값을 사용한다. COCO dataset의 클래스가 80개이기 때문에 80개의 AP값이 주어질 것이고 이를 다시 평균하여 사용하기 위해 mAP값을 표현할 것 같지만, COCO dataset에서는 아래와 같이 문맥에 맞추어 mAP와 AP를 사용한다고 안내되어 있다.
AP is averaged over all categories. Traditionally, this is called “mean average precision” (mAP). We make no distinction between AP and mAP (and likewise AR and mAR) and assume the difference is clear from context.
COCO dataset에서는 AP 계산을 위해 아래 params에서 보면 알 수 있듯이 101개의 recall threshold에 따른 Interpolated AP를 사용한다. 데이터 셋마다 평가 기준이 다를 수 있기 때문에(이미지넷에서는 AUC) 확인해 보는 편이 좋다. 하지만, 어떤 식의 AP 계산이건 간에 Interpolation 아니면 AUC로 이루어 지므로, 이를 염두에 두고 판단하자.
참고 URL
https://jonathan-hui.medium.com/map-mean-average-precision-for-object-detection-45c121a31173
mAP (mean Average Precision) for Object Detection
AP (Average precision) is a popular metric in measuring the accuracy of object detectors like Faster R-CNN, SSD, etc. Average precision…
jonathan-hui.medium.com
https://yanfengliux.medium.com/the-confusing-metrics-of-ap-and-map-for-object-detection-3113ba0386ef
The Confusing Metrics of AP and mAP for Object Detection
If you are working on an object detection or instance segmentation algorithm, you have probably come across the messy pile of different…
yanfengliux.medium.com
https://towardsdatascience.com/on-object-detection-metrics-with-worked-example-216f173ed31e
On Object Detection Metrics With Worked Example
AP, mAP, AP50 among other metrics explained with an example.
towardsdatascience.com