[CVPR2020] On Recognizing Texts of Arbitrary Shapes with 2D Self-Attention

안녕하세요. 열 한 번째 X-Review입니다. 금주 리뷰할 논문은 CVPR 2020에 게재된 <On Recognizing Texts of Arbitrary Shapes with 2D Self-Attention>입니다. 그럼 바로 리뷰 시작하겠습니다. !

1. Introduction

기존 Scene text recognition 모델들은 대부분 이미지에서 feature를 추출하는 CNN과 추출된 feature를 바탕으로 순차적인 의존성을 파악하는 RNN의 조합으로 구성됩니다.

이렇게 조합한 방법론들은 STR(scene text recognition) task에서 좋은 성능을 내었지만, 이들은 이미지에 있는 text가 오직 수평으로만 쓰여졌다는 가정 하에 잘 동작합니다. 예를 들어보자면, 어떤 방법론들은 2D이미지의 높이 성분을 1D의 feature map으로 변환하여 text를 인식하는 방식을 사용하였습니다. 이런 방식은 text의 형태가 다양하게 변할 수 있는 상황 즉, text가 arbitrary한 모양을 가질 때 잘 인식하지 못한다는 문제점이 있습니다.

그렇기에 이런 arbitrary한 모양을 가지는 text를 인식하는 것이 어렵고 중요하다는 것을 깨닫게 된 후부터는 SRT(Scene text recognition) task에서는 이런 다양한 형태의 text가 포함된 이미지에 좀 더 집중하는 방향으로 연구가 이뤄졌습니다.

메소드 측면에서 보자면 크게 두 가지로 연구 방향이 나눠졌다고 볼 수 있습니다. 1) input을 rectification하는 것 2) 1D가 아닌 2D feature map을 사용하는 것 . 이렇게 말이죠.

Input을 rectification하는 방법론들은 spatial transformer network를 사용하여 text 이미지를 표준 모양으로 정규화합니다. 그럼 text가 수평으로 정렬되게 되고, 동일한 가로 세로 길이를 가지게 됩니다. 하지만 이러한 방식은 어떤 종류의 변환을 사용할지 미리 지정해줘야 하는데, 모든 가능한 상황을 예상하고 미리 변환 종류를 정의하는 것은 어려운 일입니다. 또, 수직으로 정렬된 text와 같은 극단적인 경우는 표준화하기 어렵기도 합니다.

반면에, 2D feature map을 사용하는 방식은 입력 이미지에서 2D feature map을 추출하면서 height 정보를 보존하고, 2D space에서 character들을 순차적으로 찾아낼 수 있습니다. 하지만 기존 방법론들은 여전히 input text가 수평으로 되어있는, 다시 말해 가로로 쓰여졌다고 가정한 것들이거나, 지나치게 복잡한 모델 구조를 사용하거나, 혹은 character 단위의 bbox gt가 필요하다는 한계점을 가지고 있습니다. 또 이런 방법들은 주로 ResNet과 같은 feature extractor를 사용하게 되는데, 이러한 feature extractor들은 이미지에서 character들 사이의 공간 의존성을 잡아내기 위한 명시적인 설계가 들어가 있지 않습니다.

그래서 본 논문에서는 위에서 언급해온 한계점들을 극복하기 위해 2D feature map 상에서 공간적 의존성을 포착하는 2D self-attention을 사용한 SRT(Scene text recognition) 네트워크를 제안합니다. 본 논문의 네트워크인 Self-Attention Text Recognition Network (SARTN)은 기존 transformer의 encoder-decoder 구조를 그대로 가져왔고, 중간 feature map은 2차원이라서 높이 차원을 축소시키지 않기에 앞선 방법론들보다 spatial 정보를 더 잘 가져갈 수 있습니다.

