[ EasyOCR ] paper review

d4r6j·2024년 8월 6일
0

vision-paper

목록 보기
10/11
post-thumbnail

이번 장은 기본적인 stage 내용을 살펴보고, 다음은 내부적인 network 구조를 볼 예정.

scene text recognition (STR)

독립적으로 제안된 STR 모델 간의 공통점을 바탕으로 4 단계 구성을 설명한다.

  • STR 은 객체 탐지와 같은 컴퓨터 비전 tasks 와 sequence 예측 tasks 와 유사하기 때문에, high-performance CNNs 와 RNNs 로부터 잇점을 얻었다.

  • STR 을 위한 CNN 과 RNN 이 조합 된 최초 application CRNN : Convolutional-Recurrent Neural Network 으로, text 이미지를 넣어서 CNN features 를 추출하고, 그들을 RNN 으로 그들을 재구성하여 강력한 sequence 예측을 한다.

  • CRNN 이후에 performance 향상을 하기 위 여러 변형들이 제안되었다. 예를 들어 임의의 text 기하학을 교정하기 위해서 text 이미지들을 정규화 하기위한 변환 모듈이 제안되었다.

  • 글꼴 스타일 같은 글자 자체의 high intrinsic dimensionality 와 복잡한 배경 같은 latent factors 를 가지고 있는 복잡한 텍스트 이미지를 처리하기 위해서 향상된 CNN feature 추출기가 통합되었다.

  • 또한 사람들은 inference time 에 더욱 관심을 갖게 되면서, 몇몇 방법들에서는 RNN stage 를 생략하기도 했다. character sequence 예측을 향상시키기 위해서 attention 기반의 decoder 들이 제안되었다.

기존의 STR 모델들로부터 파생된 4 단계는 아래와 같다.

transformation stage (Trans.)

downstream stages 를 쉽게 하기 위해서 Spatial Tranformer Network 를 사용하여 입력 텍스트 이미지를 normalizes 한다.

  • 이번 stage 에서 입력 image XX 를 normalized image X~\tilde{X} 로 변환한다.

    • 자연스러운 장면의 text 이미지들은 구부러지고 기울어진 text 등 다양한 형태로 나타난다.
    • 이러한 입력 이미지들이 변경되지 않는 채 공급 된다면, 다음 feature 추출 stage 에서 이와 같은 형상에 관하여 있는 그대로 학습해야 한다.
  • 이러한 부담 (burden) 을 줄이기 위해서 STN (Spatial Transformation Network) 의 변형인 TPS (thin-plate spline) 변환이 text lines 의 다양한 가로 세로 비율이 유연하게 적용되었다.

  • TPS 는 기준점 (fiducial points) 의 집합 사이에 부드러운 spline interpolation 을 사용한다.

좀더 정확하게는, TPS 는 위와 아래를 감싸는 multiple 기준점들을 green ‘+’ 마크 처럼 찾고, 문자 영역을 미리 정의된 사각형으로 normalizes 한다.

feature extraction (Feat.)

글꼴, 색상, 크기 및 배경과 같은 관련 없는 features 를 억제하면서 문자 인식과 관련된 속성에 초점을 맞춘 표현에 입력 image 를 mapping 한다.

  • 이번 stage 에서, CNN 은 입력 이미지 (X  or  X~)(X \; {\rm or} \; \tilde{X}) 를 추상화 하고 visual feature map V={vi},i=1,,IV = \{v_i\}, i = 1, \cdots, I ( II 는 feature map 에 있는 열의 수 ) 를 출력 한다.

  • feature extractor 에 의해 생성된 feature map 의 각 column 은 입력 이미지의 수평선을 따라서 대응하는 구별 가능한 receptive field 가 있다.

  • 이 feature 들은 각 receptive field 의 특징을 추정하는 데에 사용된다.

  • 이전에 STR 의 feature extractor 로써 사용되었던, VGG, RCNN 과 ResNet 의 세 가지 architecture 를 연구한다.

  1. VGG 는 여러 개의 convolutional layers 와 몇 개의 fully connected layers 로 구성된다.
  2. RCNN 은 character 모양에 따라서 receptive fields 를 조정하기 위해 recursively 적용할 수 있는 CNN 의 변형이다.
  3. ResNet 은 더 깊은 CNN 들의 훈련을 쉽게 해주는 residual connections 이 있는 CNN 이다.

sequence modeling (Seq.)

