728x90
반응형

 

 

 

이번 포스팅에서는 객체 검출(Object Detection)의 성능을 어떻게 평가하는지에 대해서 다루고자 한다. 먼저 "정확도"라는 개념은 주로 정답(Ground Truth, 이하 GT)과 모델이 예측한 결과(Prediction) 간의 비교를 통해 이루어진다.

 

객체 탐지 정확도 평가 지표인 mAP(mean Average Precision) 를 다루기 전에 이미지 분류(Image Classification)에서는 어떻게 정확도 평가를 수행하는지 알아볼 필요가 있다. 이미지 분류는 GT가 이미지의 클래스이기 때문에 이미지가 딱 주어졌을 때 이 이미지가 GT의 클래스와 일치하는지 불일치하는지를 비교하게 된다.

 

반면 객체 검출에서는 이미지를 분류하는 문제와 달리 여러 객체들이 존재하는 이미지 내에서 객체가 어디에 위치하는지 바운딩 박스(Bounding box)로 찾고, 찾은 위치에 해당하는 박스 내부의 객체가 실제 GT에 있는 클래스와 일치하는지의 여부를 비교한다. 객체 검출은 클래스를 제대로 예측하였는지 부터 판단하여 예측하지 못하면 실패로 간주한다. 클래스를 올바르게 예측하였다면 바운딩 박서의 정확도를 기준으로 정확도를 측정하게 된다. 이 때 정확도를 어떻게 측정하는지 설명하겠다. 

 

 

 

IoU (Intersection Over Union)

 

IoU란 두 경계 상자간의 겹침을 평가하는 Jaccard Index 를 기반으로 하는 측정 기법이다. 여기서 두 경계 상자간이라 함은 GT 박스와 검출된(예측된) 박스를 뜻한다. IoU 를 적용하면 탐지 결과가 유효한지 아닌지를 알 수 있으며 식으로 표현하면 아래와 같다. 

 

 

객체 검출에서 바운딩 박스를 얼마나 잘 예측했는지는 IoU 지표를 통해 측정하게 된다. 이는 객체 검출 문제 뿐만 아니라 이미지 분할(Image Segmentation)문제에서도 사용된다. 즉 객체 검출에서는 GT 와 예측 값 간의 교집합과 합집합을 통해 IoU를 측정하게 된다. 

 

 

이 때 사용되는 몇 가지 기본 개념이 있다. 

 

 

  • True Positive (TP) : 맞다고 추측하고 실제로 맞음. IOU >= Threshold
  • False Positive (FP) : 맞다고 추측하고 실제로는 틀림. IOU < Threshold
  • False Negative (FN) : 아니라고 추측하고 실제로는 맞음. Ground Truth를 아예 detect 못함
  • True Negative (TN) : 아니라고 추측하고 실제로 아님.

 

여기서 Threshold 는 일반적으로 50%, 75%, 95%로 설정된다. 

 

 

정밀도(Precision) 

정밀도는 주로 재현율(Recall)과 같이 사용된다. 예측된 결과가 얼마나 정확한지를 나타낼 수 있는 지표이다. 즉 검출된 것들 중에서 정답을 맞춘 것들의 비율이 어느정도인지를 알 수 있기에 검출 결과가 얼마나 정확한지를 알 수 있다. 

 

 

 

 

재현율(Recall)

재현율은 GT 중에서 얼마나 정답을 맞추었는지를 나타낸다. 즉 검출되어야 할 객체들 중에서 제대로 검출된 것의 비율을 뜻한다.

 

 

 

 

 

 

 

정밀도와 재현율은 반비례 관계!

 

정밀도만으로 객체 검출 알고리즘의 성능을 평가하는 것은 적절치 않으며 재현율만으로 객체 검출 알고리즘 성능을 평가하는 것도 적절치 않다. 정밀도와 재현율은 반비례 관계를 갖기 때문에 이 두 값을 모두 고려하여 정확도를 평가하는 것이 좋다. 그래서 나온 것이 precision-recall 곡선 및 AP(Average Precision) 개념이다. 

 

아래는 recall 과 precision 간의 관계를 보여주는 그래프이다. 

 

 

 

아래는 recall 과 IOU threshold 간의 관계를 보여주는 그래프이다. 

 

 

 

 

 

 

 

 

AP (Average Precision) 와 mAP (mean Average Precision)

 

Average Precision의 계산은 Recall 을 0부터 0.1 단위로 증가시켜서 1까지 (총 11개의 값) 증가 시킬 때 필연적으로 Precision 이 감소하게 되는데 각 단위 마다 Precision 값을 계산하여 평균을 내어 계산한다. 즉 11가지의 Recall 값에 따른 Precision 값들의 평균을 AP라고 한다. 하나의 클래스 마다 AP 값을 계산 할 수 있으며 전체 클래스 갯수에 대해 AP를 계산하여 평균을 낸 값이 바로 mAP 이다. 

 

