git을 이용해서 github 팀 리포지토리를 생성하고 업로드를 진행하여 작업.
Geforce RTX 3070 SUPER환경에서 작업 구축하고 훈련을 돌려봄.
(이유는 모르겠지만 버전 호환성에 대해서는 따로 문제 없을 텐데도 해당 PC에서는 CUDA버전을 11.8로 해야지 먹힘.. -< 호환성 문제였던 것으로 확인.)
+ git을 이용하여 코드를 업로드 하면 업로드하고 다운로드 받는 과정에서 코드가 조금 이상하게 변형되는 부분이 있어 이 부분은 해결이 필요.
버전 관련 확인 링크 2개.
https://en.wikipedia.org/wiki/CUDA
https://nanunzoey.tistory.com/entry/torchcudaisavailable-False-%ED%95%B4%EA%B2%B0
GPU를 TCC로 모드를 전환하고 싶었으나 Geforce는 그래픽에만 신경을 쓴 GPU라 학습용 모드인 TCC로 전환하는 기능 자체가 없다고 하여.. 그냥 생으로 돌리기 시작. (일반적으로 학습을 돌리면 GPU의 30%를 사용함.)
https://quasarzone.com/bbs/qf_vga/views/3912681
이전에는 box_loss와 seg_loss등의 loss값들이 뜨지를 않았으나 여기서는 뜨는 기묘한 경험을 함.
원래 자리에서 작업할 때 4Epoch진행중 에러가 나서 학습이 끊긴 이미지.
box_loss와 cls_loss와 dfl_loss가 모두 0으로 나온다.
추가적으로
이 에러는 windows OS사용시 발생하는 오류로 학습에서 파라미터 값중 num_worker(YOLO에서는 worker로 한다.)의 값을 설정해주었을 때 windows환경에서 sqawn을 사용하는데 이 때 부모 프로세스와 자식 프로세스를 구별하지 못하여 프로세스를 중복하여 불러오는 재귀 호출이 발생한다고 한다.
해결법
1. if __name__ == '__main__':을 사용하여 부모 프로세스임을 지정함과 동시에 freeze_support()로 파일 실행에 대한 자원을 추가하는 함수를 넣어주어 재귀 호출을 방지하고 자원을 늘린다.
2. num_worker = 0으로 그냥 일하는 수를 하나로 줄인다.
num_worker에 대해 설명해주는 링크.
https://velog.io/@seokjin1013/PyTorch-numworkers%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC
1줄 요약 : GPU에 학습용 dataset을 CPU를 통해 전달해주는데 CPU의 코어의 수를 일반적으로 num_worker로 지정한다.
1 Epoch을 못벗어나고 끊긴 학습...
에러 코드를 검색해보니 일반적으로 NVIDIA CUDA를 지원하는 GPU에서 발생하는데, 특히 torchvision의 nms (Non-Maximum Suppression) 함수를 호출할 때 CUDA 백엔드가 제대로 동작하지 않을 때 발생할수 있다고...
https://freeinformation.tistory.com/entry/YOLOv8-torch-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-Could-not-run-%E2%80%98torchvisionnms%E2%80%99-with-arguments-from-the-%E2%80%98CUDA%E2%80%99-backend
글에서 나온 것과 같이 Version 뒤에 + CUDAx.xx로 버전이 있어야 하는데 없는 것을 확인.
cuda_toolkit과 각 패키지들을 pip3로 설치(conda로는 뜨지 않아 pip으로 진행)
OMP: Error #15: Initializing libiomp5md.dll가 떠 확인해보니
2개가 있는 것을 확인 하나를 제거해줌.
다시 run_train.py 실행
26 Epoch까지 진행되고 있는 모습. loss값은 전체적으로 계속 낮아지고 있는 모습(0.01씩 변화가 있는 것이긴 하지만 Epoch을 늘리면 해결될 모습으로 보인다.)
학습이 완료되고 30 Epoch를 돌리는데 10시간 정도 걸린 것을 확인.
평가 지표인 mAP50-95는 전체 0.463의 acc값을 가지고 class car의 경우 0.555, bus의 경우 0.371의 acc값을 가진 것으로 확인.
평가 지표에 사용된 데이터셋은 val 데이터셋이다.
학습이 완료된 이후 생긴 폴더 내부 파일들.
mAP에 대한 그래프는 다음과 같이 출력되었다.
한번 생성된 best.pt로 Seg_inference_icon.py를 돌려보기로 함.
전체적으로 보면 아에 감지 자체를 못하는 경우와 멀리있는 물체를 하나 인식 못하는경우 모든 차량을 인식 잘하는 경우 등의 여러가지 test값이 나왔다.
폴더를 주면 모든 이미지에 대해 적용해야 하는데 Icon의 이미지를 적당한 위치에 넣으려는 도중 계산 상에서 0으로 나누어 발생하는 에러가 발생함.
Run model : 모델을 사용해 추측하는데 걸린 시간.
Post Process : 후처리 작업에 걸린 시간.
Plot Results : 모델을 시각화 하는데 걸린 시간.
첫댓글 - 실시간 그래프 기능추가(로스, 정확도, 훈련, 검증)
- 훈련결과 모델파일 증식옵션,모델 등 훈련조건 상세정보를 같이 저장하여 관리잘할 것
모델의 파라미터 훈련 조건 증식 옵션 등은 훈련 완료 시 폴더 내부에 args라는 yaml파일로 저장됩니다.
실시간 그래프 기능은 추가하도록 하겠습니다.