위의 [Fig1]을 보면 image에 recognition하기 어렵게 curved되어 있는 “BMW”로고가 있습니다. SAR은 중간에 height축으로 pooling한 반면, 저자들이 제안한 SATRN은 그대로 2D feature map을 사용한다는 차이점이 있는데, 이렇게 높이 차원을 축소하지 않아 spatial 정보를 더 가져갔기에 최종적으로 SAR에 비해 BMW를 잘 인식한 것을 볼 수 있습니다. 

기존 transformer encoder는 원래 1차원의 sequential한 입력의 순차적 의존성을 파악하도록 설계되었기에 저자들은 2D 이미지에 적용하기에는 적절하지 않은 측면이 몇 가지 있다고 하며, 2D feature map 상에서 self-attention의 이점을 완전히 이용하는 세 가지 모듈을 추가적으로 설계하였습니다. 세 가지 모듈은 1) shallow CNN block, 2) adaptive 2D position encoding(A2DPE), 3) Locality-aware feedforward layer(LAF)입니다.

결과적으로 SATRN 모델은 구조적으로 간단하고, 메모리를 효율적으로 사용하며 해결하고자 하였던 arbitrary한 모양을 가지는 text를 더 잘 검출하게 되었습니다.

본 논문의 contribution은 다음과 같습니다.

  • STR 내에서의 edge case를 해결하기 위해 self-attention을 사용하는 네트워크 제안하여 ‘irregular’ 벤치마크 데이터셋 전체에서 SOTA 달성
  • 2D input에 적합한 transformer encoder를 만들기 위해 유용한 수정 제안
  • self-attention이 어떻게 SRT에서 잘 작동하는지 설명하는 분석 제공

3. SARTN Method

3.1. SATRN Overview

[Fig2]는 SATRN(self-attention text recognition network)의 전체적인 구조입니다. 보시면 왼쪽 열에는 이미지를 2D feature map으로 임베딩하는 인코더가 있으며, 오른쪽 열에는 이 feature map에서 character sequence를 추출해내는 디코더가 존재합니다.

본 논문의 contribution은 기존 트렌스포머 인코더를 그대로 사용하는 것이 아닌, 이미지 안에 임베딩된 순차적인 정보와 임의의 text 형태를 동시에 추출할 수 있도록 조정했다는 점입니다. 한편, 대부분의 decoder 모듈은 transformer의 decoder와 동일하며, 타 논문에서 소개한 2D LSTM 디코더도 사용할 수 있습니다.

3.1.1 Encoder

encoder단에서는 이미지를 shallow CNN block을 통과시켜 local한 패턴과 texture를 추출합니다. 그럼 다음 CNN block에서 나온 feature map이 self-attention module을 통과하게 되는데, 이때 저자들이 SRT(scene text recognition) task을 위해 새로 개발한 Adaptive 2D positioning encoding이 사용됩니다. 이 self-attention module은 기존 transformer self-attention module을 수정한 버전이라고 했었습니다. 여기서 저자는 point wise feed forward를 locality-aware feed forward layer로 변경했습니다. 그렇게 구성된 self-attention module은 가중치를 공유하지 않고 N_e번 반복됩니다.

3.1.2 Decoder

decoder는 encoder로부터 나온 2d feature들을 가지고 character sequence를 생성해냅니다. Input 이미지와 output text간의 cross modality는 2번째 multi-head attention 모듈에서 발생하며, 이 모듈에서는 다음 character의 시각적인 feature를 가져오는데 사용됩니다. STR(scene text recognition) task에서도 기존 transformer와 동일하게 character sequence를 다루기 때문에 multi-head attention이나, point-wise feedforward layer같은 대부분의 decoder모듈은 그대로 사용되었습니다.

3.2. Designing Encoder for STR

이제 저자들이 어떻게 이미지로부터 효과적이고 효율적으로 character의 sequential한 정보를 추출하도록 encoder를 디자인했는지 알아봅시다.

3.2.1 Shallow CNN block

