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

[DAY 112] 모델 추가 학습 코드 작성

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

📕 프로젝트 작업 내역

  • 모델 추가 학습 코드 작성

 

📗 수행 결과

1. 모델 추가 학습 코드 작성

1) 학습 워크플로우

1. 환경 설정 및 S3 연결

  • .env 파일을 사용해 AWS S3 자격증명(AWS_ACCESS_KEY, AWS_SECRET_KEY, AWS_REGION)과 기타 설정을 로드합니다.
  • S3 클라이언트를 설정하여 S3와의 연결을 준비합니다.

2. S3 데이터 매핑 정보 처리

  1. 기존 매핑 정보 확인:
    • ocr/mapping 경로에서 최신 버전의 매핑 CSV 파일을 가져옵니다.
    • 매핑 CSV 파일이 없을 경우, 새로운 파일을 생성할 준비를 합니다.
  2. 이미지 및 라벨 데이터 매핑 업데이트:
    • big9-project-02-training-bucket > processed_data > ocr > images의 서브폴더들(batang, malgun, ngulim)을 순차적으로 스캔합니다.
    • 동일한 구조로 labels 폴더를 스캔하여 JSON 파일의 novel_text 값을 라벨로 사용합니다.
    • 매핑 정보를 갱신하여 CSV 파일로 저장합니다.

3. 모델 및 토크나이저 준비

  1. 최신 모델 다운로드:
    • S3의 ocr/final_model 경로에서 최신 버전의 사전 학습된 모델 디렉터리를 다운로드합니다.
    • 모델과 토크나이저를 로드합니다.

4. 데이터셋 준비

  1. 데이터셋 로드:
    • 매핑 CSV 파일을 읽어와 데이터를 로드합니다.
    • 로드한 데이터셋을 8:2 비율로 학습(train)과 검증(validation) 데이터로 분할합니다.
  2. 데이터 전처리:
    • preprocess_function을 사용해 입력 이미지 경로와 라벨 텍스트를 처리하여 모델에 입력 가능한 형식으로 변환합니다.

5. 학습 설정 및 시작

  1. 학습 설정:
    • Seq2SeqTrainingArguments를 사용하여 학습 설정을 구성합니다.
    • 체크포인트는 로컬의 임시 디렉터리에 저장하며, S3에는 업로드하지 않습니다.
  2. Trainer 객체 생성:
    • 학습(train_dataset) 및 검증(val_dataset) 데이터를 포함한 Seq2SeqTrainer를 생성합니다.
  3. 학습 진행:
    • trainer.train()을 호출하여 모델 학습을 시작합니다.

6. 학습 중 데이터 로깅

  1. 학습 결과 저장:
    • 학습 중 각 배치(batch)에 대해 다음 정보를 저장:
      • epoch, batch, ground_truth, predicted_text, loss, cropped_image_paths
    • 위 정보는 training_results.json 파일에 저장됩니다.
  2. 검증 결과 저장:
    • 검증 중 각 배치에 대해 다음 정보를 저장:
      • epoch, batch, ground_truth, predicted_text, val_loss, character_accuracy, word_error_rate, cropped_image_paths
    • 위 정보는 validation_results.json 파일에 저장됩니다.

7. 모델 및 매핑 정보 저장

  1. 베스트 모델 저장:
    • S3의 ocr/best_model 경로에 최신 베스트 모델을 버전별로 저장합니다.
  2. 최종 모델 저장:
    • S3의 ocr/final_model 경로에 최종 모델을 버전별로 저장합니다.
  3. 매핑 CSV 파일 업로드:
    • 로컬에서 갱신된 매핑 CSV 파일을 S3의 ocr/mapping 경로에 버전별로 저장합니다.

8. 디렉터리 정리

  • 학습 중 생성된 임시 디렉터리(체크포인트 포함)를 삭제합니다.
  • 로그 파일, 모델, 매핑 정보는 지정된 경로에 유지됩니다.

9. 주요 계산 함수

  1. character_accuracy:
    • 문자 단위로 정확도를 계산합니다.
    • ground_truth와 predicted_text를 비교하여 정확히 예측된 문자의 비율을 반환합니다.
  2. word_error_rate:
    • 단어 오류율(WER)을 계산합니다.
    • ground_truth와 predicted_text 간의 편집 거리를 사용해 단어 기반 오류율을 반환합니다.

10. 최종 학습 완료

  • 모든 작업이 완료되면 학습이 성공적으로 종료되었음을 출력합니다.
  • 결과는 output/training_results.json, output/validation_results.json, 그리고 S3 경로에 저장된 모델 및 매핑 정보로 확인할 수 있습니다.

2) 코드 작성

ㄹㄹ

 

 

 anconda prompt를 실행
2. jupyter kernelspec list   타이핑
    그렇다면 kernel이 설치되어있는 폴더 주소가 나타난다.
    (본인은 python2 커널을 설치 제거에서 오류가 났기에 두 개의 커널이 나타납니다.)
3. 주소를 찾아 들어가 기존에 설치돼있는 kernel 폴더(ocr_env)를 제거 한 후

IPython 커널 등록 새로 ocr_env 커널을 등록합니다:

conda activate ocr_env
python -m ipykernel install --user --name=ocr_env --display-name "Python (ocr_env)"

 

 

딴거 다 필요없고!!!!!!!!!!!!그냥 주피터노트북 안쓰고 파이썬 파일로 바꿈

 

 

📙 내일 일정

  • 라벨링 파이프라인 자동화