Upstage AI 부트캠프의 이번 프로젝트는 문서 타입 분류 모델을 만드는 CV 경진대회였어요. 우리 팀 이름 “Eagle’s Road”답게, 팀명처럼 각자 다른 분야에서 모인 팀원들이 자기 역할에 최선을 다하며 멋진 협업을 이뤘답니다!
문서 이미지(예: 주민등록증, 여권, 자동차 등록증 등)를 어떻게 하면 효율적으로 분류할 수 있을지 고민하면서, 단순 모델 구현 이상의 가치 있는 경험을 쌓을 수 있었어요.
저는 EDA, 딥러닝 모델 설계, 그리고 하이퍼파라미터 튜닝을 맡았는데요, 데이터 전처리부터 모델 선택, 실험, 그리고 최종 결과 확인까지 모든 과정을 팀원들과 함께 진행했답니다.
이 글에서는 이번 경진대회를 준비하면서 경험했던 과정들을 단계별로 소개하고, 마지막으로 느낀 점까지 솔직하게 나눠보려고 해요.
1. 개발 환경 세팅과 팀워크의 중요성
사전 준비: 개발 환경 협업 도구
프로젝트를 시작하면서 제일 먼저 한 건 개발 환경을 세팅하는 일이었어요. “환경 세팅은 빨리 끝내고 본격적인 작업에 들어가야지”라는 생각으로, 팀원들과 협력해서 필요한 도구들을 세팅했죠. GitHub는 당연히 사용했는데, 각자 작업한 내용을 효율적으로 관리하기 위해 폴더 구조를 체계적으로 만들어서 진행했어요. 덕분에 서로의 코드 품질을 유지하면서 안정적으로 개발할 수 있었죠.
그 다음으로 Weights & Biases(W&B)라는 툴을 적극 활용했어요. 이 툴은 실험 결과를 자동으로 기록해주고, 그래프로 시각화까지 해주니까 정말 유용했어요. 실험 데이터를 팀원들과 실시간으로 공유할 수 있어서 “이 설정이 성능이 더 좋네?” 같은 인사이트를 금방 얻을 수 있었거든요. 예전엔 이런 기록을 수작업으로 하느라 시간도 많이 걸리고 실수가 잦았는데, W&B 덕분에 작업 효율이 정말 많이 올라갔어요.
또한, 우리 팀은 Slack과 Zoom을 주로 사용했는데, 특히 Slack에서 진행 상황을 수시로 공유하면서 질문이나 피드백을 바로바로 주고받았어요. 만약 문제가 생기면 Zoom으로 화면을 공유하며 함께 해결했죠. 이렇게 실시간으로 소통할 수 있으니까, 협업 속도가 엄청 빨라졌어요.
CV 경진대회 타임라인
팀원들 간의 역할 분담도 정말 중요했어요. 저는 모델 실험을 주로 맡았고, 다른 팀원들은 데이터 분석 부분을 담당했어요. 역할이 명확하게 나뉘어 있으니까, 각자 맡은 일에 집중할 수 있었고, 한 팀원이 준비한 결과를 기반으로 다른 팀원이 바로 다음 작업을 이어갈 수 있었어요. 예를 들어 데이터팀에서 증강 기법을 설계하면, 모델팀이 이를 바로 적용해서 실험할 수 있었죠. 이렇게 팀워크가 잘 맞으니까 자연스럽게 작업 속도도 빨라지고, 결과물도 더 좋아졌어요.
그리고 이런 협업이 가능했던 이유 중 하나가 타임라인을 잘 세웠기 때문이에요. 초기에는 환경 세팅과 데이터 확인, 그다음에는 모델 실험과 최적화, 마지막으로 앙상블과 결과 도출까지. 모든 작업을 단계별로 정리해서 진행했어요. 덕분에 어디까지 작업이 진행됐는지 한눈에 파악할 수 있었고, 불필요한 혼선 없이 효율적으로 프로젝트를 끝낼 수 있었어요.
이번 프로젝트를 하면서 정말 많이 느낀 건, 좋은 도구와 팀워크가 결과에 큰 영향을 준다는 거예요. GitHub, W&B 같은 툴을 활용하면서 작업의 효율성을 크게 높일 수 있었고, Slack과 Zoom 덕분에 소통도 훨씬 원활했어요. 이런 과정이 쌓여서 좋은 결과로 이어질 수 있었던 것 같아요.
2. 데이터 분석과 EDA: 핵심을 잡아라
이번 경진대회에서 가장 먼저 했던 일은 데이터 분석과 EDA(Exploratory Data Analysis)였어요. 문서 타입 분류가 목표인 만큼, 17개 클래스가 어떻게 구성되어 있는지부터 꼼꼼히 살펴보는 게 중요했죠. 특히, 학습 데이터와 테스트 데이터가 어떻게 다른지, 그리고 어떤 노이즈(Noise)나 augmentation이 적용되어 있는지를 파악하는 과정이 필수였답니다. 처음 데이터를 들여다봤을 때, 학습 데이터는 비교적 깨끗(Clean)하고, 테스트 데이터는 회전(Rotation)이나 구김 같은 다양한 왜곡이 많다는 점이 눈에 띄었어요. “이걸 딥러닝 모델로 어떻게 처리하면 좋을까?”라는 고민이 바로 시작됐죠.
학습 데이터 및 테스트 데이터 EDA
먼저, 데이터를 꼼꼼히 들여다보는 작업부터 시작했어요. 밝기와 대비 분석을 통해 테스트 데이터의 노이즈가 학습 데이터와 크게 다르다는 점을 확인했고, 이미지 크기와 비율 분포를 시각화하면서 두 데이터의 구조적인 차이도 파악했죠. 특히, 테스트 데이터에서 회전된 이미지가 많이 포함되어 있다는 점은 눈에 띄는 특징이었어요. 이걸 단순히 두고 봐서는 안 되겠다고 생각해서, 학습 데이터에 다양한 각도로 회전된 이미지를 추가하는 증강 기법을 적용했어요.
EDA를 하면서 발견한 또 다른 중요한 점은 라벨 불균형이었어요. 몇몇 클래스는 데이터가 너무 적어서, 이대로 학습을 진행하면 모델이 특정 클래스에 치우칠 가능성이 있었죠. 이를 해결하기 위해 Mixup과 CutMix 같은 데이터 증강 기법을 활용해 부족한 데이터를 보완했어요. 이렇게 증강된 데이터를 기반으로 실험을 진행했는데, 데이터팀에서 증강 과정을 체계적으로 관리해줘서 효율적으로 작업할 수 있었죠.
EDA는 단순히 데이터를 분석하는 것을 넘어서, 팀워크와 협업의 중심 역할을 했어요. 데이터를 분석하면서 “어떤 방식으로 전처리를 할 것인지”, “어떤 augmentation 기법을 도입할 것인지” 팀원들과 활발히 논의했어요. 각자 맡은 부분을 분담해 데이터의 시각화를 진행하고, 통계값을 정리하면서 프로젝트의 방향을 빠르게 잡아갔어요. 저는 EDA와 모델 실험을 맡았는데, 데이터를 분석한 결과를 기반으로 데이터팀(데이터 전처리 및 증강기법 역할)에게 필요한 작업을 적극적으로 제안했어요. 예를 들어, “이 클래스는 데이터가 부족하니 추가 증강이 필요하다”거나, “테스트 데이터의 회전 분포를 반영한 증강을 적용해보자”는 식의 의견을 공유했죠. 데이터팀은 증강 작업을 진행하면서 발생한 이슈를 실시간으로 저와 공유해줬고, 저는 이 피드백을 바탕으로 모델 설계와 실험 방향을 조정했어요.
데이터 분석 과정
특히, 데이터의 분포를 분석하며 Stratified K-Fold 검증 기법을 사용할 가능성을 검토하기도 했고, 부족한 데이터를 보완하기 위한 증강 전략을 설계하는 데 많은 시간을 투자했어요. 이미지 크기(가로/세로 비율) 분석과 시각화 그래프 작업은 데이터를 더 깊이 이해하는 데 큰 도움이 되었고, 이를 통해 프로젝트 전체의 EDA 방향을 빠르게 잡아갈 수 있었습니다. 이렇게 데이터를 면밀히 분석하고, 체계적으로 정리한 덕분에 이후 딥러닝 모델 설계와 실험이 훨씬 효율적으로 진행됐어요.
이 과정을 통해 학습 데이터의 품질을 꾸준히 높일 수 있었고, 현실 세계의 데이터에서도 안정적으로 작동할 수 있는 모델을 설계할 수 있었어요. 데이터를 깊이 이해하고, 분석한 내용을 팀과 공유하며 문제를 해결하는 과정이 굉장히 인상적이었어요. 특히, 시각화를 통해 데이터를 직접 보고, 서로의 의견을 나누며 협업했던 경험은 이번 프로젝트에서 가장 기억에 남는 부분 중 하나였어요.
EDA를 통해 다시 한 번 느낀 건, 좋은 데이터가 좋은 모델을 만든다는 기본 원칙이에요. 데이터를 제대로 이해하고 준비하지 않으면, 아무리 좋은 모델이라도 제대로 된 성능을 낼 수 없다는 걸 절실히 느꼈어요. 이번 과정은 데이터를 분석하고 활용하는 것의 중요성을 다시 한 번 배울 수 있었던 시간이었어요.
3. 딥러닝 모델 실험과 튜닝: 최적화를 향한 여정
EDA와 데이터 전처리가 완료된 후, 데이터 팀이 만들어준 오프라인 증강 데이터를 기반으로 본격적인 딥러닝 모델 설계와 실험 단계에 들어갔어요. 초기에는 제공된 증강 데이터를 활용하면서, 실험 과정에서 추가로 온라인 증강 기법을 적용해 데이터를 다양하게 만들었어요. 이렇게 오프라인과 온라인 증강 기법을 함께 활용하며, 학습 데이터의 다양성과 모델의 일반화 성능을 모두 높이고자 했죠.
새로운 모델 실험
제 역할은 기존에 진행했던 ResNet과 EfficientNet 모델 외에 새로운 모델을 실험하는 것이었어요. 그래서 ResNet과 ConvNeXt 같은 익숙한 모델부터 시작해, 기본적인 구조를 하나씩 실험하며 성능을 비교했어요. 다음으로 시도한 건 Transformer 기반 모델이었어요. 특히, Swin Transformer V2를 사용했는데, 이 모델은 이미지의 글로벌 문맥 정보를 잘 반영할 수 있는 구조라서 문서 타입 분류에 적합하다고 판단했어요. Transformer 모델은 초기 학습에서 다소 시간이 걸리긴 했지만, 테스트 데이터에서 더 나은 일반화 성능을 보여줬어요. 이를 통해 문서 이미지처럼 다양한 패턴을 가진 데이터를 다룰 때는 Transformer 모델이 더 유리할 수 있다는 사실을 확인할 수 있었죠.
모델 설계뿐만 아니라 하이퍼파라미터 튜닝도 중요한 과제였어요. 학습률(Learning Rate), 배치 크기(Batch Size), 최적화 알고리즘 같은 기본적인 설정부터 시작해, Learning Rate Scheduler(Cosine Annealing, OneCycleLR)와 Early Stopping 같은 기법을 활용해 학습 과정을 세밀하게 조정했어요. 특히, W&B(Weights & Biases)를 사용하면서 실험 기록을 체계적으로 관리했는데, 어떤 설정이 더 나은 성능을 내는지 시각화된 데이터를 통해 쉽게 확인할 수 있었어요. 팀원들과 실시간으로 실험 결과를 공유하면서, 비슷한 설정을 반복하지 않고 효율적으로 실험을 진행할 수 있었답니다.
데이터 증강 기법도 모델 성능에 중요한 영향을 미쳤어요. 테스트 데이터에서 회전된 이미지가 많았기 때문에 학습 데이터에 Random Rotation 증강을 추가했고, 밝기와 대비가 다양하다는 점을 고려해 Brightness Jitter와 Contrast Adjustment 같은 증강도 적용했어요. 이런 증강 기법을 적용하니 모델의 F1 스코어가 눈에 띄게 향상됐어요. 특히, 데이터 팀이 증강 과정을 체계적으로 관리하고 이슈를 공유해준 덕분에, 실험 과정에서 예상치 못한 문제를 빠르게 해결할 수 있었어요.
모델 실험 조건(가설 검증)
제 역할은 기존에 많이 사용해본 ResNet과 EfficientNet 모델 외에 새로운 모델을 실험하는 것이었어요. 문서 데이터의 특성과 학습/테스트 데이터의 차이를 고려해 EfficientNetV2, customCNN, CoAtNet, ConvNeXt, Swin Transformer V2, MaxViT 등을 실험했어요. 모델 실험은 단순히 하나씩 테스트해보는 것이 아니라, 가설을 세우고 이를 검증하는 방식으로 진행했어요. 예를 들어, 데이터 크기와 성능의 관계를 확인하기 위해 다양한 크기의 데이터셋을 실험하거나, 손실 함수와 클래스 불균형 문제를 해결하기 위한 전략을 적용하며 실험을 이어갔어요.
최종적으로는 앙상블(Ensemble)을 활용해 성능을 극대화했어요. CNN과 Transformer 기반 모델에서 각각 높은 성능을 보인 구성들을 조합해 다양한 데이터 패턴을 더 잘 반영할 수 있도록 했죠. 단일 모델로는 잡아내지 못했던 세부적인 특징들도 앙상블을 통해 보완할 수 있었어요.
이 실험 과정을 통해 가장 크게 느낀 점은, 완벽한 모델은 없다는 것이에요. 데이터와 과제의 특성을 고려해 다양한 접근법을 시도하고, 끊임없이 조정해 나가는 과정이 결국 좋은 성능으로 이어졌어요. 이번 프로젝트는 단순히 좋은 모델을 선택하는 것을 넘어, 데이터를 이해하고 그에 맞는 모델을 설계하며 최적화하는 방법을 배우는 값진 경험이었어요.
느낀 점: 협업과 도전이 만든 값진 성과
Eagle's Road 1위 달성
Upstage AI 부트캠프에서 이번 프로젝트는 단순히 기술적으로 뛰어난 모델을 만드는 것을 넘어, 데이터와 모델, 그리고 팀워크의 중요성을 깊이 배울 수 있었던 값진 경험이었어요. 문서 타입 분류라는 낯선 과제였지만, EDA부터 데이터 전처리, 모델 설계와 실험, 최종 앙상블까지 모든 과정이 유기적으로 연결되어 있다는 걸 몸소 느낄 수 있었죠. 각 단계에서 팀원들과의 협업 덕분에 막막하게만 느껴졌던 문제를 하나씩 해결해 나갈 수 있었어요.
특히, CV 경진대회에서 가장 인상 깊었던 건 팀워크였어요. 각자의 역할이 명확했고, 그 안에서 최선을 다하면서도 서로를 적극적으로 지원했죠. 데이터를 분석하고 증강 전략을 설계한 데이터 팀, 다양한 모델 실험을 주도한 모델 팀, 그리고 최적의 조합을 만들어낸 앙상블 팀 모두가 각자의 자리에서 최고의 성과를 내기 위해 노력했어요. 제가 모델 실험을 맡으면서 어려움을 겪을 때마다 팀원들의 피드백과 아이디어 덕분에 새로운 방향을 찾을 수 있었던 점도 정말 큰 힘이 되었어요.
마지막으로, 1등이라는 결과를 얻었을 때 느꼈던 감동은 단순히 개인적인 기쁨을 넘어, Eagle’s Road팀 전체가 함께 만들어낸 성과라는 점에서 더 크게 다가왔어요. 데이터를 이해하고 품질을 높이기 위한 끊임없는 노력, 다양한 모델 실험과 증강 기법, 그리고 모든 과정을 이어준 팀워크가 만든 결과였죠. 이번 경험을 통해 좋은 데이터가 좋은 모델을 만든다는 기본 원칙과, 새로운 도전이 가져다주는 배움과 성장의 가치를 다시 한 번 느낄 수 있었어요. 앞으로 어떤 도전을 하든 이 경험을 바탕으로 더 나은 결과를 만들어가고 싶습니다! 😊
댓글