[CVPR 2023] DeepSolo: Let Transformer Decoder with Explicit Points Solo for Text Spotting

안녕하세요, 마흔일곱 번째 X-Review입니다. 이번 논문은 2023년도 CVPR에 게재된 DeepSolo: Let Transformer Decoder with Explicit Points Solo for Text Spotting 논문입니다. 바로 시작하도록 하겠습니다. 🦍

1. Introduction

Text Spotting은 이미지 내에 존재하는 text의 위치를 검출하고 (detection), 그 검출한 text가 무엇인지 인식 (recognition)하는 task입니다. Text spotting 파이프라인을 설계하는데 있어서 지금까지 고려되었던 주요 문제는 어떻게 이 detection과 recognition 사이 관계를 잘 고려해볼 수 있을까 인데요. 실제로 이 부분이 모델 구조를 설계하는 것 외에도 성능이나 어노테이션 cost, 학습 시간 등에 영향을 미치게 됩니다.

지금까지 나온 spotting 방법론들은 detection을 먼저 하고 그 다음 recognition을 수행하는 파이프라인을 따랐는데, 위 Figure 1의 (a) RoI-based에 모사된 것과 같이 detector를 통해 먼저 text를 검출한 다음 이 RoI 기반의 Connector를 사용해 그 검출된 영역의 feature를 추출해 와 recognizier의 입력으로 넣어주는 식으로 동작합니다. 비록, 이런 방법론들이 많이 연구되어 오기도 했고 좋은 성능을 보이기도 했지만 두 가지 한계점이 존재합니다.
첫 번째 한계점으로, Detector와 Recognizer를 연결하는, feature alignment를 위한 connector가 반드시 필요하다는 점을 들 수 있겠습니다. 심지어 몇 Connector같은 경우는 polygon 형식의 annotation을 필요로 하는데 이런 경우에 weak annotation만 있는 경우는 적용하기 어렵겠죠. (가령 사각형 형식의 annotation만 존재하는 경우라던지)
두 번째로는 detection과 recognition 모듈 간의 시너지를 내기 위해서 추가적인 노력이 필요하다는 것입니다. 말이 이렇게만 적혀 있어 의도는 정확하게 파악은 못했지만,,, 아마 단순하게 detection 단게에서 위치를 조금이라도 잘못 예측하게 되면 recognition 쪽에서도 영향을 미치는 것을 말하고자 한 것 같습니다.

이와 대조하여 segmentation 기반의 방법론들은 이 두 detection과 recognition을 backbone을 공유함으로써 병렬적으로 수행하려고 하였는데, 이 segmentation 기반 방법론들은 특히 더 노이즈에 민감하다는 이슈가 있구요, 한 단어를 잘게 쪼개서 개별 단어라고 검출하는 경우도 있기 때문에 하나의 단어로 다시 grouping하는 후처리가 필요할 때도 있습니다.

최근에는 DETR 기반의 spotter들이 많이 연구되어 오고 있는데요, 이들은 앞서 언급한 connector나 heuristic한 후처리 과정이 필요 없긴 하지만 detection과 recognition 둘을 위한 representation이 부족하다는 단점이 있습니다. 구체적으로는 그림1의 (d), (e)를 보시면 되는데 TTS라고 써져 있는 모델은 추가적인 RNN 모듈을 필요로 하고 있는 것을 볼 수 있고, TESTR의 경우는 각 detection, recognition을 위한 decoder를 각각 두고 있죠. RNN을 사용하는 TTS의 query의 경우 location이나 shape같은 text의 특성을 잘 고려하지 못한다고 볼 수 있으며, TESTR의 경우에는 point query라고 하는 text box에 대한 positional prior를 사용을 하는데 이 정보가 너무 coarse해서 정확도가 떨어지는 문제와 함께 detection과 recognition에 사용하는 query가 query가 다르고 별도의 decoder를 사용하기 때문에 둘 간의 이질성이 생길 수 있습니다. 즉, , 쉽게 말해 detection한 위치와 recognition에서 요구하는 위치(정확히 recognition하기 위한)가 일치하지 않을 수 있다는 것이죠.

