Week17 Day83

 

Goal

CNN 모델로 이미지에서 feature map을 추출하고 언어 모델에 입력하여 token(수식)을 예측한다.

To do

앞으로 어떻게 프로그래밍할 것인지 계획을 아래와 같이 세웠다.

  • main.py
    • train과 inference를 실행
  • dataset.py
    • tokenizer 만들기
      학습 데이터에 없는 token이 있을 수 있으므로 wikipedia를 참고하여 vocabulary를 만들자.
    • image, label 가져오기
      세로의 길이가 긴 이미지가 있는데 이 경우 90도 회전시킨다.
      label은 a \cdot b = a ^ T b와 같은 ground truth를 [1, 3, 6, 19, ... 2]와 같이 token id로 변환한다.
    • train, validation 분리
  • model.py
    • CNN 모델 만들기
      pytorch에서 제공하는 pretrained model은 수식 이미지의 feature를 추출하기 적합하지 않다.
    • 언어 모델 가져오기

consideration

  • EDA를 통해 얻은 정보 중 위 아래로 반전이 된 이미지가 존재했다.
    이런 이미지는 학습에 도움이 되지 않으며 올바른 feature map을 얻기 힘들 것이다.
    이 경우를 해결하기 위해 먼저 학습을 진행한 후 score가 낮은 이미지를 확인한다.
    만약 이미지가 위 아래로 반전이 되었다면 올바르게 바꾸어 주고 다시 학습시킨다.
  • CNN 모델을 사전학습해야 할까?
    임의로 초기화된 weight를 사용하는 것은 모델이 느리게 학습될 것이다.
    pseudo label을 만들어서 학습을 해야 될까? 고민이 된다.

hypothesis

  • 수식의 길이가 긴 경우 잘 예측이 되지 않을 것이다.
    길이의 평균이 17이다.
    outlier로 길이가 252인 경우가 있다.
    하지만 이처럼 매우 긴 경우는 드물다.
    아직 학습을 해보지 않아서 모르지만 만약 평균 길이 17도 길어서 예측이 잘 되지 않는다면 어떻게 해야 될까?
    즉, 수식의 길이가 긴 경우 어떻게 성능을 올려야 할까?
    짧은 길이의 수식을 가진 이미지를 오른쪽으로 합쳐서 길이가 긴 새로운 수식 이미지를 만들면 어떨까?
    테스트 이미지가 주어지지 않아서 수식의 길이가 어떤지 전혀 모른다.
    따라서 긴 경우도 잘 예측할 수 있는 모델을 만들어야 한다.