[CVPR 2023] Turning a CLIP Model into a Scene Text Detector

안녕하세요, 마흔네 번째 X-Review입니다. 이번 논문은 2023년도 CVPR에 게재된 Turning a CLIP Model into a Scene Text Detector 논문입니다. 바로 시작하도록 하겠습니다. 🦩

1. Introduction

Text detection task는 text가 존재하는 scene image에서 text가 존재하는 영역을 검출하는 task입니다. 이 text detection의 annotation 종류로는 크게 문자 하나 하나 단위로 box를 치는 character-level, 혹은 단어 단위로 box를 치는 word-level, 한 라인 단위로 box를 치는 text-line level로 나눠볼 수 있습니다. 또 box를 어떻게 칠지는 사각형과 다각형으로 나뉩니다. 이런 annotation을 사용해서 fully-supervised 학습한 모델의 경우 좋은 성능을 보이고 있지만, cost가 많이든다는 단점이 있죠. 특히 character-level 혹은 polygon box의 경우 더욱 더 그럴 것이라고 생각이 듭니다. 그래서 few-shot과 같이 적은 양의 labeling된 데이터로부터 좋은 성능을 내는 것이 중요하겠죠.

본 논문의 제목을 보시면 CLIP을 text detection task에 적용한 논문임을 짐작할 수 있습니다. 저자는 일반적인 object detection과 비교해봤을 때 scene text 영상이 보통 visual 정보와 character 정보를 둘 다 같고 있기 때문에 CLIP 모델과 더 자연스럽게 연결해볼 수 있다고 주장합니다. 비단 CLIP 모델 뿐만이 아니라 최근에는 visual, semantic, text간의 cross-modal 정보를 잘 사용해봄으로써 text detection 성능을 올리고자 하는 연구들이 있어왔습니다.

위 figure1이 text knowledge를 scene text detection에 사용한 여러 패러다임을 보여주고 있는 그림입니다. 먼저 (a)를 보면, CLIP과 유사하게 text encoder에 text를 태워 embedding을 뽑고, image encoder에서도 embedding을 뽑아 이 둘간의 cross-modal interaction을 하며 pretext task를 수행하는 pre-training한 후 이때 학습한 image encoder를 그대로 가져와 실제 우리가 하고자 한 text detection fine-tuning할 때 사용하는 패러다임입니다.

이 패러다임으로 동작하는 논문 figure인데요, 구체적으로 봐본다면, text가 적혀져 있는 image는 image encoder에 태워서 embedding을 추출하고, text의 경우에는 image에 있는 text들 중에 몇 개의 text는 [mask] 토큰 처리하여 text encoder에 태워 embedding을 추출한 후 이 두 embedding을 cross-modal encoder 태워 [mask] 토큰 처리한 그 text를 prediction하도록 하는 pretext task를 수행한 후 이때 학습한 image encoder, 그림에서는 저 resnet 부분을 가져와 fine-tuning하는 식으로 동작합니다. 이 mask token을 예측하는 pretext task를 수행하면서 text의 visual적인 특징과 semantic한 정보를 모두 활용할 수 있도록 하는 것이라고 보면 되겠습니다.

다음으로는 (a)와 마찬가지로 text를 사용해서 backbone을 향상시키는 방식인데, 앞선 (a)와의 차이점으로는 text encoder는 사용하지 않고 오직 image encoder만을 사용해 image level의 text recognition을 하도록 pre-training한 후 이 image encoder를 가져와 뒷단에 detection head를 붙여 fine-tuning하는 식입니다. 쉽게 말해 pre-training할 때 이미지에 존재하는 모든 text를 prediction하도록 하면서 학습해둔 backbone을 fine-tuning 때 가져와 쓰는 것이죠. 즉, text recognition을 학습하는 과정에서 text를 다이렉트로 encoding하지는 않고 image에서 text와 관련된 visual feature를 학습하는 것이라고 보면 됩니다.

방금 이런 선행연구들과는 다르게 본 논문에서는 pre-training과정 없이 CLIP 모델을 text detection에 사용하고자 하였습니다. 이 패러다임에 해당하는게 figure1의 (c)에 나와있는데 보시면 pre-training없이 바로 CLIP의 text encoder와 image encoder를 사용해 bbox를 prediction하도록 함으로써 fine-tuning하는 식임을 볼 수 있습니다. 그래서 Turning a CLIP Model into a scene text detector이라고 하여 TCM이라고 명명하였습니다. 이 TCM에 대해 아래 method 부분에서 자세히 살펴보도록 하겠습니다.

2. Methodology

2.1. Turning a CLIP into a Text Detector

