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
      1. 이진화: 글자영역에 속할 확률 뽑아냄
      2. 연결 성분 분석: 특정 화소가 글자영역에 속할 때 8개 방향으로 이웃한 화소가 글자 영역에 속할 확률 뽑아냄
      3. RBOX 정합
    • 단점
      • 복잡하고 시간이 오래 걸리는 post-processing이 필요할 수 있음
      • 서로 간섭이 있거나 인접한 개체간의 구분이 어려움

 

  • 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로 출력
    1. 글자 영역 중심에 해당하는지: score map
    2. 어떤 화소가 글자 영역이라면 해당 bbox 위치는 어디인지: geometry map

 

  • 모델 구조: 전체적으로 U-net 구조
    • Segmentation의 base가 되는 network 구조
    • pixel-wise prediction
    • 세가지 부분으로 구성
      1. Feature extractor stem (backbone): PVANet, VGGNet, ResNet50
        • 이미지를 입력 받아서 가장 작은 크기의 feature map까지 출력
      2. Feature merging branch: feature map 키워가며 여러 레벨들의 특징 합쳐줌
        • unpool로 크기 맞추고 concat, 1x1, 3x3 convolution으로 채널 수 조절
      3. 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 채널)

 

  • Inference
    • Post-processing
      1.  Score map 이진화
      2. 사각형 좌표값 복원
        1. 사각형의 네 꼭지점의 좌표를 쉽게 구할 수 있는 좌표축을 새로 설정
        2. 좌표축을 이미지 좌표축으로 변환
        3. 이 변환의 역변환을 좌표값들에 적용
      3. Locality-Aware NMS
        1. 위쪽에 있는 box들부터 IoU 값이 크면 Score map 값 기준으로 합침
        2. 이후 기존의 NMS 적용

 

  • 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의 속도 개선은 효과적