DL

[OCR] [2] 검출기 - DBNet++

해서 2024. 10. 28. 15:56

핵심키워드 

  • Differential Binarization <-> Standard Binarization
  • Adaptive Scale Fusion
  • Shrink <-> Dilate

 

Text Detection - DBNet++ (Differentiable Binarization Network++) 

https://arxiv.org/pdf/1911.08947

  • DBNet++ 모델의 구조 

DBNet++ 모델 구조

DBNet++ 의 개념 및 특징 

  • idea: 
    • 일반적인 Segmentation 기반의 모델은 추론 결과를 이진화하여 Box, Polygon형태로 검출하는 후처리 과정이 필요하다. 이를 위해 Segmentation Map 전체에 대해 단일 기준의 Threshold를 적용하여 이진화를 진행한다. 
    • 하지만, Threshold를 할 때 pixel마다 같은 값을 쓰는 게 아닌, 매 pixel마다 보다 최적의 threshold값을 이용하여 binarization map을 만들 수 있다면 더욱더 성능이 좋아지지 않을까? 

figure 1

  • Probability map의 Pixel-level threshold 기준으로 모델을 학습하도록 한다고 해보자 다음과 같은 그림을 떠올릴 수 있다.
    • 즉, 단순히 Probability map만 뽑는게 아니라 Pixel 단위로 Threshold값을 예측하는 Threshold map을 이용해서 각각의 pixel 마다 Threshold map이 예측하는 value로 Threshold을 걸어서 Binarization map을 만드는 것이다.
    • 그렇다면 다음과 같은 의문이 든다. Threshold map을 학습을 시킬 수 있을까? -> 단순히 rule 기반으로 매번학습할 수 없으니 모델로 학습을 해야한다. 그렇다면 Threshold map GT가 있어야하는데, 구할 수 있을까? 

figure 2

  • Standard Binarization의 경우 
    • Threshold map GT가 있다고 가정하면 다음과 같은 그림을 떠올릴 수 있다. 여기서 Standard Binarization은 Probability map에서 Threshold map기준으로 0과 1을 만드는것이다. 즉 이진화 과정
    • 중요한 점은 Standard Binarization이 미분 불가능하다는 것이다. 따라서 Probability map과 Threshold map은 Standard Binarization을 통한 Gradient를 받을 수 없다.
    • 그렇다면 Standard Binarization 없이, Probability map은 Binarization Map GT를 regression 하면 학습이 가능하고, Threshold Map도 Threshold Map GT를 통해 regression을 하면 학습하면 된다. 
    • 하지만, Threshold Map GT는 보통 없다. 따라서 우리는 Binarization Map GT를 최대한 이용하여 학습을 해야 한다. 그렇다면 어떻게 할 수 있을까? 

figure 3

  • Differential Binarization(DB)의 경우
    • Standard Binarization을 이용한다고 했을 때, Probability Map은 Binarization Map GT를 사용하면 된다. 하지만 Threshold Map 같은 경우는 매 pixel마다 어떤 값을 기준으로 이진화를 하면 될지 예측하는 것 이기 때문에 Binarization Map GT를 이용하는 건 어렵다. 
    • 그래서 필요한 것이 Standard Binarization이 아니라, 미분 가능한 Differential Binarization (DB)이다. 이것이 바로 DBNet의 유래이다.
    • 그렇다면 Threshold Map은 Binarization Map GT를 다이렉트로 regression 할 필요 없이, Gradient를 흘려보내준다면 Threshold Map GT 없이 Threshold Map에 대해서 loss를 흘려보내줄 수 있고 학습이 가능하다.

figure 4

  • Standard Binarization vs Differential Binarization 
    • 미분 불가능한 Standard Binarization을 대신하여 Differentiable Binarization을 적용 -> Model 학습과정에서 Loss를 얻어 Probability Map과 Threshold Map이 학습이 가능해진다.

figure 5

  • DBNet++의 Threshold Map 학습 고도화 
    • figure 4를 통해 학습한 Threshold map을 봤을 때, 별도의 super vision이 없음에도 불구하고 Text Board를 따낸 것처럼 학습이 되는 것을 저자들이 발견 
    • 따라서 Threshold map이 알아서 Text board에 대해 강조하고 있는 형태의 map을 나타내기 때문에 애초에 Text Board Map GT를 만들어서 학습하면 더 좋은 성능을 내지 않을까? 
    • Text board는 충분히 얻을 수 있는 GT이다. (Shrink / Dilate 알고리즘을 통해 얻을 수 있다.) 
    • Text Board Map GT를 통해 학습한 Threshold map을 보면 Text board를 훨씬 더 clear 하게 잡는 모습을 볼 수 있다.
    • 따라서 실험적 근거로 Text Board Map GT를 이용한다. 

