Deep Learning/OCR

[#02] 내가 찾은 모델 CRAFT, deep-text-recognition-benchmark

족제비다아 2021. 3. 29. 10:14

OCR 모델을 이용하여 약국이나 편의점에서 살 수 있는 일반의약품의 상품명을 인식해보는 과정을 담아보는 글.

 

#01 글에 언급한 주소들에서 내가 활용할만한 text detection, recognition 모델을 찾아보았다.

 

Text Detection Model - CRAFT

글자 검출 모델은 'Scene Text Detection'이라는 이름의 Task로 컴퓨터 비전 분야에서 연구되고 있으며 paperswithcode 사이트에서 찾아볼 수 있다.(링크) 내가 만들고 싶은 것은 의약품 포장지에 출력된 글자들인데 보통 한글로 구성이 되어있으며 영어나 숫자도 존재할 수 있으므로 Multi-language Text에 대한 데이터셋으로 연구하고 있는 모델을 살펴볼 필요가 있다. 다행히 이와 관련하여 'ICDAR 2017 MLT'라는 데이터셋이 있었다. :)

 

Papers with Code - ICDAR 2017 MLT Benchmark (Scene Text Detection)

The current state-of-the-art on ICDAR 2017 MLT is PMTD*. See a full comparison of 14 papers with code.

paperswithcode.com

위 링크를 타고 들어가면 여러 평가 방법(Precision, Recall, F-Measure)에 대해 각각 순위별로 모델 이름과 논문, 코드 주소를 한눈에 볼 수 있다.

ICDAR 2017 MLT benchmark

최신 기술로 참고할 만한 모델들은(PMTD*, SBD, CharNet H-88, SPCNET, CRAFT)정도가 될 것 같다. 2등이라고 되어있는 Corner Localization 모델 같은 경우는 Precision은 높으나 Recal, F-Measure가 현저히 낮아서 별로 끌리지가 않았다. :<

사실 위에서부터 코드를 보면서 괜찮은 모델을 선택하는 것이 좋지만 나는 Naver Clova AI에서 개발한 모델이라 한국어로 설명된 자료들도 많고 성능도 나쁘지 않은 CRAFT를 선택했다. 코드도 바로 돌려볼 수 있게 pretrained weight도 제공하고 있기 때문에 편리하게 테스트해 볼 수 있었다.

 

clovaai/CRAFT-pytorch

Official implementation of Character Region Awareness for Text Detection (CRAFT) - clovaai/CRAFT-pytorch

github.com

Text Recognition Model - deep-text-recognition-benchmark

아쉽게도 Text Recognition Model 같은 경우는 paperswithcode에 'Scene Text Recognition'이라는 Task로 논문들을 볼 수 있지만 순위를 알 수 있는 leader board는 제공되고 있지 않다. ICDAR에서도 Text Recognition만을 위한 대회를 여는 것이 아니라 데이터셋 별로 대회를 열고 그 대회 속 Task들 중 하나로 recognition 문제가 포함되어 있다.

 

ICDAR 2019 Robust Reading Challenge on Scanned Receipts OCR and Information Extraction

    - Task 2: Scanned Receipt OCR

ICDAR 2019 Robust Reading Challenge on Arbitrary-Shaped Text

    - Task 2: Scene Text Recognition

ICDAR 2019 Robust Reading Challenge on Multi-lingual scene text detection and recognition

    - Task 2: Script Identification

 

ICDAR에서 영수증 글자, 자유로이 배치된 글자, 다국어 글자 등 여러 환경에서 text recognition을 하는 문제를 푼 연구들을 살펴보았을 때 대부분 동일한 모델로 여러 문제를 동시에 풀었고 성능도 좋은 건 대체적으로 좋게 나타나고 있었다.

ICDAR 2019 Robust Reading Challenge on Multi-lingual scene text detection and recognition

하지만 위 사진처럼 ICDAR 대회 결과에는 소스코드가 잘 공개되어있지 않다. 그래서 직접 구글링 해서 찾거나 해야하는데 그중에 코드까지 공개된 모델 TPS-ResNet이 있었고 기쁘게도 역시 Naver Clova AI에서 발표한 모델이었다.

 

clovaai/deep-text-recognition-benchmark

Text recognition (optical character recognition) with deep learning methods. - clovaai/deep-text-recognition-benchmark

github.com

TPS-ResNet이 구현된 프로젝트를 살펴보면 2019년도에 발표한 연구로 기존의 중구난방인 text recognition model들의 framework를 정의하고 기존에 발표된 모델들의 성능을 다시 비교하는 benchmark 논문이자 더 나아가 더 성능이 높은 자신들의 모델을 발표하고 있다.

코드도 잘 정리되어 있어 가져다가 활용하기 편하여 해당 모델을 선택하였다. 하지만! 한국어 데이터셋으로 학습된 pretrained weight가 없으므로 한국어 데이터셋을 구한 다음 이를 가지고 학습시켜야 했다. 그러면 한국어 데이터셋을 구하고 이를 위 모델로 학습시키기 위해 가공하는 전처리 단계에 대한 일지는 다음 글에서 살펴보자 🙂

 

Naver Clova AI 정말 감사합니다 :)


다음 글에서 다룰 내용

- Text Recognition Model을 학습시키기 위한 한국어 데이터셋을 구하는 과정

- 선택한 모델의 입력 형식에 맞게 데이터셋을 가공하는 전처리 과정