본문 바로가기

머신러닝/OCR

[논문 리뷰] SynthTIGER 리뷰

반응형

SynthTIGERSynthetic Text Image GEneratoR Towrads Better Text Recognition Models 로,

Clova ai 에서 발표한 Scene Text Recognition (STR) Dataset 생성 방법에 대한 논문입니다.

OCR을 오래 하다보니 OCR 모델뿐만 아니라 데이터셋 생성도 매우 중요하다고 생각하게 되었습니다.

언어별로 다른 문자 수, 폰트, 문자 크기, 문자의 길이 등 너무나 다양한 특성을 가진 text를 학습시키기 위해

어떤 augmentation이 필요하고 어떤 합성 데이터 생성 방법이 필요할지 자연스레 고민해보게 되었는데,

제가 느꼈던 어려움들이 논문에서 하나하나 언급되는 것을 보고 반가운 기분이 들었습니다.

 

 

+ 참고

  • OCR은 크게 Text Detection과 Text Recognition 두 가지로 나눌 수 있습니다. SynthTIGER는 그 중에서 Recognition을 위한 training data 생성 방법임을 기억하고 읽으면 좋을 것 같습니다.
  • 초록색 글씨는 완둑콩의 개인적인 의견입니다.
  • 잘못된 내용이 있을 수 있습니다. 잘못된 내용은 지적해주시면 감사하겠습니다!

 

SynthTIGER는 오픈소스로 dataset 생성 코드를 공개하고 있으며 dataset 또한 공개해주었습니다.


Abstract

주요 내용을 정리해보면 다음과 같습니다.

  • 기존의 유명한 두 가지 Text Dataset Generator 비교
    1.  MJSynth (MJ)
    2.  SynthText (ST)

-> 'SynthTIGER는 MJ, ST 각각으로 만든 데이터셋을 합친 것보다 더 좋은 성능의 데이터셋을 만들 수 있음'

위 두 방식은 자주 언급될 예정이니 기억해두도록 합시다.

  • data 생성 시 두 가지 문제점 해결 방법
    1. text 이미지 데이터가 너무 짧거나 긴 문자열로 만들어지는 문제
    2. 잘 쓰이지 않는 문자의 경우 character 분포에 대한 문제

-> 합성 text 데이터를 만들 때 흔히 발생하는 문제점에 대한 해결 방법을 제시함.


1. Introduction

  • 딥러닝을 이용한 OCR의 성능은 large-scale 데이터를 학습해 많이 향상 되었음
  • 일반적으로 OCR 학습 시, 합성 이미지를 사용함
    • 텍스트의 길이, 폰트, 배경 등 다양한 특징으로 exponential한 조합이 만들어지므로, 직접 모으기도, 일일이 annotation 하는 것도 불가능하기 때문
  • Detection 과 Recognition은 비슷하지만 다른 training data를 필요로 함
    • Scene Text Detection (STD) 의 경우 : 다양한 text를 가진 raw scene이나 document 등
    • Scene Text Recognition (STR) 의 경우 : real world에 존재할 법한 다양한 스타일의 텍스트의 합성 데이터

-> 이 논문은 STR을 위한 합성 데이터 생성에 초점을 둠

Scene Text Detection 은 STD, Scene Text Recognition은 STR로 계속 언급되니 둘을 잘 구분해둡시다.

 

 

  • MJ
    • word box 이미지를 만듦
    • 다른 text noise가 없음
  • ST
    • 한 scene image안에 다양한 word box들이 포함된 이미지를 만듦
    • 다른 text noise를 포함할 수 있음

  위 그림에서 표시해놓은 것이 text noise라고 보면 됩니다. MJ의 경우 single word만 존재하는 것을 알 수 있습니다.

  학습시킬 때 noise가 적절하게 포함된 데이터가 더 좋을 것입니다.

  • 최근 연구에선 각 방식의 장점을 이용하기 위해 MJ, ST에서 각각 얻은 데이터셋을 그냥 합침
    • 각자 사용할 때보다 STR 성능이 더 좋긴 함
    • 그러나 이런 방식은 training data 양을 증가시키고, 두 데이터셋 간 co-covered data에 편향이 생기게 함
  • SynthTIGER
    • MJ 처럼  word box image를 만듦
    • ST 처럼 text noise를 줄 것 

SynthTIGER는 MJ의 데이터 형태를 따르고, noise는 ST 처럼 text noise를 줍니다.

 

  • 기존 data generator의 문제점
    1. 너무 짧거나 긴 단어
    2. 자주 쓰이지 않는 문자