그래서 본 논문에서는 text line을 point로 표현해서 나타내는 새로운 쿼리 형식을 제안합니다. 이를 기반으로 DETR 방식의 단일 decoder를 사용한 DeepSolo라고 하는 모델을 제안하고자 합니다. 이는 그림 1의 (c), (f)에서 확인해볼 수 있습니다.
구체적으로는 각 text instance를 처리할 때, character sequence를 순서가 있는 점으로 표현하고자 했는데, 여기서 각각의 점들은 position정보와 offset 정보, category 정보를 담도록 하였습니다. 보다 구체적으로는 아래 method에서 다루도록 하겠습니다.

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

  1. DeepSolo라고 하는 DETR 기반의 text spotter을 제안하며, decoder는 하나만 사용하도록 하여 text spotting을 효율적으로 풀고자 하였다.
  2. Text instance line에서 sampling한 point 기반의 새로운 query를 제안한다.
  3. 좋은 성능

3. Methodology

3.1. Overview

Preliminary
본격적인 method를 설명하기 전에 본 논문에서 Bezier curve기반으로 point를 sampling하기에, 잠시 Bezier curve에 대해 설명드리고자 합니다. Bezier curve는 컴퓨터 그래픽쪽이나 curve를 설계할 때 흔히 사용되는 보다 매끄러운 곡선을 그리기 위한 수학적 방식인데요, 이 Bezier curve는 몇 개의 control point를 가지고 이 point 위치에 따라 곡선의 모양이 결정되게 됩니다. Text spotting task에서 사용되는 Bezier curve는 맨 처음에 ABCNet에서 제안을 하였는데요, 보다 구체적인 설명은 ABCNet X-Review에서 확인하면 될 것 같습니다. 무튼 이 Bezier curve는 반듯한 text보다는 curved된 text를 다루기 위해 등장한 거구요. ABCNet에서는 BezierAlign을 제안함으로써 feature를 Bezier curve에 맞춰 잘라낸 반면 본 논문에선느 DETR framework내에서 Bezier curve를 다르게 활용하고자 하였습니다.
각 text instance의 top, bottom 부분에 각각 4개의 control point가 주어질 때 이 상하단의 control point를 평균내어서 text line의 중심 곡선을 계산해 낸 다음 이 중심 곡선, 상단 곡선, 하단 곡선에 대해 고정된 N개의 point를 uniform하게 sampling하여 gt로 사용하였습니다.

Model Architecture

전반적인 모델 구조는 위 그림2에서 확인할 수 있습니다. 보시면 입력 영상이 backbone으로 들어가서 feature를 추출하게 되구요, deformable attention을 수행하는 transformer encoder에 feature가 들어가서 나온 output 기반으로 Bezier center curve proposals가 생성되며 각각의 curve마다 confidence score가 있습니다. 이 score 기반으로 top-K개의 curve proposal만을 뽑게 됩니다. 이렇게 뽑힌 각각의 curve proposal들은 4개의 bezier control point로 표현이 되게 되는데 control point로 나오는 curve를 따라서 uniform하게 N개의 point가 sampling됩니다. 그림에서 중앙 하단에 그려진 부분이 이에 해당합니다. 그 다음 이렇게 sampling한 point들의 좌표가 positional query로 encoding되게 되고 여기에 learnable한 content query가 더해져서 composite query를 형성합니다. 그 다음 이 composite query가 deocder의 입력으로 들어가서 deformable cross attention을 통해 text와 관련된 feature들을 얻어내게 되고 decoder를 타고 나온 output을 기반으로 4개의 병렬 head를 타게 됩니다.

3.2. Top-K Bezier Center Curve Proposals

