Machine Learning/Image

Faster-DAN

ai-notes 2024. 12. 23. 15:33
반응형
Coquenet, Denis, Clément Chatelain, and Thierry Paquet. "Faster DAN: Multi-target Queries with Document Positional Encoding for End-to-end Handwritten Document Recognition." 
International Conference on Document Analysis and Recognition
. Cham: Springer Nature Switzerland, 2023.
https://arxiv.org/pdf/2301.10593

https://ainotes.tistory.com/34

 

Document Attention Networks (DAN)

Coquenet, Denis, Clément Chatelain, and Thierry Paquet. "Dan: a segmentation-free document attention network for handwritten document recognition."IEEE transactions on pattern analysis and machine intelligence45.7 (2023): 8227-8243.https://arxiv.org/pdf/2

ainotes.tistory.com

위 논문의 후속 논문입니다.

DAN의 경우 순차적으로 문서 전체의 Character를 생성하기에 추론 시간이 매우 오래걸린다는 단점이 있었고,

Faster DAN은 그 문제를 개선한 논문입니다.

공식코드는 여기에서 확인해 볼 수 있습니다.


Abstract

DAN에서 사용한 Autoregressive process는 병렬 최적화의 이점을 얻을 수 없는 추론입니다.

이 논문에서는 Faster DAN을 제안하는데, Prediction time에 recognition 속도를 높이기 위한 두가지 전략을 사용합니다.

  • 모델은 각 텍스트 라인의 첫번째 캐릭터를 예측합니다.
  • Multi-target queries와 특정 문서 positional encoding을 통해 모든 텍스트 라인을 병렬로 완성합니다.

Faster DAN은 기존 DAN보다 최소 4배의 빠른 속도를 보여줬다고 합니다.

 

Introduction

최근 연구들은 문단 단위로 텍스트 인식을 시도합니다.

일반적으로 문서 인식에는 Segmentation, Recognition, Ordering으로 이루어지는데,

이 방법은 어떤 단위(글자, 문장, 문단 등)의 인식을 시도하더라도 많은 단점이 있습니다.

  • 오류가 단계마다 누적된다.
  • Segmentation을 위한 데이터가 필요하다.
  • rule-based order는 다양한 레이아웃을 담지 못한다.

이에 저자들은 새로운 end-to-end 모델 DAN을 제안 했었습니다.

이 논문에서 제안하는 Faster DAN은 DAN의 추론속도를 개선한 모델입니다.

이 모델은 각 예측 글자에 Text line 멤버십 정보를 주입하는 것을 목표로 하는 새로운 Document Positional Encoding을 기반으로 합니다.

이 방법으로 single model을 사용하면서 text line을 병렬적으로 인식할 수 있으며, 전체 반복횟수를 줄일 수 있습니다.

Faster DAN은 두 단계의 예측 프로세스를 가집니다.

  1. Layout tokens와 각 text line의 첫번째 글자를 예측합니다.
  2. 검출된 모든 text line은 multi-target transformer queries를 통해 병렬적으로 인식됩니다.

Figure 1에서 DAN과 Faster DAN의 인식 방법 차이를 확인할 수 있습니다.

Faster DAN

기존의 Character-level attention-based 접근 방법으로는 입력이미지의 모든 글자에 대해 순서대로 하나씩 예측을 하기 때문에, 글자 수에 따라 예측 시간이 커지는 문제가 있습니다.

이 문제는 독립된 text line images를 사용하면 큰 문제가 발생하지 않지만, 전체 문서에 대해서는 문제가 발생하는데, V100 기준으로 100개 단어를 생성하는데 1초가 걸린다고 합니다.

이에 저자들은 Faster DAN을 제안하는데, 이 모델의 목표는 text line 기반 구조를 활용해 문서의 text line들을 병렬적으로 인식하는 것 입니다.

이 때, 각각의 text line이 < eot > 토큰을 갖게 됩니다.

 

Reading lines in parallel

병렬 인식은 두 가지 도전 과제가 있습니다.

  • text lines를 검출하는 것
  • 검출된 text lines의 정보들이 섞이지 않게 인식하는 것

