본문 바로가기
TIL _Today I Learned/2024.12

[DAY 107] 최종 프로젝트_ OCR 모델 Fine Tuning

by gamdong2 2024. 12. 19.
[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.12.19

📕 프로젝트 작업 내역

  • OCR 모델 Fine Tuning

 

📗 수행 결과

1. OCR 모델 Fine Tuning

1) 모델 정보

  • 이름: team-lucid/trocr-small-korean
  • 특징
    • VisionEncoderDecoderModel  “이미지 → 텍스트(한국어 특화)”
    • 입력 이미지 사이즈: 384×384 (고정)

 

2) 사용한 데이터 셋

  • 출처: AI Hub의 수학 과목 자동 풀이 데이터 (초등 3~6학년)
  • 구성
    • 데이터 수: 15,224개 (훈련:검증 = 8:2)
    • 입력 데이터(X): 이미지와 이미지 내 텍스트 영역 좌표 (bboxes)
    • 텍스트 라벨(Y): 해당 영역에서 추출된 텍스트

 

3) 학습 방식

(i) 텍스트 영역 좌표(bboxes)를 기준으로 원본 이미지를 리사이징(384×384) 하여 텍스트 예측

  • 최종적으로 모든 텍스트 영역 좌표에서  나온 텍스트를 합쳐 하나의 문장으로 예측

(ii) 텍스트 영역을 크롭하여 별도의 이미지를 생성 후 텍스트 예측

  • 각 텍스트 영역을 잘라내어 리사이징(384×384)하고, 별도의 이미지로 처리하여 텍스트를 예측
  • 최종적으로 여러 크롭된 이미지에서 나온 텍스트를 합쳐 하나의 문장으로 예측

 

4) 평가 지표 

(1) 문자 정확도(Character Accuracy)

  • predicted_text와 ground_truth 간의 일치한 문자 개수 비율
  • 예측 텍스트와 정답 텍스트의 각 문자가 일치하면 1, 그렇지 않으면 0으로 간주하여 일치한 문자의 개수를 계산
  • 두 문자열의 공통된 길이까지만 비교
def calculate_character_accuracy(predicted_text, ground_truth):
    correct_characters = sum(p == g for p, g in zip(predicted_text, ground_truth))
    total_characters = len(ground_truth)
    return (correct_characters / total_characters) * 100 if total_characters > 0 else 0

 

(2) 단어 오류율(Word Error Rate, WER)

  • 단어 기반 편집 거리(삽입, 삭제, 교체)를 계산하여 오차율 반환
def calculate_wer(predicted_text, ground_truth):
    return jiwer.wer(ground_truth, predicted_text)

 

 

5) 모델 학습 프로세스

① 데이터를 훈련(train)과 검증(validation)으로 나눔 (8:2)
② OCRDataset으로 데이터 로드 후 DataLoader 생성
③ 사전 학습된 모델(team-lucid/trocr-small-korean)과 프로세서(TrOCRProcessor) 사용
④ 훈련 루프

10 Epochs / 1 Batch / Learning Rate 5e-5

    (i) 텍스트 영역 전체를 사용한 학습
    (ii) 크롭된 이미지 각각에 대해 텍스트를 예측한 뒤 결합
⑤ 손실(loss) 계산 및 모델 가중치 업데이트
⑥ 검증 루프
    - Character Accuracy 및 WER 계산
    - 검증 손실 저장
⑦ 모델 및 결과 저장

 

 

6) 출력 파일

  • 훈련 결과: training_results.json
  • 검증 결과: validation_results.json
  • 모델 저장 경로: OCR_MODEL_SAVE_PATH

 

 

 

 

📙 내일 일정

  • OCR 모델 학습