본 논문에서는 text center line으로부터 단순한 Bezier center curve proposal 방식을 사용하는데, 이로써 한 text와 다른 text들간의 구분을 하기 쉬울 뿐 아니라 line annotation도 사용할 수 있다는 점을 어필합니다. . . (전 line 좌표가 annotation되어 있는 dataset은 본 적이 없긴 합니다만,,)
Bezier curve를 얻을 때는 encoder를 타고 나온 feature map의 각 pixel을 사용하는데, 3 layer MLP를 태워서 각 pixel에서 4개의 Bezier control point에 대한 offset을 prediction한 다음 이 offset을 통해 특정 text instance를 나타내는 curve를 결정하는 식입니다.
본 논문이 Deformable DETR을 기반을 하기 때문에 multi scale의 feature map이 존재하는데, 각 feature map의 level가 l ∈ {1, 2, 3, 4}로 있을 때 2D normalized된 좌표는 \hat{p_i} = (\hat{p}_{ix}, \hat{p}_{iy})[0, 1]^2 가 되겠고, 이 각 pixel으로부터 예측된 Bezier control point는 BP_i = {bp_{i0}, bp_{i1}, bp_{i2}, bp_{i3} }가 되겠습니다.

bp_{ij}는 다음과 같이 계산되는데 j는 ∈ {0, 1, 2, 3}으로 4개의 control point가 나오는데 각각의 index를 나타내구요, σ는 sigmoid 함수입니다. 각 pixel이 MLP를 타고 나오면서 \Delta p_{i{x0, y0, \dots, x3, y3}} 이 offset을 예측하게 됩니다. 추가로 linear layer하나를 태워서 text인지 text가 아닌지 binary classification을 하도록 한 후 score 기반으로 top -K 개의 curve proposal이 선택되게 됩니다.

3.3. Point Query Modeling for Text Spotting

Query Initialization
이제 top-K개의 curve proposal들이 나왔다면 이 curve 기반의 point를 sampling하는 방식에 대해 살펴봅시다. \hat{B}P_k (K ∈ {0, 1, …, K – 1})이 주어졌을 때 각 curve에 대해 N개의 sample을 uniform하게 뽑는데, 이 때 각 좌표는 정규화된 형태로 얻어지며 좌표 shape은 K x N x 2입니다. (K개의 proposal 마다 N개의 point마다의 x, y 좌표). 이때 decoder의 입력으로 들어갈 point positional query P_q 는 이 좌표에 positional encoding한 후 MLP를 태워 K x N x 256 shape을 갖는 쿼리로 생성됩니다.

또, point content query C_q 는 learnable한 embedding으로 초기화 해서 사용합니다. 그 다음 최종 decoder로 들어갈 composite query Q_q는 둘을 더해서 생성되겠죠.

Query Update in the Decoder
앞서 생성한 composite query가 transformer decoder의 입력으로 들어가게 됩니다. 저자는 이때 앞선 TESTR이나 DPText-DETR 연구들을 따라서 point query간의 relationship을 먼저 학습하도록 한 후 다른 text instance 간의 attention을 수행하도록 하였는데요, 단순히 말해 한 text instance마다 이를 표현하는 sampling된 point가 있을 때 이 한 text안에 있는 sampling된 point들끼리 먼저 attention을 한 후에 그 다음 다른 text instance끼리 attention을 수행하는 intra, inter attention을 수행하는 것입니다.
이 attention을 수행할 때 key는 query와 동일한 값이구요 value는 composite query에서 positional 부분을 뺀 content 부분만을 사용합니다. 즉, K_q = Q_q, V_q = C_q이죠.
이렇게 intral inter attention을 거쳐 업데이트 된 composite query들이 deformable cross attention으로 들어가게 됩니다. 이때 앞서 sampling한 좌표 Coords들이 deformable attention에서 reference point로 사용됩니다. Deformable attention에서는각 query가 어디에서 정보를 찾을지에 대한 reference point를 필요로 하는데 그게 sampling point로 들어간다고 이해하시면 될 것 같습니다.
이후 deformable attention까지 거치고 난 다음 3 layer MLP head를 통해 offset을 prediction해내게 되고 이 offset을 사용해 한 decoder layer마다 point 좌표를 업데이트해나가는 식으로 학습됩니다.

3.4. Task Prediction

