2019. 6. 16. 16:00ㆍ관심있는 주제/OCR
네이버 크로버에서 쓴 OCR논문이다.
요즘 OCR 관련 상위에 있는 팀이기 때문에 열심히 배워야겠다.
Abstract
최근에 Scene text detection은 Neural Network를 기반으로 한 방법이 급상승하고 있다.
이전 논문들은 엄격한 word-level로 박스를 만드는 것이 때문에 임의의 모양으로 있는 text 영역을 표현하기에는 어려웠다.
본 논문에서는, 문자 사이의 각 문자와 affinity을 탐구함으로써 텍스트 영역을 효과적으로 검출할 수 있는 new scene text detection 방법을 제안한다고 한다.
결국 chr들을 잘 잡은 다음에, 다시 잘 word로 바꿔주는 것 같다.
각각의 character level annotation의 부족을 극복하기 위해,
제안된 프레임워크는 2가지 방법으로 이용한다고 합니다.
- 합성 영상에 대해 주어진 Character level annotation
- 학습된 중간 모델에 의해 획득된 실제 영상에 대한 추정된 character-level ground-truths
글자들 사이에 affinity를 추정하기 위해서, 네트워크는 새롭게 제안된 affinity에 대한 representation을 훈련해야 한다고 하네요.
1. Introduction
현재 Scene text detection에 대해서 많은 관심이 있는데요.
- instant translation
- image retrieval
- scene parsing
- geo-location
- blind-navigation
위에서 말한 것들은 요즘 딥러닝이 발전하면서 좋은 성능을 내고 있습니다.
하지만 이런 것들은 현재 word level bounding box로 국한시켜서 훈련시킵니다.
이러다 보니, 다양한 어려움이 있는데요.
- curved text
- deformed text
- extremely long text
이러한 것들을 만약character-level로 인식하게 하면 bottom-up 방법으로 연속적인 Character를 연결함으로써 많은 장점이 있다고 합니다
하지만 이러한 데이터셋은 존재하지 않는다는 거....
그래서 이렇게 Character-lebel로 만드는 작업은 결국 사람이 해줘 야하기 때문에 비용이 많이 든다는 어려움이...
이 논문에선, 개별 character 영역을 국한하는 새로운 text detector 와 detected 된 characters를 하나의 text 객체로 연결하는 방법에 대해서 제안한다고 합니다.
여기서는 CRAFT ( Character Region Awareness For Text detection) 것이 있는데,
그것은 character region score와 affinity score를 만드는 CNN이라고 합니다.
Region Score
- 이미지에서 개별 characters를 국한하는 데 사용합니다.
affinity Score
- 각각의 character를 하나의 instance로 그룹을 해줄 때 사용한다고 합니다.
위에서 말한 character 수준의 annotation의 부족을 보충하기 위해, 실제 word level 데이터셋에서 존재하는 character level ground truths를 추정하는 weakly supervised learning을 제안한다고 합니다.
즉 self training을 통해서 사람 손이 덜 타게 하겠다는 것 같습니다. 비용절감
Weakly-supervised: Bootstrapping 또는 self-training이라고도 불림. 적은 수의 샘플에서 시작해서, classifier를 만들고, positive example을 예측해서 labeling을 하고 다시 re-training을 함으로써 classifier를 성장시킨다.
출처: https://khanrc.tistory.com/entry/Semisupervised-Weaklysupervised [khanrc's blog]
사용한 데이터로는 ICDAR ( validation 하기 위한 용)
MSRATD500, CTW-1500 TotalText datasets (long, curved, arbitrarily shape text 같이 어려운 경우가 많은 것들)을 통해서 제안한 모델의 신뢰성을 보여주겠다고 합니다.
2. Related Work
Regression-based text detectors
텍스트 같은 경우 불규칙한 모양을 가지고 있기 때문에, 이러한 문제를 해결하기 위해 TextBoxes는 다양한 텍스트 모양을 효과적으로 캡처하기 위해 복잡한 커널과 앵커 박스를 수정했다.
DMPNet은 4각 슬라이딩 윈도를 통합하여 문제를 더욱 줄이려고 노력했다.
최근에는 Rotation-Sensitive Regression Detector(RSDD) convolution filter를 능동적으로 회전시키면서 회전 불변성 한 feature를 완전히 사용하는 방법이 제안되기도 했다.
하지만 이러한 방법론들은 가능한 shape를 포착하는데 구조적 한계가 있다.
Segmentation-based text detectors
픽셀 단위에서 텍스트 영역을 찾기 위한 방법론이다.
word bounding area를 추정함으로써, text를 찾는 방법론은 (Multi-Scale FCN , Holistic-prediction, PixelLink) 이 제안됐다.
SSTD는 feature level에서 배경 간섭을 줄임으로써, text 관련 영역을 향상하는 attention mechanism을 사용하여 regression과 segmentation 둘 다 로부터 장점을 얻으려고 노력했다.
최근에는 TextSnake 기하학적인 특정과 함께 중안 선과 text 영역을 예측함으로써, text 객체를 탐지하는 것을 제안하기도 했다.
End-to-end text detectors
이 방법론은 인식 결과를 leveraging 함으로써, detection 정확도를 향상하려는 detection과 recognition 모듈을 동시에 학습하려는 방법론이다.
FOTS , EAA / MASK TextSpotter
하지만 머 여러 가지 설명이 있지만, 아직은 완벽하지 않은 방법론이라서, 패스
Character-level text detectors
이 논문은 Character 수준 detector를 훈련시키는 Weakly supervised framework를 사용하는 Wordsup에서 영감을 받았다고 합니다.
그러나 WordSup의 단점은 character representation이 사각형 anchors로 형성된다.
이러한 것은 다양한 카메라 각도에 따라서 야기되는 characters의 변형 관점에서 취약하게 된다.
게다가 뼈대 구조로 제한된다( anchor box 수와 그 사이즈를 제한하는)
3. Methodology
주요 목적은 결국 natural 한 이미지를 각각의 개별 문자로 정확하기 국한하는 것이다.
character 영역과 글자들 사이에서 affinity를 예측하기 위한 DNN을 훈련시키는 것이다.
그리고 이러한 것을 하고 싶지만 데이터가 없으니 weakly supervised 방법으로 필요한 데이터를 모으겠다고 합니다.
뼈대는 VGG16 + Batch Normalization을 기반한 FCN을 썼다고 합니다.
Decoding Part에서는 low level features를 통합하기 위한 U-NET과 같은 Skip Connections을 가지고 있다고 합니다.
마지막 결과물에는 2가지 채널이 있습니다.
1. region score, 2. affinity score
3.2. Training
3.2.1 Ground Truth Label Generation
각 train 이미지에 대해 region score에 대한 Ground Truth label과 character level bouding boxes의 affinity score를 생성합니다.
Region Score | Affinity Score |
주어진 픽셀이 문자의 중심일 확률 | 인접한 문자들 사이의 공간의 중심 확률 |
각각에 레이블을 지정하는 이진 분할 맵과 달리
픽셀 별로, 우리는 Character 중심의 확률을 가우스 heatmap으로 인코딩합니다.
이 heatmap representation은 엄격하기 bounded 되지 않은 ground truth 영역을 다룰 때 높은 신뢰성 때문에 Pose estimation 작업에도 사용한다고 합니다.
heatmap representation 사용하여서 region score와 affinity score를 학습한다고 합니다.
bounding box 안에서 각각의 픽셀에 대해서 직접적으로 가우시안 분포를 계산하는 것은 시간이 너무 많이 소요된다.
이미지에서 character bounding box는 일반적으로 잘 왜곡되기 때문에,
다음과 같은 과정을 approximate 하고 region score와 affinity score에 ground truth를 생성하는 단계가 필요하다.
다음과 같은 과정
- prepare a 2-dimensional isotropic Gaussian map.
- compute perspective transform between the Gaussian map region and each character box.
- warp Gaussian map to the box area.
affinity score의 ground truths를 위해, affinity boxes는 위에 있는 그림처럼 인접한 character boxes를 사용해서 정의됩니다.
각각의 character box의 반대편 corner와 연결하기 위해서 대각선을 그림으로써, 우리는 두 개의 삼각형을 생성할 수 있는데, 이 삼각형을 상·하위 문자 삼각형이라고 부를 것입니다.
그런 다음, 인접한 각 문자 상자 쌍에 대해, 상·하 삼각형의 중심을 상자의 모서리로 설정하여 affinity box를 생성합니다.
이렇게 제안된 ground truth 정의는 작은 receptive fields 사용함에도 불구하고, 크거나 긴 text 객체를 충분히 탐지할 수 있는 모델이 되게 합니다.
box regression 같은 경우에는 이렇게 하려면, 큰 receptive field가 필요하게 되고요.
character-level detection은 전체 text 객체 대신에 오로지 intra-character와 inter-character에 초점을 맞추는 convolution filter를 가능하게 만듭니다.
3.2.2 Weakly-Supervised Learning
현재 데이터셋들은 word level annotation을 가지고 있습니다.
그러므로 각 word level annotation을 weakly supervised manner을 통해서 character box를 생성해야 합니다.
실제 이미지에서 word level annotation이 주어졌을 때, 학습된 중간 모델이 character-level bounding box를 생성하기 위해서 cropped(잘린) word images의 character region score를 생성합니다.
중간 모델의 예측의 안정성을 위해서, 각 단어 박스에 대한 confidence map의 값이 탐지된 chracter를 학습 도중에 학습한 가중치를 사용한 ground truth characters의 수를로 나눈 값이 비례하여 계산된다.
해당 내용은 오른쪽 상단에 대해서 이야기를 하는 것 같다.
예를 들어 중간에 보면 글자가 원래는 7개인데, 5개로 나눠졌으므로 confidence map의 값은 5/7로 결국 1이 되면 될수록 좋아지는 수인 것 같다.
Characters로 쪼개는 과정을 다음과 같습니다.
- 실제 이미지로부터 word-level image를 cropped 합니다.
- 지금까지 훈련된 모델로 region score를 예측합니다.
- character 영영들을 쪼개기 위해 watershed algorithm을 사용합니다.
- Region을 포함하는 character bounding box를 만듭니다.
- character box의 좌표를 cropping step으로부터 역변환을 사용하여 실제 이미지 좌표로 바꿔줍니다.
region score와 affinity score에 대한 pseudo-ground truth는 Figure 3(위위 사진)에 의해서 만들어집니다.
weak-supervision을 사용한 모델로 훈련될 때, 불완전한 pseudo-ground truth를 훈련시킬 수가 있습니다.
만약 해당 모델이 완벽하지 않은 region score로 훈련되면, 결과물 역시 character 영역이 blurred 하게 됩니다.
이것을 예방하기 위해 모델에 의해서 생성된 각각의 pseudo-Ground Truth 퀄리티를 측정합니다.
다행히 word length와 같은 text annotation이라는 강한 힌트가 있다.
대부분의 데이터셋에서는 단어들의 표기들이 제공되고, 단어들의 길이를 pseudo ground truth 신뢰도를 평가할 때 사용할 수 있다!
train data에서 w의 word level 주석이 달린 게 있다고 할 때,
R(w) : bounding box region
l(w) : sample w의 word length
우리는 추정된 문자 경계 상자와 그에 상응하는 문자 길이를 얻을 수 있다. (lc(w)
S*_r(p) : pseudo-ground truth Region score
S*_a(p) : affinity map
S_r(p) : 예측된 Region Score
S_a(p) : 예측된 affinity score
인공 데이터로 학습할 때 실제 ground truth를 확보하기 때문에 S_c(p) = 1 이 돼야 한다.
CRAFT 모델은 더 정확하게 character를 예측하고 confidence socre S_conf(w) 점점 향상되는 것을 확인했다고 합니다.
해당 그림이 학습과정에서 나오는 건데요.
초반에는 실제 이미지에 비해서 상대적으로 text를 잘 인식하지 못하지만, 학습을 하면 하면 불완전한 font나 합성된 text에 대한 다른 데이터 분포를 학습합니다.
만약 Confidence socre S_conf(W)가 0.5 아래라면, 추정된 character bounding boxes는 무시해야 합니다.
왜냐하면 그들은 모델을 학습할 때 불안전한 효과를 주기 때문입니다.
여기서 논문의 가정은 개별 글자의 두께는 상수이고 word Region(R(W))를 글자의 수(l(w))로 간단하게 나눔으로써, character level 예측을 계산합니다.
그런 다움 S conf (w)는 잘 보이지 않은 text를 학습하기 위해 0.5로 합니다.
3.3. Inference
이제 추론 단계인데, 마지막 결과물은 다양한 모양을 전달해줍니다 word boxes 나 character box 같이 아니면 polygons로요.
ICDAR 데이터 같은 경우 평가 protocol는 word level intersection-over-union(IoU)로 합니다 IoU는 면적이 얼마나 겹치는지,
따라서 여기서는 간단하지만 효과적인 후 처리 단계를 통해 예측된 Sr 및 Sa의 워드 레벨 경계 상자 QuadBox를 만드는 방법을 설명한다.
the bounding box를 찾는 post-processing는 다음과 같이 요약할 수 있다고 합니다.
- 이미지를 덮는 the binary map(M) 0으로 초기화합니다.
- 만약 S_r(p) > T_r or S_a(p) > T_a이라면, M(P)는 1로 합니다. 여기서 tau는 threshold입니다.
- M에서 Connected Component Labelling(CCL) 수행됩니다.
- QuadBox는 레이블들의 각각에 상응하는 연결된 구성요소들을 아우로는 최소한의 면적으로 회전된 사각형을 찾음으로써 얻게 됩니다!
- OpenCV에서 제공되는 connectedComponents와 minAreaRect와 같다고 합니다.
CRAFT의 이점
- 더 이상의 post-processing 방법이 필요하지 않는다고 합니다! (Non-Maximum Suppression(NMS))
- 왜냐하면, CCL로 분리된 단어 영역의 이미지 클럽을 가지고 있기 때문에, 단어의 경계 상자는 단순히 하나의 사각형으로 정의된다.
- 이와는 달리, 우리의 캐릭터 연결 프로세스는 명시적으로 텍스트 구성요소 사이의 관계를 검색하는 것에 의존하는 다른 링크 기반 방법과는 다른 픽셀 수준에서 수행된다.
- 효과적으로 curved text를 다루기 위해서 character region을 둘러싸는 Polygon을 만들 수 있습니다!
- scanning direction을 따라서 character 영역들의 지역적인 maxima line을 찾습니다.(파란색 선)
- local maxima lenghts의 길이들은 최종 폴리곤 결과가 불균일해지는 것을 방지하기 위해 그중 최대 길이로 동일하게 설정된다.
- local maxima의 중앙점을 쭉 있는 라인을 center line이라 하고 여기선 노란색선이다.
- 그런 다음 빨간색 화살표로 표현되는 문자의 기울기 각도를 반영하기 위해 로컬 최대선을 중심선에 수직으로 회전시킨다.
- local maximal lines의 끝점들은 text polygon의 후보점들이 된다.
- text region을 완전히 덮기 위해서 local maxima lines의 머 움직인다.... (초록색)
일단 여기까지가 실험 전까지 쭉 본 거다.
일단 논문이 신기하게, 다른 논문에 비해서 잘 읽히는 기분이다.
쉽게 이해 가게 논문을 써주셔서 그런 것 같다.
일단 여기까지 보면 결국 word level이 아닌 character level로 인식하게 해서 여러 가지 기존의 방법론의 문제를 해결하고, 그다음에 이 Character level을 어떻게 하면 다시 합칠 수 있는지에 대한 설명과
이러한 데이터는 없기 때문에 이러한 데이터가 없는 문제를 weakly supervising을 이용해서 어떻게 해결하는지에 대한 설명이 인상적이었다. 물론 네이버니깐 word-level에서 detection이 잘 되는 모형을 가지고 있을 것이다.
하지만 word-level에서 잘 안되니까 이러한 방법론을 제시하는데, 이러한 방법론을 적용하기 위해서 word level 모델을 사용하는 먼가 아이러니한... 암튼 그래도 효과적으로 데이터 만드는 작업을 줄일 수 있는 것은 맞는 것 같다.
다음에는 실험에 대해서 설명을 하려고 한다.
https://arxiv.org/pdf/1904.01941.pdf | https://github.com/clovaai/CRAFT-pytorch?fbclid=IwAR3I6TnMgizRU93XEapIc9IQiabJlOOOvY9ETg5Y6uKgnQg2lbxwU45-AZQ |