저자들이 제안한 TCM은 현존하는 어떠한 text detector에도 붙여서 성능 향상을 보일수 있다는 pluggable 모듈이며, CLIP 모델의 image encoder와 text encoder에서 각각 image와 text embedding이 추출됐을 때, 이들간의 cross-modal interaction 방식을 제안한 것입니다.

디테일은 위 figure3에서 확인할 수 있습니다. 크게 보자면 저자가 제안한 것은 CLIP의 image encoder로부터 뽑은 feature로부터 좀 더 fine-grained한 visual feature를 추출할 수 있도록 하는 visual prompt 모듈과, language prompt 모듈, 그리고 이미지 임베딩과 텍스트 임베딩간의 align을 맞춤으로써 image encoder가 text가 위치한 영역을 명시적으로 학습하도록 하는 instance-language matching방식을 제안하였습니다. 이제 하나씩 자세히 살펴보도록 하겠습니다.

Image Encoder

Image encoder로써는 사전학습된 CLIP의 resnet50을 사용하였습니다. 입력 영상 I’ ∈ R^{H \times W \times 3}이 들어올 때 output 영상 임베딩은 I ∈ R^{H’ \times W’ \times C}가 되며 아래 식1로 나타내볼 수 있습니다.

Text Encoder

기존 CLIP의 text encoder는 K개의 class prompt를 입력으로 받아 vector space R^C로 임베딩하여 T = {t_1, …, t_k} ∈ R^{K \times C} text embedding을 output으로 내뱉습니다. 여기서는 pre-trained된 CLIP text encoder를 freeze해서 사용하며, text detection task에서는 class가 하나밖에 없기 때문에 K는 1로 설정이 됩니다. 기존 CLIP이 “a photo of a [CLS]”를 템플릿으로 사용하지만, 저자는 “Text”라고 하는 단순한 prompt를 사용하였습니다. Text encoder의 입력중 일부인 t’_{in}는 아래와 같이 나타낼 수 있겠습니다.

또, 저자는 text embedding의 transferability를 학습시키기 위해 앞선 사전에 정의된 prompt “Text”만 사용하는 것이 아닌, learnable한 prompt {c_1, … c_n)를 추가하였습니다. 이는 CLIP 모델이 zero-shot transfer를 더 잘할 수 있도록 하는 목적이며 이 학습가능한 벡터를 추가한 input prompt는 아래와 같이 나타낼 수 있습니다.

t_{in}를 입력으로 받아 text embedding t_{out}을 생성하는 식은 위와 같구요.

Language Prompt Generator

다음으로 저자가 제안한 Language Prompt Generator입니다. 앞서 말한 pre-defined prompt (”Text”)와 learnable한 prompt로 CLIP의 text encoder로 임베딩을 잘 뽑아낼 수 있겠지만, train image와 다른 분포를 갖는 test 이미지가 들어오는 경우에서는 few-shot 혹은 일반화 성능이 부족할 수 있다고 합니다. 이를 해결하기 위해 추가로 제안한게 language prompt generator이구요. 이 모듈은 conditional cue 이하 cc로 불리는 feature vector를 생성해내서 각 영상마다 이 cc가 text encoder input t_{in}에 더해져 입력으로 들어가게 됩니다. 아래 식을 참고하면 되겠습니다. \hat{t}_{in}이 최종 text encoder로 들어가는 input prompt가 되는 것입니다.

CC는 식6과 같이 2개의 layer를 갖는 feed-forward network로 구성이 되어 있고, input 이미지를 image encoder에 태워 생성한 global embedding I로부터 cc를 생성하는 식으로 동작합니다.

기존 “Text”와 같은 고정된 text prompt 혹은 learnable한 prompt만을 사용한다면 모든 영상에 대해 동일한 방식의 prompt를 사용하는 것이기 때문에 train data와 분포가 다른 영상에서 한계가 있다는 의미이며, 그에 반해 language prompt generator는 각 입력 영상마다 추출한 global feature를 반영한 cc를 생성하고 이를 input text prompt에 더해줌으로써 입력 이미지의 고유한 특성을 반영한 input prompt를 만들수 있다는 것입니다. 단순하게 말하면 입력 영상에 맞는 맞춤형 text input을 생성하겠다는 의도로 보면 되겠습니다.

Visual Prompt Generator

다음으로 저자가 제안한 visual prompt generator입니다. 이는 CLIP image encoder를 타고 추출한 globality image embeddings으로부터 fine-grained한 embedding을추출해내는 모듈입니다. 구체적으로 text feature로부터 visual feature로 semantic한 정보를 propagate하기 위한 모듈이라고 보면 되겠습니다.