먼저 shallow CNN block입니다. Input 이미지는 가장 먼저 shallow한 CNN을 통과하게 되는데, 이 단계에서는 이미지 내의 패턴이나, texture를 추출하여 이후의 self-attention block에서의 더 나은 처리를 가능하게 합니다. 자연어 처리와는 다르게, visual input은 많은 background feature들을 억제해야 할 필요가 있기 때문에 훨씬 더 추상적인 처리가 필요합니다. 그렇기에 input 이미지에 바로 self-attention block을 적용하는 것은 계산적인 측면에서 cost가 크겠죠. 이런 cost를 줄이기 위해 shallow CNN block에서 pooling 작업을 진행하는 것입니다. 구체적인 구조로는 3×3 size의 kernel를 가진 2개의 convolution layer로 구성되어 있으며, 각각의 convolution layer 뒤에는 2×2 크기를 가지고 stride가 2인 max pooling layer가 존재합니다.

3.2.2 Adaptive 2D positional encoding

shallow CNN으로부터 생성된 feature map은 self-attention block으로 들어가게 됩니다. 근데 self-attention block은 input의 spatial한 배치에 대해 무지합니다. 다시 말하자면 마치 fc layer와 같이 입력 데이터가 서로 어떤 위치에 있는지 알지 못한다는 것이죠. 따라서 기존 transformer는 positional encoding (PE) vector를 추가하여 1D sequential feature map에 위치 값이 내장된 위치 정보를 더해주었습니다.

이런 positional encoding은 vision task에는 필수적이지는 않았지만, convolution으로도 포착해내지 못한 long range dependency를 제공하는 역할을 하기도 하였습니다. 하지만 arbitrary한 모양을 가지는 text를 recognition하는 task에 있어서는 위치 정보가 굉장히 중요한 역할을 합니다. 현재 character 위치가 주어졌을 때 이미지에서 다음 문자를 어디서 찾을 수 있을까요 ? . . 위치 정보가 없으면 모델이 character 위치를 순차적으로 추적하기 어렵습니다. 그렇기에 저자들은 SATRN에 2D positional encoding을 적용합니다.

STR(Scene text recognition)에서는 이미지 내의 text가 어떤 방향으로 정렬되었냐에 따라 인접성을 adaptive하게 반영하는 것이 필요합니다. 예를 들어 수직으로 정렬된 text의 경우에는, 높이 방향의 인접성이 너비 방향의 인접성보다 더 중요할 것이며 가로로 정렬된 text의 경우에는 width 방향의 인접성이 height방향보다 더 중요할 것입니다. 이에 따라 저자들은 Adaptive 2D positional encoding(A2DPE)를 제안하여 input 이미지에 따라 height PE와 width PE 사이의 비율을 동적으로 결정하도록 하였습니다.

먼저, positional encoding이 없는 self-attention 모듈을 잠깐 설명하고 가겠습니다. shallow CNN block에 의해 생성된 2D feature map을 E라고 하고, (h, w) ∈ [1, …, H] x [1, …, W]에 해당하는 feature map을 e_{hw}라고 표시한다면, self-attention은 다음과 같이 계산됩니다.

여기서 v_{h’w’}e_{hw}W^v과 같은 것으로 feature map E에서 (h, w)에 해당하는 부분에 가중치를 곱한 것입니다. 또, rel_{(h’w’)→(hw)}는 다음과 같이 정의됩니다.

여기서 W^qW^k는 input을 쿼리 q_{hw} = e_{hw}W_q, 키 h_{hw} = e_{hw}W_k로 각각 매핑하기 위해 곱해지는 linear weights입니다. 직관적으로 rel_{(h’w’)→(hw)}는 (h’w’)의 위치의 특정 쿼리와 다른 특정 위치 (h, w)에 대한 attention 가중치를 나타내는 것입니다.

이제 저자들이 제안한 positional encoding A2DPE p_{hw}는 아래와 같습니다.

보시면 기존 수식에서 e_{hw}p_{hw}(PE A2DPE)가 더해졌습니다. 이 A2DPE는 input feature의 윗 부분에 더해져서 입력으로 들어갑니다.

