인공지능을 좋아하는 곧미남

인공지능 모델들의 평가 지표에 관한 정리 본문

인공지능 개발자의 기본 소양

인공지능 모델들의 평가 지표에 관한 정리

곧미남 2021. 6. 7. 17:33

여러가지 인공지능 모델 개발을 한 후 해당 모델에 대해 평가를 해야합니다. 흔히 말해 성능 평가라고 하며, 각 모델별로 성능 지표들이 다르게 정의되어 있습니다.

 

포괄적인 인공지능 모델은 Classification, Object Detection, Segmentation이 있습니다. 저는 이 세가지 모델들의 평가 지표에 관해 설명하겠습니다.

 

오늘의 내용은 아래 목차와 같습니다.

 

< INDEX >

1. Classification Metric

 

2. Segmentation Metric

 

3. Object Detection Metric


1. Classification

분류 모델의 성능을 평가하기 위해서 아래와 같이 결과들을 구분할 수 있습니다.

이해를 돕기 위해 하나의 예시를 들어보겠습니다.

예시) 강아지와 고양이를 분류하는 모델, 강아지의 Class = 1 고양이 Class = 2

- 강아지 분류를 목적으로 한 경우를 Positive 

- 그외 분류 영역인 경우 Negative

 

- Classification 결과 구분 표.1 -

TP 강아지 Class를 예측했는데 실제 정답이 강아지 Class인 경우
TN 강아지 외의 Class를 예측했는데 실제 정답이 강아지 외의 Class인 경우
FP 강아지 Class를 예측했는데 실제 정답이 강아지 외의 Class인 경우
FN 강아지 외의 Class를 예측했는데 실제 정답이 강아지 Class인 경우

위 표에서 추출한 결과 값을 바탕으로 분류를 얼마나 잘 했는지 평가합니다.

 

- 평가 지표 종류 

 

1. Accuracy(정확도) : 모델의 결과가 참 값과 얼마나 가까운지 나타내는 지표로서 전체 데이터 수 중 올바르게 예측한 데이터의 수의 비율을 나타냅니다. 수식은 아래와 같습니다.

 

Acc = TP + TN / (P+N)

(*P + N = Total Num)

 

2. Error Rate : 정확도와 반대로 전체 데이터 중 잘못된 분류를 한 비율을 나타냅니다.

 

Err = FP + FN / (P+N)


2. Segmentation

Pixel wise Accuracy를 구하면 됩니다.

 

추후에 mIoU에 관해서 알려드리겠습니다.


3. Object Detection

일반적으로 Object detection 결과는 Rotation Bounding Box 사용 유무에 따라 Rotation되지 않는 박스 결과는 (N, 4) shape으로 (디텍션 수, [cx, cy, w, h])로 출력되고 Rotation된 박스 결과는 (N, 5) shape으로 (디텍션 수, [cx, cy, w, h ,theta])로 출력됩니다. 또한, 예측 박스마다 Class score(Confidence)와 Class Number를 출력하여 해당 box가 어떤 class를 예측하는지(Class Number) 얼마나 예측한 class를 설명하는지(Class score) 알 수 있습니다.

 

이때, 한번 더 필터링 과정을 거칩니다. 지금부터 Class score는 Confidence로 일관하겠습니다.

 

첫째로, Confidence Threshold를 정하여 Threshold보다 Confidence가 작다면 해당 예측 박스는 버립니다.

 

둘째로, NMS 알고리즘을 적용하여 가장 큰 Confidence의 box와 나머지 예측된 box와 IoU를 산정하여 IoU threshold보다 높은 예측된 박스가 있다면 버립니다. 이때, 이미지 상 object 뒤에 다른 object가 위치할 수 있다면, sub class로 나누어 nms를 실시하고 그렇지 않다면, 전체 예측 박스에 대해 NMS를 적용합니다.

 

위 두 가지 방법을 통해 예측 박스 필터링을 한 후 최종 결과를 산출 합니다.

 

객체 검출 모델은 객체가 이미지 상 어디에 위치하고 있는지 Bounding Box로 위치를 Localization해주고 검출된 박스 내에 객체가 올바르게 분류된 Class로 예측했는지를 평가 검증하여야합니다.

 

