(중요) 22.03.01 [kfood프로젝트] val loss, metrics 정리 및 폴더 정리 및 YOLOv3 / YOLOv5x6 성능정리표

2022. 3. 1. 13:34프로젝트/KFood

Metrics/Loss 중 더 중요하게 봐야 할 것

Precison, Recall - 실제로 맞췄냐 아니냐

loss - 정답과 예측값 차이를 계산한 것

자율 주행의 경우 loss가 낮아야 하지만 우리의 경우 precision, recall을 더 중요하게 봐야 함.

Threshold를 낮추면 신뢰성은 좀 떨어지지만 detection을 할 수 있음.

val loss

obj_loss가 class 맞추는 것

box_loss가 bbox 맞추는 것

cls_loss가 두 가지 다 보는 것

mAP 간단히

mAP_0.5 → 0.5는 IOU, 0.5 이상인 것

mAP_0.5:0.95 → 0.5 이상인 것, 0.95 이상인 것 각각 구해서 평균을 구하는 것

⇒ 지금은 mAP 0.5만 보면 될 것 같다.

----------------------------------------------------------------------------------------------------------------------------------

 

남은 공간 보기

df -h

GPU 사용량 보기

nvidia-smi

-----------------------------------------------------------------------------------------------------------------------------------

 

YOLOv3 wandb 결과들(loss, lr, recall, precision, mAP)

traing loss
lr
recall precision mAP
val loss

난 여기서 epoch 10이 더 낮고 좋은 성능인 것도 있는 줄 알았는데, 멀리보니까 epoch 30이 더 좋은 경우들이 있었음

대강 추이만 보지말고 좌표랑 smooth도 잘 확인하기 (이런식으로)

smoothing

 

---------------------------------------------------------------------------------------------------------------------------------

YOLO v5 -> yolov3가 inference가 별로 개선되고 있는 것 같지 않아서 yolov5로 training 해보자는 얘기가 나왔음.

yolo v5는 v5 nano, small, medium, large, xlarge가 있고, 커질수록 용량과 inference time?이 증가하는 대신 정확도(mAP)가 향상한다. 저 뒤에 붙은 6은 더 최신버전?이라는 뜻인 것 같았다.

YOLOv5시리즈들의 mAP와 속도
YOLOv3의 mAP와 속도 / YOLOv5의 mAP와 속도

https://docs.ultralytics.com/ -> 원작자님 사이트

 

YOLOv5 Documentation

Introduction To get started right now check out the Quick Start Guide What is YOLOv5 YOLO an acronym for 'You only look once', is an object detection algorithm that divides images into a grid system. Each cell in the grid is responsible for detecting objec

docs.ultralytics.com

---------------------------------------------------------------------------------------------------------------------------------

YOLOv5로 갈아끼워서 학습시키기 -> YOLOv5 GitHub에서 해야 된다. 다음포스팅 참고.

1. 선정한 모델 다운로드하기

yolov5l6.pt 다운완료

 

2. 코드 실행

- lr 0.002 epochs 10 , batch 8 (batch 16보다 더 정교,그러나 오래걸림) weights yolov5l6.pt

- lr을 0.002로 하는 이유는 0.01보다 더 좋은 성능이 나왔기 때문! (우리 데이터셋을 사용하면 COCO 데이터셋을 학습시킬 때보다 global minimum loss function을 찾아갈 때 보폭을 조금 더 작게)

python train.py --img 640 --batch 8 --epochs 10 --data kfood.yaml --weights yolov5l6.pt --name batch_8_0.002_epoch_5_v5l6

---------------------------------------------------------------------------------------------------------------------------------

 

Recall(metrics/mAP_0.5)

  batch 16, lr=0.01 batch 16, lr=0.002 batch 8, lr=0.01 batch 8, lr=0.002
yolov3
epochs=10
r : 0.8422
m : 0.8164
r : 0.8249
m : 0.8228
  r : 0.8475
m : 0.8328
yolov3
epochs=20
r : 0.8469
m : 0.8294
r : 0.8742
m : 0.8382
r : 0.848
m : 0.8333
r : 0.8703
m : 0.856
yolov3
epochs=30
r : 0.8592
m : 0.8421
     
yolov5x6
epochs=20
       

Precision(val/cls_loss)

  batch 16, lr = 0.01 batch 16, lr = 0.002 batch 8, lr = 0.01 batch 8, lr = 0.002
yolov3
epochs = 10
0.005606 0.004957 X 0.003889
yolov3
epochs = 20
0.004772 0.003695 0.003997 0.002719
yolov3
epochs = 30
0.004433      
yolov5x6
epochs = 20
       

 

YOLOv3에서는 lr 0.002가 epoch 20 , batch 8,16에서 모두 좋은 결과를 나타냈으나 실제 inference를 해보면 그렇게 잘 잡지는 못하는 상황이었다. 따라서 YOLOv5로 모델을 변경해 training 을 진행해보자.