-> 상대적으로 low sampling되므로, 이런 단어나 문자들에 대해서는 성능이 좋지않음

-> SynthTIGER는 이에 대한 augmentation을 적용함

쉬운 예로 한글 글자 중 왅뚟쿙 등 잘 쓰이지 않는 글자가 있습니다.

이런 외계어(?)를 제외하더라도 상대적으로 더 많이 쓰이거나 더 적게 쓰이는 글자가 있을 수 밖에 없습니다.


2. Related Work 

MJ

  • single word를 담은 image patch를 생성함
  • 아래 6단계를 거침
    1. Font Rendering
    2. Border/Shadow Rendering
    3. Base coloring
    4. Projective Distortion
    5. Natural Data Blending
    6. Noise

ST

  • STR을 위한 데이터셋 생성에 STD를 이용하는 방식
  • 아래 3단계를 거침 
    1. text와 배경 이미지를 샘플링함
      • color와 texture에 따라 segment
    2. text 영역의 text를 region color에 따라 채움
    3. 랜덤하게 선택된 폰트와 transformation으로 text를 렌더링함
  • 기존 text-background alignment를 위한 segmentation 기술은 prediction에 오류가 있을 수 있음
  • 최근 SynthText3D와 UnrealText 같은 연구는 이런 문제를 3D 그래픽엔진으로 이미지를 합성하여 보여줌
    • 실험결과는 합성 데이터를 사용했을 때 text alignment 오류 없이 text detection 성능이 눈에 띄게 향상됨을 보여줌

-> 그러나, 가상의 3D 세계에서 만든 데이터셋이 실제로 text detection이 아닌 recognition에도 긍정적인 영향을 줄지는 확실하지 않음

 


3. SynthTIGER

  • text rendering module, text selection 이렇게 주요 두 가지 컴포넌트가 있음
  • text selection module :  미리 정의된 어휘들(L)에서 target text(T)를 샘플링 함
  • text rendering module : 다양한 폰트들(F), 배경(재질) (B), color map(C)로 텍스트 이미지를 생성함

3.1 Text Rendering Process

  • 텍스트의 realness를 반영해야 함
    • micro perspective - word box 생성 시
    • macro perspective - scene text bos 생성 시
  • Synth TIGER는 target text(T)noisy text를 렌더링 하고 text region의 realness를 반영해 둘을 합침

text rendering process

각 단계에 해당하는 그림을 같이 참고해서 보면 도움이 됩니다.

(a) Text Shape Selection

1차원의 문자 sequence의 2차원 모양을 결정하는 단계

  • 먼저 T의 문자 모양을 잡은 뒤, 2D 공간의 특정 line에 left->right order로 렌더링 함
  • 공간적 순서를 정하는 것도 중요함
    • straight text의 경우 : 기본적으로 left-to-right order에 특정 margin을 적용함
    • curved text의 경우 : parabolic curve를 적용함

(b) Text Style Selection

text의 색상과 질감을 정하고 추가적인 text effect를 주입하는 단계 (bordering, shadowing, ectruding 등)

  • color map (C)은 텍스트 이미지에 있는 색상의 실제 분포를 측정한 것
    • MJ는 ICDAR03 데이터셋에서 추출한 color map 사용
    • ST는 IIIT 데이터셋에서 추출한 color map 사용 -> SynthTIGER도 ST의 color map을 사용함
  • color 가 정해지면 text 색을 바꿈
    • 실제 text는 한 가지 색상으로만 이루어져 있지 않음
    • 다양한 texture source(B)를 사용하고 B를 랜덤하게 정한 뒤, 랜덤하게 잘라서 text에 적용함
  • boundary style도 랜덤하게 적용됨

 

(c) Transformation

같은 text도 view angle에 따라 다르게 보일 수 있음

  • SynthTIGER는 이를 다양한 transformation function을 사용해 반영함
    • stretch, trapezoidate, skew, rotate transformation
  • text detector를 사용한 결과에 랜덤한 margin을 추가함

 

