[CVPR 2023] CLIP the Gap: A Single Domain Generalization Approach for Object Detection

오늘 리뷰할 논문은 Single Domain Generalization (SDG) 분야의 논문입니다.
일반적인 Domain Generalization 에서는 여러 source dataset을 사용하는 데에 반해, 본 SDG 분야에서는 단일 source dataset만을 사용해서 generalized 한 지식을 학습하는 것을 목표로 합니다.

Domain 관련 분야에서 읽었다기 보다는, 최근 detection 관련 실험 중 clip 을 좀 섞어보고자 하는 시도를 하고 있는데 관련해서 인사이트가 좀 적다보니 이것저것 관련 논문들을 찾아보다가 발견해서 한번 읽어보게 되었습니다.
바로 리뷰 시작하도록 하겠습니다.


1. Introduction

DG 에 비해 SDG task가 가지는 장점은 명확합니다. Domain Generalized knowledge를 학습하기 위해 다수의 source domain 에 접근할 필요가 없이 단 하나의 source domain에만 접근하면 된다는 것이죠.

그렇기에 SDG 분야도 꽤나 활발히 연구가 이루어지고 있었습니다. 모든 분야에서 그렇듯이 특히 classification task에서 주를 이뤘지요. Detection 을 위한 SDG 연구는 이전에 한두개 정도 수행이 되긴 했는데 직관적인 접근법, 즉 image level에서의 고려만을 통해 domain generalized knowledge 를 학습하였습니다.

본 논문이 주장하길, 자신들은 이전 SDG for OD 연구들과는 근본적으로(fundamentally) 다른 접근법을 설계하였다고 합니다. 뭐 text를 고려한, 즉 CLIP 을 녹여서 사용한 것입니다.

보통 Object Detection 분야에서 CLIP 을 사용했다고 하면 보통 OVOD (Open-Vocabulary Object Detection) 를 떠올리실겁니다. 해당 연구들은 novel class에 대한 예측을 수행하기 위해 CLIP의 지식을 활용하죠.
이에 반해 본 논문에서는 꽤나 참신한(?), 동시에 직관적인 접근법을 설계합니다. SDG 학습 단계에서 다양한 domain 지식들을 학습하기 위해 CLIP 을 사용해서 source dataset의 domain 다양성을 증가시키고자 합니다.

조금 더 구체적으로 말씀드리자면, 도로 scene을 기준으로 맑은 날씨의 단일 source domain dataset만을 사용하여 여러 다양한 domain 에 대한 일반화된 knowledge 를 학습하기 위해 domain textual prompt 를 사용합니다. 아래 처럼 말이죠.

source dataset에는 clear weather/day scene 밖에 없지만 여러 날씨/시간대에 대한 정보 학습을 위해 위 prompt 를 CLIP 에 태워서 학습에 활용하고자 한 것입니다. 구체적으로 어떻게 반영하였는지에 대해서는 Method 단락에서 말씀드리겠습니다.

저자는 위 PCA projection 결과를 통해 CLIP text vector 를 사용해서 여러 날씨/시간대 domain 상황을 모델링 한 것이 실제 real image 와 유사한 효과를 보인다고 말합니다.

위 결과 중 위쪽 PCA 결과는 5가지 domain (day, night, foggy, rainy day, rainy night) images 를 projection 한 결과입니다.
(물론 본 논문에서 실제 SDG 학습에서는 day 영상만 사용하긴 합니다)

그리고 아래쪽 PCA projection 결과는 single day domain image를 기반으로 CLIP text vector를 통해 여러 domain 상황을 모델링 하여 projection 한 결과입니다.

위 두 figure 비교를 통해 저자는 ‘두 projection 결과의 상대적인 위치(relative positions) 가 유사하기 때문에 CLIP text vector를 통해 여러 domain 상황을 모델링 하는 방법이 합당하다’ 라는 식으로 말을 합니다.
(그런데 실제 위 아래의 유사성을 보기 위해선 한번에 PCA 를 수행해서 하나의 space 에서 시각화해야하지 않나…? 라는 생각이 들긴 합니다)

아무튼 뭐 본 논문에서는 Single source domain dataset을 사용하는 SDG 세팅에서, CLIP text vector를 통해 여러 domain 상황을 모델링하여 이로부터 generalized knowledge 를 학습하는 framework를 설계합니다. 자세한 기법은 method 단락에서 이어 진행하겠습니다.


2. Method

