[Object Detection] 4-4. YOLO v3 : evaluation

happy_quokka·2024년 1월 4일
0

딥러닝

목록 보기
15/18

0. evaluation

  • 모델이 잘 학습되었는지 성능을 측정하고 평가하는 것
  • training 중간에 수행하거나 training 후에 수행

1. eval일 때 model의 output 변경

  • yolo layer의 output shape을 변경
  • sigmoid와 exponential을 적용하여 실제 bounging box의 좌표를 뽑아낼 수 있도록 설정한다
  • 결과 shape [batch, box수, 13]
    • box수 : 3가지의 grid 수(ex. 19x19 + 38x38 + 76x76) x anchor 수(3)

2. NMS (Non Maximum Suppression)

  • utils/tools.py의 non_max_suppression() 함수
  • 겹쳐있는 box의 수를 줄여주는 것
    • GT box과 가장 많이 겹쳐진 box를 선택한다
    • IOU와 예측한 objectness를 기반으로 fitering한다
  • 기본적으로 한 gird에 3개의 anchor box로 예측하고 layer가 3개이기 때문에 하나의 object에 9개의 box가 생긴다
  • 이를 하나로 줄여주기 위해 NMS를 사용한다
  • 결과
    • batch 수 만큼의 list
    • list는 [box 수, 6]으로 구성
    • 6 : xmin, ymin, xmax, ymax, max_class_conf, max_class_idx

3. best bbox와 GT box 비교

  • train/trainer.py의 run_eval() 함수
  • TP, FP 구하기 -> mAP, recall의 값을 구하기 위해서 계산한다

3-1. targets의 box 정보 변환

  • targets의 box 값은 0~1 사이로 normalize되어 있다
  • cxcy 형식의 좌표를 minmax 형식으로 변환
  • normalized된 좌표를 image width, height에 맞게 unnormalization 수행

3-2. true_positive 추출

  • utils/tools.py의 get_batch_statistics() 함수
  • 예측한 box와 target box의 iou가 threshold 이상이면 TP
  • return
    • [batch, true_positive, pred_scores, pred_labels]
    • true_positive, pred_scores, pred_labels 수는 예측한 box 수

3-3. AP 계산

  • utils/tools.py의 ap_per_class() 함수
  • precision, recall, AP, f1, ap_class 값을 return
  • objectness의 confidence 값으로 정렬한 후 계산
  • precision=TPnumber_of_GTprecision = \frac{TP}{number\_of\_GT}
  • recall=TPTP+FPrecall = \frac{TP}{TP + FP}

3-4. 표로 AP 값 출력

0개의 댓글