식 7과 같이 image embedding을 쿼리로 두고 text embedding을 key, value로 두어 cross attention하는 것이 그 전부입니다. 즉, 이미지에서 text와 연관된 부분에 좀 더 집중하도록 한 것입니다. 이렇게 생성한 visual prompt \tilde{I}는 원래의 image embedding과 더해져 text-aware locality embedding \hat{I}가 됩니다.

\hat{I}은 이후 설명드릴 Instance-language matching과정에서 사용되는 feature입니다.

Instance-language Matching

마지막으로 instance-language matching은 text encoder를 타고 나온 text embedding과 방금 생성한 locality embedding의 text instance를 연결하는 과정이라고 보시면 됩니다. 쉽게 말해 이 최종적으로 나온 image feature에서 text가 있는 특정 영역과 text embedding을 matching하는 것이구요, 이과정을 통해 모델이 이미지 내에 text가 위치한 부분을 더 명확하게 찾도록 학습하는 것입니다.

이 matching과정은 식9에서 볼 수 있듯이 우선 두 embedding간의 내적을 한 후 sigmoid 함수를 통해 이 binary score map P을 생성해 내게 됩니다.

그림에 저 파란 배경의 map인 binary score map은 text instance가 존재하는지 나타내는 나타내는 map이겠고, 이후 gt text segmentation map과의 binary cross entropy loss를 통해 학습되게 됩니다.

이 과정을 통해서 모델이 영상 내에 위치하고 있는 text 영역을 좀 더 정확하게 구분할 수 있게 되겠죠.

Optimization

최종적인 loss 함수는 아래 식 11과 같습니다.

방금 위에서 정의한 aux loss와 기존 detection model(어떤 모델이든 상관 X)의 detection loss를 가져와서 가중합한 것이 되겠습니다.

3. Experiments

3.1. Cooperation with Existing Methods

TCM을 크게 recognition based의 detector와 segmentation based detector인 FCENet, PAN, DBNet과 결합한 결과인데요, IC15, TD, CTW 데이터셋에서 각각 F-measure가 일관되게 향상되었습니다.

위 figure7은 global image embedding과 visual prompt를 태워서 생성한 fine-grained embedding을 시각화한 결과입니다. 왼쪽은 global feature이기에 text가 포함된 영역이 어느정도 highlight되어 있긴 하지만, 전체 영상 정보가 고르게 반영되고 있는 반면 오른쪽 visual prompt를 통해 생성한 embedding은 보다 text instance에 더 집중된 feature map을 보여주고 있습니다. 즉, text 정보의 fine한 정보를 잘 반영하였다고 볼 수 있겠습니다.

3.2. Few-shot Training Ability

또, 본 논문의 few-shot 성능을 검증하기 위해, 사전 학습 없이 실제 데이터셋에서 다양한 학습 데이터 비율로 모델을 학습한 후, 4개의 벤치마크에서 성능을 평가했습니다. 위 figure에 나타난 바와 같이, TCM은 제한된 데이터에서 DB, PAN, EAST 모델보다 few-shot 성능이 더 높은 것을 보입니다. 근데 사실, 본 논문이 2023년에 게제된 논문인데 baseline으로 삼은 db나 그 외에 pan east는 2017, 2020년때의 정말 초기 방법론이기 때문에 이 방법론들만 비교하고있다는 점이 좀 아쉽긴했습니다. .

3.3. Generalization Ability

다음으로는 generalization 성능에 관한 실험입니다. 크게, 합성 데이터셋으로 학습한 후 real dataset에서 평가하는 synthtext-to-real와 real 데이터셋에서 학습하고 또 다른 real 데이터셋에서 평가한 real-to-real adaptation 실험이었는데요 각각의 결과는 아래 표 2, 3에서 확인해볼 수 있습니다.

본 논문에서 base model로 삼은 모델이 DBNet이기에 여기에 TCM 모듈을 붙인 TCM-DBNet을 보면 평균적으로 8%정도의 성능 향상을 보였습니다.

저자가 generalization 성능을 높이고자 제안한 모듈이 language prompt generation 모듈과 visual prompt generation 모듈이었는데 이들 각각을 뺀 것에 대한 실험 결과가 table7에 나와있습니다. 보시면 VG, LG를 모두 지웠을 떄 성능이 적게는 6.7에서 많게는 14.7까지 떨어질 정도로 TCM에서 generalization 성능을 높이고자 제안한 두 모듈이 의도에 맞게 동작함을 확인할 수 있는 실험이었습니다.

3.4. Ablation Studies

