CS 공부/AI
[OCR] Text Detection
imsmile2000
2023. 5. 24. 02:15
일반 객체 영역 검출 vs 글자 영역 검출
- 일반 객체 검출: 클래스와 위치를 예측하는 문제
- 글자 검출: 객체의 위치만 예측하는 문제 (클래스 예측 안함)
- 객체의 특징
- 매우 높은 밀도
- 극단적 종횡비
- 특이 모양 (구겨진, 휘어진 영역)
- 모호한 객체 영역
글자 영역 표현법
- 직사각형 (RECT)
- 직사각형 + 각도 (Rotated Box)
- 사각형 (QUAD)
- 다각형 (Polygon)
- Arbitrary-shaped(임의의 모양) text를 주로 다루는 최근의 벤치마크들에 적합
- 일반적으로 2N points 이용하고, 상하 점들이 쌍을 이루도록 배치
Taxonomy
Regression-based vs Segmentation-based
- Regression-based: 이미지를 입력 받아 글자 영역 표현값들을 바로 출력으로
- TextBoxes'18: SSD를 텍스트 영역에 맞게 수정
- 단점
- 사각형만 효과적이라서 Arbitrary-shaped text는 적절히 표현 못함 (불필요한 영역 포함)
- 앵커박스보다 큰 종횡비를 갖는 글자 영역의 성능이 떨어짐
- Segmentation-based: 이미지를 입력 받아 글자 영역 표현값들에 사용되는 화소 단위의 정보를 뽑고, 후처리를 통해서 최종 글자 영역 표현 값들을 확보
- Pixellink'18
- 이진화: 글자영역에 속할 확률 뽑아냄
- 연결 성분 분석: 특정 화소가 글자영역에 속할 때 8개 방향으로 이웃한 화소가 글자 영역에 속할 확률 뽑아냄
- RBOX 정합
- 단점
- 복잡하고 시간이 오래 걸리는 post-processing이 필요할 수 있음
- 서로 간섭이 있거나 인접한 개체간의 구분이 어려움
- Pixellink'18
- Hybrid: Regression-based 사각영역 + Segmentation-based 해당 영역에서 화소 정보 추출
- MaskTextSpotter'18
Character-based vs Word-based
- Character-Based: character 단위로 검출하고 이를 조합해서 word instance를 예측
- 글자 단위로 labeling 해야됨
- CRAFT'19: 글자 위치 정보와 affinity(연결성)을 예측
- 글자 별로 어디 있는지 + 글자 간에 연결되어있는지 정보를 겹쳐서 영역 확보
- Weakly-Supervised learning 제안 (글자 단위 라벨링 추정)
- Word-Based Methods: Word 단위로 예측, 대부분의 모델이 해당
Baseline Model - EAST (논문)
- Software 2.0으로 제대로 된 성과를 낸 첫 논문
- 2-staged 시스템
- 빠른 추론 & end-to-end 학습
- 네트워크가 2가지 정보를 pixel-wise로 출력
- 글자 영역 중심에 해당하는지: score map
- 어떤 화소가 글자 영역이라면 해당 bbox 위치는 어디인지: geometry map
- 모델 구조: 전체적으로 U-net 구조
- Segmentation의 base가 되는 network 구조
- pixel-wise prediction
- 세가지 부분으로 구성
- Feature extractor stem (backbone): PVANet, VGGNet, ResNet50
- 이미지를 입력 받아서 가장 작은 크기의 feature map까지 출력
- Feature merging branch: feature map 키워가며 여러 레벨들의 특징 합쳐줌
- unpool로 크기 맞추고 concat, 1x1, 3x3 convolution으로 채널 수 조절
- Output: 최종 출력 layer
- Score Map: 글자 영역 중심에 해당하는지 (글자 영역의 중심이면 1, 배경이면 0), GT bbbox 줄여서 생성
- Geometry Map: 어떤 화소가 글자 영역이라면 해당 bbox 위치는 어디인지
- RBOX(직사각형+각도) 형식: 회전 각도 예측(1 채널) + bbox의 4개의 테두리까지의 거리 예측(4 채널)
- QUAD(좌표4개) 형식: bbox의 4개의 점까지의 x,y 값 차이 예측 (4*2=8 채널)
- Feature extractor stem (backbone): PVANet, VGGNet, ResNet50
- Inference
- Post-processing
- Score map 이진화
- 사각형 좌표값 복원
- 사각형의 네 꼭지점의 좌표를 쉽게 구할 수 있는 좌표축을 새로 설정
- 좌표축을 이미지 좌표축으로 변환
- 이 변환의 역변환을 좌표값들에 적용
- Locality-Aware NMS
- 위쪽에 있는 box들부터 IoU 값이 크면 Score map 값 기준으로 합침
- 이후 기존의 NMS 적용
- Post-processing
- Training
- 전체 loss function = score map에 대한 loss + geometry map에 대한 loss
- Ls: Score map loss
- class-balanced cross-entropy: 예측 확률값과 GT에 대한 loss
- Dice-Coefficient: 교집합은 곱으로 절대치는 score의 합으로 계산 (segmentation task에서 주로 사용)
- Lg: Geometry map loss
- 직사각형은 IoU loss + 각도값은 cosine loss
- Results
- F-score & speed: real-time 수준은 아니지만 빠른 속도
- LA-NMS의 속도 개선은 효과적