2022. 2. 25. 13:24ㆍ프로젝트/KFood
https://github.com/ultralytics/yolov3/wiki/Train-Custom-Data
GitHub - ultralytics/yolov3: YOLOv3 in PyTorch > ONNX > CoreML > TFLite
YOLOv3 in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov3 development by creating an account on GitHub.
github.com
일단 우리가 tmux session에 어제 실행시켜놓고 잤던 train.py 를 실행시키는 기본 코드는 다음이다
python train.py --img 640 --batch 16 --epochs 5 --data kfood.yaml --weights yolov3.pt
저 각 옵션들에 대한 내용은 밑에 설명하겠다.
train.py에는 크게 4가지 함수가 있다.
실행 순서는 opt라는 전역?변수에 parse_opt 함수를 가장 먼저 실행시켜서 받는다.
그리고 그 opt들을 main함수 안에 넣어준다.
python train.py --img 640 --batch 16 --epochs 5 --data kfood.yaml --weights yolov3.pt
opt는 이 뒤에 --하고 붙는 애들안에 넣어주는 옵션값들이다. 이 옵션값들에 대한 설명은 아래 parse_opt함수에 정의되어 있다.
여기서 지금 우리가 바꾸려는 것은 다음과 같다.
1. epoch이 원래 어제 돌려놨던 게 5까지 하고 끝났어야 했는데 4에서 끝났다.
2. wandb에서 이름을 임의의 값으로 주지 말고 lr 정보나 batch사이즈 등 파라미터 정보를 포함한 이름으로 만들어주자.
일단 2번의 경우 함수를 타고타고 들어가서 다음과 같은 곳에서 옵션을 발견했다.
utils/loggers/wandb 안에 wandb_utils.py라는 파일에서 wandb.init 함수 속에 opt.name을 기본인 exp로 주지 않으면 그 이름으로 wandb run이름이 바뀐다고 한다! 따라서 --name 옵션을 추가한다.
그리고 1번의 경우.. --epochs 옵션을 건드려야 할 것 같은데.. 일단 어제 밤에 진행됐던 4 epoch때의 best.pt를 이용해서 거기서 시작해서 --weight를 사용하고, epochs는 1로 하면 나머지 1개 epoch을 마저 돌 것 같다는 생각이 든다.
그래서 코드를 다음과 같이 수정한다.
python train.py --img 640 --batch 16 --epochs 1 --data kfood.yaml --weights ../yolov3_what/runs/train/exp4/weights/best.pt --name exp5
이렇게 했더니 안 된다..
python train.py --img 640 --batch 16 --epochs 1 --data kfood.yaml --weights best.pt --name exp5
이렇게 바꾸고 best.pt를 train.py와 같은 위치에 오게 해서 돌려보자.
아아..
epoch을 1으로 했더니 이런 오류가 뜨는 것 같다..
원작자 GitHub의 issue로 UnboundError: local variable 'epoch' referenced before assignment 를 검색
아하.. 내가 지금 4 epoch까지 진행했었는데 1 epochs를 진행하려고 하니까 오류가 난 것 같다
동일하게 5 epochs로 집어넣어야 될 것 같다.
진짜진짜 최종 코드
오 이어서 training이 되고 있다! 아직 1 epoch이라 train_loss등은 출력 되지 않았따.
이전까지 진행했던 4 epochs의 train loss
------------------------------------------------------------------------------------------------------------------------------
근데 wandb 그래프가 이미 한번 끊겨버려서 그냥 처음부터 다시 돌리기로 했다.
기존에 학습하다말았던 best.pt말고 우리는 전이학습이라 이미 대용량데이터로 학습되고 있던 yolov3.pt로 시작.
python train.py --img 640 --batch 16 epochs 5 --data kfood.yaml --weights yolov3.pt --name batch_16_lr_0.01
이제 학습되는 동안 train.py랑 수현님께서 만들어주시는 team_07.py, detect.py를 더 공부해보자.