티스토리 뷰
이 글은 Clova AI에서 발표한 텍스트 검출 논문을 정리한 글이다.
이 논문은 CVPR 2019에서 발표되었다.
코드와 사전학습 된 weight가 가 clova AI github에 공개되어 있다. (pytorch, 예측코드만 공개)
Abstract
기존 Neural Net 기반 텍스트 검출 방법은 주로 단어 단위의 바운딩 박스로 학습한다. 하지만 이 논문에서는 단어가 아니라, 문자와 문자 간의 관계성(affinity)을 통해 텍스트 영역을 검출한다.
문자 단위로 annotation 된 데이터의 부족을 해결하기 위해, 합성 이미지의 문자 단위 annotation과 학습 중인 모델로 추정한 실제 이미지의 문자 단위 의사 GT(Pseudo Ground Truth)를 모두 활용하여 학습한다. 문자 간의 affinity를 추정하기 위해서, 본 논문에서 새로 제안하는 affinity representation을 학습한다.
1. Introduction
단어 바운딩 박스를 검출하는 대부분의 딥러닝 기반 텍스트 검출기는 곡선형 문자, 긴 단어, 변형이 심한 단어 등 단일 바운딩 박스로 찾기 어려운 케이스에 적용하기 어렵다.
문자 단위 검출은 문자를 상향식으로 연결하여, 이런 어려운 텍스트를 검출할 때 많은 이점이 있다. 하지만, 대부분의 기존 데이터셋은 문자 단위 annotation을 제공하지 않고, 문자 단위 GT를 얻는 작업은 너무 비용이 많이 든다.
이 논문에서는 개별 문자 영역을 지역화하고, 문자를 텍스트 인스턴스로 연결하는 새로운 텍스트 검출기(CRAFT)를 제안한다. 또한, 문자 단위 annotation 부족 문제를 보완하기 위해, 단어 단위 annotation 데이터셋에서 문자 단위 GT를 추정하는 weakly-supervised learning 프레임워크를 제안한다.
CRAFT는 character region score와 character affinity score를 출력하는 CNN이다.
- character region score: 이미지에서 개별 문자를 지역화하는 데 사용.
- character affinity score: 문자들을 단일 인스턴스(단어)로 그룹화하는 데 사용.
아래 그림 1은 다양한 모양의 텍스트에 대한 CRAFT 결과를 시각화한 것이다.
2. Related Work
[Regression 기반 텍스트 검출기]
- box 회귀 기반 텍스트 검출기.
- 다양한 모양의 텍스트를 검출하기 위한 연구: modified kernel, anchor box, sliding window, 회전 불변 특징 활용 등..
- 이런 접근법은 일반 이미지에 존재하는 모든 모양의 텍스트를 커버하는 데 구조적 한계가 있음.
[Segmentation 기반 텍스트 검출기]
- 픽셀 수준에서 텍스트 영역 검출.
- multi-scale FCN, holistic prediction, pixellink: 단어 경계영역을 추정하는 방법.
- SSTD: attention 메커니즘을 활용하여 텍스트 영역 향상. 회귀/분할의 이점을 통합하려는 노력.
- TextSnake: 텍스트 영역, 중심선을 기하 특성과 함께 예측.
[End-to-End 텍스트 검출기]
- 검출/인식 모듈을 함께 학습하여 인식 결과를 활용해서 검출 정확도 향상.
- 인식 결과를 활용하여 학습하면 텍스트와 유사한 배경에 보다 강인하게 학습 가능.
[문자 단위 텍스트 검출기]
- 이 논문은 WordSup의 아이디어에서 영감을 얻음. WordSup은 weak-supervised framework을 사용.
- WordSup은 직사각형 앵커를 문자 표현에 사용하여 원근변환에 취약함. 백본구조에 따라 성능에 제한이 있음.
3. Methodology
이 논문의 목적은 일반 이미지에서 개별 문자를 정확하게 지역화하는 것이다. 이 목적을 위해, 문자 영역과 문자 간의 관계를 예측하는 DNN을 학습한다. 문자 수준 annotation을 제공하는 공개 데이터셋이 없기 때문에 weakly-supervised 방식으로 학습한다.
3.1 Architecture
Backbone으로 BatchNorm을 추가한 VGG-16 기반 fully convolutional network을 사용한다. 디코딩 부분에서 skip-connection을 사용하고, 이는 low-level 특징을 합한다는 점에서 U-Net과 유사하다.
네트워크의 최종 출력은 2 채널이다: region score, affinity score.
아래 그림에서 왼쪽은 논문에 제시 된 네트워크 구조이고, 우측은 github에 공개된 코드를 기준으로 한 네트워크 구조이다. (Github Issue 참고)
3.2 Training
3.2.1 Ground Truth Label Generation
각 학습 영상에 대해, 문자 단위 바운딩 박스로 region score와 affinity score에 대한 GT Label을 생성한다.
- region score: 해당 픽셀이 문자의 중심일 확률.
- affinity score: 해당 픽셀이 문자 사이 공간의 중심일 확률.
이 논문에서는 region score, affinity score를 gaussian heatmap으로 인코딩한다. heatmap representation은 엄밀한 제한이 없는 GT를 다룰 때 높은 유연성을 가진다. (기존 pose estimation과 같은 다른 응용에서 활용)
그림 3에서 보여주는 합성 이미지에 대한 라벨 생성 파이프라인은 다음과 같다. (직접 가우시안 분포를 계산하는 데 드는 시간을 줄이기 위해 다음과 같이 근사적으로 생성)
1) 2D 등방성(isotropic) gaussian map 생성.
2) gaussian map과 개별 문자 박스에 대한 perspective transform 계산.
3) gaussian map을 문자 박스에 대해 워핑.
affinity score의 GT를 위해 affinity 박스는 그림 3과 같이 인접한 문자 박스에 의해 정의된다.
- 각 문자 박스의 모서리를 연결하는 대각선을 그려서, 2개의 삼각형(위, 아래)을 만들 수 있다.
- 인접한 문자 박스 쌍에 대해, 위-아래 삼각형의 중심을 affinity 박스의 모서리로 설정한다.
제안하는 GT 정의는 모델의 receptive fields가 작아도, 크고 긴 텍스트를 검출 가능하게 한다. (이전 방법들은 이런 경우 모델의 receptive fields가 커야 함)
문자 단위 검출은 컨볼루션 필터가 전체 텍스트 인스턴스 대신, 문자와 문자 간의 관계에 집중할 수 있게 한다.
3.2.2 Weakly-Supervised Learning
합성 이미지 데이터셋과 다르게, 실제 데이터셋은 보통 단어 단위 annotation만 제공한다. 이 논문은 weakly-supervised 방식으로 단어 단위 annotation으로부터 문자 박스를 생성한다.
학습 중인 모델은 단어 단위 annotation 이미지가 제공되면, 단어 영역을 잘라낸 이미지에서 region score를 예측하여 문자 단위 바운딩 박스를 생성한다.
중간 모델 예측의 신뢰성을 반영하기 위해, 각 단어 박스에 대한 신뢰도 맵은 검출한 문자의 수를 GT의 문자 수로 나눈 값에 비례하여 계산한다. 이는 학습 중에 learning weight로 사용된다.
그림 6에서 보여주는 전체 문자 분할 과정은 다음과 같다.
1) 단어 영역을 원본 영상에서 잘라낸다.
2) 현재 학습 중인 모델로 (자른 단어 영역에 대해) region score를 예측한다.
3) 문자 영역 분할을 위해 watershed 알고리즘을 적용한다.
4) 문자 바운딩 박스를 생성한다.
5) 찾은 문자 박스의 좌표를 원본 영상 좌표로 변환한다.
weak-supervison을 사용하면, 불완전한 의사 GT로 학습할 수밖에 없다. 이렇게 정확하지 않은 region score로 모델을 학습하면 문자 영역의 출력이 흐려질 수 있다.
이 문제를 방지하기 위해, 논문에서는 텍스트 annotation과 예측한 단어의 길이로 의사 GT의 신뢰도를 평가한다.
아래의 수식 (1), (2)는 신뢰도를 평가하는 방법을 설명한다.
\( w \): 단어 단위 annotation sample
\( R(w) \): 단어 바운딩 박스 영역
\( l(w) \): 단어의 길이
\( l^c (w) \): 추정한 단어의 길이
\( s_{conf} (w) \): 샘플에 대한 신뢰도
\( S_c(p) \): 이미지에서 pixel p 위치의 신뢰도. 합성 데이터는 실제 GT를 얻을 수 있으므로 1로 설정
학습의 목적함수 \( L \)은 수식 (3)과 같이 정의한다.
\( p \): 영역 \( R \) 에 속하는 픽셀
\( S_r^*(p), S_a^*(p) \): region score, affinity score의 의사 GT
\( S_r(p), S_a(p) \): 예측한 region score, affinity score
학습이 진행되면서, CRAFT 모델은 문자를 더 정확하게 예측하고, 신뢰도 \( s_{conf} \) 도 점진적으로 증가한다.
그림 5는 학습 과정에서 region score map의 변화를 보여준다. 학습 초기에, 일반 이미지에서 익숙하지 않은 텍스트에 대한 region score가 상대적으로 낮게 나타난다.
신뢰도 점수가 0.5 미만인 경우, 추정된 문자 바운딩 박스는 학습에 부정적인 영향을 주므로 무시해야 한다. 이런 경우에, 개별 문자의 폭이 일정하다고 가정하고 단어 영역을 단어 길이로 나누어 문자 단위 예측을 수행한다. 신뢰도는 학습을 위해 0.5로 설정한다.
3.3 Inference
추론 단계에서, 최종 단계의 출력은 단어 박스, 문자 박스, 다각형 등 다양하게 만들 수 있다.
여기서는 region score와 affinity score map으로부터 단어 수준 바운딩 박스 QuadBox를 만드는 방법을 설명한다.
바운딩 박스를 찾기 위한 후처리는 다음과 같다.
- 이진 맵 \(M\) 을 0으로 초기화.
- \(S_r(p) > r\)이거나, \(S_a(p) > a\)이면 \(M(p)\)를 1로 설정한다. 여기서 \(r, a\)는 region threshold, affinity threshold.
- \(M\)에 대해 연결 요소 라벨링(CCL) 알고리즘 수행.
- QuadBox는 각 라벨에 해당하는 연결 요소(CC)를 둘러싸는 최소 영역의 회전 사각형.
- 이 과정에 opencv의 connectedComponents와 minAreaRect 함수를 적용 가능.
이런 후처리는 별도의 NMS 같은 후처리를 필요로 하지 않고, 텍스트 구성요소 간의 관계에 의존하는 다른 Linking 기반 기법과도 다르다.
단어 영역에 대한 다각형 생성 과정은 다음과 같다. (그림 7 참조)
- 스캔 방향을 따라 문자 영역의 지역 최대 라인을 탐색. (그림의 파란 화살표)
- 지역 최대 라인의 길이는 최대 길이에 맞춰서 동일하게 설정. (최종 다각형 크기를 고르게 하기 위한 작업)
- 지역 최대 라인의 중심을 연결하는 선을 중심선이라 함. (노란색 선)
- 지역 최대 라인을 중심선에 수직이 되게 회전. (문자의 경사각 반영, 빨간색 화살표)
- 텍스트 영역 전체를 커버하기 위해, 가장 바깥쪽의 지역 최대 라인을 중심선을 따라 바깥쪽으로 이동.
- 최종 제어점 생성. (녹색 점)
4. Experiment
ICDAR 13, ICDAR 15, ICDAR 17 , MSRA-TD500, TotalText, CTW-1500 데이터셋을 성능평가에 사용함.
학습전략
- SynthText 데이터셋으로 네트워크를 50k 번 학습. 이후 벤치마크 데이터셋에 대해 모델을 파인튜닝.
- ICDAR 15, ICDAR 17 데이터셋에서 don't care 텍스트 영역은 신뢰도를 0으로 하여 학습에서 배제함.
- 모든 학습과정에서 ADAM optimizer를 사용.
- Multi-GPU 학습을 위해, 학습/감독 GPU를 분리하고 pseudo-GT는 감독 GPU에서 생성하여 메모리에 저장함.
=> pseudo-GT를 순차 생성하여 학습하면 매우 느리기 때문에, 전용 GPU에서 생성하도록 함.
- 파인튜닝 중에 SynthText 데이터셋을 1:5의 비율로 사용함 (문자영역을 더 잘 분리하기 위해).
- 장면에서 텍스쳐와 유사한 문자를 걸러내기 위해 On-line Hard Negative Mining을 1:3 비율로 적용함.
- crop, rotation, color variation과 같은 기본 data augmentation 기법도 적용.
파인튜닝 방법
- weak-supervised 학습을 위해 필요한 데이터: 단어 이미지를 자르기 위한 사각형 어노테이션, 단어길이 계산을 위한 어노테이션.
- IC13, IC15, IC17 데이터셋만 위 조건을 충족함. 나머지 데이터셋에 대해 학습없이 테스트.
- 첫 번째 모델: IC15를 평가하기 위해, IC 15에 대해 파인튜닝.
- 두 번째 모델: 다른 다섯 개 데이터셋의 평가에 사용. IC13과 IC17으로 학습.
- 파인튜닝은 25k 회 반복.
5. Conclusion
이 논문에서는 CRAFT라는 문자 단위 텍스트 검출기를 제안했다.
- weak-supervision으로 문자 단위 주석이 없는 데이터에 대한 학습 방법 제안.
- 문자에 대한 region score, affinity score를 학습.
- 다양한 모양의 텍스트를 상향식으로 검출 가능.
- 대부분의 공개 데이터셋에 대해 SOTA 성능 달성. fine-tuning 없이 성능을 보여줌으로써 일반화 능력을 입증.
- 추후 end-to-end model 학습으로 확장.
Reference
CRAFT Paper: https://arxiv.org/pdf/1904.01941.pdf
CRAFT Official Code(pytorch): https://github.com/clovaai/CRAFT-pytorch
- Total
- Today
- Yesterday
- compile
- Py_initialize
- nearest neighbor
- knn
- anaconda
- scikit-learn
- matplotlib.pyplot
- pyplot
- pytorch
- PYTHON
- OCR
- Keras
- install
- Text Detection
- load_model
- onnx
- kneighborsclassifier
- reverse string
- 모델변환
- Craft
- TensorFlow
- onnx-tensorflow
- import error
- Slice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |