[네부캠] Sketch Image Classification

오홍석·2024년 9월 27일
0

네부캠

목록 보기
27/28

개인 회고

이번 프로젝트에서 다양한 모델을 경험하고 활용해보고자 DeiT, CLIP, ViT, ResNet, EfficientNet 등과 같은 비전 모델을 활용하여 Task에 적용하여 보았고, 모델 성능 개선을 경험해보기위해 모델간 성능 비교를 통해 우수한 성능을 보이는 모델을 선택해 성능 개선하는 것을 목표로 다양한 실험을 진행해봤다. 각 모델의 학습과 추론 성능을 분석하며, 최적의 모델 조합을 찾는 과정에서 학습률 스케줄러와 하이퍼 파라미터들을 다양하게 조합해보면서 조절하는 방식으로 다양한 실험을 진행했다. AdamW, SGD, Adam과 같은 Optimizer를 활용해 최적화 방식을 다양하게 적용해보았으며, 특히 ReduceLROnPlateau, CosineAnnealingWarmUpRestarts와 같은 다양한 학습 스케줄러도 실험하여 학습 과정에서 학습률을 세밀하게 조정했다. 또한, Cross Validation을 적용하여 모델의 일반화 성능을 높이고, Mixed Precision을 적용해 모델의 학습 속도를 높이는 동시에 메모리 효율성을 극대화시키고자 하였다. 또한 프로젝트 마감 이틀 전부터 팀원들과 Ensemble Voting 기법을 적용해 예측 성능을 한층 더 끌어올려보았다. 이러한 다양한 실험의 결과로 성능 향상의 측면에서는 Cross Validation과 Ensemble을 통해 모델의 일반화 성능을 향상시키는 것이 많은 도움이 된다는 것을 알았고, 지식적인 측면에서는 Scheduler와 Optimizer의 동작 방식, 각 모델간 특징, 하이퍼 파라미터 튜닝 등 많은 부분에대해서 직접 경험하고 지식을 쌓을 수 있었다.

팀원들과 함께 사용할 수 있는 기능들을 만들어 공유하기도 하였다. Cross Validation을 통해 모델간 예측 확률을 평균내는 기능과 Mixed Precision, CosineAnnealingWarmUpRestarts, TimeDecorator와 같은 기능들을 팀원들도 비교적 쉽게 활용할 수 있도록 모듈화하여 공유하고 notion에 정리하는 방식을 이용하였다. 또한 프로젝트 초기에 기존의 base code를 python project 구조로 refactor하는 작업을 담당하였는데, 나뿐만 아니라 팀원들도 프로젝트를 더 효율적으로 진행하는데 도움이 된것 같아 뿌듯한 경험이었다.

다양한 실험을 통해 초기 학습 속도와 최종 성능 모두에서 긍정적인 변화를 이끌어냈지만, 한계도 존재했다. 큰 모델을 다루면서 Mixed Precision을 적용했음에도 불구하고 메모리 제약으로 인해 배치 사이즈를 원하는 만큼 늘리지 못한 점이 아쉬웠다. 이러한 문제를 해결하기 위해서 Gradient Accumulation을 적용하였지만 생각만큼 학습이 제대로 이루어지지 않는 모습이 보여 개선해보고자 하였지만 잘 진행되지 않았다. 실험의 변경 요소와 결과를 간단하게 기록하여서 후에 실험을 재진행하는 과정에서 어려움을 겪었는데 이러한 부분이 아쉬웠고, Python 프로젝트 구조로 변경하였지만 팀원들과 코드를 병합하는 과정에서 많은 충돌과 파일이 생겨났다. 좀 더 깔끔한 디렉토리 구조를 구성함으로써 불필요한 수고를 줄일 수 있지않았을까 하는 아쉬움이 남았다.

이러한 경험을 바탕으로 다음 프로젝트에서는 시작 초기에 프로젝트 진행을 위한 기반 요소들을 확실하게 다지고 진행함으로써 후에 불필요한 수고가 들지 않도록 할 예정이다. 또한, git을 좀 더 활용하여 활발하고 원활하게 협업이 이루어 질 수 있도록 팀원들과 많은 이야기를 해볼 것이다. 이번 프로젝트에서는 데이터 처리에 대해서 제대로 경험해보지 못했다고 생각되어서, 다음 프로젝트에서는 데이터 처리에 대한 실험을 해보면서 경험해보도록 할 것이다. 하나씩 차근차근 나아가면서도 적극적으로 경험해보면서 더욱 발전된 결과를 목표로 하고, 그 과정에서 더욱 성장하는 사람이 될 수 있도록 노력해야겠다.

profile
기동코딩

0개의 댓글