Wrap-up Report

Naver Boostcamp AI Tech

P stage

윤준호 (T1138)

TitleTaskDate
수식 인식기NLPOptical Character Recognition

최종 결과 : 0.5639 (팀 순위 7위)

bcaitech1/p4-fr-connectnet
P stage 4 대회 진행 과정과 결과를 기록한 Team Git repo 입니다. 대회 특성상 수정 혹은 삭제된 부분이 존재 합니다 Ground rule pip install -r requirements.txt git clone https://github.com/bcaitech1/p4-fr-connectnet.git python ./train.py --c config/SATRN.yaml python ./inference.py --checkpoint ./log/satrn/checkpoints/0050.pth
https://github.com/bcaitech1/p4-fr-connectnet

<기술적인 도전>

1 . 전략

1.1 Task 분석과 접근법 도출

1.2 다양한 실험을 통해 성능 향상 시도

2. 모델 아키텍처 (backbone / encoder / decoder)

1) SATRN

  • DenseNet / Transformer (encoder + decoder)
    • LB: 0.7888
    • optimizer : Adam (learning_rate = 5e-4)
    • loss: CrossEntropyLoss
    • hyperparameters : batch : 16, epochs : 50
    • image_size: (128, 256)
    • 추가로 시도한 것
      • Dense layer depth 증가
      • 다양한 Augmentation 적용
      • positionalencoding2D 을 adaptive2DpositionEncoder로 개선
      • hidden dimension, filter dimension 증가

2) Aster

  • CNN / Bi-LSTM / LSTM
    • LB : 0.7917
    • loss : CrossEntropy
    • optimizer : Adam (learning_rate = 5e-4)
    • hyperparameters : batch : 32, epochs : 50
    • image_size: (80, 320)
    • 추가로 시도한 것
      • Deformable conv layer

        주어진 데이터셋에는 기울어진 수식들이 많이 들어있었음.

        기존의 논문에서는 STN을 통과하여 이미지를 정렬시킴 → 연산량이 많다

        마지막 3 block에서 conv layer를 Deformable conv layer로 바꾸어 성능 향상을 봄.

3) CSTR

  • Naive CNN / CBAM & SADM / Multiple Linear
    • LB : None
    • Valid Acc : 0.28 ~ 0.31
    • optimizer : AdaDelta (learning_rate = 0.0 ~ 1.0 CosineAnnealingWarmUp)
    • loss : LabelSmooth (ratio = 0.1)
    • hyperparameter : batch 100, epochs : 50
    • image_size : (48, 192)
    • 추가로 시도한 것
      • 실험초반 오버피팅 이슈 발생 → dropout(p = 0.1), weight_decay (1e-3) 설정
      • 이후 오버피팅은 일어나지 않았으나 성능 이슈 발생
      • CNN Layer의 dim을 2배씩 늘려 전체적 파라미터를 2배로 size up → 실패

3. 앙상블

4. 시도했으나 잘 되지 않았던 것들

<프로젝트 회고>

유사한 테스크의 논문들을 탐색하며, 주어진 베이스라인에서 벗어나 새로운 모델들을 많이 시도해봤다는 점에서 뿌듯한 프로젝트였다. 하지만 결과적으로 가장 좋은 성능이 나온 모델은 베이스라인인 SATRN 아키텍처를 수정한 것이었고, 우리 팀은 (실패한) "모델의 탄생과 죽음"이라는 제목의 발표를 제작하게 되었다. 비록 성능 향상에 영향을 주진 못했지만, 문제를 인식하고 새로운 접근들을 시도한 후 실패한 원인을 분석하면서 많이 성장할 수 있었기 때문이다.

이번 프로젝트로부터 얻은 가장 큰 교훈은, 아주 유사해보이는 테스크일지라도 SOTA로 검증된 레퍼런스 모델을 가져다 쓸 때는 그 궁합을 철저하게 분석해야한다는 것이다. 텍스트 multi-line recognition에서 아주 좋은 성능을 보이는 CSTR을 구현하고 수식 데이터셋에 적용했지만 성능은 별로 좋지 않았다. 기존 CSTR의 경우 알파벳과 숫자로 37개의 토큰과 25의 문장 최대 길이로 학습되고 예측에 사용된 반면, 수식 데이터셋에는 무려 245개의 토큰과 254의 문장 최대 길이로 학습되고 예측했기 때문에, NLP transformer가 아닌 CNN으로 토큰을 예측하는 CSTR의 모델이 각각 7배, 10 배에 달하는 토큰, 문장 최대 길이의 복잡도를 따라가지 못하고 underfit이 발생한 것으로 해석된다. 대회 성적은 중위권이지만, 성공과 실패를 통해 성장한 지표로는 1등이 아니었나 생각한다.