이렇게 각 image로부터 decoder output으로 K x N x 256 shape의 query가 나오게 되면 이로부터 sub task를 위한 prediction head를 태우게 됩니다. 먼저 Instance classification으로 text인지 아닌지를 구분하는 binary classification을 위한 linear projection을 하게 되구요, inference때는 각 instance마다 N개의 score가 나오게 될텐데 이를 평규내어 최종 confidence score로 사용합니다. 다음으로는 Character classification인데, 이는 각 text instance가 무슨 글자인지 prediction하는 과정입니다. 각 point들이 text의 중심 라인을 따라서 균등하게 sampling되어 나오고 각각의 point query들은 background를 포함하여 각각의 특정 class값을 갖게 되는데 이 또한 linear projection을 통해 character를 classification하게 됩니다. 다음으로는 Center curve points에 대한 부분인데, point 좌표 Coords가 있을 떄 3 layer MLP head를 태워 reference point로부터 offset을 예측하도록 하였습니다. 마지막으로 Boundary points인데 이또한 Center curve points와 유사하게 3 layer MLp를 태워 text의 상단, 하단 부분을 커버하는 curve까지의 offset을 예측하도록 하는 것입니다.

4. Experiments

4.1. Ablation Studies

Sharing Point Embeddings
이제 실험 부분을 살펴보도록 하겠습니다. 먼저, point embedding을 sharing하도록 했을 때의 ablation study결과인데, point embedding을 공유하지 않고 matching loss를 사용했을 경우 가장 성능이 높으며, 동일하게 matching loss를 사용했을 때 sharing을 했을 때 엄청 큰 차이는 아니지만 e2e로 봤을 떄 성능이 1정도 떨어지는 것을 확인할 수 있습니다. 이로써 모든 text instance에 대해 동일한 point embedding을 사용하는 것보다, 각 text instance마다 고유한 embedding을 생성하는 것이 더 의미있다는 결론을 내릴 수 있겠습니다.
Text Matching Criterion
또, 해당 table에서 text matching loss에 대한 영향력을 확인해볼 수 있는데, 이 text matching loss라고 하면, method 부분에서는 다루지 않지만 본 방법론이 detr 기반이라 matching cost를 줄이도록 학습되는 기존 detr loss 형식을 따르게 되는데 이때 text에 초점을 맞춰 matching loss를 좀 변경한 부분입니다. 본 모델이 decoder를 타고 나온 control point 기반으로 text character classification을 하게 되는데 이때 backgroud인 query도 있을 수 있으므로 하나로 sequential하게 이어 붙이게 되면 gt와 같은 text형태가 아니게 되어 직접적인 loss계산이 불가능하기 때문에 CTC 기반으로 background인 character는 제거하고 이어붙임으로써 이를 matching loss에 추가한 부분인데요, 이를 사용하지 않았을 떄와 사용했을 때를 비교해보았을 때 많이는 아니지만 1정도의 성능 향상을 보이고 있습니다.

4.2. Comparison with State-of-the-art Methods

Results on Total-Text
먼저 Total-Text라고 하는 데이터셋에 대한 실험 결과입니다. 이 Total-Text 데이터셋은 arbitrary shape 즉, curved 되어 있거나 일반적인 직선 모양이 아닌 여러 text가 주로 포함된 image로 이뤄진 데이터셋인데요, 본 DeepSolo 모델이 이런 arbitrary shape을 갖는 text에 대한 성능을 확인해볼 수 있겠습니다. 위 table 5에 해당 결과를 확인할 수 있는데 None, Full이라고 되어 있는 부분이 detection, recognition을 다 수행한 e2e 성능이라고 보시면 되며, None Full의 차이는 lexicon의 유무 차이인데 lexicon은 데이터셋의 단어 사전이라고 생각하면 됩니다. 즉, lexicon이 있는 full의 경우에는 모델이 recognition한 text를 가지고 단어 사전안에서 가장 유사한 단어를 classification하는 것으로 보면 되며 None은 그냥 모델이 예측한 text 결과를 그대로 사용하여 평가하는 것입니다. 당연히 None일 때가 Full일 때보다 성능이 좀 더 떨어지겠죠. None일 때의 결과를 보면 모델이 Synth150K 데이터셋을 가지고 pre-train했을 경우 기존 모델 GLASS보다 약간 떨어지는 성능을 보이며 나머지보다는 더 나은 성능을 보입니다. 저 방법론에 보이는 구분선은 위쪽인 transformer를 사용하지 않는 모델들, 아래쪽이 transformer-based 모델들인데요, DeepSolo같은 경우 기존 transformer model인 TESTR이나 SwinTextSpotter SPTS와 비교해봤을 때 큰 차이로 성능이 더 높은 것을 확인할 수 있습니다.
TTS 같은 경우 78.2로 Synth150K만을 사용하여 pre-train한 DeepSolo와 비교했을 때 성능이 비슷하지만 TTS처럼 많은 데이터셋을 사용하여 사전학습한 경우 83.6 까지의 성능을 보이고 있습니다.

