[Yolov8] 하이퍼파라미터 튜닝 UnboundLocalError 극복하기
"Ultralytics YOLO 모델을 사용하는 하이퍼파라미터 튜닝 과정에서 직면한 UnboundLocalError 해결 과정을 공유합니다.
위 오류는 .tune() 메소드 내에서 ckpt_file이 할당되기 전에 참조될 때 발생했습니다. 튜닝 반복 중 체크포인트 파일 경로가 올바르게 설정되지 않아 발생한 문제였죠.
위 문제를 해결하기 위해 ultralytics 라이브러리 재설치, 종속된 라이브러리들 재설치를 해보았지만 해결하지 못 했었습니다.
yolov8 공식 깃허브의 issue에서 https://github.com/ultralytics/ultralytics/pull/6614/commits/3a71f396759c7017275662556085212f8d53e6fe
`ultralytics 8.0.220` fix UnboundLocalError in tuner.py by mshamrai · Pull Request #6614 · ultralytics/ultralytics
Hi! I've experienced an error in tuner.py: Traceback (most recent call last): ...
github.com
위 해결 방법을 찾게 되었고, 이 방법을 참고하여 해결할 수 있었습니다.
문제의 핵심은 튜닝 과정에서 모델의 체크포인트 파일을 참조하기 전에 해당 파일이 존재하는지 또는 생성될 위치가 올바른지를 확인해야 했다는 것입니다. 수정 과정은 다음과 같습니다:
tuner.py 파일에서 ckpt_file의 위치를 결정하는 로직을 try-except 블록 바로 앞, 즉 모델 학습을 시도하기 전으로 이동시켰습니다.
이렇게 함으로써, 학습 실패 시 ckpt_file에 대한 참조가 시도되기 이전에 이미 해당 변수가 할당된 상태를 보장할 수 있었습니다.
이 수정을 통해, 하이퍼파라미터 튜닝 반복 과정이 원활하게 진행될 수 있도록 만들었습니다.
코드는 단순하지만, 이 과정을 통해 복잡한 디버깅 문제를 해결하는 데 큰 도움이 되었습니다. 이 경험을 통해 학습 프로세스가 중단되었을 때도 필요한 변수가 적절히 초기화되어 있어야 한다는 중요한 교훈을 얻었습니다. 이러한 접근법은 향후 유사한 문제에 직면했을 때 신속하게 대처하는 데 도움이 될 것입니다."