figure 6

  • DBNet++의 Adaptive Scale Fusion 구조
    • 다양한 크기의 텍스트를 더 잘 검출하기 위해, DBNet++의 모델 구조의 Unet기반 encoder-decoder에서 각 depth마다 여러 scale의 feature가 나오는데 이를 적절하게 fusion 하는 방법이다.
    • 여러 scale의 feature map이 들어오게 되면 concat과 Conv를 거치고 Spatial Attention 블록에 들어오게 되면 해당 feature map에서 spatial dimension만 남기고 channel은 다 날려버려서 spatial index마다 특정 feature map에 대해서 얼마나 attend 해야 하는지 일종의 attention weight를 구할 수 있다.  이 결과와 원본 input feature map을 합쳐서 만든 것이 fused feature map이고 이런 방식으로 Multi-scale feature들을 fuse 하게 되면 성능이 오른다고 한다.

figure 7

 

DBNett++ 모델 학습 

  • Shrink, Dilate Algorithm
    • Shrink Algorithm: Polygon 영역의 면적을 정해진 기준값(rule)만큼 작게 축소하는 방법
    • Dilate Algorithm: Polygon 영역의 면적을 정해진 기준값(rule)만큼 크게 확대하는 방법 
  • Probability map 
    • 인접한 텍스트의 거리가 가까운 경우 Segmentation map의 텍스트 영역 분리가 어렵다 -> 하나로 합쳐서 예측할 가능성이 있다.
    • 이를 해결하기 위해, GT의 Polygon 영역을 Shrink 연산하여 Probability map을 생성한다. 
  • Threshold map
    • GT의 Polygon 영역을 Dilate 연산하고, Shrink를 해서 차이를 구하여 Text Board Map을 구한다. 이것이 Threshold map의 GT이다. 

figure 8

  • DBNet++의 Loss 계산 
    • Probability map, Threshold map, Approximate binary map 각각의 Loss를 구함 -> 각각 Super vision을 직접주는 방식 
    • Ls, Lb는 같은 식으로 pixel 단위 binary cross entropy방식
    • Lt는 구한 threshold map과 Text board GT을 이용하여 L1 norm Lossf를 구한다.
    • 최종적인 Loss는 Lb와 Lt에 가중치를 곱하여 구한다. 

figure 9

  • DBNet++의 추론 과정
    • 잘 학습된 DBNet++의 모델의 출력 Probability map은 Binary map과 거의 동일하다.  
    • Binary map의 Text 영역을 연결하여 Text region 정보를 추출하는데, 학습할 때 Probability map에 대해 shrink를 적용했으므로 예측된 binary map은 보통 실제 text에 비해 작거나 얇은 경우가 있기에 이를 shrunk text region이라 하고, Dilate를 통해 다시 원래 크기로 맞춰준다.

figure 10

DBNet++의 장단점

  • 장점:
    • Shrink / Dilate 연산을 이용한 학습과 후처리로, 인접한 텍스트의 정확도를 높임  
      • Probability map을 shrink 상태에서 학습했기에 텍스트가 모여있어도 예측자체가 각각의 text에 겹치지 않게 학습된다.
    • 아주 긴 텍스트 영역
      • 이는 학습할 때 threshold map이 Text전체의 board에 대한 super vision을 학습했기 때문, 단순히 Probability map만 학습하는 게 아니기 때문일 수 도 있다. 
    • 손글씨 텍스트 영역
      • 이것도 마찬가지로 Probability map만 학습한 게 아니라, Text board에 대해 super vision을 주기 때문에 텍스트 영역에 대해 segmentation을 더 잘한다고 볼 수 있다.

  • 단점:
    • 한국어인 경우 자모분리되어 인식되는 경우가 발생한다. 
      • 학습할 때 shrink가 너무 과하게 들어가면 모델이 너무 분할해서 작게 shrink를 하다 보니 여러 가지 분리가 된다.
      • 텍스트 영역이 겹쳐 저 있는 부분을 볼 수 있는데, 분리된 상태로 예측한 것을 Dilate로 더 키웠기 때문이다.
    • Text의 크기 변화가 지나치게 클 경우 인식하기 어려움 
      • GT자체를 shrink 하여 더 작게 만들기 때문에 글자가 너무 크게 되면 적절히 글자를 다 감쌀 만큼 Probability map을 모델이 예측하는 것을 어려워할 여지가 많이 있다.