학습은 크게 아래 그림 속 좌측의 i) Optimization Step, 그리고 우측의 ii) Training Step 으로 구성됩니다.
각각에 대해 2.1절, 그리고 2.2절에서 설명을 진행하겠습니다.

2.1. Semantic Augmentation

위 그림 속 좌측의 Optimization step 속 수행되는 Semantic Augmentation 에 대한 설명입니다.
SDG의 특성 상 학습 단계에서는 single domain image 밖에 볼 수 없습니다. 그래서 intro 에서 설명드렸다시피 CLIP 을 사용해서 text domain feature를 추출하여 이를 학습에 활용하였고, 그 학습 단계에 대한 설명이라고 생각하시면 됩니다.

본 Step 에서는 CLIP 모델만을 사용합니다. CLIP text encoder, image encoder 를 각각 \mathcal{T, V} 라고 표기합니다. 여기서 CLIP image encoder를 각각 feature extractor 부분 \mathcal{V}^a, 그리고 embedding space 로의 projection 을 담당하는 shallow 한 \mathcal{V}^b 로 구분시킵니다.

또한 CLIP의 경우 모두 사전학습 weight를 불러온 뒤 freeze 시킵니다. 음.. 그렇다면 과연 이 Optimization Step 에서는 과연 무엇이 학습되는 걸까? 라고 생각하실 수 있는데요, 뒤에서 설명드리겠지만 결론부터 말씀드리자면 그림 속에서 Semantic Augmentation이라고 표시된 matrix A 가 학습이 되는 것입니다.

notation은 이정도로 하고 좌측 그림 하단부를 보시면 Domain Prompt 라고 하는 부분이 보이실겁니다. 해당 prompt는 intro 부분에서 캡쳐본으로 설명드린 “an image taken on a ~~~” 와 같은, 여러 domain 을 대표하는 text prompt 이며 single source domain을 대표하는 text prompt 를 P^s, 여러 날씨/시간대 변화를 대표하는 text prompt 를 P^t 라고 표기합니다. 이는 각각 아래첨자 1~M 로 구성되어 있으며, 이는 M개의 여러 날씨/시간대 domain 을 표현하는 것이라고 생각하시면 됩니다.

위 text prompt 를 CLIP text encoder를 통과시켜 text embedding vector q^s, q^t 를 미리 추출하게 됩니다. 이와 동시에 image 쪽에서는 입력 영상을 random crop 해서 z = \mathcal{V}(I_{crop}) 을 얻게 됩니다.
여기서 z는 단일 source domain에 속한 영상에서 추출된 image feature vector 입니다. 여기에다가 아래 수식을 적용해서 target image embedding 을 얻을 수 있습니다.

위 수식은 정상 domain feature z에 domain style을 의미하는 뒤쪽 term 을 더해서, CLIP text 를 통해 추출한 domain정보를 입힌 text image embedding 을 의미합니다. 여러 target domain style을 의미하는 q^t에다가 source domain style q^s 를 빼는 것을, 두 domain 사이의 style discrepancy 라고 생각할 수 있고, 이를 L2 norm 으로 normalize 한 뒤 원본 domain의 feature z에 더해주게 됩니다.

이와 병렬적으로, learnable한 Semantic Augmentation A 를 적용하여 아래 수식을 통해 target domain style의 영상을 또 생성해낼 수 있습니다. 아래 수식과 위 그림을 함께 보시면 직관적으로 이해 가능합니다.

위 수식을 통해 crop된 영상을 feature extractor \mathcal{V}^a에 태운 후 learnable 한 Semantic Augmentation A 를 더하고, 최종적으로 이를 \mathcal{V}^b를 통해 embedding space 로 투영시킵니다.
학습 가능한 matrix A의 shape은 아래와 같으며, domain text prompt 가 M개라면 아래 matrix A도 M개입니다.
즉, 각 domain 별로 feature map의 style을 변경해줄 수 있는 learnable한 matrix 를 학습하는 느낌입니다.

그리고 아래 수식을 통해 Optimization Step 에서의 학습이 진행됩니다. 이를 통해 Semantic Augmentation Matrix A (MxHxWxC) 가 학습되는 것이죠.

D(a,b) 는 cosine distance 를 나타냅니다. 또한 L_{opt} 의 앞쪽 term을 통해 CLIP text prompt 를 통해 만든 target image embedding z^*을 정답 삼아서 Semantic Augmentation Matrix A가 학습됩니다. 또한 뒤쪽 term을 통해 원본 영상의 content 보호를 위한 l1 regularize 가 수행됩니다.

2.2. Architecture