p_{hw}는 아래와 같이 정의됩니다.

여기서 p^{sinu}_{p,2i}p^{sinu}_{w}는 [attention is all you need]논문에서 제안된 positional encoding입니다. (아래 수식 참고) 그럼 다시 보면, 기존 PE에 scale factor α, β를 곱한 것이 저자들이 제안한 A2DPE라고 보면 되겠습니다. 

scale factor인 α와 β수식은 아래와 같습니다.

여기서 W^h_1, W^h_2, W^w_1, W^w_2는 선형 가중치를 나타내며, g(E)는 input feature map에 global average pooling을 적용한 것입니다.

이렇게 계산된 A2DPE의 scale factor인 α(E)와 β(E)는 높이와 너비의 positional encoding에 직접적인 영향을 미쳐서 상대적으로 수평과 수직 방향의 비율을 조정하고, 이를 통해 spatial diversity를 나타낼 수 있게 됩니다. 그럼 최종적으로 모델이 입력 이미지 내에서 높이와 너비 방향에 따른 인접성을 adaptive하게 반영할 수 있게 되겠습니다.

3.2.3 Locality-aware feedforward layer

저자들은 이미지 내의 character를 정확하게 인식하기 위해서는 long-range dependency 뿐만 아니라 개별 character 주위의 근접성도 활용해야 한다고 말합니다. self-attention의 특성 자체로 long, 그리고 short-term dependency를 파악해낼 수 있지만, , short term dependency를 파악하기 위해 multi-stacked self-attention block을 사용하는 것은 비효율적입니다. 따라서 저자는 기존의 point-wise feedforward layer(Fig3 (a))를 개선하였습니다. 기존 feedforward layer는 1×1 convolution 2개로 구성되었었는데, 저자들은 3×3 convolution을 활용하여 2D feature map에서 short-term dependency를 좀 더 효율적으로 파악하도록 바꾸었습니다.

[Fig3 (b), (c)]가 저자가 개선한 locality-aware feedforward layer 구조입니다. 보시면, 기존 1×1 conv2개에서 이를 3×3으로 바꾼 것과, 1×1 conv 사이에 3×3 depthwise conv를 추가한 것 두개가 있습니다. 실험단에서는 3×3 conv와 depth-wise 변형 중에 후자가 성능과 효율성 측면에서 더 좋은 것으로 드러났습니다.

4. Experiments

실험에는 STR task에서 주로 사용되는 7개의 benchmark dataset을 사용하였습니다. 이 데이터셋들은 recognition하기 어려운 정도나 geometric layour에 따라서 “regular”, “irregular” 두 그룹으로 나눌 수 있습니다.

먼저 “regular” dataset은 수평으로 정렬된 text가 포함된 데이터셋으로 IIIT5K, SVT, ICDAR2003, ICDAR2013 데이터셋이 있으며, “irregular” 데이터셋은 arbitrary한 모양을 가지는 text가 더 많이 포함되어 있는 데이터셋으로 ICDAR2015, SVTP(Street view text perspective), CT80(CUTE80) 데이터셋이 있습니다.

STR(scene text recognition)에서 주로 학습할 때 사용되는 데이터셋으로는 Mjsynth과 synthtext 데이터셋이 있습니다. 저자들은 실험할 때 두 데이터셋을 혼합하여 사용하였습니다. 이 두 데이터셋을 같이 학습에 사용한 이유로는 제가 리뷰했던 [What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis]논문에서 STR 방법론들간의 공정한 비교를 가능하게 하기 위한 가이드를 제시했기에 그를 따른 것이라고 보면 되겠습니다.

encoder와 decoder의 self-attention layer 수는 각각 N_e = 12, N_d = 6이며, 최종 output은 94 score로 이루어진 벡터입니다. (10개 숫자, 52개 알파벳, 31개 특수한 문자, 1개 end token)

4.1. Comparison against Prior STR Methods