AP는 Precision-Recall 그래프에서 그래프 선 아래쪽의 면적으로 계산되는데 보통 계산 전에 PR 곡선 을 살짝 보정해준다. PR 곡선을 단조적으로 감소하는 그래프가 되게 하기 위해 다음과 같이 바꿔주는 것인데, 곡선에서 흔들림의 영향을 줄이는 것이라고 보면 된다. 이 때 AP를 측정하기 위해 보간하는 방법에는 2가지 방식이 있다.

 

 

1. 11개 포인트 보간 (주로 사용하는 보간법)

 

11개 포인트인 0, 0.1, 0.2, ... , 1 의 세트에서 정밀도를 평균화하여 보간하는 것이다. 

이와 같은 방식을 사용하면 아래와 같은 값이 산출된다. 

 

 

 

 

 

2. 모든 포인트에서 수행된 보간

 

 

 

위 예시에서 총 면적은 아래와 같이 계산 할 수 있다. 

 

 

 

 

 

 

두 가지 방법을 적용한 결과는 각각 다르게 나타난다. (11개 포인트를 이용하여 보간하는 것이 더 좋은 성능을 보임)

 

 

 

 

 

 

 

 

 

mAP 계산하기

 

github.com/rafaelpadilla/Object-Detection-Metrics

 

rafaelpadilla/Object-Detection-Metrics

Most popular metrics used to evaluate object detection algorithms. - rafaelpadilla/Object-Detection-Metrics

github.com

 

위 깃에 mAP 를 계산하는 방법에 대해 아주 자세히 나와 있으며, 대략적인 방법은 다음과 같다. 

 

1. GT 파일들을 만들기

2. 검출된 결과들을 담은 파일 만들기

3. pascalvoc.py 실행 (VOC 데이터 세트에서의 메트릭을 사용한 것)

 

참고로 각 COCO 데이터 세트와 VOC 데이터 세트에서의 메트릭은 아래 링크를 참조하기를 바란다. 

 

COCO 데이터 세트에서의 Metrics : cocodataset.org/#detection-eval

VOC 데이터 세트에서의 Metrics  : host.robots.ox.ac.uk/pascal/VOC/voc2012/htmldoc/devkit_doc.html

 

또한 Miss rate 와 FPPI(Fals-positives per image) 개념에 대해서도 다루고 있다.

 

그리고 또한 검출된 결과들을 담은 파일을 만들 때 즉 검출 결과를 산출할 때는 사용하고 있는 객체 검출기의 임계값을 사용하여 산출하면 된다. darknet 같은 경우 기본 임계값은 0.24를 사용하며 VOC PASCAL 은 0.5 를 사용한다. 또한 NMS 도 0.45 값을 이용하여 사용하고 있다. (관련 이슈)

 

 

 

 

 

 

 

 

참고자료 1 : bskyvision.com/465

 

물체 검출 알고리즘 성능 평가방법 AP(Average Precision)의 이해

물체 검출(object detection) 알고리즘의 성능은 precision-recall 곡선과 average precision(AP)로 평가하는 것이 대세다. 이에 대해서 이해하려고 한참을 구글링했지만 초보자가 이해하기에 적당한 문서는 찾

bskyvision.com

참고자료 2 : hoya012.github.io/blog/Tutorials-of-Object-Detection-Using-Deep-Learning-how-to-measure-performance-of-object-detection/

 

Tutorials of Object Detection using Deep Learning [4] How to measure performance of object detection

Deep Learning을 이용한 Object detection Tutorial - [4] How to measure performance of object detection

hoya012.github.io

참고자료 3 : blog.zenggyu.com/en/post/2018-12-16/an-introduction-to-evaluation-metrics-for-object-detection/

 

An Introduction to Evaluation Metrics for Object Detection | NickZeng|曾广宇

Introduction The purpose of this post was to summarize some common metrics for object detection adopted by various popular competetions. This post mainly focuses on the definitions of the metrics; I’ll write another post to discuss the interpretaions and

blog.zenggyu.com

참고자료 4 : github.com/Cartucho/mAP/issues/43

 

Is there any way to calculate log-average miss rate? · Issue #43 · Cartucho/mAP

Hello, I want to evaluate my prediction on mine dataset with YOLOv3 which is using the log-average miss rate metric? Could you guide me how to do it? Thanks.

github.com

 

728x90
반응형