이때 예측한 Bounding Box와 실제 Ground Truth Box의 IOU 값을 계산하여 Threshold 값을 주어 Bouding Box를 잘 생성했는지 판단합니다. IOU 값은 GT BOX와 예측한 BOX 사이의 겹치는 면적을 두 BOX 총 면적으로 나누어 비율을 구한 값 입니다.

 

아래와 같이 객체 검출 Prediction, Observation 표를 작성할 수 있는데요.

TP 머신이 있다고 예측했는데, 실제로 있고 (Class일치 and iou 도 충족)
TN 머신이 없다고 예측했는데, 실제로 없을 때 (Object Detection에서는 산정 불가. 실제로 없는 객체와 비교 불가)
FP 머신이 있다고 했는데, 실제로 없을 때 (Class 불일치 or iou 불충족)
FN 머신이 없다고 예측했는데, 실제로 있을 때 (Annotation Object를 미 검출)

객체 검출 모델은 일반적으로 IoU Threshold 값을 0.5로 설정하여 Iou >= 0.5 일때는 Bounding Box를 잘 예측했다고 하고 iou < 0.5이면, 잘 예측 못했다고 평가됩니다. 그리고 Prediction object의 Class와 Annotation object의 Class가 일치해야 합니다.

 

즉, IoU Threshold 값 만족 And Class 일치 두 항목의 And 조건이 만족할 시 True Positive로 산정됩니다. 그 외는 False Positive로 산정됩니다.

 

그리고 FN은 Annotation object마다 prediction 전체 결과와 비교하여 실제 Object가 있는데 Prediction이 안된 경우를 Count합니다.

 

*실제로 본인은 FN과 TN이 헷갈렸습니다. 왜냐하면 True와 False가 annotation의 기준이 된다고 생각했습니다. 하지만, FN이 실제로 Annotation된 Object가 있으나 검출을 못한 결과를 Count 하는 겁니다.

 

따라서, 최종적으로 TP, FP, FN을 구한 뒤 아래의 수식으로 재현율(Recall), 정밀도(Precision)를 구합니다.

 

Recall : TP / (TP + FN)
Precision : TP / (TP + FP)

Recall은 Annotation 정답 중에서 머신이 맞춘 예측들의 비율이고,

Precision은 머신이 예측한 전체 예측 중에서 정답인 것의 비율입니다.

 

하지만, Recall과 Precision 각각을 고려하여 평가하는 것은 의미가 없습니다. 예를들어 Recall과 Precision은 Trade Off 관계가 있습니다. 그래서 두 값을 동시에 고려할 수 있는 조화평균을 적용한 것이 F1 Score 입니다. 따라서, 클래스 간의 데이터 불균형에 적합한 Score 입니다. 어느 한 쪽의 Class에서만 잘 검출되고 다른 클래스에서는 검출력이 떨어지면, 그건 좋은 모델이 아니겠죠?

F1 Score = 2 * (Precision * Recall) / (Precision + Recall)

 

그리고 또하나의 방법은 AP(Average Precision)를 산출하여 평가합니다. Class마다 위 두 값(Recall Precision)을 그래프의 넓이 값을 산정한 mean of class average precision (mAP)라고 많이 불립니다.

 

AP를 구하는 방법은 아래와 같이 설명됩니다.

 

1. AP를 구하기 위해 각 클래스 별로 Recall, Precision 값을 산출합니다.

2. 각 클래스의 산출된 Recall, Precision 값을 x, y 좌표로 대입하여 1차원 그래프를 그립니다.

3. 그래프의 아래 면적에 해당하는 값을 AP로 하여 계산합니다.

4. 각 Class별 AP를 평균해주어 mAP 값을 산출합니다.

 

 

 

 

본인이 구현한 코드는 아래 Git hub 참고 부탁드립니다.

https://github.com/sangheonEN/rboxcnn_detection_model/blob/main/src/inference_STS_Lee.py

함수명 함수내용
IOU_calibration TP, FP 산정하기
fn_object_cal FN 산정하기
위 두 코드에서 TP, FP, FN을 산정한 csv file을 가지고 map_code.py에서 불러와 Recall과 Precision, AP를 산정한다.
tp_fp_cal TP, FP 누적합, Recall Precision 구하기
voc_ap AP 산정 (VOC interpolation)

 

읽어주셔서 감사합니다.

Comments