Skip to content

'STEFANN' (Roy et al., 2020) implementation from scratch in PyTorch

Notifications You must be signed in to change notification settings

KimRass/STEFANN

Repository files navigation

'STEFANN' (Roy et al., 2020) implementation from scratch in PyTorch

Samples

FANnet

  • 독특한 폰트에 대해서는 아무리 많이 학습을 시켜도 이미지를 잘 생성하지 못하는 것으로 확인할 수 있었습니다.

Average SSIM

  • "resources/fannet.pth":
    • 0.5215 on validation set

Implementation Details

Main

  • M2 MacBook에서 PyQt5가 작동하지 않아 PyQt6로 변경했습니다.
  • 원본 코드에서는 텍스트가 배경보다 밝을 경우 제대로 작동하지 않았는데, 바운딩 박스를 생성하기 전에 Tab 키를 통해 이미지를 반전시킨 후 사용하면 잘 작동하도록 코드를 수정했습니다.

FANnet

  • 공식 저장소에서는 TensorFlow를 사용했지만 저는 PyTorch를 사용해 구현했습니다.
  • 데이터셋에서는 숫자와 알파벳 대소문자가 있지만 논문과 공식 저장소에서는 26개의 알파벳 대문자만을 사용해 학습시켰습니다. 저는 62개의 모든 문자를 사용해 학습시켰습니다.
  • 논문과 공식 저장소에서는 one-hot encoded label에 fully-connected layer를 사용했지만 label encoding과 embedding layer를 사용했습니다. 이 레이어 다음에는 ReLU activation function을 사용하지 않는 편이 모델의 성능이 더 좋았습니다.
    self.label_embed = nn.Embedding(N_CLASSES, dim)
    
  • 논문과 공식 저장소에서는 마지막 레이어에서 ReLU activation function을 사용했지만 저는 input tensor를 $[-1, 1]$로 normalize했기 때문에 hyperbolic tangent를 사용했습니다.
  • 논문과 공식 저장소에서는 L1 loss를 사용했지만 ("The network minimizes the mean absolute error (MAE).") 저는 L2 loss를 사용했습니다. L2 loss가 L1 loss보다 수렴 속도가 더 빨랐습니다.
  • Instance normalization을 사용해 봤지만 오히려 학습이 잘 이루어지지 않아 제외했습니다.

Theoretical Background

SSIM (Structural SIMilarity)

$$\text{SSIM}(x, y) = \frac{(2\mu_{x}\mu{y} + c_{1})(2\sigma + c_{2})}{(\mu_{x}^{2} + \mu_{y}^{2} + c_{1})(\sigma_{x}^{2} + \sigma_{y}^{2} + c_{2})}$$

libraqm Installation

  • For the error saying KeyError: 'setting text direction, language or font features is not supported without libraqm', run pip install --upgrade Pillow --global-option="build_ext" --global-option="--enable-raqm"

References

About

'STEFANN' (Roy et al., 2020) implementation from scratch in PyTorch

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published