또한 DAN에서는 Layout 개체를 인식하는 과정도 필요합니다.

이 문제를 해결하기 위해 저자들은 두 번의 과정(Figure 2 참조)을 통해 결과를 예측합니다.

  1. 모델은 Layout 예측과 textline 검출 문제를 동시에 해결하기 위해
    Layout tokens와 각 text lines의 첫번째 글자를 순차적으로 예측합니다.
  2. 각각의 text lines를 1 단계에서 예측한 첫번째 글자를 기반으로 나머지 내용을 완성시킵니다.

Document Positional Encoding

Text lines을 병렬로 인식하기 위해서 저자들은 새로운 positional encoding scheme를 제안했습니다.

새로운 positional encoding은 2D로 구성되어 있는데, 기존의 방법처럼 token에 대한 1D Positional embedding에 text line의 인덱스에 대한 1D Positional embedding를 concat 했습니다.

새로운 Positional encoding은 다음과 같이 정리할 수 있습니다.

$$ P^{doc} \in \real^{l_{max} \times n_{max} \times d} $$

여기서 $l_{max}$는 최대 text line의 숫자를 의미하며, $n_{max}$는 최대 토큰의 길이를 의미합니다. 두 임베딩 값(text line positional embedding, token positional embedding)은 concatenate를 통해 합쳐지며, Dimension을 유지하기 위해 입력 dimension의 절반의 갯수를 갖습니다.

*concatenate를 사용한 이유는 text line positional embedding 값과 token positional embedding 값을 고유하게 가져가서 정보를 보존하기 위함으로 보입니다.

Positional encoding이 적용되는 단계를 풀어서 설명드리면,

First pass :

기존 autoregressive 과정과 같이 진행되며 Layout 토큰을 포함 각 text line의 첫번째 토큰을 예측합니다. 예측한 토큰은 $\hat{y}^j_0$으로 표현하는데 여기서 $j$는 text line의 number를 의미합니다. 예측값 중 Layout 토큰은 제외하고 Text 토큰은 $q^t$로 표현하며, Second pass의 query tokens로 사용됩니다. *이 시점에서 text line positional embedding은 0번째 값을 나타냅니다.

Second pass :

이 단계에서는 query tokens에 대해 standard Transformer decoding 과정을 거칩니다. query tokens는 iteration t를 지나면 $o_{t-1}$을 얻고, 이를 다음 input으로 사용하는데, 저자들은 이것을 multi-target queries라고 말합니다. 이전에 예측한 첫번째 토큰 $\hat{y}^j_0$의 경우 $\hat{y}^j_1$의 입력값으로 재사용됩니다.

Attention 계산을 위해 Query tokens가 다음과 같이 재정렬되고, 결과 O를 구하게 됩니다.

$$ q^t=[q^0_0,...,q^0_{t-1},...,q^L_0,...,q^L_{t-1}] - query\\ o^t=[o^0_0,...,o^0_{t-1},...,o^L_0,...,o^L_{t-1}] - output\\ $$

Context exploitation :

Text line을 병렬로 처리하는 가장 단순한 방법은, 다른 모든 text line의 token을 마스크 처리하여 참조하지 못하게 하는 것 입니다. 이 방법으로는 각 라인 j의 토큰 $q^j_i$가 자신의 라인의 0번째부터 i번째 까지만 참조할 수 있습니다.

그러나 이 방법은 다른 라인의 예측 결과(문맥)을 사용하지 못한다는 단점이 있습니다. 이는 문서의 구조적 연결성을 학습하기 어렵게 만듭니다.

이에 따라 저자들은 자신의 라인뿐만 아니라 문서의 다른 text line의 정보도 참조할 수 있도록 했습니다.

이 방법은 위의 figure 3에서 확인 가능하며, (a)는 기존의 방법에 대한 예시 그림이며 (b)가 제안하는 방법에 대한 참조 예시입니다.

 

마치며

이번편 역시 기본 지식들을 제외한 필요하다고 생각하는 부분을 가져와서 정리했습니다.

공식 코드를 제공하고 있으므로, 코드와 함께 보면 더 이해가 쉽습니다.

반응형