안녕하세요!
오늘은 PaddleOCR에 대한 내용을 정리해볼까 합니다.
오픈소스 OCR중에 학습이 가능한 모델인데 블로그 등의 웹서핑을 찾아보면 학습을 성공한 사례는 별로 없는 거 같습니다. 두 달 전 제가 학습을 해보려고 했었는데 그 때도 성능을 올리지 못한채 끝나 아쉬움이 많이 남았습니다.
다른 프로젝트를 팀장으로서 바로 시작하게 되었습니다.
이번에도 OCR을 사용하게 되어서 Paddle학습을 팀원들이 맡게 되었습니다. 비전AI는 성능을 매우 개선 시켜 뿌듯했지만 패들을 맡았던 팀원들이 끝내 마치지 못해 제가 백업용으로 로직을 짠 병합 OCR을 사용하게 되었고 발표를 준비중입니다.
그래서 속상한 마음에 다시 알아보고 연구를 해보려고 합니다. 모두가 어렵다고 했고, 학습을 하더라도 성능이 안 좋다고 강사선생님 포함 모두가 말해도 학습이라도 성공하고 싶은 마음에 다시 도전해보려고 합니다.
[Memo] PaddleOCR Rec 학습 원리 및 소량 데이터 분석
1. PaddleOCR Rec는 좌표를 외우는가? (인식 원리)
- 결론: 아니오. 문자 단위(Character-level)로 시각적 패턴을 학습함.
- 학습 과정:
- 이력번호 크롭 이미지(예: L026...) 입력 → 각 글자(L, 0, 2...)의 시각적 특징 추출.
- 이미지가 236장이더라도, 한 줄에 12~15자가 있다면 실제로는 약 3,400개의 문자 샘플을 학습하는 셈.
- 학습 목표: PP-OCRv4 사전학습 모델이 이미 가진 범용 인식 능력에 '우리 프로젝트의 특수한 환경(폰트, 비닐 반사, 고정 패턴)'을 이식(Fine-tuning)하는 것.
학습 데이터: "L02602045978929" (크롭 이미지)
↓
모델이 학습하는 것: L, 0, 2, 6, 0, 2, ... 각 글자의 시각적 패턴
↓
결과: 비슷한 폰트/환경의 새로운 숫자 조합도 인식 가능
2. 합성(Synthetic) 데이터 학습의 한계점
이론상 수만 장을 만들 수 있지만, 실제 적용 시 성능이 떨어지는 이유:
[합성 이미지] [실제 이미지]
┌─────────────────┐ ┌─────────────────┐
│ │ │ ≋≋비닐 반사≋≋ │
│ L02602045978 │ ← 도메인 갭 → │ L026̃0̧2045̊978 │
│ │ │ ~주름, 잉크번짐~│
└─────────────────┘ └─────────────────┘
깨끗한 배경, 완벽한 폰트 노이즈, 왜곡, 조명 변화
| 문제점 | 상세 내용 |
| 도메인 갭 | 깨끗한 배경의 합성 이미지 vs 비닐 주름/반사가 있는 실제 이미지의 괴리. |
| BN 통계 오염 | BatchNorm 레이어가 가짜 데이터 분포에 맞춰져 실제 데이터 인식률 급락. |
| CTC Collapse | 가짜 데이터가 너무 단순하면 모델이 학습을 '대충' 끝내버리는 현상. |
| 과적합 방향 | 실제의 번진 잉크나 흐릿한 글자 대신, 합성된 깔끔한 외곽선만 학습함. |
메모: PaddleOCR 커뮤니티에서도 합성 데이터를 30% 이상 섞으면 오히려 성능이 떨어진다는 보고가 많음.
3. 소량 데이터(236장)로도 가능한 이유
- 사전학습 모델(PP-OCRv4): 이미 수천만 장의 이미지로 0-9, A-Z 인식을 끝낸 상태.
- 적응(Adaptation): 236장의 실제 이미지는 모델에게 "우리 작업장 라벨은 이렇게 생겼어"라고 알려주는 가이드 역할.
- 현재 정확도 75% 수준이면 기초 체력은 충분함. 나머지 15~20%는 환경 적응의 문제.
4. 효과적인 학습 전략 (Hyperparameters)
데이터가 적을 때는 학습이 튀지 않도록 보수적으로 잡는 것이 핵심.
- Batch Size: 64 → 16 (데이터가 적어 배치가 너무 크면 에폭당 업데이트 횟수가 너무 적음)
- Learning Rate: 0.0005 → 0.0002 (과적합 방지를 위해 미세하게 조정)
- Warmup Epoch: 5 → 10 (초기 학습 안정화)
- Data Augmentation: * RecAug: 노이즈, 왜곡 등 실제 발생 가능한 변형 적용.
- RecConAug: 실제 크롭 데이터끼리 이어 붙여 도메인 갭 없이 데이터 증량.
요약 및 결론
- 합성 데이터를 억지로 늘리는 것보다 전처리 품질(bbox 정확도)이 훨씬 중요함.
- 검출(Detection) 단계에서 번호를 정확히 따준다면, 현재 데이터셋과 PP-OCRv4 파인튜닝 조합으로 90% 이상 도달 가능.
- 방향성: "데이터의 양보다 실제 현장 도메인의 특징을 얼마나 잘 반영하느냐"가 핵심.
지금은 라벨링을 다시 하는 중이라 학습 진행을 해보고 다음에는 학습에 대한 블로그를 작성해보겠습니다.
'1. AI 논문 + 모델 분석 > AI 모델 분석' 카테고리의 다른 글
| [LLaVA] 학습 스크립트로 보는 멀티모달 모델의 구현 원리 (0) | 2026.02.20 |
|---|---|
| [OCR] PaddleOCR 축산물 이력번호 인식 모델 학습 성공 과정 (0) | 2026.02.07 |
| [Meat-A-Eye] 파인튜닝을 통한 정확도 70% → 90% 개선 정리 (0) | 2026.02.05 |
| [Vision] MobileNet 모델 조사 및 실험 | 논문 리뷰 (0) | 2026.01.26 |
| EfficientNet-B0와 Grad-CAM 분석해보기 (0) | 2026.01.18 |