위 2.1. 절의 Optimization Step에서 Semantic Augmentation A를 미리 사전학습 하였습니다.
이 A가 의미하는 바는 image의 feature map에 적용되는, 날씨/시간대에 대한 domain을 표현할 수 있는 style feature matrix이며, M개의 text domain prompt를 사용하였다면 해당 matrix도 총 M개 존재합니다.

2.2.절에서는 이를 사용하여 detector 학습이 진행됩니다. 그림에서도 알 수 있다시피 크게 image forward 단계와 text forward 단계로 구성되며, CLIP text encoder는 freeze 되어있는 것을 볼 수 있습니다.

우선 검출을 원하는 K개의 class에 대해 text embedding \mathcal{Q} 를 추출합니다. background 를 포함하게 된다면 해당 embedding vector의 shape은 아래와 같겠죠.

또한 image step 쪽에서는, RPN이 제안한 region r에 대한 feature F_r 을 추출할 수 있게 됩니다.

그리고 각 region 에 대하여 아래 loss가 계산됩니다. 수식에는 dimension 이 동일한 두 vector 사이의 cosine sim 을 계산하는 sim() 이 사용됩니다.

그리고 위 loss 를 적용한 최종 loss를 통해 detector가 학습됩니다.

3. Experiment

Dataset

CVPR 2022에서 발표된 S-DGOD 에서 SDG 의 평가를 위해 여러 데이터셋을 하나로 합쳐서 각 domain 별 상황에 맞게 샘플링을 수행하였다고 합니다.

본 셋에는 크게 5가지 domain 상황이 존재합니다.
i) daytime sunny
ii) night clear
iii) dusk rainy
iv) night rainy
v) daytime foggy

이를 위해 우선 주 데이터셋 3개를 사용하였다고 합니다. 사용된 데이터셋은 BDD-100K, Citysacpes, Adverse-Weather 데이터셋이며, rainy와 fog 를 묘사하기 위해 rendering 과 합성을 수행하여 최종적으로 SDG 학습 및 평가를 위한 데이터셋을 구축하였습니다.

+ 부가적으로 본 논문의 task는 SDG for Object Detection이며, detection에 사용되는 지표는 mAP@0.5 입니다.


우선 Day Clear 상황에 대해 학습된 모델에 대해 자기 자신 포함 총 5가지 domain 에 대해 평가를 수행한 결과입니다.
비교 방법론 중 S-DGOD 만이 본 논문과 동일한 SDG 분야의 연구이기 때문에 해당 방법론만 비교에서 주로 언급하도록 하겠습니다.

S-DGOD 방법론과 비교했을 때 Day Clear에서의, 어떻게 보면 supervised 성능은 낮지만, 타 4가지 adversarial한 domain으로의 일반화 성능은 골고루 더 높은 것을 확인할 수 있습니다. 뒤쪽의 ablation 에서 좀 더 뜯어서 확인해 봐야 알겠지만 text domain prompt with CLIP 이 잘 워킹했다고 생각할 수 있습니다.

+ 위 table에서 각 4가지 domain 에 대해서 하나하나 class 별 성능을 리포팅한 테이블이 논문에 있긴 합니다만은, 딱히 분석적인 내용이 있지는 않아서 리뷰에서는 제외햐였습니다.


각 요소별 ablation 결과입니다.
제일 윗 줄의 성능은 아무 요소들도 반영되어있지 않은, raw한 faster-rcnn 의 성능입니다.

첫번째로 CLIP init 의 경우는 faster-rcnn 의 backbone weight 초기 가중치를 CLIP pre-trained 로 했을 때의 성능입니다.
(음.. 그냥 clip pretrained weight 사용만으로도 이전 sota를 넘어버렸네요…)

다음은 L_{clip-t} 와 Attention Pooling 의 효과입니다.
이 중 Attention Pooling 이라 함은 CLIP image encoder에서 projection을 수행하는 \mathcal{V}^b 의 요소 중 average pooling 을 CLIP attention pooling 으로 바꾼 것이라고 하는데,, 뭐 어쨋든 본 논문에서 설계한 것은 아니라고 볼 수 있구요,
집중적으로 볼 부분은 L_{clip-t} 입니다. text embedding을 사용해서 cross entropy 를 계산하는, 2.2절에서 설명했던 부분인데 음.. 성능 향상 폭이 거의 없네요. 심지어 떨어지는 domain 도 존재하구요.
이에 대해서 저자는 “Attention Pooling” 을 통해서 좀 완화할 수 있어~” 라고 하는데.. 좀 앞뒤가 이상하네요.