[Table1]은 본 모델 성능을 다른 기존 STR 모델과 비교한 표입니다. 보시면, feature map의 차원에 따라 그룹화 해 놓았으며, STN 사용 여부도 적혀져 있습니다. 본 방법론의 성능은 모든 벤치마크에서 다른 2D 방법론 성능보다 좋은 성능을 내었고, 특히 문제점으로 삼았던 arbitrary한 모양을 가지는 text를 많이 포함하고 있는 irregular dataset에 대해서는 SATRN이 두번째로 성능이 좋은 방법론보다 평균 4.5pp의 큰 차이를 보이고 있습니다.

4.2. Ablation Studies on Proposed Modules

ablation study에서는 SATRN-small모델을 사용하였습니다. SATRN-small은 단순하게 encoder layer를 12개에서 9개로 줄이고, decoder layer를 6개에서 3개로 줄인 버전입니다.

4.2.1 Adaptive 2D positional encoding (A2DPE)

저자들이 제안한 positional encoding은 전반적인 text가 어떻게 정렬되어있는지(수평, 대각선, 수직)에 따라 adaptive하게 동작하기 위해 필요합니다.

이 실험에서는 전혀 positional encoding을 수행하지 않는 것(”None”)과, flatten된 feature map 상의 1D positional encoding을 한 것 (”1D-Flatten”), 높이와 너비의 positional encoding concat(”2D-concat”)과 A2DPE의 성능을 비교합니다.

결과를 보시면 A2DPE가 네개 중에 가장 높은 정확도를 보입니다.

4.2.2 Locality-aware feedforward layer

마지막으로 locality-aware feedforward layer에 대한 ablation study입니다. Block FC는 기존 feedforward layer인 point-wise feedforward입니다. 결과를 보면 FC 대비, Conv(1×1 → 3×3로 대체)는 정확도가 향상되긴 하지만, paramter및 FLOPs가 4배입니다. 그렇기에 저자들은 Separable을 제안하여 기존과 거의 동일한 parameter수와 FlOPs으로 향상된 정확도를 가져감을 보였습니다. 

Author: 정 윤서

4 thoughts on “[CVPR2020] On Recognizing Texts of Arbitrary Shapes with 2D Self-Attention

  1. 정윤서 연구원님, 좋은 리뷰 감사합니다.
    리뷰에서 본 논문의 contribution이 2D feature map 상 공간적 의존성을 포착하는 2D self-attention이라고 하셨고, 2D feature map을 쓰는 이유는 기존의 1D featuremap 변환 방식으로는 다양한 text의 형태를 잘 인식할 수 없다고 하셨는데, 어떻게 1d feature map으로 표현했는지 궁금합니다. 구체적으로는, ‘2D이미지의 높이 성분을 1D의 feature map으로 변환’ 했다는 부분이 알고 싶습니다.
    감사합니다.

    1. 댓글 감사합니다.

      reshape을 통해 기존 (batch * width * height * channel) shape을 (batch * width * new_channel)로 변환해준 것입니다. 여기서 변환된 new_channel은 height x channel이 되겠네요

  2. 리뷰 잘 읽었습니다.
    3.2.3 설명에서 1×1 conv 2개를 3×3 conv로 변경함으로써 short-term dependency 를 잘 파악하도록 했다는 부분이 잘 이해가 안가는데 혹시 해당 부분에 대해서 저자가 추가적으로 설명한 내용, 견해가 있나요?
    아니면 윤서님께서 조금 더 추가적으로 설명해 주셨으면 합니다.

    감사합니다.

    1. 댓글 감사합니다.

      저자가 추가적으로 설명한 내용은 없습니다만,, 저는 1×1 conv를 사용했을 때는 공간적인 정보는 거의 고려하지 않고 feature map 차원 증가, 증감만 하기에, 3×3 conv를 사용함으로써 주변 pixel까지 고려하므로 short term dependency를 더 잘 파악할 수 있게 됐다고 이해했습니다. . .

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다