다음 stage 에서의 문자의 sequence 내에서 상황에 맞는 정보를 capture 하여 각 문자를 독립적으로 예측하는 것 보다 더 강력하게 예측한다.

  • 이번 stage 로부터 추출된 feature 는 feature VV 의 sequence 로 reshape 된다.

  • feature map viVv_i \in V 에 있는 각 열은 sequence 의 frame 으로써 사용된다. 그러나 이 sequence 는 문맥적 정보가 부족할 지도 모른다.

  • 따라서 몇 몇 이전 연구에서는 feature 추출 단계 이후의 VV 를 더 좋은 sequence 로 만들기 위해서 BiLSTM{\rm BiLSTM} (Bidirectional LSTM) 을 사용한다.

  • 한편으로 Rosetta 는 계산의 복잡성과 메모리소비를 줄이기 위해서 BiLSTM\rm{BiLSTM} 을 제거 했다.

prediction (Pred.)

한 이미지의 검증된 features 로부터 문자의 sequence 를 추정한다.

이 stage 에서는 입력 HH 로부터 문자의 sequence (  i.e.,  Y=y1,y2,)(\;{\rm i.e.,} \; Y = y_1, y_2, \cdots) 를 예측한다. 이전 작업들을 요약하면, 예측을 위한 두 가지 옵션을 갖는다.

  • CTC : Connectionist Temporal Classification
  • Attn : Attention-based sequence prediction.

CTC 는 고정된 수의 feature 들이 주어지더라도, 고정되지 않는 sequence 의 예측을 허용한다.

  • CTC 의 주요 방법은
    1. 각 열 (hiH)(h_i \in H) 의 문자를 예측하고
    2. 반복되는 문자와 빈칸을 삭제하여
    3. 전체 문자 sequence 를 문자들의 고정되지 않은 stream 으로 수정하는 것이다.

Attn 은 자동적으로 input sequence 내의 정보 흐름을 자동적으로 캡쳐하여, output sequence 를 예측한다. 이를 통해 STR 모델은 출력 클래스 종속성을 나타내는 character-level 언어 모델을 학습할 수 있다.

thin-plate spline (TPS)

spatial transformer network (STN)

  • 공통적으로 localization-network (위치 결정 net) 는 공간적 변환 parameter 를 regress 하는 CNN.

  • spatial transformer 는 데이터 셋으로부터 바로 학습 되는 것이 아닌, neural-net 이 전체 accuracy 를 향상 시키도록 spatial transform 을 자동으로 학습.

localiation-network

  • STN 은 Grid generator 부분에서 Affine Transform 이 사용된다.
    (xisyis)=Tθ(Gi)=Aθ(xityit1)=[θ11θ12θ13θ21θ22θ23](xityit1)\left ( \begin{array}{c} x_i^{s} \\ y_i^{s} \end{array} \right ) = \mathcal{T}_{\theta}(G_i) = A^{\theta} \left ( \begin{array}{c} x_i^{t} \\ y_i^{t} \\ 1 \end{array} \right ) = \left [ \begin{array}{c} \theta_{11} & \theta_{12} & \theta_{13} \\ \theta_{21} & \theta_{22} & \theta_{23} \end{array} \right ] \left ( \begin{array}{c} x_i^{t} \\ y_i^{t} \\ 1 \end{array} \right )
grid = F.affine_grid(theta, x.size())

bias 초기화는 Affine 은 matrix 로 변환 시키므로, matrix 를 초기화 한다.

self.fc_loc[2].weight.data.zero_()
self.fc_loc[2].bias.data.copy_(torch.tensor([1, 0, 0, 0, 1, 0], dtype=torch.float))

thin-plate spline (TPS)

Spline function

하나의 function 안에 여러 개가 있다. 이렇게 분리함으로써 global 하게 변하지 않는 특성을 갖는다.

대표적인 pivot point 를 두고 구간 \sim 구간 나누어서 사용.

  1. Between point 00 and point 11 a straight line.
  2. Between point 1 and point 2 a parabola with second derivative = 4.
  3. Between point 2 and point 3 a parabola with second derivative = -2.
  4. Between point 3 and point 4 a straight line.
  5. Between point 4 and point 5 a parabola with second derivative = 6.
  6. Between point 5 and point 6 straight line.

thin-plate spline (TPS)

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import Rbf

# Generate random points.
np.random.seed(0)
x = np.random.rand(10)
y = np.random.rand(10)
z = np.random.rand(10)

# Transformate TPS.
rbf = Rbf(x, y, z, function='thin_plate')
xi = yi = np.linspace(0, 1, 20)
xi, yi = np.meshgrid(xi, yi)
zi = rbf(xi, yi)

# Create 3D plot.
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(xi, yi, zi, color='white', edgecolor='black', linewidth=0.5)

# Set axes
ax.set_xlabel('$x_1$')
ax.set_ylabel('$x_2$')
ax.set_zlabel('$f$')
ax.set_title('Thin Plate Spline')

plt.show()

ref.

0개의 댓글

관련 채용 정보