4.4. Visual Analysis

마지막으로 정성적 결과인데요, 위 Fig 4는 여러 다른 scale feature에서의 attention을 시각화한 것입니다. 맨 좌측이 그냥 spotting 결과이구요, 가운데 있는 것이 high-resolution feature에서의 attention, 우측이 low resolution feature에서의 attention 결과인데 보시면 다른 poitn query가 시각화된 것을 볼 수 있습니다. 이는 DeepSolo가 크기 변화가 큰 text도 잘 검출할 수 있음을 시사합니다. 우측편에 있는 4개의 그림에서는 point query들이 character가 구분되는 끝부분?에 강하게 attention된 것을 볼 수있습니다. 잘 안보이실 수 있는데 빨간색일수록 high weight를 갖는 point인데요 s, h, f, d의 끝 부분에 high weight point가 존재합니다. 이로 보아 point query가 text의 shape을 구별하기 좋은 위치에 attention을 잘 하고 있음을 확인할 수 있습니담.

Author: 정 윤서

3 thoughts on “[CVPR 2023] DeepSolo: Let Transformer Decoder with Explicit Points Solo for Text Spotting

  1. 안녕하세요, 정윤서 연구원님. 좋은 리뷰 감사합니다. 제가 text spotting 분야 방법론에는 익숙하지 않아 간단한 질문 두개 드리겠습니다.

    1. RoI-based 방법론의 경우 Detector를 통해 (bbox형태?로) text의 위치를 spotting하고, connector를 거친 후 텍스트를 인식하는 recognizer를 거치는 것으로 보이는데, detector-connector-recognizer는 각각 직렬로 구성된 CNN이라고 보면 될까요??
    2. (TESTR와 같은)DETR기반 방법론들의 경우 detection과 recognition을 위한 detector를 각각 따로 두고 있는 것으로 보이는데, recognition detector에는 모든 이미지 영역을 입력으로 주게 되나요? 아니면 detection된 특정 영역만을 입력으로 주게 되나요??

    감사합니다.

    1. 안녕하세요. 댓글 감사합니다.

      1. 네 맞습니다.
      2. detection과 recognition을 위한 detector를 각각 두고 있다는 걸 말하고자 한 것 같은데,, detr 기반 모델이기에 recognition decoder로는 query가 들어가게 되는데 예시들어주신 TESTR에서는 character query라고 하여 learnable한 query embedding을 입력으로 넣게 됩니다. detection decoder로는 control point query가 들어가게 되는데 동일한 index의 character query와 control point query가 같은 text instance에 속하기 떄문에 deformable cross attn과정에서 reference point를 공유해 동일한 feature로부터 일관된 context 정보를 얻을 수 있습니다.

  2. 안녕하세요! 좋은 리뷰 감사합니다.
    이 논문에서 text center line으로부터 단순한 Bezier center curve proposal 방식을 사용함으로써 한 text와 다른 text간의 구분을 하기 쉽다고 하셨는데, center curve를 사용하는 방식이 기존에 다른 방법론들이 사용하는 방식들보다 구분이 잘 된다는 것이 명확히 와닿지 않아 부가 설명을 부탁드려도 될까요?
    또한 top K개의 proposal들을 뽑아 사용하는 것 같은데, 이 proposal 개수에 대한 검증 실험은 딱히 없는건가요? 이 proposal 개수에 따라 성능 차이가 발생가지 않는지 궁금합니다.
    감사합니다.

답글 남기기

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