이번 장은 기본적인 stage 내용을 살펴보고, 다음은 내부적인 network 구조를 볼 예정.
독립적으로 제안된 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 단계는 아래와 같다.
downstream stages 를 쉽게 하기 위해서 Spatial Tranformer Network 를 사용하여 입력 텍스트 이미지를 normalizes 한다.
이번 stage 에서 입력 image 를 normalized image 로 변환한다.
이러한 부담 (burden) 을 줄이기 위해서 STN (Spatial Transformation Network) 의 변형인 TPS (thin-plate spline) 변환이 text lines 의 다양한 가로 세로 비율이 유연하게 적용되었다.
TPS 는 기준점 (fiducial points) 의 집합 사이에 부드러운 spline interpolation 을 사용한다.
좀더 정확하게는, TPS 는 위와 아래를 감싸는 multiple 기준점들을 green ‘+’ 마크 처럼 찾고, 문자 영역을 미리 정의된 사각형으로 normalizes 한다.
글꼴, 색상, 크기 및 배경과 같은 관련 없는 features 를 억제하면서 문자 인식과 관련된 속성에 초점을 맞춘 표현에 입력 image 를 mapping 한다.
feature extractor 에 의해 생성된 feature map 의 각 column 은 입력 이미지의 수평선을 따라서 대응하는 구별 가능한 receptive field 가 있다.
이 feature 들은 각 receptive field 의 특징을 추정하는 데에 사용된다.
이전에 STR 의 feature extractor 로써 사용되었던, VGG, RCNN 과 ResNet 의 세 가지 architecture 를 연구한다.
다음 stage 에서의 문자의 sequence 내에서 상황에 맞는 정보를 capture 하여 각 문자를 독립적으로 예측하는 것 보다 더 강력하게 예측한다.
feature map 에 있는 각 열은 sequence 의 frame 으로써 사용된다. 그러나 이 sequence 는 문맥적 정보가 부족할 지도 모른다.
따라서 몇 몇 이전 연구에서는 feature 추출 단계 이후의 를 더 좋은 sequence 로 만들기 위해서 (Bidirectional LSTM) 을 사용한다.
한편으로 Rosetta 는 계산의 복잡성과 메모리소비를 줄이기 위해서 을 제거 했다.
한 이미지의 검증된 features 로부터 문자의 sequence 를 추정한다.
이 stage 에서는 입력 로부터 문자의 sequence 를 예측한다. 이전 작업들을 요약하면, 예측을 위한 두 가지 옵션을 갖는다.
CTC 는 고정된 수의 feature 들이 주어지더라도, 고정되지 않는 sequence 의 예측을 허용한다.
Attn 은 자동적으로 input sequence 내의 정보 흐름을 자동적으로 캡쳐하여, output sequence 를 예측한다. 이를 통해 STR 모델은 출력 클래스 종속성을 나타내는 character-level 언어 모델을 학습할 수 있다.
공통적으로 localization-network (위치 결정 net) 는 공간적 변환 parameter 를 regress 하는 CNN.
spatial transformer 는 데이터 셋으로부터 바로 학습 되는 것이 아닌, neural-net 이 전체 accuracy 를 향상 시키도록 spatial transform 을 자동으로 학습.
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))
하나의 function 안에 여러 개가 있다. 이렇게 분리함으로써 global 하게 변하지 않는 특성을 갖는다.
대표적인 pivot point 를 두고 구간 구간 나누어서 사용.
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()