마지막으로 Semantic augmentation 요소에 대한 성능 향상입니다.
text domain prompt를 사용하는 부분에 대한 효과로, 제가 어떻게 보면 가장 관심을 가지고 본 부분입니다. 각 domain 별로 1~2정도의 성능 향상이 있긴 하지만, 제 생각보다는 아쉬운 성능 향상입니다. Semantic augmentation을 적용하지 않았다는 것은, stage 2의 training step에서 그냥 단일 source domain 만 보고 여러 adversarial domain 에 대해 평가를 진행했다는 건데,,, domain aug를 적용했음에도 1~2 밖의 향상이 없다뇨 허허..
(너무 clip의 효과를 기대한걸까요? 아니면 1~2도 꽤나 좋은 폭의 향상인걸까요?)


컨셉적으로는 꽤나 참신하고 새로운 접근법을 설계한 논문이였습니다.
target domain으로 마주할 수 있는 상황을 text로 구성한 뒤 이를 clip을 통해 text embedding vector를 추출하고 이를 signal 로 활용해서 image에 적용할 수 있는 semantic augmentation A를 학습. 그리고 이를 이후 학습 단계에 랜덤하게 적용해서 detector를 여러 domain 상황에 강건하도록 일반화 학습을 수행하는 컨셉입니다.

domain 을 text로 정의하면 어떨까 라고 하는, 쉽게 할 수 있는 생각을 실제로 detection 딴에 적용하였고 학습 기법 모델링 과정도 꽤나 체계적이여서 CVPR 2023에 붙지 않았나 싶습니다. 다만 성능 향상 폭은 좀 아쉽지만요.

리뷰 마치겠습니다. 감사합니다.

Author: 권 석준

2 thoughts on “[CVPR 2023] CLIP the Gap: A Single Domain Generalization Approach for Object Detection

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

    Semantic Augmentation 절에서 제안된 opt loss에 대한 질문이 있습니다.
    Opt loss가 2개의 term으로 구성되어있는데 앞의 term은 z바가 z*를 따라가도록, 뒤 term은 z바가 원본 feature를 따라가도록 학습하는 것으로 이해하였습니다. 여기서 두 term 사이 적절한 정도로 표현력을 학습하려면 둘 간의 정도를 조절해줄 수 있는 스칼라가 하나 붙어있어야 할 것 같은데 그런건 사용하지 않았나요? 우선 opt loss의 목적이 z*를 따라가도록 하는 것이니 앞은 건드리지 않고 뒤 term에 0.001과 같이 굉장히 작은 수를 곱해 사용하는 등의 상황은 없었는지가 궁금합니다.

    그리고 두 번째 단계에서 CLIP의 image encoder a와 b 모두 freeze는 아닌 것 같은데, 이 인코더를 전체 학습시키는 것인가요? 맞다면 이게 학습 cost가 꽤 클 것 같은데 뒤 쪽 detection head를 제외하고 모두 freeze하는 등의 ablation은 없었는지 궁금합니다.

    감사합니다.

    1. 첫번째 질문에 대해서는 본문 내의 제 설명이 조금 부족할 수 있겠다는 생각이 들어 추가 설명을 드리겠습니다.
      opt loss 내에 적힌 3가지 z (z, z바, z*) 중 learnable하게 학습하고자 하는 녀석은 style matrix A 가 적용된 z바 입니다. 나머지 z*, 그리고 z는 고정된 값이라고 생각하시면 됩니다.
      또한 여기서 앞, 뒤 term은 서로 목적 자체가 다릅니다.
      앞쪽 term은 학습해야하는 z바가 clip text vector 정보가 반영된 z*을 닯아가고자 하는 cosine distance 기반 term 입니다. domain의 style과 관련된 style matrix A를 학습하기 위함이죠. 반면 추가적으로 부착된 뒤쪽 term은 style이 아닌 content와 관련된 regularization term 입니다. 만약 이 녀석을 주가해줌으로써 z바와 z 사이의 content 차이가 크게 벌어지지 않게 억제하면서, style 적인 차이가 matrix A에 반영되도록 합니다.

      그리고 두번째 질문에 대해서는… 맞습니다. freeze가 아니라 학습을 시키는 듯 합니다. 관련된 실험은 없구요.
      (그런데 gpu는 A100 1장을 사용했다네요.. 생각보다 CLIP Full tuning 의 메모리적 cost는 그렇게 크지 않은걸까요..? )

      감사합니다.

답글 남기기

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