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)
난 여기서 epoch 10이 더 낮고 좋은 성능인 것도 있는 줄 알았는데, 멀리보니까 epoch 30이 더 좋은 경우들이 있었음
대강 추이만 보지말고 좌표랑 smooth도 잘 확인하기 (이런식으로)
---------------------------------------------------------------------------------------------------------------------------------
YOLO v5 -> yolov3가 inference가 별로 개선되고 있는 것 같지 않아서 yolov5로 training 해보자는 얘기가 나왔음.
yolo v5는 v5 nano, small, medium, large, xlarge가 있고, 커질수록 용량과 inference time?이 증가하는 대신 정확도(mAP)가 향상한다. 저 뒤에 붙은 6은 더 최신버전?이라는 뜻인 것 같았다.
https://docs.ultralytics.com/ -> 원작자님 사이트
---------------------------------------------------------------------------------------------------------------------------------
YOLOv5로 갈아끼워서 학습시키기 -> YOLOv5 GitHub에서 해야 된다. 다음포스팅 참고.
1. 선정한 모델 다운로드하기
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 을 진행해보자.