마지막 ablation study살펴보도록 하겠습니다. TCM에서 저자가 제안한 각 구성 요소가 성능에 미치는 영향을 평가한 것인데 우선 predefined prompt만을 사용했을 때, 그러니까 learnable prompt나 prompt generator를 싹 뺀 “text”라고 하는 고정된 prompt만을 text encoder의 입력으로 사용했을 떄 약간의 성능향상이 있었구요, 여기에 learable prompt를 추가했을 떄 모든 데이터셋에서 일관되게 성능향상을 보였습니다.

중간 부분이 pre-defined prompt없이 learnable prompt의 개수를 달리한 것에 대한 실험인데 많을수록 성능이 점진적으로 향상되고 있는 양상을 보입니다. 또, 최종적으로 language prompt generator와 visual promtp generator를 모두 추가한 것이 가장 성능이 좋은 것을 볼 수 있는데 base모델과 비교했을떄 거의 2.0%의 성능향상을 보이는 것을 보아 text feature에서 visual feature로 fine-granined정보를 propagate하고 더 정확한 text instance representation을 생성함으로써 성능이 개선되었다고볼 수 있겠습니다.

Author: 정 윤서

9 thoughts on “[CVPR 2023] Turning a CLIP Model into a Scene Text Detector

  1. 안녕하세요. 세미나 때 질문 드리려다 질문드립니다.
    실험 테이블을 보면 language prompt generator의 개수를 32개로 늘렸을 때가 가장 성능이 좋은 것으로 보이는데 최종 리포팅한 성능은 4개를 사용한 이유가 무엇인가요? 또 저자가 contribution으로 세운 부분이 pre-training없이 fine-tuning 과정에서 CLIP을 text detection에 사용하는 것인것 같은데 이로써 얻을 수 있는 이점이 궁금합니다.

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

      디폴트로 learnable prompt를 4개만 사용하는 이유는 32개를 썼을 때와 비교했을 떄 성능 차이가 많이 나지 않으면서 더 simple하기 때문입니다.

      pre-training이 필요없다는 점에서 학습 시간도 줄고 ,, 또,,, 적은 데이터만으로 좋은 성능을 낸 것을 어필한 것입니다.

  2. 안녕하세요 좋은 리뷰 감사합니다.

    학습때와 다른 도메인의 영상이 들어오는 경우 이에 대한 일반성을 높이기 위해, 영상으로부터 추출한 cc라는 임베딩을 텍스트에 결합해주는 것으로 이해하였습니다. 그런데 도메인이 다른 영상이 들어오면 cc 또한 기존 영상들과 다르게 표현되는 것 아닌가요? cc를 만들어내는 과정에서 정말 다양한 도메인에 대응할 수 있도록 일반성을 부여해주는 과정이 포함되어있는지 궁금합니다.

    그리고 aux loss의 연산 과정에서 h, w tilde형태의 유사도 맵과 gt라벨 간의 이진 분류를 수행해주는 것으로 이해하였는데, 둘 간의 해상도가 일치하나요?? 일치하지 않는다면 loss 계산을 위해 어떤 과정을 거쳐주는지 궁금합니다.

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

      이 conditional cue를 사용하는 방식은 CVPR 2022논문인 CoCoOp에서 제안된 contidional prompt learning 아이디어를 착안한 것으로 보여지는데요, 본 논문에 따르면 기존에 pre-defined prompt와 learnable prompt만을 사용할 경우 이 learnable prompt가 overfitting이 되다보니 in-domain class에 대해서는 좋은 성능을 보이지만 비슷한 distribution을 가지는 out-of domain class에 대해서는 낮은 성능을 보였다고 합니다.

      즉, optimized된 text prompt가 특정 dataset을 기준으로 seen class에 대해서만 overfitting 문제가 발생하는 것인데요.

      이를 해결하기 위해 image captioning과 유사하게 input image가 학습되는 prompt에 guidance를 줄 수 있게끔 meta network를 구성하고 이를 통해 prompt가 class에 overfitting되는 문제를 정규화하고자 한 것입니다.
      정리하자면 최적화하는 과정에서 기존에 cc가 없을 때는 text encoder의 영향만 받다보니 image representation의 transfer가 약해지기 때문에 image encoder로부터 생성되는 임베딩을 기반으로 ffn을 학습하여 각 image instance에 대해 conditioning된 벡터를 생성해 사용하는 것입니다. cc가 없을 때는 text encoder만을 사용해 그럴듯한 prompt를 만들어내고자 하다보니 overfitting이 되는 것이고 여기에 conditioning을 통해 text encoder와 image encoder의 역할을 분리한 것이라고 보면 되겠습니다 .. . .

      aux loss를 계산할 때 segmentation map P와 gt 둘 다 동일한 해상도를 갖습니다. (1, H/32, W/32) 구체적으로 나와있지는 않지만 gt segmentation map같은 경우는 원본 영상에서의 map을 downsampling하여 해상도를 맞춰줌으로써 생성될 것 같습니다.

  3. 안녕하세요. 좋은 리뷰 감사합니다.

    좋은 주제로 세미나 해주셨는데 이걸 제가 놓치게 되어서 아쉬운 마음이 듭니다. 논문의 저자가 pre-training과정 없이 CLIP 모델을 text detection 했다는 것이 가장 큰 contribution인 것 같은데 ‘image -> clip <-> tcm -> head -> result’를 보면 clip을 사용해서 tcm이라는 것이 있는 걸 수도 있지만, 성능 리포팅한 것들을 봤을 때 tcm이라는 것 자체가 잘 설계된 것 같았습니다. 오히려 clip이라는 모델에 한정한 것이 아쉬운데 clip 이외의 image-text backbone 모델로는 따로 실험 한 내용이 없을까요? 또한, 제 생각에 pre-training 과정이 없는 것이 핵심인것 같은데 이를 부곽해주는 실험 결과는 따로 없는 것 같습니다. 연산을 줄였다거나 하는 그런 실험 table은 없을까요?

    감사합니다.

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

      넵 논문에서는 clip이외의 image-text backbone 모델로 따로 실험한 내용은 없고 다른 언급 또한 없습니다. 또,, pre-training 과정을 생략한 것이 핵심 중 하나지만, 이 효율성 관련한 직접적인 실험은 없는 것으로 보입니다. 다만, 실험 테이블 중 pretext task가 없는 경우와 있는 경우를 비교하는 실험은 있기는 한데 마찬가지로 연산을 줄였다던가 학습 시간을 단축했다던가에 대한 구체적인 분석은 없습니다.

  4. 리뷰 잘 읽었습니다.

    세미나때도 의문을 가지긴 했는데, 리뷰를 읽으면서도 마찬가지이긴 합니다. cc 의 내부적 원리에 대한 궁금증? 이 계속 생깁니다. cc를 더해주는 이유는 도메인 강건성 때문인것으로 보이는데 이 cc도 결국 각 영상별로 추출한 global feature, 즉 개별적으로 specific한 정보일거란 말이죠? 이러한 cc를 더해주는과정이 어떻게 도메인 강건성을 가지게 되는건지 궁금합니다

    감사합니다.

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

      이 conditional cue를 사용하는 방식은 CVPR 2022논문인 CoCoOp에서 제안된 contidional prompt learning 아이디어를 착안한 것으로 보여지는데요, 본 논문에 따르면 기존에 pre-defined prompt와 learnable prompt만을 사용할 경우 이 learnable prompt가 overfitting이 되다보니 in-domain class에 대해서는 좋은 성능을 보이지만 비슷한 distribution을 가지는 out-of domain class에 대해서는 낮은 성능을 보였다고 합니다. 즉, optimized된 text prompt가 특정 dataset을 기준으로 seen class에 대해서만 overfitting 문제가 발생하는 것인데요.

      이를 해결하기 위해 image captioning과 유사하게 input image가 학습되는 prompt에 guidance를 줄 수 있게끔 meta network를 구성하고 이를 통해 prompt가 class에 overfitting되는 문제를 정규화하고자 한 것입니다.

      정리하자면 최적화하는 과정에서 기존에 cc가 없을 때는 text encoder의 영향만 받다보니 image representation의 transfer가 약해지기 때문에 image encoder로부터 생성되는 임베딩을 기반으로 ffn을 학습하여 각 image instance에 대해 conditioning된 벡터를 생성해 사용하는 것입니다….. cc가 없을 때는 text encoder만을 사용해 그럴듯한 prompt를 만들어내고자 하다보니 overfitting이 되는 것이고 여기에 conditioning을 통해 text encoder와 image encoder의 역할을 분리한 것이라고 보면 되겠습니다 .. . .

  5. 안녕하세요 윤서님 리뷰 감사합니다.

    세미나 하셨던게 기억나서 다시 읽어보러 왔습니다.. 아직 이해가 덜 된것 같은데 혹시 마지막 부분에서 고정된 prompt만을 text encoder의 입력으로 사용했을 떄 약간의 성능향상이 있었고, learable prompt를 추가했을 떄 모든 데이터셋에서 일관되게 성능향상을 보였다고 하셨는데 learnable prompt가 정확히 어떤 개념인지, 추가하는 목적이 무엇인지 (어떤 경우로 성능 향상을 시키는건지) 궁금합니다!

답글 남기기

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