CV경진대회_문서타입분류
1️⃣Overview 개요
✔️ Pipeline : 데이터 -> 모델 -> 학습 및 평가 -> 추론 및 분석 (cycle -> 5 이상 iteration)
✔️ Task : Document Type Classification
✓ Task type
Recognition vs Generation → Recognition
Classification vs Regression → Classification
Binary vs Multi-class → Multi-class
✓ Data type
Unstructured vs Structured → Unstructured
✓ Data type
✔️ Data
✓ 총 17종 문서 타입
- meta.csv:클래스이름 , 인덱스 매핑정보
Target | Text | 내용 |
0 | 계좌번호 | 계좌번호 |
1 | 건강보험 임신·출산 진료비 지급 신청서 | 건강보험 임신·출산 진료비 지급 신청서 |
2 | 자동차 계기판 | 자동차 계기판 |
3 | 입퇴원 확인서 | 입퇴원확인서, 입퇴원사실확인서, 입원확인서, 입원증명서, 입원사실증명서 |
4 | 진단서 | 진단서, 일반진단서 |
5 | 운전면허증 | 운전면허증 |
6 | 진료비 영수증 | 진료비 영수증, 진료비 계산서 영수증 |
7 | 통원、 진료 확인서 | 진료 증명서、 통원확인서、 치료확인서、 입통원확인서、 외래진료사실확인서、 통원진료확인서、 통원증명서、 진료사실증명서 |
8 | 주민증록증 | 주민증록증 |
9 | 여권 | 여권 |
10 | 진료비 납입 확인서 | 진료비(약제비)납입확인서 、 진료비(약제비)납입 영수증 |
11 | 약제비 영수증 | 약제비 계산서·영수증、 약제비 계산서 영수증 |
12 | 처방전 | 처방전 |
13 | 이력서 | 이력서、 자기소개서、 전문강사 지원서 |
14 | 소견서 | 소견서,의견서 |
15 | 자동차 등록증 | 자동차 등록증 |
16 | 자동차 번호판 | 자동차 번호판 |
- traindata : 1570문서 이미지
각 클래스별 46~100장 | 클래스별 데이터 평균 크기 |
![]() |
![]() |
![]() |
-> 클래스 불균형을 보완하기 위해 데이터 증강방법 검토
-> 데이터 크기차이를 고려한 전처리 및 학습데이터 준비
-> 클래스별 데이터를 추가 분석하여 모델 성능 최적화
- testdata : 3140 (난이도 조절위해 augmentation<현실세계노이즈처럼>)
1) sample_submission.csv: 예측값 채워넣을 더미 파일 (target 값을 예측으로 채워넣어야) ID (이미지 파일 이름.확장자),
target (class label) 컬럼
2)test/: 테스트 이미지 폴더
✔️ Evaluation Metric : Macro F1
✓ Macro F1 score : 각 클래스 F1 score 개별 계산 후 평균
✓ Micro F1 score : 모든 클래스에 대한 precision, recall 합산해 계산
→ 본 대회에서는 Macro F1 score 사용
✔️Confusion matrix
✓ 예측값과 실제값을 분류하여 모델의 성능을 시각화 할 수 있는 matrix
- TP(True Positive): 실제 positive인 것을 positive라고 예측 (정답)
- FP(False Positive): 실제 negative인 것을 positive라고 예측 (오답)
- FN(False Negative): 실제 positive인 것을 negative라고 예측 (오답)
- TN(True Negative): 실제 negative인 것을 negative라고 예측 (정답)
✓ Precision
✓ Recall
✓ F1 : precision, recall 의 Harmonic mean 조화 평균 ( 데이터가 imbalance 할 경우 더 정확한 metric)
-> class imbalance check → macro F1 (harmonic mean) 사용 근거 확보
2️⃣ Data EDA
✔️FiftyOne 을 활용한 오분류 데이터 확인
✔️ OCR을 활용한 오분류 데이터 확인 OCR을 활용한
오분류 데이터 확인
✔️ 오분류 레이블 리스트 R을
✅ Wandb
✔️ 효율적인 실험 관리
✔ 프로젝트 진행 중 여러 실험 파라미터와 결과를 체계적으로 관리
✔ 실험 기록 자동화와 효율적인 버전 관리
✔️ 데이터 시각화
✔ 실험 결과를 실시간으로 시각화 대시보드에서 확인 ➡ 모델 학습 과정 및 성능 지표를 명확히 파악 가능.
✔ 주요 메트릭을 즉각적으로 확인 ➡ 문제점 발견과 해결에 유용
✔️ 팀 협업 강화
✔ 실시간 대시보드를 통해 동시 작업 및 피드백을 쉽게 진행
✔️ 실험 추적
✔️ logging setup을 통한 실험 기록 공유
✅ Augmentation
✔️ Albumentations : 회전 및 반전 / 약간의 노이즈 추가
✔️ Augraphy
- Brightness: 밝기 조정
- BrightnessTexturize: 밝기 조정 및 질감 추가
- BadPhotoCopy: 흐림, 선, 색 왜곡 등
- DirtyDrum: 얼룩
- Faxify: 해상도 저하 및 노이즈
- Folding: 주름 및 그림자 효과
- LightingGradient: 그라데이션 조명 효과
3️⃣ Model Training & Evaluation
✔️ 초기 실험 설계
▸ Dataset Split method 비교 | ▸ Model 비교 | ▸ Train Epoch 비교 |
![]() |
![]() |
![]() |
✔ Stratified > Stratified k-fold > holdout > k-fold ➡ 초기 Dataset split : stratified / stratified k-fold |
✔ EfficientNet > ResNet > ViT ➡ 초기 모델 : EfficientNet |
✔ 20 > 10 > ~ 1 ➡ Epoch 은 길게 설정 |
✔️ 세부 실험 설계
4️⃣ Evaluate
Final Leaderboard : 3등
▷ Hydra & WanDB 적극 활용
- 다양한 실험 환경을 유연하
▷ Hydra & WanDB 적극 활용
- 다양한 실험 환경을 유연하게 설정하고, 실험 결과를 시각적으로 한 눈에 파악할 수 있도록 해주어 팀원 간 진행 상황을 보다 원활하게 공유 협업 진행
▷ 깃허브, 노션, 슬랙을 적극 활용하여 협업을 진행
✔️ 아쉬웠던 점설정하고, 실험 결과를 시각적으로 한 눈에 파악할 수
▷ 처음 데이터 증강을 진행할 때 Online 증강 방식을 주로 사용했지만, Offiline 증강 기법 또한 사용해서 더 풍부한 학습 데이터를 확보를 못한 것
▷ 뒤늦게 Offline 증강 기법을 사용하면서 시간적으로 여유가 많이 부족한 것
있도록 해주어 팀원 간 진행 상황을 보다 원활하게 공유 협업 진행
전체적인 파이프라인을 구축하고 WandB를 활용해 실험 결과를 모니터링하며 다양한 시도를 진행할 수 있었습니다. 이를 통해 데이터 분석 및 모델 성능 최적화를 위한 여러 도구와 기법을 배우는 의미 있는 시간이었습니다.
특히, Hydra 기반 Config 설정 관리와 WandB 실험 관리 셋업을 통해 설정값과 실험 결과를 체계적으로 관리할 수 있었습니다. 을 적극 활용하여 협업을 진행