(d) Blending

  1. 먼저 배경 이미지를 정함
    • color map (C)와 texture databse(B) 에서 랜덤하게 색상과 재질을 결정
  2. target text (T)를 포함한 foreground 이미지와 noise text인 mid-ground 이미지를 만듦
    • foreground : target text / mid-ground: noise text 를 잘 연관지어 기억해둡시다.
  3. mid-ground 이미지와 배경 이미지를 합침
    • 배경 이미지를 텍스트 이미지 사이즈와 맞게 자르고 noise text를 랜덤하게 shift 함
    • 두 이미지(mid-ground와 배경 이미지) 다양한 blending method 중 하나를 적용해 합침
  4. 마지막으로 이 합쳐진 이미지 위에 foreground text이미지를 오버레이 함
    • 이 때도 마찬가지로 blending method 중 하나를 적용함

[문제점]

  • 텍스트와 배경이 구분이 잘 안 될 수 있음 (각각 만들어졌기 때문에 우연히 비슷하게 만들어졌다면)

[해결책]

  • Flood-Fill 알고리즘 사용
    • T 내부 픽셀에서부터 시작해서, text boundary를 방문한 수를 세고, 전체 boundary 픽셀에 대한 비율을 구함
    • 모든 T 픽셀이 사용될 때까지 반복
    • 이 비율이 특정 threshold를 넘으면, target text와 배경을 구별할 수 없다고 판단하고 생성된 이미지를 버림

+ 참고

 

플러드 필 - 위키백과, 우리 모두의 백과사전

4방향 재귀적 플러드 필 플러드 필(영어: flood fill) 혹은 시드 필(영어: seed fill)은 다차원 배열의 어떤 칸과 연결된 영역을 찾는 알고리즘이다. 이 알고리즘은 그림 프로그램에서 연결된 비슷한 색

ko.wikipedia.org

flood-fill 은 다차원 배열의 어떤 칸과 연결된 영역을 찾는 알고리즘으로, 그림판에서 '채우기' 도구에서 사용된다.

 

(e) PostProcessing

합성 데이터 생성을 마무리하는 단계

  • 다양한 visual noise를 적용함
    • gaussian noise, gaussian blur, resize, median blur, jpeg compression 등

3.2 Text Selection Strategy

  • MJ, ST는 둘 다 user-provided 어휘를 사용해 T를 랜덤하게 샘플링 함
  • SynthTIGER는 두 가지 추가적인 방법을 더 사용함
    • text 길이 분포 조절,  문자 분포를 조절

Text Length Distribution Control

  • lexicon에서 랜덤하게 뽑은 텍스트의 길이 분포가 실제 분포를 의미하진 않음
  • SynthTIGER는 확률 분포로 길이 분포를 augmentation 함
  1. 정해놓은 maximum 길이 내에서 T length를 랜덤하게 정해놓음
  2. L에서 랜덤하게 T를 뽑음
  3.  길이가 T legth와 같을 때까지 다음을 반복함
    • T length보다 길면 : T length이 되도록 끝을 자름
    • T length 보다 짧으면 : word를 끝에 이어 붙임

-> 이렇게 만들어진 text는 대부분 아무 의미없는 문자이니 사용에 주의해야 함

 

Text Distribution Control

  • 중국어나 일본어같이 문자가 많은 언어는 rare character를 충분히 샘플링하기 부족함
  • SynthTIGER는 확률 분포를 사용해 문자 분포를 augmentation함
  1. 단어에서 문자를 랜덤하게 뽑음
  2. 해당 문자를 가진 단어들을 샘플링 함

SynthTIGER에 대해 간단하게 정리해보았습니다.

더 자세한 내용과 실험 결과는 논문을 참고하시면 좋을 것 같습니다!

이전에 합성 텍스트 이미지 데이터셋을 어설프게 만들고 학습해보았을 때, 이미지에 따라 추론 성능이 천차만별이었는데요, 이런 데이터 생성에 관한 방법을 알고 시도해 보는 게 좋을 것 같다는 생각이 들었습니다.

개인적으로 데이터 셋을 만들 때 느꼈던 폰트의 다양성, text 길이 설정, 자주 쓰이지 않는 문자에 대한 처리 문제에 공감하면서 읽었습니다. MJ, ST 같은 기존의 합성 데이터 생성기와 더불어, 이렇게 데이터셋 생성에 대해서도 자세히 다루는 연구가 존재한다는 걸 알게되었습니다. 

반응형

'머신러닝 > OCR' 카테고리의 다른 글

EasyOCR 사용 방법  (7) 2022.01.16
pytesseract 사용방법  (0) 2021.11.04
EasyOCR 소개  (0) 2021.10.10
Tesseract OCR 5.0 Windows용 학습 방법  (23) 2021.08.26
Tesseract OCR  (0) 2021.05.08