본 대회의 주제는 수식 이미지를 LaTex 포맷의 텍스트로 변환하는 문제였습니다. LaTex은 논문 및 기술 문서 작성 포맷으로, 자연 과학 분야에서 널리 사용됩니다. 일반적인 광학 문자 인식(optical character recognition)과 달리 수식인식은 multi-line recognition을 필요로 합니다.
일반적 문장과 달리 수식은 분수의 분자·분모, 극한의 구간 표현 등 다차원적 관계 파악이 필요합니다. 따라서 수식인식 문제는 일반적인 single line recognition 기반의 OCR이 아닌 multi line recognition을 이용하는 OCR 문제로 바라볼 수 있습니다. Multi line recognition의 관점에서 수식 인식은 기존 OCR과 차별화되는 task라고 할 수 있습니다.
-
학습 데이터: 출력물 수식 이미지 5만 장, 손글씨 수식 이미지 5만 장, 총 10만 장의 수식 이미지
-
테스트 데이터: 출력물 수식 이미지 6천 장, 손글씨 수식 이미지 6천 장
-
평가 척도: 0.9 × 문장 단위 정확도 + 0.1 × (1 - 단어 오류율)
-
문장 단위 정확도(Sentence Accuracy): 전체 추론 결과 중 몇 개의 수식이 정답과 정확히 일치하는 지를 나타낸 척도입니다.
-
단어 오류율(Word Error Rate, WER): 추론 결과를 정답에 일치하도록 수정하는 데 단어의 삽입, 삭제, 대체가 총 몇 회 발생하는 지를 측정하는 척도입니다.
-
12팀 중 1위
-
Public LB Score: 0.8574 / Private LB Score: 0.6288
-
1등 솔루션 발표 자료는 이곳에서 확인하실 수 있습니다.
-
수식 인식 결과 예시
# clone repository
git clone https://github.com/bcaitech1/p4-fr-sorry-math-but-love-you.git
# install necessary tools
pip install -r requirments.txt
[dataset]/
├── gt.txt
├── tokens.txt
└── images/
├── *.jpg
├── ...
└── *.jpg
[code]
├── configs/ # configuration files
├── data_tools/ # modules for dataset
├── networks/ # modules for model architecture
├── postprocessing/ # modules for postprocessing during inference
├── schedulers/ # scheduler for learning rate, teacher forcing ratio
├── utils/ # useful utilities
├── inference_modules/ # modules for inference
├── train_modules/ # modules for train
├── README.md
├── requirements.txt
├── train.py
└── inference.py
$ python train.py --train_type single_opt --config_file './configs/EfficientSATRN.yaml'
$ python train.py --train_type dual_opt --config_file './configs/EfficientSATRN.yaml'
$ python train.py --train_type distillation --config_file './configs/LiteSATRN.yaml' --teacher_ckpt 'TEACHER-MODEL_CKPT_PATH'
$ python train.py --train_type single_opt --project_name <PROJECTNAME> --exp_name <EXPNAME> --config_file './configs/EfficientSATRN.yaml'
'single_opt'
: 단일 optimizer를 활용한 학습을 진행합니다.'dual_opt'
: 인코더, 디코더에 optimizer가 개별 부여된 학습을 진행합니다.'distillation'
: Knowledge Distillation 학습을 진행합니다.
- 모델 configuration은 아키텍처별로 상이하며, 이곳에서 해당 예시를 보실 수 있습니다.
- 학습 가능한 모델은 EfficientSATRN, EfficientASTER, SwinTRN, LiteSATRN 입니다.
project_name (str)
: (optional) 학습 중 Weight & Bias 로깅 툴을 활용할 경우 사용할 프로젝트명
exp_name (str)
: (optional) 학습 중 Weight & Bias 로깅 툴을 활용할 경우 사용할 실험명
$ python inference.py --inference_type single --checkpoint <MODELPATH.pth>
$ python inference.py --inference_type ensemble --checkpoint <MODEL1PATH.pth> <MODEL2PATH.pth> ...
single
: 단일 모델을 불러와 추론을 진행합니다.ensemble
: 여러 모델을 불러와 앙상블 추론을 진행합니다.
-
앙상블 추론시 다음과 같이 모델의 경로를 나열합니다.
--checkpoint <MODELPATH_1.pth> <MODELPATH_2.pth> <MODELPATH_3.pth> ...
'greedy'
: 그리디 디코딩 방법으로 디코딩을 진행합니다.'beam'
: 빔서치 방법으로 디코딩을 진행합니다.
- NOTE. DecodingManager를 사용할 경우에만 활용됩니다.
- NOTE. 높은 값을 지정할 수록 추론 속도가 빨라지만, 일시적으로 많은 저장 공간을 차지합니다.
Github Issues |
Github Discussions |
Github Pull Requests |
Experiments Logging(W&B) |
고지형 [email protected] |
김준철 [email protected] |
김형민 [email protected] |
송누리 [email protected] |
이주영 [email protected] |
최준구 [email protected] |