이전 포스트에 이어서 학습데이터를 준비하고 실제 학습하는 과정을 진행해 보겠다.
참고로, 아래 이전 포스트는 Tesseract OCR 엔진의 신경망 학습을 위한 준비 과정을 서술한 것이다.
2021.05.04 - [Development/OCR] - Tesseract OCR 4.x 학습하기 (1)
2. 학습데이터 준비
학습에 필요한 데이터를 다음과 같은 구조로 변경한다.
- ~ (root)
- tesseract (tesseract 4.1.1)
- tessdata # 학습파일(.traineddata) // 다운로드한 tessdata_best 프로젝트를 복사해서 이름을 변경
- langdata # 학습단어(.txt) // 다운로드한 langdata 프로젝트를 복사
- fonts # 학습대상 폰트(. ttf)
- tessdata_best
- langdata
2.1 학습 파일(traindata) 준비
앞에서 언급한 것처럼, 처음부터 다시 학습(Retrain from scratch)이 아닌 미세조정(Fine tune) 방법으로 진행할 예정이기 때문에 기존의 학습된 파일을 준비한다.
학습파일은 GitHub에서 다운로드 받았던 'tessdata_best' 프로젝트에 존재한다. (학습된 전체 학습파일을 제공하는 'tessdata' 프로젝트 데이터 중 최고 성능을 보여준 것들을 'tessdata_best' 프로젝트에 모아둔 것으로 생각하면 될 것이다. 따라서 우리는 'tessdata_best' 프로젝트에 있는 학습파일을 이용한다)
# 기 학습된 학습파일 복사 (root 기준)
$ cp ./tessdata_best/kor.traineddata ./tesseract/tessdata/
2.2 학습 대상 폰트 파일 준비
여기에서는 Windows에서 사용하는 '맑은고딕(regular)'를 이용할 것이다. 다운로드 받은 파일을 './tesseract/fonts/' 경로에 저장한다.
(학습하고자 하는 폰트는 인터넷에서 다양하게 구할 수 있으니 따로 설명하진 않는다.)
# 학습시킬 폰트 파일 복사 (다운로드 받은 경로에서 실행)
$ cp malgun.ttf ~/tesseract/fonts/
2.3 학습 단어(문자열) 준비 (선택사항)
학습에 추가하고 싶은 문자열이 있다면 학습하고자 하는 언어 데이터를 수정하면 된다.
예를 들어, 이 포스트에서처럼 kor 언어를 학습하고자 한다면, langdata 프로젝트의 관련 언어 파일에 원하는 학습 단어를 추가하면 된다.
# 학습에 추가할 단어를 관련 파일에 삽입하기
$ cp -r ./langdata/kor ./tesseract/langdata/kor
$ gedit ./tesseract/langdata/kor/kor.training_text
2.4 작업폴더 생성
다음 단계인 학습데이터를 생성하기에 앞서 작업이 진행될 경로를 생성해 준다.
# 작업폴더 생성 (root 기준)
$ mkdir -p workspace/train # 학습데이터
$ mkdir -p workspace/base_lstm # 기존 학습모델
$ mkdir -p workspace/output # 최종 학습모델
2.5 학습데이터 생성
마지막으로, 다음 코드를 이용해 선택한 폰트 '맑은고딕(regular)' 데이터를 생성한다.
(폰트이름은 파일명이 아니라, 등록된 폰트명이다)
# 맑은고딕 학습데이터 생성
$ src/training/tesstrain.sh \
--fonts_dir ./fonts \
--lang kor \
--linedata_only \
--noextract_font_properties \
--langdata_dir ./langdata \
--tessdata_dir ./tessdata \
--exposures "0" \
--fontlist "Malgun Gothic" \
--output_dir ./workspace/train
3. 학습하기
이제 학습데이터 생성까지 마쳤으니 기존의 모델을 기반으로 학습(Fine tune)을 진행한다.
3.1 기존 학습데이터 변환
# 기존 학습데이터 변환
$ combine_tessdata -e ./tessdata/kor.traineddata ./workspace/base_lstm/kor.lstm
3.2 '맑은고딕' 폰트 학습
# 기존 모델에 전이 학습하기
$ lstmtraining \
--continue_from ./workspace/base_lstm/kor.lstm \
--old_traineddata ./tessdata/kor.traineddata \
--traineddata ./workspace/train/kor/kor.traineddata \
--model_output ./workspace/output/base \
--train_listfile ./workspace/train/kor.training_files.txt \
--max_iterations 3600
결과가 생각보다 너무 안 좋게 나왔다. (여기서부터는 끝없이 이어지는 튜닝의 시간이다)
4. 모델 배포
어쨌든 학습을 했으니, 다음의 코드로 학습의 결과인 모델을 배포한다.
# 학습 모델 생성 및 배포
$ lstmtraining \
--stop_training \
--continue_from ./workspace/output/base_checkpoint \
--old_traineddata ./tessdata/kor.traineddata \
--traineddata ./workspace/train/kor/kor.traineddata \
--model_output ./workspace/output/kor.traineddata
5. 모델 테스트
다음 구문으로 새로 학습한 모델을 이용해 테스트를 진행했다.
# 학습 모델 테스트
$ tesseract ./workspace/images/test01.png stdout \
-l kor --oem 1 --psm 3 \
--tessdata-dir ./workspace/output
좋지 않았던 학습 로그에 비하면 테스트 결과는 그럭저럭 괜찮은 것 같아 보인다.
여기까지 Tesseract OCR에서 사용하는 모델을 기반으로 학습하는 과정을 진행해 보았다.
(Tesseract OCR의 '처음부터 다시 학습'하는 방법이나 또는 '네트워크 최상위만 재 학습'하는 방법은 따로 정리하지 않을 예정이다)
이어서, EasyOCR의 사용자 모델 학습 및 사용 방법에 대한 내용을 정리했다. 자세한 내용은 아래 링크를 참고하기 바란다.
[Development/OCR] - EasyOCR 사용자 모델 학습하기 (1) - 시작하기 전에
'Development > OCR' 카테고리의 다른 글
EasyOCR 사용자 모델 학습하기 (1) - 시작하기 전에 (0) | 2021.05.22 |
---|---|
Tesseract OCR 사용하기 (with command line tools on Ubuntu) (0) | 2021.05.04 |
Tesseract OCR 4.x 모델 학습하기 (1) (2) | 2021.05.04 |
EasyOCR 사용하기 (0) | 2021.04.15 |
Tesseract OCR 사용하기 (with python on Windows) (0) | 2021.04.15 |